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