From 78e04c2afe4878aa29108785cce1e32b9072c265 Mon Sep 17 00:00:00 2001 From: "Danilo M." Date: Wed, 28 Oct 2026 10:29:05 +0100 Subject: Make formula evaluation fail only with Error Co-Authored-By: Claude Haiku 5.5 --- tests/test_formula.py | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'tests/test_formula.py') diff --git a/tests/test_formula.py b/tests/test_formula.py index 8074e5a..72f41ea 100644 --- a/tests/test_formula.py +++ b/tests/test_formula.py @@ -94,3 +94,39 @@ class GraphTest(unittest.TestCase): self.g.add_formula("b", [val(1), val(2)], source="f") with self.assertRaisesRegex(Error, "f: malformed formula for b"): self.g.evaluate() + + def test_non_numeric_result_is_fatal(self): + self.g.add_formula("b", [val("x")], source="f") + with self.assertRaisesRegex(Error, "f: malformed formula for b"): + self.g.evaluate() + + def test_overflow_is_fatal(self): + self.g.add_formula("b", [val(10**400), val(0.5), {"op": "mult"}], source="f") + with self.assertRaisesRegex(Error, "f: malformed formula for b"): + self.g.evaluate() + + def test_nan_result_is_fatal(self): + self.g.add_formula("b", [val(float("nan"))], source="f") + with self.assertRaisesRegex(Error, "f: malformed formula for b"): + self.g.evaluate() + + def test_deep_chain_is_fatal(self): + g = Graph() + n = 2000 + for i in range(n): + g.add_prop(f"p{i}") + for i in range(n - 1): + g.add_formula(f"p{i}", [push(f"p{i + 1}")]) + with self.assertRaisesRegex(Error, "too deep"): + g.evaluate() + + def test_diamond_dependency(self): + g = Graph() + g.add_prop("a", 1.0) + g.add_prop("b") + g.add_prop("c") + g.add_prop("d") + g.add_formula("b", [push("a")]) + g.add_formula("c", [push("a"), push("a"), {"op": "add"}]) + g.add_formula("d", [push("b"), push("c"), {"op": "add"}]) + self.assertEqual(g.evaluate()["d"], 3) -- cgit v1.2.3