76 lines
2.5 KiB
Python
76 lines
2.5 KiB
Python
"""TDD coverage for remaining Phase 1 expressionized primitive/profile APIs."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import unittest
|
|
|
|
import simplecadapi as scad
|
|
from simplecadapi.graph import GraphSession
|
|
|
|
|
|
class TestRemainingPrimitiveProfileExpressionSupport(unittest.TestCase):
|
|
def test_point_accepts_expression_coordinates_and_records_param_exprs(self):
|
|
x = scad.var("px", 1.0)
|
|
y = scad.var("py", 2.0)
|
|
|
|
with GraphSession() as session:
|
|
point = scad.make_point_rvertex(x, y, 3.0)
|
|
|
|
self.assertIsInstance(point, scad.Vertex)
|
|
leaf = session.graph.leaf_nodes()[0]
|
|
self.assertIn("x", leaf.param_exprs)
|
|
self.assertIn("y", leaf.param_exprs)
|
|
|
|
def test_line_accepts_expression_points_and_records_param_exprs(self):
|
|
x = scad.var("lx", 2.0)
|
|
|
|
with GraphSession() as session:
|
|
edge = scad.make_line_redge((0.0, 0.0, 0.0), (x, 0.0, 0.0))
|
|
|
|
self.assertIsInstance(edge, scad.Edge)
|
|
leaf = session.graph.leaf_nodes()[0]
|
|
self.assertIn("end", leaf.param_exprs)
|
|
|
|
def test_rectangle_wire_accepts_expression_dimensions_and_records_param_exprs(self):
|
|
w = scad.var("rw", 3.0)
|
|
h = scad.var("rh", 2.0)
|
|
|
|
with GraphSession() as session:
|
|
wire = scad.make_rectangle_rwire(w, h)
|
|
|
|
self.assertIsInstance(wire, scad.Wire)
|
|
ops = session.graph.topological_order()
|
|
self.assertTrue(any(node.op == "make_line_redge" for node in ops))
|
|
self.assertTrue(any(node.op == "make_wire_from_edges_rwire" for node in ops))
|
|
line_nodes = [node for node in ops if node.op == "make_line_redge"]
|
|
self.assertTrue(
|
|
any(
|
|
"start" in node.param_exprs or "end" in node.param_exprs
|
|
for node in line_nodes
|
|
)
|
|
)
|
|
|
|
def test_polyline_accepts_expression_points_and_records_param_exprs(self):
|
|
y = scad.var("ply", 1.0)
|
|
|
|
with GraphSession() as session:
|
|
wire = scad.make_polyline_rwire(
|
|
[(0.0, 0.0, 0.0), (1.0, y, 0.0), (2.0, 0.0, 0.0)],
|
|
closed=False,
|
|
)
|
|
|
|
self.assertIsInstance(wire, scad.Wire)
|
|
ops = session.graph.topological_order()
|
|
line_nodes = [node for node in ops if node.op == "make_line_redge"]
|
|
self.assertGreaterEqual(len(line_nodes), 2)
|
|
self.assertTrue(
|
|
any(
|
|
"start" in node.param_exprs or "end" in node.param_exprs
|
|
for node in line_nodes
|
|
)
|
|
)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|