% =============================================== % Тестовые запросы для лабораторной работы 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.