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.

223 lines
8.0 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
% ===============================================
% Главный предикат для запуска всех тестов
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.