From f11d5907dbaa7d42efd368bf42ce9d57d85ac567 Mon Sep 17 00:00:00 2001 From: Jaro Habiger Date: Wed, 5 Nov 2025 00:48:09 +0100 Subject: [PATCH] test: add triangle problem see issue #11 ("Implement ROAR optimizer") for context. --- tests/single_layer.rs | 18 + .../triangle_problem/route_all.cmd | 58 ++ .../triangle_problem/triangle_problem.dsn | 103 +++ .../triangle_problem.kicad_pcb | 678 ++++++++++++++++++ .../triangle_problem.kicad_prl | 130 ++++ .../triangle_problem.kicad_pro | 284 ++++++++ .../triangle_problem.kicad_sch | 14 + 7 files changed, 1285 insertions(+) create mode 100644 tests/single_layer/triangle_problem/route_all.cmd create mode 100644 tests/single_layer/triangle_problem/triangle_problem.dsn create mode 100644 tests/single_layer/triangle_problem/triangle_problem.kicad_pcb create mode 100644 tests/single_layer/triangle_problem/triangle_problem.kicad_prl create mode 100644 tests/single_layer/triangle_problem/triangle_problem.kicad_pro create mode 100644 tests/single_layer/triangle_problem/triangle_problem.kicad_sch diff --git a/tests/single_layer.rs b/tests/single_layer.rs index 3f97982..161a248 100644 --- a/tests/single_layer.rs +++ b/tests/single_layer.rs @@ -216,3 +216,21 @@ fn autoroute_smd_non_rectangular_buck_converter(variant: &str) { common::assert_that_all_ratlines_besides_gnd_are_autorouted(&mut autorouter); //common::assert_number_of_conncomps(&mut autorouter, 16); } + +#[apply(test_master)] +fn autoroute_triangle_problem(variant: &str) { + let path = "tests/single_layer/triangle_problem/triangle_problem.dsn"; + let autorouter = common::load_design(&path); + + let mut invoker = common::create_invoker_and_assert(autorouter); + + common::replay_and_assert_and_report( + &mut invoker, + "tests/single_layer/triangle_problem/route_all.cmd", + variant, + ); + + let (mut autorouter, ..) = invoker.dissolve(); + + common::assert_that_all_ratlines_besides_gnd_are_autorouted(&mut autorouter); +} diff --git a/tests/single_layer/triangle_problem/route_all.cmd b/tests/single_layer/triangle_problem/route_all.cmd new file mode 100644 index 0000000..9d7d23c --- /dev/null +++ b/tests/single_layer/triangle_problem/route_all.cmd @@ -0,0 +1,58 @@ +{ + "done": [ + { + "MultilayerAutoroute": [ + [ + { + "pin": "P1_1-1", + "layer": "F.Cu" + }, + { + "pin": "P1_2-1", + "layer": "F.Cu" + }, + { + "pin": "P2_1-1", + "layer": "F.Cu" + }, + { + "pin": "P2_2-1", + "layer": "F.Cu" + }, + { + "pin": "P3_1-1", + "layer": "F.Cu" + }, + { + "pin": "P3_2-1", + "layer": "F.Cu" + } + ], + { + "anterouter": { + "fanout_clearance": 200.0 + }, + "planar": { + "principal_layer": 0, + "presort_by": "RatlineIntersectionCountAndLength", + "permutate": true, + "router": { + "routed_band_width": 100.0, + "wrap_around_bands": true, + "squeeze_through_under_bends": true + }, + "timeout": { + "initial": 1.0, + "progress_bonus": 0.005 + } + }, + "timeout": { + "initial": 5.0, + "progress_bonus": 0.5 + } + } + ] + } + ], + "undone": [] +} \ No newline at end of file diff --git a/tests/single_layer/triangle_problem/triangle_problem.dsn b/tests/single_layer/triangle_problem/triangle_problem.dsn new file mode 100644 index 0000000..5ac8541 --- /dev/null +++ b/tests/single_layer/triangle_problem/triangle_problem.dsn @@ -0,0 +1,103 @@ +(pcb /Users/anuejn/tmp/triangle_problem/triangle_problem.dsn + (parser + (string_quote ") + (space_in_quoted_tokens on) + (host_cad "KiCad's Pcbnew") + (host_version "9.0.2") + ) + (resolution um 10) + (unit um) + (structure + (layer F.Cu + (type signal) + (property + (index 0) + ) + ) + (layer B.Cu + (type signal) + (property + (index 1) + ) + ) + (boundary + (path pcb 0 157000 -157000 54500 -157000 54500 -62500 157000 -62500 + 157000 -157000) + ) + (via "Via[0-1]_600:300_um") + (rule + (width 200) + (clearance 200) + (clearance 50 (type smd_smd)) + ) + ) + (placement + (component TestPoint:TestPoint_Pad_D3.0mm + (place P2_1 142500.000000 -99000.000000 front 0.000000 (PN TestPoint_Pad_D3.0mm)) + (place P3_2 98000.000000 -93500.000000 front 0.000000 (PN TestPoint_Pad_D3.0mm)) + (place P3_1 82500.000000 -146000.000000 front 0.000000 (PN TestPoint_Pad_D3.0mm)) + (place P2_2 88000.000000 -111000.000000 front 0.000000 (PN TestPoint_Pad_D3.0mm)) + (place P1_2 108000.000000 -111500.000000 front 0.000000 (PN TestPoint_Pad_D3.0mm)) + (place P1_1 71500.000000 -72000.000000 front 0.000000 (PN TestPoint_Pad_D3.0mm)) + ) + ) + (library + (image TestPoint:TestPoint_Pad_D3.0mm + (outline (path signal 120 1750 0 1731.35 -254.802 1675.8 -504.173 1584.53 -742.799 + 1459.5 -965.594 1303.35 -1167.81 1119.43 -1345.13 911.646 -1493.79 + 684.433 -1610.61 442.633 -1693.1 191.4 -1739.5 -63.914 -1748.83 + -317.864 -1720.89 -565.041 -1656.27 -800.174 -1556.35 -1018.25 -1423.26 + -1214.63 -1259.83 -1385.12 -1069.55 -1526.09 -856.481 -1634.53 -625.154 + -1708.13 -380.503 -1745.33 -127.742 -1745.33 127.742 -1708.13 380.503 + -1634.53 625.154 -1526.09 856.481 -1385.12 1069.55 -1214.63 1259.83 + -1018.25 1423.26 -800.174 1556.35 -565.041 1656.27 -317.864 1720.89 + -63.914 1748.83 191.4 1739.5 442.633 1693.1 684.433 1610.61 + 911.646 1493.79 1119.43 1345.13 1303.35 1167.81 1459.5 965.594 + 1584.53 742.799 1675.8 504.173 1731.35 254.802 1750 0)) + (outline (path signal 50 2000 0 1980.54 -278.346 1922.52 -551.275 1827.09 -813.473 + 1696.1 -1059.84 1532.09 -1285.58 1338.26 -1486.29 1118.39 -1658.08 + 876.742 -1797.59 618.034 -1902.11 347.296 -1969.62 69.799 -1998.78 + -209.057 -1989.04 -483.844 -1940.59 -749.213 -1854.37 -1000 -1732.05 + -1231.32 -1576.02 -1438.68 -1389.32 -1618.03 -1175.57 -1765.89 -938.943 + -1879.38 -684.04 -1956.3 -415.823 -1995.13 -139.513 -1995.13 139.513 + -1956.3 415.823 -1879.38 684.04 -1765.89 938.943 -1618.03 1175.57 + -1438.68 1389.32 -1231.32 1576.02 -1000 1732.05 -749.213 1854.37 + -483.844 1940.59 -209.057 1989.04 69.799 1998.78 347.296 1969.62 + 618.034 1902.11 876.742 1797.59 1118.39 1658.08 1338.26 1486.29 + 1532.09 1285.58 1696.1 1059.84 1827.09 813.473 1922.52 551.275 + 1980.54 278.346 2000 0)) + (pin Round[T]Pad_3000.000000_um 1 0 0) + ) + (padstack Round[T]Pad_3000.000000_um + (shape (circle F.Cu 3000)) + (attach off) + ) + (padstack "Via[0-1]_600:300_um" + (shape (circle F.Cu 600)) + (shape (circle B.Cu 600)) + (attach off) + ) + ) + (network + (net 1 + (pins P1_2-1 P1_1-1) + ) + (net 2 + (pins P2_1-1 P2_2-1) + ) + (net 3 + (pins P3_2-1 P3_1-1) + ) + (class kicad_default 1 2 3 + (circuit + (use_via "Via[0-1]_600:300_um") + ) + (rule + (width 200) + (clearance 200) + ) + ) + ) + (wiring + ) +) diff --git a/tests/single_layer/triangle_problem/triangle_problem.kicad_pcb b/tests/single_layer/triangle_problem/triangle_problem.kicad_pcb new file mode 100644 index 0000000..555a7b5 --- /dev/null +++ b/tests/single_layer/triangle_problem/triangle_problem.kicad_pcb @@ -0,0 +1,678 @@ +(kicad_pcb + (version 20241229) + (generator "pcbnew") + (generator_version "9.0") + (general + (thickness 1.6) + (legacy_teardrops no) + ) + (paper "A4") + (layers + (0 "F.Cu" signal) + (2 "B.Cu" signal) + (9 "F.Adhes" user "F.Adhesive") + (11 "B.Adhes" user "B.Adhesive") + (13 "F.Paste" user) + (15 "B.Paste" user) + (5 "F.SilkS" user "F.Silkscreen") + (7 "B.SilkS" user "B.Silkscreen") + (1 "F.Mask" user) + (3 "B.Mask" user) + (17 "Dwgs.User" user "User.Drawings") + (19 "Cmts.User" user "User.Comments") + (21 "Eco1.User" user "User.Eco1") + (23 "Eco2.User" user "User.Eco2") + (25 "Edge.Cuts" user) + (27 "Margin" user) + (31 "F.CrtYd" user "F.Courtyard") + (29 "B.CrtYd" user "B.Courtyard") + (35 "F.Fab" user) + (33 "B.Fab" user) + (39 "User.1" user) + (41 "User.2" user) + (43 "User.3" user) + (45 "User.4" user) + ) + (setup + (pad_to_mask_clearance 0) + (allow_soldermask_bridges_in_footprints no) + (tenting front back) + (pcbplotparams + (layerselection 0x00000000_00000000_55555555_5755f5ff) + (plot_on_all_layers_selection 0x00000000_00000000_00000000_00000000) + (disableapertmacros no) + (usegerberextensions no) + (usegerberattributes yes) + (usegerberadvancedattributes yes) + (creategerberjobfile yes) + (dashed_line_dash_ratio 12.000000) + (dashed_line_gap_ratio 3.000000) + (svgprecision 4) + (plotframeref no) + (mode 1) + (useauxorigin no) + (hpglpennumber 1) + (hpglpenspeed 20) + (hpglpendiameter 15.000000) + (pdf_front_fp_property_popups yes) + (pdf_back_fp_property_popups yes) + (pdf_metadata yes) + (pdf_single_document no) + (dxfpolygonmode yes) + (dxfimperialunits yes) + (dxfusepcbnewfont yes) + (psnegative no) + (psa4output no) + (plot_black_and_white yes) + (sketchpadsonfab no) + (plotpadnumbers no) + (hidednponfab no) + (sketchdnponfab yes) + (crossoutdnponfab yes) + (subtractmaskfromsilk no) + (outputformat 1) + (mirror no) + (drillshape 1) + (scaleselection 1) + (outputdirectory "") + ) + ) + (net 0 "") + (net 1 "1") + (net 2 "2") + (net 3 "3") + (footprint "TestPoint:TestPoint_Pad_D3.0mm" + (layer "F.Cu") + (uuid "8565a1b2-df7f-4d3e-9a66-88360bf3763b") + (at 98 93.5) + (descr "SMD pad as test Point, diameter 3.0mm") + (tags "test point SMD pad") + (property "Reference" "P3_2" + (at 0 -2.398 0) + (layer "F.SilkS") + (uuid "796a082e-b614-4f3f-a04c-963eec4c0c01") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "TestPoint_Pad_D3.0mm" + (at 0 2.55 0) + (layer "F.Fab") + (uuid "fd13e72e-29ff-4e67-8f49-d52dc168c441") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "881ccf59-51de-4353-b8f7-d7e7065fb84c") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "f2615013-8727-4920-b0fb-9f0aa57b102a") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (attr exclude_from_pos_files exclude_from_bom) + (fp_circle + (center 0 0) + (end 0 1.75) + (stroke + (width 0.12) + (type solid) + ) + (fill no) + (layer "F.SilkS") + (uuid "215192c0-95e2-4a22-a7c3-c76140a37989") + ) + (fp_circle + (center 0 0) + (end 2 0) + (stroke + (width 0.05) + (type solid) + ) + (fill no) + (layer "F.CrtYd") + (uuid "69ceda7c-9f96-4176-a897-fb2a9b0a1c5b") + ) + (fp_text user "${REFERENCE}" + (at 0 -2.4 0) + (layer "F.Fab") + (uuid "36664cef-3abf-4e53-a36c-13afc06a5001") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (pad "1" smd circle + (at 0 0) + (size 3 3) + (layers "F.Cu" "F.Mask") + (net 3 "3") + (uuid "ffd43813-75c7-4b7a-ac98-8cb2cfd8d83f") + ) + (embedded_fonts no) + ) + (footprint "TestPoint:TestPoint_Pad_D3.0mm" + (layer "F.Cu") + (uuid "9b24c104-c357-4c81-85a1-8a313c58996a") + (at 71.5 72) + (descr "SMD pad as test Point, diameter 3.0mm") + (tags "test point SMD pad") + (property "Reference" "P1_1" + (at 0 -2.398 0) + (layer "F.SilkS") + (uuid "407a3d30-bcf0-49c8-afb8-3b1442658231") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "TestPoint_Pad_D3.0mm" + (at 0 2.55 0) + (layer "F.Fab") + (uuid "e6def67f-a46f-4547-96eb-d20ba5a06cd5") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "d5cdb3fa-bd1e-44c3-9b16-7ec50f23ff59") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "08c8853e-40ce-4af8-8c48-f6822c5d6c7a") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (attr exclude_from_pos_files exclude_from_bom) + (fp_circle + (center 0 0) + (end 0 1.75) + (stroke + (width 0.12) + (type solid) + ) + (fill no) + (layer "F.SilkS") + (uuid "773c8d2b-dc6f-4da3-9f61-d2cbb5b16887") + ) + (fp_circle + (center 0 0) + (end 2 0) + (stroke + (width 0.05) + (type solid) + ) + (fill no) + (layer "F.CrtYd") + (uuid "cc355675-70af-43ad-a393-1c6ebc84b429") + ) + (fp_text user "${REFERENCE}" + (at 0 -2.4 0) + (layer "F.Fab") + (uuid "b3213696-779d-45b3-b210-c280b1e7193d") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (pad "1" smd circle + (at 0 0) + (size 3 3) + (layers "F.Cu" "F.Mask") + (net 1 "1") + (uuid "754f14be-6917-48ac-a5d0-242b3faac77b") + ) + (embedded_fonts no) + ) + (footprint "TestPoint:TestPoint_Pad_D3.0mm" + (layer "F.Cu") + (uuid "a554a487-1d76-47c5-b212-b5f5222aecfc") + (at 88 111) + (descr "SMD pad as test Point, diameter 3.0mm") + (tags "test point SMD pad") + (property "Reference" "P2_2" + (at 0 -2.398 0) + (layer "F.SilkS") + (uuid "23a253cc-5f17-4ca0-941d-beb9e4fb7d9e") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "TestPoint_Pad_D3.0mm" + (at 0 2.55 0) + (layer "F.Fab") + (uuid "c5481baf-8fb2-4bdc-858e-a5212d664d68") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "6436cffb-6c39-494a-9cc1-3b41ad84f693") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "227ad11e-120d-4042-803b-322e553d1ed3") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (attr exclude_from_pos_files exclude_from_bom) + (fp_circle + (center 0 0) + (end 0 1.75) + (stroke + (width 0.12) + (type solid) + ) + (fill no) + (layer "F.SilkS") + (uuid "08be701b-c13b-4419-8eb7-04ff76e390b0") + ) + (fp_circle + (center 0 0) + (end 2 0) + (stroke + (width 0.05) + (type solid) + ) + (fill no) + (layer "F.CrtYd") + (uuid "c40e51f3-d6a1-4a6e-9c97-057737332c7d") + ) + (fp_text user "${REFERENCE}" + (at 0 -2.4 0) + (layer "F.Fab") + (uuid "9b9fdda7-fb1a-4319-991b-72e265022eb8") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (pad "1" smd circle + (at 0 0) + (size 3 3) + (layers "F.Cu" "F.Mask") + (net 2 "2") + (uuid "61f0a3ab-e9e8-4643-8f75-41da3e106857") + ) + (embedded_fonts no) + ) + (footprint "TestPoint:TestPoint_Pad_D3.0mm" + (layer "F.Cu") + (uuid "d61d7de3-3bbf-4dd7-8340-4b1ea14ed5f2") + (at 108 111.5) + (descr "SMD pad as test Point, diameter 3.0mm") + (tags "test point SMD pad") + (property "Reference" "P1_2" + (at 0 -2.398 0) + (layer "F.SilkS") + (uuid "5751fb20-7658-48aa-b5ba-7083865eca6c") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "TestPoint_Pad_D3.0mm" + (at 0 2.55 0) + (layer "F.Fab") + (uuid "349ba265-f2fc-4951-8208-e8d24be62dc4") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "4f9a1fbe-359d-48a6-bf2a-724e17cc0fbc") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "29bb1467-ef18-4c89-ad46-6fcdf99b66ee") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (attr exclude_from_pos_files exclude_from_bom) + (fp_circle + (center 0 0) + (end 0 1.75) + (stroke + (width 0.12) + (type solid) + ) + (fill no) + (layer "F.SilkS") + (uuid "a92c5460-a4d7-4461-914b-4aa482b80fd9") + ) + (fp_circle + (center 0 0) + (end 2 0) + (stroke + (width 0.05) + (type solid) + ) + (fill no) + (layer "F.CrtYd") + (uuid "7ed552cd-b77d-40b8-a9b6-5884d74146a3") + ) + (fp_text user "${REFERENCE}" + (at 0 -2.4 0) + (layer "F.Fab") + (uuid "beef3a52-d324-4167-b2f4-ba785852bebb") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (pad "1" smd circle + (at 0 0) + (size 3 3) + (layers "F.Cu" "F.Mask") + (net 1 "1") + (uuid "cd451c2a-88e9-41b8-a16f-90b306acfcba") + ) + (embedded_fonts no) + ) + (footprint "TestPoint:TestPoint_Pad_D3.0mm" + (layer "F.Cu") + (uuid "defe0374-2fb4-4693-bd31-fd54f5283695") + (at 82.5 146) + (descr "SMD pad as test Point, diameter 3.0mm") + (tags "test point SMD pad") + (property "Reference" "P3_1" + (at 0 -2.398 0) + (layer "F.SilkS") + (uuid "45b9dca3-dd03-4cd4-8a62-a18e93abcd65") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "TestPoint_Pad_D3.0mm" + (at 0 2.55 0) + (layer "F.Fab") + (uuid "b2c1ee3c-3dac-4cec-bff9-456a6cde42a5") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "25b4b2fc-93c4-4c92-99a4-bd3bce0ed412") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "d4c9f9d0-bb61-43f1-8541-f6ab5fc2a6d7") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (attr exclude_from_pos_files exclude_from_bom) + (fp_circle + (center 0 0) + (end 0 1.75) + (stroke + (width 0.12) + (type solid) + ) + (fill no) + (layer "F.SilkS") + (uuid "98f343e5-68a2-4a76-ba55-5bf98779cf7f") + ) + (fp_circle + (center 0 0) + (end 2 0) + (stroke + (width 0.05) + (type solid) + ) + (fill no) + (layer "F.CrtYd") + (uuid "bd6537a1-3d81-45db-8a44-bb8114dc7b1b") + ) + (fp_text user "${REFERENCE}" + (at 0 -2.4 0) + (layer "F.Fab") + (uuid "0dce2e94-8ddc-4f7c-b8a4-159d0616fa68") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (pad "1" smd circle + (at 0 0) + (size 3 3) + (layers "F.Cu" "F.Mask") + (net 3 "3") + (uuid "ed665788-cc7c-4295-9d45-e3477a3d6e3b") + ) + (embedded_fonts no) + ) + (footprint "TestPoint:TestPoint_Pad_D3.0mm" + (layer "F.Cu") + (uuid "ea514017-d99e-435c-97ce-ae186741e2a8") + (at 142.5 99) + (descr "SMD pad as test Point, diameter 3.0mm") + (tags "test point SMD pad") + (property "Reference" "P2_1" + (at 0 -2.398 0) + (layer "F.SilkS") + (uuid "8943f486-d75b-41d0-9853-e12abee5cd7c") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "TestPoint_Pad_D3.0mm" + (at 0 2.55 0) + (layer "F.Fab") + (uuid "1e6fd845-2e14-4b6e-9a78-8161257f407d") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "69319d0e-24cf-49aa-b47a-0c8f266e7453") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "b7bcb4cc-a111-4414-aa96-70c626cede93") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (attr exclude_from_pos_files exclude_from_bom) + (fp_circle + (center 0 0) + (end 0 1.75) + (stroke + (width 0.12) + (type solid) + ) + (fill no) + (layer "F.SilkS") + (uuid "53755e03-a30a-42cf-8ac4-7c2e15a5ea4a") + ) + (fp_circle + (center 0 0) + (end 2 0) + (stroke + (width 0.05) + (type solid) + ) + (fill no) + (layer "F.CrtYd") + (uuid "aa1823d8-adcd-4596-8419-2a998287aa1f") + ) + (fp_text user "${REFERENCE}" + (at 0 -2.4 0) + (layer "F.Fab") + (uuid "55d0f963-3b48-4dbe-b9e4-0c3ab08b00e8") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (pad "1" smd circle + (at 0 0) + (size 3 3) + (layers "F.Cu" "F.Mask") + (net 2 "2") + (uuid "75ce5bdd-4ecc-485c-aead-a82e37f7e4de") + ) + (embedded_fonts no) + ) + (gr_rect + (start 54.5 62.5) + (end 157 157) + (stroke + (width 0.05) + (type default) + ) + (fill no) + (layer "Edge.Cuts") + (uuid "73b9c64d-ec9a-4db8-8606-fc815680e47d") + ) + (embedded_fonts no) +) diff --git a/tests/single_layer/triangle_problem/triangle_problem.kicad_prl b/tests/single_layer/triangle_problem/triangle_problem.kicad_prl new file mode 100644 index 0000000..0f5d513 --- /dev/null +++ b/tests/single_layer/triangle_problem/triangle_problem.kicad_prl @@ -0,0 +1,130 @@ +{ + "board": { + "active_layer": 25, + "active_layer_preset": "All Layers", + "auto_track_width": true, + "hidden_netclasses": [], + "hidden_nets": [], + "high_contrast_mode": 0, + "net_color_mode": 1, + "opacity": { + "images": 0.6, + "pads": 1.0, + "shapes": 1.0, + "tracks": 1.0, + "vias": 1.0, + "zones": 0.6 + }, + "selection_filter": { + "dimensions": true, + "footprints": true, + "graphics": true, + "keepouts": true, + "lockedItems": false, + "otherItems": true, + "pads": true, + "text": true, + "tracks": true, + "vias": true, + "zones": true + }, + "visible_items": [ + "vias", + "footprint_text", + "footprint_anchors", + "ratsnest", + "grid", + "footprints_front", + "footprints_back", + "footprint_values", + "footprint_references", + "tracks", + "drc_errors", + "drawing_sheet", + "bitmaps", + "pads", + "zones", + "drc_warnings", + "locked_item_shadows", + "conflict_shadows", + "shapes" + ], + "visible_layers": "ffffffff_ffffffff_ffffffff_ffffffff", + "zone_display_mode": 0 + }, + "git": { + "repo_type": "", + "repo_username": "", + "ssh_key": "" + }, + "meta": { + "filename": "triangle_problem.kicad_prl", + "version": 5 + }, + "net_inspector_panel": { + "col_hidden": [ + false, + false, + false, + false, + false, + false, + false, + false, + false, + false + ], + "col_order": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ], + "col_widths": [ + 156, + 141, + 103, + 71, + 103, + 103, + 103, + 74, + 103, + 103 + ], + "custom_group_rules": [], + "expanded_rows": [], + "filter_by_net_name": true, + "filter_by_netclass": true, + "filter_text": "", + "group_by_constraint": false, + "group_by_netclass": false, + "show_unconnected_nets": false, + "show_zero_pad_nets": false, + "sort_ascending": true, + "sorting_column": 0 + }, + "open_jobsets": [], + "project": { + "files": [] + }, + "schematic": { + "selection_filter": { + "graphics": true, + "images": true, + "labels": true, + "lockedItems": false, + "otherItems": true, + "pins": true, + "symbols": true, + "text": true, + "wires": true + } + } +} diff --git a/tests/single_layer/triangle_problem/triangle_problem.kicad_pro b/tests/single_layer/triangle_problem/triangle_problem.kicad_pro new file mode 100644 index 0000000..a9403df --- /dev/null +++ b/tests/single_layer/triangle_problem/triangle_problem.kicad_pro @@ -0,0 +1,284 @@ +{ + "board": { + "3dviewports": [], + "design_settings": { + "defaults": { + "apply_defaults_to_fp_fields": false, + "apply_defaults_to_fp_shapes": false, + "apply_defaults_to_fp_text": false, + "board_outline_line_width": 0.05, + "copper_line_width": 0.2, + "copper_text_italic": false, + "copper_text_size_h": 1.5, + "copper_text_size_v": 1.5, + "copper_text_thickness": 0.3, + "copper_text_upright": false, + "courtyard_line_width": 0.05, + "dimension_precision": 4, + "dimension_units": 3, + "dimensions": { + "arrow_length": 1270000, + "extension_offset": 500000, + "keep_text_aligned": true, + "suppress_zeroes": true, + "text_position": 0, + "units_format": 0 + }, + "fab_line_width": 0.1, + "fab_text_italic": false, + "fab_text_size_h": 1.0, + "fab_text_size_v": 1.0, + "fab_text_thickness": 0.15, + "fab_text_upright": false, + "other_line_width": 0.1, + "other_text_italic": false, + "other_text_size_h": 1.0, + "other_text_size_v": 1.0, + "other_text_thickness": 0.15, + "other_text_upright": false, + "pads": { + "drill": 0.0, + "height": 3.0, + "width": 3.0 + }, + "silk_line_width": 0.1, + "silk_text_italic": false, + "silk_text_size_h": 1.0, + "silk_text_size_v": 1.0, + "silk_text_thickness": 0.1, + "silk_text_upright": false, + "zones": { + "min_clearance": 0.5 + } + }, + "diff_pair_dimensions": [], + "drc_exclusions": [], + "meta": { + "version": 2 + }, + "rule_severities": { + "annular_width": "error", + "clearance": "error", + "connection_width": "warning", + "copper_edge_clearance": "error", + "copper_sliver": "warning", + "courtyards_overlap": "error", + "creepage": "error", + "diff_pair_gap_out_of_range": "error", + "diff_pair_uncoupled_length_too_long": "error", + "drill_out_of_range": "error", + "duplicate_footprints": "warning", + "extra_footprint": "warning", + "footprint": "error", + "footprint_filters_mismatch": "ignore", + "footprint_symbol_mismatch": "warning", + "footprint_type_mismatch": "ignore", + "hole_clearance": "error", + "hole_to_hole": "warning", + "holes_co_located": "warning", + "invalid_outline": "error", + "isolated_copper": "warning", + "item_on_disabled_layer": "error", + "items_not_allowed": "error", + "length_out_of_range": "error", + "lib_footprint_issues": "warning", + "lib_footprint_mismatch": "warning", + "malformed_courtyard": "error", + "microvia_drill_out_of_range": "error", + "mirrored_text_on_front_layer": "warning", + "missing_courtyard": "ignore", + "missing_footprint": "warning", + "net_conflict": "warning", + "nonmirrored_text_on_back_layer": "warning", + "npth_inside_courtyard": "ignore", + "padstack": "warning", + "pth_inside_courtyard": "ignore", + "shorting_items": "error", + "silk_edge_clearance": "warning", + "silk_over_copper": "warning", + "silk_overlap": "warning", + "skew_out_of_range": "error", + "solder_mask_bridge": "error", + "starved_thermal": "error", + "text_height": "warning", + "text_on_edge_cuts": "error", + "text_thickness": "warning", + "through_hole_pad_without_hole": "error", + "too_many_vias": "error", + "track_angle": "error", + "track_dangling": "warning", + "track_segment_length": "error", + "track_width": "error", + "tracks_crossing": "error", + "unconnected_items": "error", + "unresolved_variable": "error", + "via_dangling": "warning", + "zones_intersect": "error" + }, + "rules": { + "max_error": 0.005, + "min_clearance": 0.0, + "min_connection": 0.0, + "min_copper_edge_clearance": 0.5, + "min_groove_width": 0.0, + "min_hole_clearance": 0.25, + "min_hole_to_hole": 0.25, + "min_microvia_diameter": 0.2, + "min_microvia_drill": 0.1, + "min_resolved_spokes": 2, + "min_silk_clearance": 0.0, + "min_text_height": 0.8, + "min_text_thickness": 0.08, + "min_through_hole_diameter": 0.3, + "min_track_width": 0.0, + "min_via_annular_width": 0.1, + "min_via_diameter": 0.5, + "solder_mask_to_copper_clearance": 0.0, + "use_height_for_length_calcs": true + }, + "teardrop_options": [ + { + "td_onpthpad": true, + "td_onroundshapesonly": false, + "td_onsmdpad": true, + "td_ontrackend": false, + "td_onvia": true + } + ], + "teardrop_parameters": [ + { + "td_allow_use_two_tracks": true, + "td_curve_segcount": 0, + "td_height_ratio": 1.0, + "td_length_ratio": 0.5, + "td_maxheight": 2.0, + "td_maxlen": 1.0, + "td_on_pad_in_zone": false, + "td_target_name": "td_round_shape", + "td_width_to_size_filter_ratio": 0.9 + }, + { + "td_allow_use_two_tracks": true, + "td_curve_segcount": 0, + "td_height_ratio": 1.0, + "td_length_ratio": 0.5, + "td_maxheight": 2.0, + "td_maxlen": 1.0, + "td_on_pad_in_zone": false, + "td_target_name": "td_rect_shape", + "td_width_to_size_filter_ratio": 0.9 + }, + { + "td_allow_use_two_tracks": true, + "td_curve_segcount": 0, + "td_height_ratio": 1.0, + "td_length_ratio": 0.5, + "td_maxheight": 2.0, + "td_maxlen": 1.0, + "td_on_pad_in_zone": false, + "td_target_name": "td_track_end", + "td_width_to_size_filter_ratio": 0.9 + } + ], + "track_widths": [], + "tuning_pattern_settings": { + "diff_pair_defaults": { + "corner_radius_percentage": 80, + "corner_style": 1, + "max_amplitude": 1.0, + "min_amplitude": 0.2, + "single_sided": false, + "spacing": 1.0 + }, + "diff_pair_skew_defaults": { + "corner_radius_percentage": 80, + "corner_style": 1, + "max_amplitude": 1.0, + "min_amplitude": 0.2, + "single_sided": false, + "spacing": 0.6 + }, + "single_track_defaults": { + "corner_radius_percentage": 80, + "corner_style": 1, + "max_amplitude": 1.0, + "min_amplitude": 0.2, + "single_sided": false, + "spacing": 0.6 + } + }, + "via_dimensions": [], + "zones_allow_external_fillets": false + }, + "ipc2581": { + "dist": "", + "distpn": "", + "internal_id": "", + "mfg": "", + "mpn": "" + }, + "layer_pairs": [], + "layer_presets": [], + "viewports": [] + }, + "boards": [], + "cvpcb": { + "equivalence_files": [] + }, + "libraries": { + "pinned_footprint_libs": [], + "pinned_symbol_libs": [] + }, + "meta": { + "filename": "triangle_problem.kicad_pro", + "version": 3 + }, + "net_settings": { + "classes": [ + { + "bus_width": 12, + "clearance": 0.2, + "diff_pair_gap": 0.25, + "diff_pair_via_gap": 0.25, + "diff_pair_width": 0.2, + "line_style": 0, + "microvia_diameter": 0.3, + "microvia_drill": 0.1, + "name": "Default", + "pcb_color": "rgba(0, 0, 0, 0.000)", + "priority": 2147483647, + "schematic_color": "rgba(0, 0, 0, 0.000)", + "track_width": 0.2, + "via_diameter": 0.6, + "via_drill": 0.3, + "wire_width": 6 + } + ], + "meta": { + "version": 4 + }, + "net_colors": null, + "netclass_assignments": null, + "netclass_patterns": [] + }, + "pcbnew": { + "last_paths": { + "gencad": "", + "idf": "", + "netlist": "", + "plot": "", + "pos_files": "", + "specctra_dsn": "triangle_problem.dsn", + "step": "", + "svg": "", + "vrml": "" + }, + "page_layout_descr_file": "" + }, + "schematic": { + "legacy_lib_dir": "", + "legacy_lib_list": [] + }, + "sheets": [], + "text_variables": {} +} diff --git a/tests/single_layer/triangle_problem/triangle_problem.kicad_sch b/tests/single_layer/triangle_problem/triangle_problem.kicad_sch new file mode 100644 index 0000000..e0f9328 --- /dev/null +++ b/tests/single_layer/triangle_problem/triangle_problem.kicad_sch @@ -0,0 +1,14 @@ +(kicad_sch + (version 20250114) + (generator "eeschema") + (generator_version "9.0") + (uuid 5462d403-87ca-4987-82b7-193435d95a22) + (paper "A4") + (lib_symbols) + (sheet_instances + (path "/" + (page "1") + ) + ) + (embedded_fonts no) +) \ No newline at end of file