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.

198 lines
6.5 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 - Задание 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.