% =============================================== % Тестовые запросы для лабораторной работы 8 - Задание 2 % Отцовские и семейные отношения % =============================================== % Главный предикат для запуска всех тестов run_tests :- write('=== ЗАПУСК ТЕСТОВ ЗАДАНИЯ 2 ==='), nl, nl, test_father_queries, test_wife_queries, test_additional_relationships, test_family_info, write('=== ВСЕ ТЕСТЫ ЗАДАНИЯ 2 ЗАВЕРШЕНЫ ==='), nl. % ----------------------------------------------- % Тесты отцовских отношений % ----------------------------------------------- test_father_queries :- write('1. ТЕСТИРОВАНИЕ ОТЦОВСКИХ ОТНОШЕНИЙ'), nl, write('-----------------------------------'), nl, write('Тест: father(ivan, petr) -> '), (father(ivan, petr) -> write('PASSED') ; write('FAILED')), nl, write('Тест: father(anna, petr) -> '), (\+ father(anna, petr) -> write('PASSED (false)') ; write('FAILED')), nl, write('Тест: father(petr, dmitry) -> '), (father(petr, dmitry) -> write('PASSED') ; write('FAILED')), nl, write('Тест: father(alex, mikhail) -> '), (father(alex, mikhail) -> write('PASSED') ; write('FAILED')), nl, nl, write('Поиск отца:'), nl, write('father(petr):'), nl, father(petr), nl, write('father(dmitry):'), nl, father(dmitry), nl, write('Все отцы:'), nl, fathers, nl. % ----------------------------------------------- % Тесты семейных отношений (жена) % ----------------------------------------------- test_wife_queries :- write('2. ТЕСТИРОВАНИЕ СЕМЕЙНЫХ ОТНОШЕНИЙ (ЖЕНА)'), nl, write('------------------------------------------'), nl, write('Тест: wife(anna, ivan) -> '), (wife(anna, ivan) -> write('PASSED') ; write('FAILED')), nl, write('Тест: wife(elena, petr) -> '), (wife(elena, petr) -> write('PASSED') ; write('FAILED')), nl, write('Тест: wife(maria, alex) -> '), (wife(maria, alex) -> write('PASSED') ; write('FAILED')), nl, write('Тест: wife(ivan, anna) -> '), (\+ wife(ivan, anna) -> write('PASSED (false)') ; write('FAILED')), nl, nl, write('Поиск жены:'), nl, write('wife(ivan):'), nl, wife(ivan), nl, write('wife(petr):'), nl, wife(petr), nl, write('wife(alex):'), nl, wife(alex), nl, write('Все жены:'), nl, wives, nl. % ----------------------------------------------- % Тесты дополнительных отношений % ----------------------------------------------- test_additional_relationships :- write('3. ТЕСТИРОВАНИЕ ДОПОЛНИТЕЛЬНЫХ ОТНОШЕНИЙ'), nl, write('----------------------------------------'), nl, write('Тест: husband(ivan, anna) -> '), (husband(ivan, anna) -> write('PASSED') ; write('FAILED')), nl, write('Тест: married(anna, ivan) -> '), (married(anna, ivan) -> write('PASSED') ; write('FAILED')), nl, write('Тест: married(ivan, anna) -> '), (married(ivan, anna) -> write('PASSED') ; write('FAILED')), nl, write('Тест: couple(anna, ivan) -> '), (couple(anna, ivan) -> write('PASSED') ; write('FAILED')), nl, nl, write('Поиск мужа:'), nl, write('husband(anna):'), nl, husband(anna), nl, write('husband(elena):'), nl, husband(elena), nl, write('Все пары:'), nl, couples, nl. % ----------------------------------------------- % Тесты информации о семье % ----------------------------------------------- test_family_info :- write('4. ТЕСТИРОВАНИЕ СЕМЕЙНОЙ ИНФОРМАЦИИ'), nl, write('-----------------------------------'), nl, family_info_task2, show_relationships. % ----------------------------------------------- % Комплексные тесты % ----------------------------------------------- test_complex_relationships :- write('5. КОМПЛЕКСНЫЕ ТЕСТЫ ОТНОШЕНИЙ'), nl, write('-------------------------------'), nl, % Проверка, что у каждого ребенка есть и отец, и мать write('Проверка полных семей:'), nl, forall( parent(_, Child), ( (father(F, Child), mother(M, Child)) -> (write(' '), write(Child), write(': отец '), write(F), write(', мать '), write(M), nl) ; (write(' '), write(Child), write(': неполная семья'), nl) ) ), nl, % Проверка пар write('Проверка семейных пар:'), nl, forall( couple(Wife, Husband), (write(' Пара: '), write(Wife), write(' и '), write(Husband), write(' - дети: '), findall(Child, (parent(Wife, Child), parent(Husband, Child)), Children), write(Children), nl) ), nl. % ----------------------------------------------- % Демонстрационные запросы % ----------------------------------------------- demo_queries :- write('=== ДЕМОНСТРАЦИОННЫЕ ЗАПРОСЫ ЗАДАНИЯ 2 ==='), nl, nl, write('1. Отцовские отношения:'), nl, write(' ?- father(ivan, petr).'), nl, (father(ivan, petr) -> write(' true') ; write(' false')), nl, write(' ?- father(petr).'), nl, write(' '), father(petr), nl, write('2. Семейные отношения (жена):'), nl, write(' ?- wife(anna, ivan).'), nl, (wife(anna, ivan) -> write(' true') ; write(' false')), nl, write(' ?- wife(ivan).'), nl, write(' '), wife(ivan), nl, write('3. Поиск всех отцов:'), nl, write(' ?- fathers.'), nl, fathers, nl, write('4. Поиск всех семейных пар:'), nl, write(' ?- couples.'), nl, couples, nl. % ----------------------------------------------- % Предикат для запуска демонстрации % ----------------------------------------------- demo :- write('=== ДЕМОНСТРАЦИЯ ЗАДАНИЯ 2 ==='), nl, nl, demo_queries, test_complex_relationships.