You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

266 lines
10 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

% ===============================================
% Тестовые запросы для лабораторной работы 8 - Задание 3
% Расширенные семейные отношения
% ===============================================
% Главный предикат для запуска всех тестов
run_tests :-
write('=== ЗАПУСК ТЕСТОВ ЗАДАНИЯ 3 ==='), nl, nl,
test_granddaughter_relationships,
test_grandfather_granddaughter_relationships,
test_aunt_relationships,
test_implementation_comparison,
test_extended_family_info,
write('=== ВСЕ ТЕСТЫ ЗАДАНИЯ 3 ЗАВЕРШЕНЫ ==='), nl.
% -----------------------------------------------
% Тесты отношений внучка
% -----------------------------------------------
test_granddaughter_relationships :-
write('1. ТЕСТИРОВАНИЕ ОТНОШЕНИЙ ВНУЧКА'), nl,
write('----------------------------------'), nl,
% Тесты grand_da_facts (через факты)
write('Тесты grand_da_facts (только факты):'), nl,
write('Тест: grand_da_facts(svetlana, ivan) -> '),
(grand_da_facts(svetlana, ivan) -> write('PASSED') ; write('FAILED')), nl,
write('Тест: grand_da_facts(victoria, anna) -> '),
(grand_da_facts(victoria, anna) -> write('PASSED') ; write('FAILED')), nl,
write('Тест: grand_da_facts(katya, olga) -> '),
(grand_da_facts(katya, olga) -> write('PASSED') ; write('FAILED')), nl,
write('Тест: grand_da_facts(dmitry, ivan) -> '),
(\+ grand_da_facts(dmitry, ivan) -> write('PASSED (false)') ; write('FAILED')), nl,
nl,
% Тесты grand_da (через предикаты)
write('Тесты grand_da (через предикаты):'), nl,
write('Тест: grand_da(svetlana, ivan) -> '),
(grand_da(svetlana, ivan) -> write('PASSED') ; write('FAILED')), nl,
write('Тест: grand_da(victoria, anna) -> '),
(grand_da(victoria, anna) -> write('PASSED') ; write('FAILED')), nl,
write('Тест: grand_da(katya, olga) -> '),
(grand_da(katya, olga) -> write('PASSED') ; write('FAILED')), nl,
write('Тест: grand_da(andrey, sergey) -> '),
(\+ grand_da(andrey, sergey) -> write('PASSED (false)') ; write('FAILED')), nl,
nl,
% Тест grand_dats
write('Тест grand_dats(ivan):'), nl,
grand_dats(ivan),
nl,
write('Тест grand_dats(anna):'), nl,
grand_dats(anna),
nl.
% -----------------------------------------------
% Тесты отношений дедушка-внучка
% -----------------------------------------------
test_grandfather_granddaughter_relationships :-
write('2. ТЕСТИРОВАНИЕ ОТНОШЕНИЙ ДЕДУШКА-ВНУЧКА'), nl,
write('-------------------------------------------'), nl,
write('Тест: grand_pa_and_da(ivan, svetlana) -> '),
(grand_pa_and_da(ivan, svetlana) -> write('PASSED') ; write('FAILED')), nl,
write('Тест: grand_pa_and_da(svetlana, ivan) -> '),
(grand_pa_and_da(svetlana, ivan) -> write('PASSED') ; write('FAILED')), nl,
write('Тест: grand_pa_and_da(sergey, katya) -> '),
(grand_pa_and_da(sergey, katya) -> write('PASSED') ; write('FAILED')), nl,
write('Тест: grand_pa_and_da(anna, dmitry) -> '),
(\+ grand_pa_and_da(anna, dmitry) -> write('PASSED (false)') ; write('FAILED')), nl,
write('Тест: grand_pa_and_da(petr, victoria) -> '),
(\+ grand_pa_and_da(petr, victoria) -> write('PASSED (false)') ; write('FAILED')), nl,
nl.
% -----------------------------------------------
% Тесты отношений тетя
% -----------------------------------------------
test_aunt_relationships :-
write('3. ТЕСТИРОВАНИЕ ОТНОШЕНИЙ ТЕТЯ'), nl,
write('---------------------------------'), nl,
% Тесты aunt_facts (через факты)
write('Тесты aunt_facts (только факты):'), nl,
write('Тест: aunt_facts(elena, mikhail) -> '),
(aunt_facts(elena, mikhail) -> write('PASSED') ; write('FAILED')), nl,
write('Тест: aunt_facts(maria, dmitry) -> '),
(aunt_facts(maria, dmitry) -> write('PASSED') ; write('FAILED')), nl,
write('Тест: aunt_facts(svetlana, andrey) -> '),
(aunt_facts(svetlana, andrey) -> write('PASSED') ; write('FAILED')), nl,
write('Тест: aunt_facts(petr, mikhail) -> '),
(\+ aunt_facts(petr, mikhail) -> write('PASSED (false)') ; write('FAILED')), nl,
nl,
% Тесты aunt (через предикаты)
write('Тесты aunt (через предикаты):'), nl,
write('Тест: aunt(elena, mikhail) -> '),
(aunt(elena, mikhail) -> write('PASSED') ; write('FAILED')), nl,
write('Тест: aunt(maria, dmitry) -> '),
(aunt(maria, dmitry) -> write('PASSED') ; write('FAILED')), nl,
write('Тест: aunt(svetlana, andrey) -> '),
(aunt(svetlana, andrey) -> write('PASSED') ; write('FAILED')), nl,
write('Тест: aunt(irina, nikolay) -> '),
(aunt(irina, nikolay) -> write('PASSED') ; write('FAILED')), nl,
nl,
% Тест aunts
write('Тест aunts(dmitry):'), nl,
aunts(dmitry),
nl,
write('Тест aunts(mikhail):'), nl,
aunts(mikhail),
nl.
% -----------------------------------------------
% Тесты сравнения реализаций
% -----------------------------------------------
test_implementation_comparison :-
write('4. ТЕСТИРОВАНИЕ СРАВНЕНИЯ РЕАЛИЗАЦИЙ'), nl,
write('-------------------------------------'), nl,
write('Сравнение результатов grand_da_facts и grand_da для ivan:'), nl,
write('Результаты grand_da_facts:'), nl,
findall(X, grand_da_facts(X, ivan), FactsResults),
write(' '), write(FactsResults), nl,
write('Результаты grand_da:'), nl,
findall(Y, grand_da(Y, ivan), PredicateResults),
write(' '), write(PredicateResults), nl,
% Проверяем, что результаты одинаковые
(sort(FactsResults, SortedFacts),
sort(PredicateResults, SortedPredicates),
SortedFacts = SortedPredicates ->
write('PASSED: Результаты совпадают') ;
write('FAILED: Результаты не совпадают')), nl,
nl,
write('Сравнение результатов aunt_facts и aunt для dmitry:'), nl,
write('Результаты aunt_facts:'), nl,
findall(A, aunt_facts(A, dmitry), AuntFactsResults),
write(' '), write(AuntFactsResults), nl,
write('Результаты aunt:'), nl,
findall(B, aunt(B, dmitry), AuntPredicateResults),
write(' '), write(AuntPredicateResults), nl,
% Проверяем, что результаты одинаковые
(sort(AuntFactsResults, SortedAuntFacts),
sort(AuntPredicateResults, SortedAuntPredicates),
SortedAuntFacts = SortedAuntPredicates ->
write('PASSED: Результаты совпадают') :
write('FAILED: Результаты не совпадают')), nl,
nl.
% -----------------------------------------------
% Тесты расширенной информации о семье
% -----------------------------------------------
test_extended_family_info :-
write('5. ТЕСТИРОВАНИЕ РАСШИРЕННОЙ ИНФОРМАЦИИ О СЕМЬЕ'), nl,
write('------------------------------------------------'), nl,
family_info_task3,
write('Тест дополнительных отношений:'), nl,
% Тесты grandson
write('Тест: grandson(dmitry, ivan) -> '),
(grandson(dmitry, ivan) -> write('PASSED') ; write('FAILED')), nl,
write('Тест: grandson(andrey, sergey) -> '),
(grandson(andrey, sergey) -> write('PASSED') ; write('FAILED')), nl,
% Тесты uncle
write('Тест: uncle(petr, mikhail) -> '),
(uncle(petr, mikhail) -> write('PASSED') ; write('FAILED')), nl,
write('Тест: uncle(alex, dmitry) -> '),
(uncle(alex, dmitry) -> write('PASSED') ; write('FAILED')), nl,
% Тесты nephew/niece
write('Тест: nephew(dmitry, maria) -> '),
(nephew(dmitry, maria) -> write('PASSED') ; write('FAILED')), nl,
write('Тест: niece(svetlana, alex) -> '),
(niece(svetlana, alex) -> write('PASSED') ; write('FAILED')), nl,
nl,
show_extended_relationships.
% -----------------------------------------------
% Комплексные тесты семейных отношений
% -----------------------------------------------
test_complex_family_relationships :-
write('6. КОМПЛЕКСНЫЕ ТЕСТЫ СЕМЕЙНЫХ ОТНОШЕНИЙ'), nl,
write('----------------------------------------'), nl,
write('Проверка полной структуры семьи:'), nl,
% Проверяем, что каждая внучка имеет дедушку/бабушку
write('Внучки и их дедушки/бабушки:'), nl,
forall(
grand_da(Granddaughter, Grandparent),
(write(' '), write(Granddaughter), write(' - внучка '), write(Grandparent), nl)
),
nl,
% Проверяем тетей и их племянников/племянниц
write('Тети и их племянники/племянницы:'), nl,
forall(
aunt(Aunt, NephewNiece),
(write(' '), write(Aunt), write(' - тетя '), write(NephewNiece), nl)
),
nl,
% Проверяем симметричность grand_pa_and_da
write('Проверка симметричности grand_pa_and_da:'), nl,
forall(
(grandfather(GP, GD), woman(GD)),
(
(grand_pa_and_da(GP, GD) ->
(write(' '), write(GP), write(' <-> '), write(GD), write(' : PASSED'), nl)
;
(write(' '), write(GP), write(' <-> '), write(GD), write(' : FAILED'), nl)
)
)
),
nl.
% -----------------------------------------------
% Демонстрационные запросы
% -----------------------------------------------
demo_queries_task3 :-
write('=== ДЕМОНСТРАЦИОННЫЕ ЗАПРОСЫ ЗАДАНИЯ 3 ==='), nl, nl,
demo_relationships_task3,
compare_implementations,
test_complex_family_relationships.