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