Files
cadSet/SimpleCADAPI/test/test_expr_graph.py
T
2026-07-22 19:38:36 +08:00

49 lines
1.4 KiB
Python

"""Focused tests for the 2.0 expression graph layer."""
from __future__ import annotations
import unittest
import simplecadapi as scad
class TestExpressionGraph(unittest.TestCase):
def test_var_and_expr_roundtrip(self):
graph = scad.ExpressionGraph()
r = scad.var("r", 10.0)
expr = (r + 2) * 3
graph.register(expr)
payload = graph.to_dict()
rebuilt = scad.ExpressionGraph.from_dict(payload)
self.assertEqual(graph.node_count, rebuilt.node_count)
self.assertGreaterEqual(rebuilt.node_count, 4)
def test_expr_evaluates_with_defaults(self):
r = scad.var("r", 5.0)
expr = r * 2 + 1
self.assertAlmostEqual(float(expr), 11.0)
def test_expression_canonicalization_does_not_promote_discrete_index_lists(self):
from simplecadapi.expr import ExpressionGraph, canonicalize_params
graph = ExpressionGraph()
params, param_exprs = canonicalize_params(
{
"selected_edge_indices": [0, 1, 2],
"distance": scad.var("d", 2.0),
},
graph,
)
self.assertEqual(params["selected_edge_indices"], [0, 1, 2])
self.assertTrue(
all(isinstance(v, int) for v in params["selected_edge_indices"])
)
self.assertIn("distance", param_exprs)
if __name__ == "__main__":
unittest.main()