|
|
% ===============================================
|
|
|
% Тестовые запросы для лабораторной работы 8
|
|
|
% ===============================================
|
|
|
|
|
|
% Главный предикат для запуска всех тестов
|
|
|
run_tests :-
|
|
|
write('=== ЗАПУСК ТЕСТОВ СЕМЕЙНОЙ БАЗЫ ДАННЫХ ==='), nl, nl,
|
|
|
|
|
|
test_gender_queries,
|
|
|
test_parent_queries,
|
|
|
test_mother_queries,
|
|
|
test_brother_queries,
|
|
|
test_sibling_queries,
|
|
|
test_additional_queries,
|
|
|
|
|
|
write('=== ВСЕ ТЕСТЫ ЗАВЕРШЕНЫ ==='), nl.
|
|
|
|
|
|
% -----------------------------------------------
|
|
|
% Тесты проверки пола
|
|
|
% -----------------------------------------------
|
|
|
test_gender_queries :-
|
|
|
write('1. ТЕСТИРОВАНИЕ ЗАПРОСОВ ПОЛА'), nl,
|
|
|
write('------------------------------'), nl,
|
|
|
|
|
|
write('Тест: man(ivan) -> '),
|
|
|
(man(ivan) -> write('PASSED (true)') ; write('FAILED (false)')), nl,
|
|
|
|
|
|
write('Тест: woman(anna) -> '),
|
|
|
(woman(anna) -> write('PASSED (true)') ; write('FAILED (false)')), nl,
|
|
|
|
|
|
write('Тест: man(anna) -> '),
|
|
|
(\+ man(anna) -> write('PASSED (false)') ; write('FAILED (true)')), nl,
|
|
|
|
|
|
write('Тест: woman(ivan) -> '),
|
|
|
(\+ woman(ivan) -> write('PASSED (false)') ; write('FAILED (true)')), nl,
|
|
|
|
|
|
nl, men, nl, women, nl.
|
|
|
|
|
|
% -----------------------------------------------
|
|
|
% Тесты родительских отношений
|
|
|
% -----------------------------------------------
|
|
|
test_parent_queries :-
|
|
|
write('2. ТЕСТИРОВАНИЕ РОДИТЕЛЬСКИХ ОТНОШЕНИЙ'), nl,
|
|
|
write('--------------------------------------'), nl,
|
|
|
|
|
|
write('Тест: parent(ivan, petr) -> '),
|
|
|
(parent(ivan, petr) -> write('PASSED') ; write('FAILED')), nl,
|
|
|
|
|
|
write('Тест: parent(anna, elena) -> '),
|
|
|
(parent(anna, elena) -> write('PASSED') ; write('FAILED')), nl,
|
|
|
|
|
|
write('Тест: parent(petr, ivan) -> '),
|
|
|
(\+ parent(petr, ivan) -> write('PASSED (false)') ; write('FAILED')), nl,
|
|
|
|
|
|
nl,
|
|
|
write('Дети ivan:'), nl,
|
|
|
children(ivan),
|
|
|
nl,
|
|
|
|
|
|
write('Дети petr:'), nl,
|
|
|
children(petr),
|
|
|
nl.
|
|
|
|
|
|
% -----------------------------------------------
|
|
|
% Тесты материнских отношений
|
|
|
% -----------------------------------------------
|
|
|
test_mother_queries :-
|
|
|
write('3. ТЕСТИРОВАНИЕ МАТЕРИНСКИХ ОТНОШЕНИЙ'), nl,
|
|
|
write('-------------------------------------'), nl,
|
|
|
|
|
|
write('Тест: mother(anna, petr) -> '),
|
|
|
(mother(anna, petr) -> write('PASSED') ; write('FAILED')), nl,
|
|
|
|
|
|
write('Тест: mother(ivan, petr) -> '),
|
|
|
(\+ mother(ivan, petr) -> write('PASSED (false)') ; write('FAILED')), nl,
|
|
|
|
|
|
write('Тест: mother(elena, dmitry) -> '),
|
|
|
(mother(elena, dmitry) -> write('PASSED') ; write('FAILED')), nl,
|
|
|
|
|
|
nl,
|
|
|
write('Мать petr:'), nl,
|
|
|
mother(petr),
|
|
|
nl,
|
|
|
|
|
|
write('Мать dmitry:'), nl,
|
|
|
mother(dmitry),
|
|
|
nl.
|
|
|
|
|
|
% -----------------------------------------------
|
|
|
% Тесты братских отношений
|
|
|
% -----------------------------------------------
|
|
|
test_brother_queries :-
|
|
|
write('4. ТЕСТИРОВАНИЕ БРАТСКИХ ОТНОШЕНИЙ'), nl,
|
|
|
write('----------------------------------'), nl,
|
|
|
|
|
|
write('Тест: brother(petr, elena) -> '),
|
|
|
(brother(petr, elena) -> write('PASSED') ; write('FAILED')), nl,
|
|
|
|
|
|
write('Тест: brother(elena, petr) -> '),
|
|
|
(\+ brother(elena, petr) -> write('PASSED (false)') ; write('FAILED')), nl,
|
|
|
|
|
|
write('Тест: brother(dmitry, svetlana) -> '),
|
|
|
(brother(dmitry, svetlana) -> write('PASSED') ; write('FAILED')), nl,
|
|
|
|
|
|
nl,
|
|
|
write('Братья elena:'), nl,
|
|
|
brothers(elena),
|
|
|
nl,
|
|
|
|
|
|
write('Братья svetlana:'), nl,
|
|
|
brothers(svetlana),
|
|
|
nl.
|
|
|
|
|
|
% -----------------------------------------------
|
|
|
% Тесты отношений братьев и сестер
|
|
|
% -----------------------------------------------
|
|
|
test_sibling_queries :-
|
|
|
write('5. ТЕСТИРОВАНИЕ ОТНОШЕНИЙ БРАТЬЕВ И СЕСТЕР'), nl,
|
|
|
write('-------------------------------------------'), nl,
|
|
|
|
|
|
write('Тест: b_s(petr, elena) -> '),
|
|
|
(b_s(petr, elena) -> write('PASSED') ; write('FAILED')), nl,
|
|
|
|
|
|
write('Тест: b_s(elena, petr) -> '),
|
|
|
(b_s(elena, petr) -> write('PASSED') ; write('FAILED')), nl,
|
|
|
|
|
|
write('Тест: b_s(dmitry, svetlana) -> '),
|
|
|
(b_s(dmitry, svetlana) -> write('PASSED') ; write('FAILED')), nl,
|
|
|
|
|
|
write('Тест: b_s(ivan, petr) -> '),
|
|
|
(\+ b_s(ivan, petr) -> write('PASSED (false)') ; write('FAILED')), nl,
|
|
|
|
|
|
nl,
|
|
|
write('Братья и сестры petr:'), nl,
|
|
|
b_s(petr),
|
|
|
nl,
|
|
|
|
|
|
write('Братья и сестры dmitry:'), nl,
|
|
|
b_s(dmitry),
|
|
|
nl.
|
|
|
|
|
|
% -----------------------------------------------
|
|
|
% Дополнительные тесты
|
|
|
% -----------------------------------------------
|
|
|
test_additional_queries :-
|
|
|
write('6. ДОПОЛНИТЕЛЬНЫЕ ТЕСТЫ'), nl,
|
|
|
write('------------------------'), nl,
|
|
|
|
|
|
write('Тест: father(ivan, petr) -> '),
|
|
|
(father(ivan, petr) -> write('PASSED') ; write('FAILED')), nl,
|
|
|
|
|
|
write('Тест: sister(elena, petr) -> '),
|
|
|
(sister(elena, petr) -> write('PASSED') ; write('FAILED')), nl,
|
|
|
|
|
|
write('Тест: grandparent(ivan, dmitry) -> '),
|
|
|
(grandparent(ivan, dmitry) -> write('PASSED') ; write('FAILED')), nl,
|
|
|
|
|
|
write('Тест: ancestor(ivan, vladimir) -> '),
|
|
|
(ancestor(ivan, vladimir) -> write('PASSED') ; write('FAILED')), nl,
|
|
|
|
|
|
nl,
|
|
|
family_info,
|
|
|
show_family.
|
|
|
|
|
|
% -----------------------------------------------
|
|
|
% Демонстрация трассировки
|
|
|
% -----------------------------------------------
|
|
|
trace_demo :-
|
|
|
write('=== ДЕМОНСТРАЦИЯ ТРАССИРОВКИ ==='), nl,
|
|
|
write('Включаем трассировку для предиката men...'), nl,
|
|
|
trace,
|
|
|
men,
|
|
|
notrace,
|
|
|
write('Трассировка отключена.'), nl.
|
|
|
|
|
|
% -----------------------------------------------
|
|
|
% Интерактивные примеры запросов
|
|
|
% -----------------------------------------------
|
|
|
example_queries :-
|
|
|
write('=== ПРИМЕРЫ ИНТЕРАКТИВНЫХ ЗАПРОСОВ ==='), nl,
|
|
|
write('Вы можете выполнить следующие запросы:'), nl, nl,
|
|
|
|
|
|
write('1. Проверка пола:'), nl,
|
|
|
write(' ?- man(ivan).'), nl,
|
|
|
write(' ?- woman(anna).'), nl, nl,
|
|
|
|
|
|
write('2. Поиск всех мужчин/женщин:'), nl,
|
|
|
write(' ?- men.'), nl,
|
|
|
write(' ?- women.'), nl, nl,
|
|
|
|
|
|
write('3. Родительские отношения:'), nl,
|
|
|
write(' ?- parent(ivan, X).'), nl,
|
|
|
write(' ?- parent(X, petr).'), nl,
|
|
|
write(' ?- children(ivan).'), nl, nl,
|
|
|
|
|
|
write('4. Материнские отношения:'), nl,
|
|
|
write(' ?- mother(anna, petr).'), nl,
|
|
|
write(' ?- mother(X, dmitry).'), nl,
|
|
|
write(' ?- mother(petr).'), nl, nl,
|
|
|
|
|
|
write('5. Братские отношения:'), nl,
|
|
|
write(' ?- brother(petr, elena).'), nl,
|
|
|
write(' ?- brother(X, svetlana).'), nl,
|
|
|
write(' ?- brothers(elena).'), nl, nl,
|
|
|
|
|
|
write('6. Отношения братьев и сестер:'), nl,
|
|
|
write(' ?- b_s(petr, elena).'), nl,
|
|
|
write(' ?- b_s(X, dmitry).'), nl,
|
|
|
write(' ?- b_s(petr).'), nl, nl,
|
|
|
|
|
|
write('7. Дополнительные запросы:'), nl,
|
|
|
write(' ?- grandparent(ivan, X).'), nl,
|
|
|
write(' ?- ancestor(ivan, vladimir).'), nl,
|
|
|
write(' ?- family_info.'), nl,
|
|
|
write(' ?- show_family.'), nl, nl.
|
|
|
|
|
|
% -----------------------------------------------
|
|
|
% Предикат для запуска демонстрации
|
|
|
% -----------------------------------------------
|
|
|
demo :-
|
|
|
write('=== ДЕМОНСТРАЦИЯ СЕМЕЙНОЙ БАЗЫ ДАННЫХ ==='), nl, nl,
|
|
|
demo_queries,
|
|
|
example_queries. |