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