aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/test_formula.py36
1 files changed, 36 insertions, 0 deletions
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)