"""Geometry tests that exercise the build123d boolean features.""" import pytest pytest.importorskip("build123d") from woodshop.geometry import part_solid # noqa: E402 from woodshop.scene import Scene # noqa: E402 def test_hole_reduces_volume(): s = Scene() s.place("2x4", 12) base = part_solid(s.get_part("p1")).volume s.add_feature("p1", "hole", face="top", along_in=6, diameter_in=1.0, depth_in=0) # through assert part_solid(s.get_part("p1")).volume < base def test_mortise_reduces_volume(): s = Scene() s.place("2x4", 12) base = part_solid(s.get_part("p1")).volume s.add_feature("p1", "mortise", face="top", along_in=6, width_in=1, height_in=2, depth_in=0.75) assert part_solid(s.get_part("p1")).volume < base def test_tenon_adds_volume(): s = Scene() s.place("2x4", 12) base = part_solid(s.get_part("p1")).volume s.add_feature("p1", "tenon", face="end_b", width_in=1.5, height_in=0.75, depth_in=1.5) assert part_solid(s.get_part("p1")).volume > base def test_chamfer_reduces_volume(): s = Scene() s.place("2x4", 12) base = part_solid(s.get_part("p1")).volume s.add_feature("p1", "chamfer", face="end_b", width_in=0.5) assert part_solid(s.get_part("p1")).volume < base def test_oversized_chamfer_falls_back(): s = Scene() s.place("2x4", 12) # absurd chamfer size: clamped/caught, board stays valid (no crash) s.add_feature("p1", "chamfer", face="end_b", width_in=99) assert part_solid(s.get_part("p1")).volume > 0 def test_rotated_box_feature_still_cuts(): s = Scene() s.place("2x4", 12) base = part_solid(s.get_part("p1")).volume s.add_feature("p1", "mortise", face="top", width_in=2, height_in=0.5, depth_in=0.5, rotation_deg=90) assert part_solid(s.get_part("p1")).volume < base def test_featured_part_tessellates(): s = Scene() s.place("2x4", 12) s.add_feature("p1", "hole", face="top", along_in=6, diameter_in=0.5, depth_in=0) verts, tris = part_solid(s.get_part("p1")).tessellate(0.05) assert len(verts) > 8 and len(tris) > 12