From 744f1f76ee172adf1422129c5f5a3021a5c6ca5e Mon Sep 17 00:00:00 2001 From: serg350 <serg.bobrik@mail.ru> Date: Wed, 16 Apr 2025 19:28:34 +0300 Subject: [PATCH] =?UTF-8?q?Unit=20=D1=82=D0=B5=D1=81=D1=82=20=D1=86=D0=B8?= =?UTF-8?q?=D0=BA=D0=BB=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=BE=D0=B3=D0=BE=20?= =?UTF-8?q?=D0=B3=D1=80=D0=B0=D1=84=D0=B0=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5?= =?UTF-8?q?=D0=B4=D0=B5=D0=BD=20=D0=B8=20=D0=BE=D1=82=D0=BB=D0=B0=D0=B6?= =?UTF-8?q?=D0=B5=D0=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test_funcs/simplest.py | 9 ++++++++- tests/test_aDOT/test_adot_files/cycled.adot | 21 +++++++++++++++++++++ tests/test_aDOT/unit_test_aDOT.py | 15 +++++++++++---- 3 files changed, 40 insertions(+), 5 deletions(-) diff --git a/test_funcs/simplest.py b/test_funcs/simplest.py index bcb5870..5c0c0d9 100644 --- a/test_funcs/simplest.py +++ b/test_funcs/simplest.py @@ -1,4 +1,5 @@ def dummy_edge(data): + """Пустое ребро, не изменяет данные""" pass def increment_a_edge(data): @@ -18,7 +19,8 @@ def decrement_a_edge(data): data['a'] -= 1 def nonzero_predicate(data): - return data['a'] != 0 + """Предикат: возвращает True если 'a' не равно 0""" + return data['a'] != 0 def positiveness_predicate(data): return data['a'] > 0 @@ -33,5 +35,10 @@ def selector_a_nonpositive(data): res = data['a'] <= 0 return [res, not res] +def selector_a_positive(data): + res = data['a'] > 0 + print(f"Selector check: a={data['a']}, continue={res}") + return [res, not res] + def true_predicate(data): return True diff --git a/tests/test_aDOT/test_adot_files/cycled.adot b/tests/test_aDOT/test_adot_files/cycled.adot index e69de29..96a4bb0 100644 --- a/tests/test_aDOT/test_adot_files/cycled.adot +++ b/tests/test_aDOT/test_adot_files/cycled.adot @@ -0,0 +1,21 @@ +digraph CYCLED { + // Определение функций + DECREMENT_A [module=test_funcs.simplest, entry_func=decrement_a_edge] + NONZERO_PRED [module=test_funcs.simplest, entry_func=positiveness_predicate] + NONPOS_SELECTOR [module=test_funcs.simplest, entry_func=selector_a_positive] + DUMMY_FUNC [module=test_funcs.simplest, entry_func=dummy_edge] + + // Определение морфизмов + DECREMENT_EDGE [predicate=NONZERO_PRED, function=DECREMENT_A, comment="Уменьшает a на 1 пока a != 0"] + EXIT_EDGE [function=DUMMY_FUNC, comment="Выход из цикла"] + + // Определение узлов + ST1 [comment="Начальное состояние цикла"] + ST2 [selector=NONPOS_SELECTOR, comment="Узел с селектором"] + + // Определение графа + __BEGIN__ -> ST1 [comment="Начало выполнения"] + ST1 -> ST2 [morphism=DECREMENT_EDGE, comment="Переход с уменьшением a"] + ST2 -> ST1 [order=1, comment="Продолжение цикла если a > 0"] + ST2 -> __END__ [order=2, morphism=EXIT_EDGE, comment="Выход если a <= 0"] +} \ No newline at end of file diff --git a/tests/test_aDOT/unit_test_aDOT.py b/tests/test_aDOT/unit_test_aDOT.py index daa4640..962e877 100644 --- a/tests/test_aDOT/unit_test_aDOT.py +++ b/tests/test_aDOT/unit_test_aDOT.py @@ -26,15 +26,22 @@ class TestADOTParser(unittest.TestCase): self.assertEqual(data["a"], 4) # 1 -> (inc) 2 -> (double) 4 def test_cycled_graph(self): - """Тест циклического графа""" + """Тест циклического графа с уменьшением a до 0""" graph = self.parser.parse_file(os.path.join(self.test_files_dir, "cycled.adot")) self.assertIsInstance(graph, Graph) - # Проверка выполнения с ограничением - data = {"value": 0, "limit": 5} + # Проверка выполнения + data = {"a": 5} # Начинаем с 5 + result = graph.run(data) + self.assertTrue(result) + self.assertEqual(data["a"], 0, + "Граф должен уменьшать a до 0") + + # Дополнительная проверка с другим начальным значением + data = {"a": 3} result = graph.run(data) self.assertTrue(result) - self.assertEqual(data["value"], 5) + self.assertEqual(data["a"], 0) def test_branching_graph(self): """Тест графа с ветвлениями""" -- 2.17.1