|
|
% ===============================================
|
|
|
% Тестовые запросы для лабораторной работы 8 - Задание 3
|
|
|
% Расширенные семейные отношения
|
|
|
% ===============================================
|
|
|
|
|
|
% Главный предикат для запуска всех тестов
|
|
|
run_tests :-
|
|
|
write('=== ЗАПУСК ТЕСТОВ ЗАДАНИЯ 3 ==='), nl, nl,
|
|
|
|
|
|
test_granddaughter_relationships,
|
|
|
test_grandfather_granddaughter_relationships,
|
|
|
test_aunt_relationships,
|
|
|
test_implementation_comparison,
|
|
|
test_extended_family_info,
|
|
|
|
|
|
write('=== ВСЕ ТЕСТЫ ЗАДАНИЯ 3 ЗАВЕРШЕНЫ ==='), nl.
|
|
|
|
|
|
% -----------------------------------------------
|
|
|
% Тесты отношений внучка
|
|
|
% -----------------------------------------------
|
|
|
test_granddaughter_relationships :-
|
|
|
write('1. ТЕСТИРОВАНИЕ ОТНОШЕНИЙ ВНУЧКА'), nl,
|
|
|
write('----------------------------------'), nl,
|
|
|
|
|
|
% Тесты grand_da_facts (через факты)
|
|
|
write('Тесты grand_da_facts (только факты):'), nl,
|
|
|
write('Тест: grand_da_facts(svetlana, ivan) -> '),
|
|
|
(grand_da_facts(svetlana, ivan) -> write('PASSED') ; write('FAILED')), nl,
|
|
|
|
|
|
write('Тест: grand_da_facts(victoria, anna) -> '),
|
|
|
(grand_da_facts(victoria, anna) -> write('PASSED') ; write('FAILED')), nl,
|
|
|
|
|
|
write('Тест: grand_da_facts(katya, olga) -> '),
|
|
|
(grand_da_facts(katya, olga) -> write('PASSED') ; write('FAILED')), nl,
|
|
|
|
|
|
write('Тест: grand_da_facts(dmitry, ivan) -> '),
|
|
|
(\+ grand_da_facts(dmitry, ivan) -> write('PASSED (false)') ; write('FAILED')), nl,
|
|
|
|
|
|
nl,
|
|
|
|
|
|
% Тесты grand_da (через предикаты)
|
|
|
write('Тесты grand_da (через предикаты):'), nl,
|
|
|
write('Тест: grand_da(svetlana, ivan) -> '),
|
|
|
(grand_da(svetlana, ivan) -> write('PASSED') ; write('FAILED')), nl,
|
|
|
|
|
|
write('Тест: grand_da(victoria, anna) -> '),
|
|
|
(grand_da(victoria, anna) -> write('PASSED') ; write('FAILED')), nl,
|
|
|
|
|
|
write('Тест: grand_da(katya, olga) -> '),
|
|
|
(grand_da(katya, olga) -> write('PASSED') ; write('FAILED')), nl,
|
|
|
|
|
|
write('Тест: grand_da(andrey, sergey) -> '),
|
|
|
(\+ grand_da(andrey, sergey) -> write('PASSED (false)') ; write('FAILED')), nl,
|
|
|
|
|
|
nl,
|
|
|
|
|
|
% Тест grand_dats
|
|
|
write('Тест grand_dats(ivan):'), nl,
|
|
|
grand_dats(ivan),
|
|
|
nl,
|
|
|
|
|
|
write('Тест grand_dats(anna):'), nl,
|
|
|
grand_dats(anna),
|
|
|
nl.
|
|
|
|
|
|
% -----------------------------------------------
|
|
|
% Тесты отношений дедушка-внучка
|
|
|
% -----------------------------------------------
|
|
|
test_grandfather_granddaughter_relationships :-
|
|
|
write('2. ТЕСТИРОВАНИЕ ОТНОШЕНИЙ ДЕДУШКА-ВНУЧКА'), nl,
|
|
|
write('-------------------------------------------'), nl,
|
|
|
|
|
|
write('Тест: grand_pa_and_da(ivan, svetlana) -> '),
|
|
|
(grand_pa_and_da(ivan, svetlana) -> write('PASSED') ; write('FAILED')), nl,
|
|
|
|
|
|
write('Тест: grand_pa_and_da(svetlana, ivan) -> '),
|
|
|
(grand_pa_and_da(svetlana, ivan) -> write('PASSED') ; write('FAILED')), nl,
|
|
|
|
|
|
write('Тест: grand_pa_and_da(sergey, katya) -> '),
|
|
|
(grand_pa_and_da(sergey, katya) -> write('PASSED') ; write('FAILED')), nl,
|
|
|
|
|
|
write('Тест: grand_pa_and_da(anna, dmitry) -> '),
|
|
|
(\+ grand_pa_and_da(anna, dmitry) -> write('PASSED (false)') ; write('FAILED')), nl,
|
|
|
|
|
|
write('Тест: grand_pa_and_da(petr, victoria) -> '),
|
|
|
(\+ grand_pa_and_da(petr, victoria) -> write('PASSED (false)') ; write('FAILED')), nl,
|
|
|
|
|
|
nl.
|
|
|
|
|
|
% -----------------------------------------------
|
|
|
% Тесты отношений тетя
|
|
|
% -----------------------------------------------
|
|
|
test_aunt_relationships :-
|
|
|
write('3. ТЕСТИРОВАНИЕ ОТНОШЕНИЙ ТЕТЯ'), nl,
|
|
|
write('---------------------------------'), nl,
|
|
|
|
|
|
% Тесты aunt_facts (через факты)
|
|
|
write('Тесты aunt_facts (только факты):'), nl,
|
|
|
write('Тест: aunt_facts(elena, mikhail) -> '),
|
|
|
(aunt_facts(elena, mikhail) -> write('PASSED') ; write('FAILED')), nl,
|
|
|
|
|
|
write('Тест: aunt_facts(maria, dmitry) -> '),
|
|
|
(aunt_facts(maria, dmitry) -> write('PASSED') ; write('FAILED')), nl,
|
|
|
|
|
|
write('Тест: aunt_facts(svetlana, andrey) -> '),
|
|
|
(aunt_facts(svetlana, andrey) -> write('PASSED') ; write('FAILED')), nl,
|
|
|
|
|
|
write('Тест: aunt_facts(petr, mikhail) -> '),
|
|
|
(\+ aunt_facts(petr, mikhail) -> write('PASSED (false)') ; write('FAILED')), nl,
|
|
|
|
|
|
nl,
|
|
|
|
|
|
% Тесты aunt (через предикаты)
|
|
|
write('Тесты aunt (через предикаты):'), nl,
|
|
|
write('Тест: aunt(elena, mikhail) -> '),
|
|
|
(aunt(elena, mikhail) -> write('PASSED') ; write('FAILED')), nl,
|
|
|
|
|
|
write('Тест: aunt(maria, dmitry) -> '),
|
|
|
(aunt(maria, dmitry) -> write('PASSED') ; write('FAILED')), nl,
|
|
|
|
|
|
write('Тест: aunt(svetlana, andrey) -> '),
|
|
|
(aunt(svetlana, andrey) -> write('PASSED') ; write('FAILED')), nl,
|
|
|
|
|
|
write('Тест: aunt(irina, nikolay) -> '),
|
|
|
(aunt(irina, nikolay) -> write('PASSED') ; write('FAILED')), nl,
|
|
|
|
|
|
nl,
|
|
|
|
|
|
% Тест aunts
|
|
|
write('Тест aunts(dmitry):'), nl,
|
|
|
aunts(dmitry),
|
|
|
nl,
|
|
|
|
|
|
write('Тест aunts(mikhail):'), nl,
|
|
|
aunts(mikhail),
|
|
|
nl.
|
|
|
|
|
|
% -----------------------------------------------
|
|
|
% Тесты сравнения реализаций
|
|
|
% -----------------------------------------------
|
|
|
test_implementation_comparison :-
|
|
|
write('4. ТЕСТИРОВАНИЕ СРАВНЕНИЯ РЕАЛИЗАЦИЙ'), nl,
|
|
|
write('-------------------------------------'), nl,
|
|
|
|
|
|
write('Сравнение результатов grand_da_facts и grand_da для ivan:'), nl,
|
|
|
|
|
|
write('Результаты grand_da_facts:'), nl,
|
|
|
findall(X, grand_da_facts(X, ivan), FactsResults),
|
|
|
write(' '), write(FactsResults), nl,
|
|
|
|
|
|
write('Результаты grand_da:'), nl,
|
|
|
findall(Y, grand_da(Y, ivan), PredicateResults),
|
|
|
write(' '), write(PredicateResults), nl,
|
|
|
|
|
|
% Проверяем, что результаты одинаковые
|
|
|
(sort(FactsResults, SortedFacts),
|
|
|
sort(PredicateResults, SortedPredicates),
|
|
|
SortedFacts = SortedPredicates ->
|
|
|
write('PASSED: Результаты совпадают') ;
|
|
|
write('FAILED: Результаты не совпадают')), nl,
|
|
|
|
|
|
nl,
|
|
|
|
|
|
write('Сравнение результатов aunt_facts и aunt для dmitry:'), nl,
|
|
|
|
|
|
write('Результаты aunt_facts:'), nl,
|
|
|
findall(A, aunt_facts(A, dmitry), AuntFactsResults),
|
|
|
write(' '), write(AuntFactsResults), nl,
|
|
|
|
|
|
write('Результаты aunt:'), nl,
|
|
|
findall(B, aunt(B, dmitry), AuntPredicateResults),
|
|
|
write(' '), write(AuntPredicateResults), nl,
|
|
|
|
|
|
% Проверяем, что результаты одинаковые
|
|
|
(sort(AuntFactsResults, SortedAuntFacts),
|
|
|
sort(AuntPredicateResults, SortedAuntPredicates),
|
|
|
SortedAuntFacts = SortedAuntPredicates ->
|
|
|
write('PASSED: Результаты совпадают') :
|
|
|
write('FAILED: Результаты не совпадают')), nl,
|
|
|
|
|
|
nl.
|
|
|
|
|
|
% -----------------------------------------------
|
|
|
% Тесты расширенной информации о семье
|
|
|
% -----------------------------------------------
|
|
|
test_extended_family_info :-
|
|
|
write('5. ТЕСТИРОВАНИЕ РАСШИРЕННОЙ ИНФОРМАЦИИ О СЕМЬЕ'), nl,
|
|
|
write('------------------------------------------------'), nl,
|
|
|
|
|
|
family_info_task3,
|
|
|
|
|
|
write('Тест дополнительных отношений:'), nl,
|
|
|
|
|
|
% Тесты grandson
|
|
|
write('Тест: grandson(dmitry, ivan) -> '),
|
|
|
(grandson(dmitry, ivan) -> write('PASSED') ; write('FAILED')), nl,
|
|
|
|
|
|
write('Тест: grandson(andrey, sergey) -> '),
|
|
|
(grandson(andrey, sergey) -> write('PASSED') ; write('FAILED')), nl,
|
|
|
|
|
|
% Тесты uncle
|
|
|
write('Тест: uncle(petr, mikhail) -> '),
|
|
|
(uncle(petr, mikhail) -> write('PASSED') ; write('FAILED')), nl,
|
|
|
|
|
|
write('Тест: uncle(alex, dmitry) -> '),
|
|
|
(uncle(alex, dmitry) -> write('PASSED') ; write('FAILED')), nl,
|
|
|
|
|
|
% Тесты nephew/niece
|
|
|
write('Тест: nephew(dmitry, maria) -> '),
|
|
|
(nephew(dmitry, maria) -> write('PASSED') ; write('FAILED')), nl,
|
|
|
|
|
|
write('Тест: niece(svetlana, alex) -> '),
|
|
|
(niece(svetlana, alex) -> write('PASSED') ; write('FAILED')), nl,
|
|
|
|
|
|
nl,
|
|
|
|
|
|
show_extended_relationships.
|
|
|
|
|
|
% -----------------------------------------------
|
|
|
% Комплексные тесты семейных отношений
|
|
|
% -----------------------------------------------
|
|
|
test_complex_family_relationships :-
|
|
|
write('6. КОМПЛЕКСНЫЕ ТЕСТЫ СЕМЕЙНЫХ ОТНОШЕНИЙ'), nl,
|
|
|
write('----------------------------------------'), nl,
|
|
|
|
|
|
write('Проверка полной структуры семьи:'), nl,
|
|
|
|
|
|
% Проверяем, что каждая внучка имеет дедушку/бабушку
|
|
|
write('Внучки и их дедушки/бабушки:'), nl,
|
|
|
forall(
|
|
|
grand_da(Granddaughter, Grandparent),
|
|
|
(write(' '), write(Granddaughter), write(' - внучка '), write(Grandparent), nl)
|
|
|
),
|
|
|
nl,
|
|
|
|
|
|
% Проверяем тетей и их племянников/племянниц
|
|
|
write('Тети и их племянники/племянницы:'), nl,
|
|
|
forall(
|
|
|
aunt(Aunt, NephewNiece),
|
|
|
(write(' '), write(Aunt), write(' - тетя '), write(NephewNiece), nl)
|
|
|
),
|
|
|
nl,
|
|
|
|
|
|
% Проверяем симметричность grand_pa_and_da
|
|
|
write('Проверка симметричности grand_pa_and_da:'), nl,
|
|
|
forall(
|
|
|
(grandfather(GP, GD), woman(GD)),
|
|
|
(
|
|
|
(grand_pa_and_da(GP, GD) ->
|
|
|
(write(' '), write(GP), write(' <-> '), write(GD), write(' : PASSED'), nl)
|
|
|
;
|
|
|
(write(' '), write(GP), write(' <-> '), write(GD), write(' : FAILED'), nl)
|
|
|
)
|
|
|
)
|
|
|
),
|
|
|
nl.
|
|
|
|
|
|
% -----------------------------------------------
|
|
|
% Демонстрационные запросы
|
|
|
% -----------------------------------------------
|
|
|
demo_queries_task3 :-
|
|
|
write('=== ДЕМОНСТРАЦИОННЫЕ ЗАПРОСЫ ЗАДАНИЯ 3 ==='), nl, nl,
|
|
|
|
|
|
demo_relationships_task3,
|
|
|
compare_implementations,
|
|
|
test_complex_family_relationships. |