Commit 744f1f76 authored by Sergey Bobrov's avatar Sergey Bobrov

Unit тест циклического графа проведен и отлажен

parent ed60c72e
def dummy_edge(data):
"""Пустое ребро, не изменяет данные"""
pass
def increment_a_edge(data):
......@@ -18,6 +19,7 @@ def decrement_a_edge(data):
data['a'] -= 1
def nonzero_predicate(data):
"""Предикат: возвращает True если 'a' не равно 0"""
return data['a'] != 0
def positiveness_predicate(data):
......@@ -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
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
......@@ -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):
"""Тест графа с ветвлениями"""
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment