@tscircuit/rectdiff 0.0.20 → 0.0.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/.github/workflows/bun-test.yml +1 -1
  2. package/package.json +1 -1
  3. package/tests/solver/both-points-equivalent/__snapshots__/both-points-equivalent.snap.svg +44 -0
  4. package/tests/solver/both-points-equivalent/both-points-equivalent.srj.json +64 -0
  5. package/tests/solver/both-points-equivalent/both-points-equivalent.test.ts +92 -0
  6. package/tests/solver/bugreport01-be84eb/__snapshots__/bugreport01-be84eb.snap.svg +44 -0
  7. package/tests/solver/bugreport01-be84eb/bugreport01-be84eb.json +929 -0
  8. package/tests/solver/bugreport01-be84eb/bugreport01-be84eb.test.ts +93 -0
  9. package/tests/solver/bugreport02-bc4361/__snapshots__/bugreport02-bc4361.snap.svg +44 -0
  10. package/tests/solver/bugreport02-bc4361/bugreport02-bc4361.json +1276 -0
  11. package/tests/solver/bugreport02-bc4361/bugreport02-bc4361.test.ts +93 -0
  12. package/tests/solver/bugreport03-fe4a17/__snapshots__/bugreport03-fe4a17.snap.svg +44 -0
  13. package/tests/solver/bugreport03-fe4a17/bugreport03-fe4a17.json +986 -0
  14. package/tests/solver/bugreport03-fe4a17/bugreport03-fe4a17.test.ts +93 -0
  15. package/tests/solver/bugreport07-d3f3be/__snapshots__/bugreport07-d3f3be.snap.svg +44 -0
  16. package/tests/solver/bugreport07-d3f3be/bugreport07-d3f3be.json +1211 -0
  17. package/tests/solver/bugreport07-d3f3be/bugreport07-d3f3be.test.ts +93 -0
  18. package/tests/solver/bugreport08-e3ec95/__snapshots__/bugreport08-e3ec95.snap.svg +44 -0
  19. package/tests/solver/bugreport08-e3ec95/bugreport08-e3ec95.json +1511 -0
  20. package/tests/solver/bugreport08-e3ec95/bugreport08-e3ec95.test.ts +93 -0
  21. package/tests/solver/bugreport09-618e09/__snapshots__/bugreport09-618e09.snap.svg +44 -0
  22. package/tests/solver/bugreport09-618e09/bugreport09-618e09.json +2827 -0
  23. package/tests/solver/bugreport09-618e09/bugreport09-618e09.test.ts +93 -0
  24. package/tests/solver/bugreport10-71239a/__snapshots__/bugreport10-71239a.snap.svg +44 -0
  25. package/tests/solver/bugreport10-71239a/bugreport10-71239a.json +890 -0
  26. package/tests/solver/bugreport10-71239a/bugreport10-71239a.test.ts +93 -0
  27. package/tests/solver/bugreport11-b2de3c/__snapshots__/bugreport11-b2de3c.snap.svg +44 -0
  28. package/tests/solver/bugreport11-b2de3c/bugreport11-b2de3c.json +4315 -0
  29. package/tests/solver/bugreport11-b2de3c/bugreport11-b2de3c.test.ts +93 -0
  30. package/tests/solver/bugreport12-35ce1c/__snapshots__/bugreport12-35ce1c.snap.svg +44 -0
  31. package/tests/solver/bugreport12-35ce1c/bugreport12-35ce1c.json +475 -0
  32. package/tests/solver/bugreport12-35ce1c/bugreport12-35ce1c.test.ts +93 -0
  33. package/tests/solver/bugreport13-b9a758/__snapshots__/bugreport13-b9a758.snap.svg +44 -0
  34. package/tests/solver/bugreport13-b9a758/bugreport13-b9a758.json +15815 -0
  35. package/tests/solver/bugreport13-b9a758/bugreport13-b9a758.test.ts +93 -0
  36. package/tests/solver/bugreport16-d95f38/__snapshots__/bugreport16-d95f38.snap.svg +44 -0
  37. package/tests/solver/bugreport16-d95f38/bugreport16-d95f38.json +623 -0
  38. package/tests/solver/bugreport16-d95f38/bugreport16-d95f38.test.ts +93 -0
  39. package/tests/solver/bugreport18-1b2d06/__snapshots__/bugreport18-1b2d06.snap.svg +44 -0
  40. package/tests/solver/bugreport18-1b2d06/bugreport18-1b2d06.json +543 -0
  41. package/tests/solver/bugreport18-1b2d06/bugreport18-1b2d06.test.ts +93 -0
  42. package/tests/solver/bugreport19/__snapshots__/bugreport19.snap.svg +44 -0
  43. package/tests/solver/bugreport19/bugreport19.json +678 -0
  44. package/tests/solver/bugreport19/bugreport19.test.ts +93 -0
  45. package/tests/solver/bugreport20-obstacle-clipping/__snapshots__/bugreport20-obstacle-clipping.snap.svg +44 -0
  46. package/tests/solver/bugreport20-obstacle-clipping/bugreport20-obstacle-clipping.json +109 -0
  47. package/tests/solver/bugreport20-obstacle-clipping/bugreport20-obstacle-clipping.test.ts +93 -0
  48. package/tests/solver/bugreport21-board-outline/__snapshots__/bugreport21-board-outline.snap.svg +44 -0
  49. package/tests/solver/bugreport21-board-outline/bugreport21-board-outline.json +148 -0
  50. package/tests/solver/bugreport21-board-outline/bugreport21-board-outline.test.ts +93 -0
  51. package/tests/solver/bugreport22-2a75ce/__snapshots__/bugreport22-2a75ce.snap.svg +44 -0
  52. package/tests/solver/bugreport22-2a75ce/bugreport22-2a75ce.json +1550 -0
  53. package/tests/solver/bugreport22-2a75ce/bugreport22-2a75ce.test.ts +93 -0
  54. package/tests/solver/bugreport23-LGA15x4/__snapshots__/bugreport23-LGA15x4.snap.svg +44 -0
  55. package/tests/solver/bugreport23-LGA15x4/bugreport23-LGA15x4.srj.json +2401 -0
  56. package/tests/solver/bugreport23-LGA15x4/bugreport23-LGA15x4.test.ts +92 -0
  57. package/tests/solver/bugreport24-05597c/__snapshots__/bugreport24-05597c.snap.svg +44 -0
  58. package/tests/solver/bugreport24-05597c/bugreport24-05597c.json +8427 -0
  59. package/tests/solver/bugreport24-05597c/bugreport24-05597c.test.ts +93 -0
  60. package/tests/solver/bugreport25-4b1d55/__snapshots__/bugreport25-4b1d55.snap.svg +44 -0
  61. package/tests/solver/bugreport25-4b1d55/bugreport25-4b1d55.json +119 -0
  62. package/tests/solver/bugreport25-4b1d55/bugreport25-4b1d55.test.ts +93 -0
  63. package/tests/solver/bugreport26-66b0b2/__snapshots__/bugreport26-66b0b2.snap.svg +44 -0
  64. package/tests/solver/bugreport26-66b0b2/bugreport26-66b0b2.json +1651 -0
  65. package/tests/solver/bugreport26-66b0b2/bugreport26-66b0b2.test.ts +93 -0
  66. package/tests/solver/bugreport27-dd3734/__snapshots__/bugreport27-dd3734.snap.svg +44 -0
  67. package/tests/solver/bugreport27-dd3734/bugreport27-dd3734.json +4116 -0
  68. package/tests/solver/bugreport27-dd3734/bugreport27-dd3734.test.ts +93 -0
  69. package/tests/solver/bugreport28-18a9ef/__snapshots__/bugreport28-18a9ef.snap.svg +44 -0
  70. package/tests/solver/bugreport28-18a9ef/bugreport28-18a9ef.json +4116 -0
  71. package/tests/solver/bugreport28-18a9ef/bugreport28-18a9ef.test.ts +93 -0
  72. package/tests/solver/bugreport29-7deae8/__snapshots__/bugreport29-7deae8.snap.svg +44 -0
  73. package/tests/solver/bugreport29-7deae8/bugreport29-7deae8.json +4118 -0
  74. package/tests/solver/bugreport29-7deae8/bugreport29-7deae8.test.ts +93 -0
  75. package/tests/solver/bugreport30-2174c8/__snapshots__/bugreport30-2174c8.snap.svg +44 -0
  76. package/tests/solver/bugreport30-2174c8/bugreport30-2174c8.json +4007 -0
  77. package/tests/solver/bugreport30-2174c8/bugreport30-2174c8.test.ts +93 -0
  78. package/tests/solver/bugreport33-213d45/__snapshots__/bugreport33-213d45.snap.svg +44 -0
  79. package/tests/solver/bugreport33-213d45/bugreport33-213d45.json +5089 -0
  80. package/tests/solver/bugreport33-213d45/bugreport33-213d45.test.ts +93 -0
  81. package/tests/solver/bugreport34-e9dea2/__snapshots__/bugreport34-e9dea2.snap.svg +44 -0
  82. package/tests/solver/bugreport34-e9dea2/bugreport34-e9dea2.json +3924 -0
  83. package/tests/solver/bugreport34-e9dea2/bugreport34-e9dea2.test.ts +93 -0
  84. package/tests/solver/bugreport35-191db9/__snapshots__/bugreport35-191db9.snap.svg +44 -0
  85. package/tests/solver/bugreport35-191db9/bugreport35-191db9.json +4237 -0
  86. package/tests/solver/bugreport35-191db9/bugreport35-191db9.test.ts +93 -0
  87. package/tests/solver/bugreport36-bf8303/__snapshots__/bugreport36-bf8303.snap.svg +44 -0
  88. package/tests/solver/bugreport36-bf8303/bugreport36-bf8303.json +29660 -0
  89. package/tests/solver/bugreport36-bf8303/bugreport36-bf8303.test.ts +93 -0
  90. package/tests/solver/interaction/__snapshots__/interaction.snap.svg +44 -0
  91. package/tests/solver/interaction/interaction.srj.json +58 -0
  92. package/tests/solver/interaction/interaction.test.ts +92 -0
  93. package/tests/solver/multi-point/__snapshots__/multi-point.snap.svg +44 -0
  94. package/tests/solver/multi-point/multi-point.srj.json +57 -0
  95. package/tests/solver/multi-point/multi-point.test.ts +92 -0
  96. package/tests/solver/no-better-path/__snapshots__/no-better-path.snap.svg +44 -0
  97. package/tests/solver/no-better-path/no-better-path.srj.json +48 -0
  98. package/tests/solver/no-better-path/no-better-path.test.ts +92 -0
  99. package/tests/solver/offboardconnects01/__snapshots__/offboardconnects01.snap.svg +44 -0
  100. package/tests/solver/offboardconnects01/offboardconnects01.srj.json +53 -0
  101. package/tests/solver/offboardconnects01/offboardconnects01.test.ts +92 -0
  102. package/tests/solver/pcb_trace_id-should-return-root-connection-name/__snapshots__/pcb_trace_id-should-return-root-connection-name.snap.svg +44 -0
  103. package/tests/solver/pcb_trace_id-should-return-root-connection-name/pcb_trace_id-should-return-root-connection-name.srj.json +129 -0
  104. package/tests/solver/pcb_trace_id-should-return-root-connection-name/pcb_trace_id-should-return-root-connection-name.test.ts +92 -0
  105. package/tests/solver/transitivity/__snapshots__/transitivity.snap.svg +44 -0
  106. package/tests/solver/transitivity/transitivity.srj.json +64 -0
  107. package/tests/solver/transitivity/transitivity.test.ts +92 -0
@@ -0,0 +1,623 @@
1
+ {
2
+ "autorouting_bug_report_id": "d95f3897-599c-4f1b-a35a-73342e6114fb",
3
+ "reporter_account_id": "9f398687-69d0-4ef4-a48c-bb6dc990e7df",
4
+ "package_id": null,
5
+ "title": "<board#45 />",
6
+ "simple_route_json": {
7
+ "bounds": {
8
+ "maxX": 10,
9
+ "maxY": 10,
10
+ "minX": 0,
11
+ "minY": 0
12
+ },
13
+ "obstacles": [
14
+ {
15
+ "type": "rect",
16
+ "width": 0.49999899999999997,
17
+ "center": {
18
+ "x": 4.050040000000138,
19
+ "y": 3.7000280000000316
20
+ },
21
+ "height": 0.8999982,
22
+ "layers": ["top"],
23
+ "connectedTo": [
24
+ "pcb_smtpad_0",
25
+ "connectivity_net25",
26
+ "source_trace_11",
27
+ "source_port_13",
28
+ "source_trace_9",
29
+ "source_trace_8",
30
+ "source_port_11",
31
+ "source_trace_0",
32
+ "source_port_1",
33
+ "source_net_0",
34
+ "source_port_4",
35
+ "pcb_plated_hole_1",
36
+ "pcb_port_1",
37
+ "pcb_smtpad_0",
38
+ "pcb_port_4",
39
+ "pcb_smtpad_7",
40
+ "pcb_port_11",
41
+ "pcb_smtpad_9",
42
+ "pcb_port_13"
43
+ ]
44
+ },
45
+ {
46
+ "type": "rect",
47
+ "width": 0.49999899999999997,
48
+ "center": {
49
+ "x": 4.999999999999943,
50
+ "y": 3.7000280000000316
51
+ },
52
+ "height": 0.8999982,
53
+ "layers": ["top"],
54
+ "connectedTo": [
55
+ "pcb_smtpad_1",
56
+ "connectivity_net23",
57
+ "source_trace_10",
58
+ "source_port_12",
59
+ "source_trace_7",
60
+ "source_port_10",
61
+ "source_trace_4",
62
+ "source_port_5",
63
+ "source_trace_3",
64
+ "source_port_3",
65
+ "source_trace_2",
66
+ "source_port_0",
67
+ "source_net_2",
68
+ "pcb_plated_hole_0",
69
+ "pcb_port_0",
70
+ "pcb_plated_hole_3",
71
+ "pcb_port_3",
72
+ "pcb_smtpad_1",
73
+ "pcb_port_5",
74
+ "pcb_smtpad_6",
75
+ "pcb_port_10",
76
+ "pcb_smtpad_8",
77
+ "pcb_port_12"
78
+ ]
79
+ },
80
+ {
81
+ "type": "rect",
82
+ "width": 0.49999899999999997,
83
+ "center": {
84
+ "x": 5.949959999999862,
85
+ "y": 3.7000280000000316
86
+ },
87
+ "height": 0.8999982,
88
+ "layers": ["top"],
89
+ "connectedTo": [
90
+ "pcb_smtpad_2",
91
+ "connectivity_net30",
92
+ "source_trace_13",
93
+ "source_trace_12",
94
+ "source_port_14",
95
+ "source_port_6",
96
+ "source_net_3",
97
+ "pcb_smtpad_2",
98
+ "pcb_port_6",
99
+ "pcb_smtpad_10",
100
+ "pcb_port_14"
101
+ ]
102
+ },
103
+ {
104
+ "type": "rect",
105
+ "width": 0.49999899999999997,
106
+ "center": {
107
+ "x": 5.949959999999862,
108
+ "y": 6.299971999999968
109
+ },
110
+ "height": 0.8999982,
111
+ "layers": ["top"],
112
+ "connectedTo": [
113
+ "pcb_smtpad_3",
114
+ "connectivity_net62",
115
+ "source_port_7",
116
+ "pcb_smtpad_3",
117
+ "pcb_port_7"
118
+ ]
119
+ },
120
+ {
121
+ "type": "rect",
122
+ "width": 0.49999899999999997,
123
+ "center": {
124
+ "x": 4.050040000000138,
125
+ "y": 6.299971999999968
126
+ },
127
+ "height": 0.8999982,
128
+ "layers": ["top"],
129
+ "connectedTo": [
130
+ "pcb_smtpad_4",
131
+ "connectivity_net16",
132
+ "source_trace_6",
133
+ "source_trace_5",
134
+ "source_port_9",
135
+ "source_port_8",
136
+ "source_trace_1",
137
+ "source_port_2",
138
+ "source_net_1",
139
+ "pcb_plated_hole_2",
140
+ "pcb_port_2",
141
+ "pcb_smtpad_4",
142
+ "pcb_port_8",
143
+ "pcb_smtpad_5",
144
+ "pcb_port_9"
145
+ ]
146
+ },
147
+ {
148
+ "type": "rect",
149
+ "width": 0.64,
150
+ "center": {
151
+ "x": 2.4800405000001375,
152
+ "y": 5.849972899999968
153
+ },
154
+ "height": 0.54,
155
+ "layers": ["top"],
156
+ "connectedTo": [
157
+ "pcb_smtpad_5",
158
+ "connectivity_net16",
159
+ "source_trace_6",
160
+ "source_trace_5",
161
+ "source_port_9",
162
+ "source_port_8",
163
+ "source_trace_1",
164
+ "source_port_2",
165
+ "source_net_1",
166
+ "pcb_plated_hole_2",
167
+ "pcb_port_2",
168
+ "pcb_smtpad_4",
169
+ "pcb_port_8",
170
+ "pcb_smtpad_5",
171
+ "pcb_port_9"
172
+ ]
173
+ },
174
+ {
175
+ "type": "rect",
176
+ "width": 0.64,
177
+ "center": {
178
+ "x": 2.4800405000001375,
179
+ "y": 4.8299728999999685
180
+ },
181
+ "height": 0.54,
182
+ "layers": ["top"],
183
+ "connectedTo": [
184
+ "pcb_smtpad_6",
185
+ "connectivity_net23",
186
+ "source_trace_10",
187
+ "source_port_12",
188
+ "source_trace_7",
189
+ "source_port_10",
190
+ "source_trace_4",
191
+ "source_port_5",
192
+ "source_trace_3",
193
+ "source_port_3",
194
+ "source_trace_2",
195
+ "source_port_0",
196
+ "source_net_2",
197
+ "pcb_plated_hole_0",
198
+ "pcb_port_0",
199
+ "pcb_plated_hole_3",
200
+ "pcb_port_3",
201
+ "pcb_smtpad_1",
202
+ "pcb_port_5",
203
+ "pcb_smtpad_6",
204
+ "pcb_port_10",
205
+ "pcb_smtpad_8",
206
+ "pcb_port_12"
207
+ ]
208
+ },
209
+ {
210
+ "type": "rect",
211
+ "width": 0.54,
212
+ "center": {
213
+ "x": 3.8000405000001383,
214
+ "y": 1.9300289000000315
215
+ },
216
+ "height": 0.64,
217
+ "layers": ["top"],
218
+ "connectedTo": [
219
+ "pcb_smtpad_7",
220
+ "connectivity_net25",
221
+ "source_trace_11",
222
+ "source_port_13",
223
+ "source_trace_9",
224
+ "source_trace_8",
225
+ "source_port_11",
226
+ "source_trace_0",
227
+ "source_port_1",
228
+ "source_net_0",
229
+ "source_port_4",
230
+ "pcb_plated_hole_1",
231
+ "pcb_port_1",
232
+ "pcb_smtpad_0",
233
+ "pcb_port_4",
234
+ "pcb_smtpad_7",
235
+ "pcb_port_11",
236
+ "pcb_smtpad_9",
237
+ "pcb_port_13"
238
+ ]
239
+ },
240
+ {
241
+ "type": "rect",
242
+ "width": 0.54,
243
+ "center": {
244
+ "x": 4.820040500000138,
245
+ "y": 1.9300289000000315
246
+ },
247
+ "height": 0.64,
248
+ "layers": ["top"],
249
+ "connectedTo": [
250
+ "pcb_smtpad_8",
251
+ "connectivity_net23",
252
+ "source_trace_10",
253
+ "source_port_12",
254
+ "source_trace_7",
255
+ "source_port_10",
256
+ "source_trace_4",
257
+ "source_port_5",
258
+ "source_trace_3",
259
+ "source_port_3",
260
+ "source_trace_2",
261
+ "source_port_0",
262
+ "source_net_2",
263
+ "pcb_plated_hole_0",
264
+ "pcb_port_0",
265
+ "pcb_plated_hole_3",
266
+ "pcb_port_3",
267
+ "pcb_smtpad_1",
268
+ "pcb_port_5",
269
+ "pcb_smtpad_6",
270
+ "pcb_port_10",
271
+ "pcb_smtpad_8",
272
+ "pcb_port_12"
273
+ ]
274
+ },
275
+ {
276
+ "type": "rect",
277
+ "width": 0.64,
278
+ "center": {
279
+ "x": 6.410040500000138,
280
+ "y": 0.9100289000000319
281
+ },
282
+ "height": 0.54,
283
+ "layers": ["top"],
284
+ "connectedTo": [
285
+ "pcb_smtpad_9",
286
+ "connectivity_net25",
287
+ "source_trace_11",
288
+ "source_port_13",
289
+ "source_trace_9",
290
+ "source_trace_8",
291
+ "source_port_11",
292
+ "source_trace_0",
293
+ "source_port_1",
294
+ "source_net_0",
295
+ "source_port_4",
296
+ "pcb_plated_hole_1",
297
+ "pcb_port_1",
298
+ "pcb_smtpad_0",
299
+ "pcb_port_4",
300
+ "pcb_smtpad_7",
301
+ "pcb_port_11",
302
+ "pcb_smtpad_9",
303
+ "pcb_port_13"
304
+ ]
305
+ },
306
+ {
307
+ "type": "rect",
308
+ "width": 0.64,
309
+ "center": {
310
+ "x": 6.410040500000138,
311
+ "y": 1.9300289000000315
312
+ },
313
+ "height": 0.54,
314
+ "layers": ["top"],
315
+ "connectedTo": [
316
+ "pcb_smtpad_10",
317
+ "connectivity_net30",
318
+ "source_trace_13",
319
+ "source_trace_12",
320
+ "source_port_14",
321
+ "source_port_6",
322
+ "source_net_3",
323
+ "pcb_smtpad_2",
324
+ "pcb_port_6",
325
+ "pcb_smtpad_10",
326
+ "pcb_port_14"
327
+ ]
328
+ },
329
+ {
330
+ "type": "oval",
331
+ "width": 1.6,
332
+ "center": {
333
+ "x": 1,
334
+ "y": 1
335
+ },
336
+ "height": 1.6,
337
+ "layers": ["top", "inner1", "inner2", "bottom"],
338
+ "connectedTo": [
339
+ "pcb_plated_hole_0",
340
+ "connectivity_net23",
341
+ "source_trace_10",
342
+ "source_port_12",
343
+ "source_trace_7",
344
+ "source_port_10",
345
+ "source_trace_4",
346
+ "source_port_5",
347
+ "source_trace_3",
348
+ "source_port_3",
349
+ "source_trace_2",
350
+ "source_port_0",
351
+ "source_net_2",
352
+ "pcb_plated_hole_0",
353
+ "pcb_port_0",
354
+ "pcb_plated_hole_3",
355
+ "pcb_port_3",
356
+ "pcb_smtpad_1",
357
+ "pcb_port_5",
358
+ "pcb_smtpad_6",
359
+ "pcb_port_10",
360
+ "pcb_smtpad_8",
361
+ "pcb_port_12"
362
+ ]
363
+ },
364
+ {
365
+ "type": "oval",
366
+ "width": 1.6,
367
+ "center": {
368
+ "x": 1,
369
+ "y": 9
370
+ },
371
+ "height": 1.6,
372
+ "layers": ["top", "inner1", "inner2", "bottom"],
373
+ "connectedTo": [
374
+ "pcb_plated_hole_1",
375
+ "connectivity_net25",
376
+ "source_trace_11",
377
+ "source_port_13",
378
+ "source_trace_9",
379
+ "source_trace_8",
380
+ "source_port_11",
381
+ "source_trace_0",
382
+ "source_port_1",
383
+ "source_net_0",
384
+ "source_port_4",
385
+ "pcb_plated_hole_1",
386
+ "pcb_port_1",
387
+ "pcb_smtpad_0",
388
+ "pcb_port_4",
389
+ "pcb_smtpad_7",
390
+ "pcb_port_11",
391
+ "pcb_smtpad_9",
392
+ "pcb_port_13"
393
+ ]
394
+ },
395
+ {
396
+ "type": "oval",
397
+ "width": 1.6,
398
+ "center": {
399
+ "x": 9,
400
+ "y": 9
401
+ },
402
+ "height": 1.6,
403
+ "layers": ["top", "inner1", "inner2", "bottom"],
404
+ "connectedTo": [
405
+ "pcb_plated_hole_2",
406
+ "connectivity_net16",
407
+ "source_trace_6",
408
+ "source_trace_5",
409
+ "source_port_9",
410
+ "source_port_8",
411
+ "source_trace_1",
412
+ "source_port_2",
413
+ "source_net_1",
414
+ "pcb_plated_hole_2",
415
+ "pcb_port_2",
416
+ "pcb_smtpad_4",
417
+ "pcb_port_8",
418
+ "pcb_smtpad_5",
419
+ "pcb_port_9"
420
+ ]
421
+ },
422
+ {
423
+ "type": "oval",
424
+ "width": 1.6,
425
+ "center": {
426
+ "x": 9,
427
+ "y": 1
428
+ },
429
+ "height": 1.6,
430
+ "layers": ["top", "inner1", "inner2", "bottom"],
431
+ "connectedTo": [
432
+ "pcb_plated_hole_3",
433
+ "connectivity_net23",
434
+ "source_trace_10",
435
+ "source_port_12",
436
+ "source_trace_7",
437
+ "source_port_10",
438
+ "source_trace_4",
439
+ "source_port_5",
440
+ "source_trace_3",
441
+ "source_port_3",
442
+ "source_trace_2",
443
+ "source_port_0",
444
+ "source_net_2",
445
+ "pcb_plated_hole_0",
446
+ "pcb_port_0",
447
+ "pcb_plated_hole_3",
448
+ "pcb_port_3",
449
+ "pcb_smtpad_1",
450
+ "pcb_port_5",
451
+ "pcb_smtpad_6",
452
+ "pcb_port_10",
453
+ "pcb_smtpad_8",
454
+ "pcb_port_12"
455
+ ]
456
+ }
457
+ ],
458
+ "layerCount": 2,
459
+ "connections": [
460
+ {
461
+ "name": "source_trace_5",
462
+ "pointsToConnect": [
463
+ {
464
+ "x": 2.4800405000001375,
465
+ "y": 5.849972899999968,
466
+ "layer": "top",
467
+ "pointId": "pcb_port_9",
468
+ "pcb_port_id": "pcb_port_9"
469
+ },
470
+ {
471
+ "x": 4.050040000000138,
472
+ "y": 6.299971999999968,
473
+ "layer": "top",
474
+ "pointId": "pcb_port_8",
475
+ "pcb_port_id": "pcb_port_8"
476
+ }
477
+ ],
478
+ "source_trace_id": "source_trace_5"
479
+ },
480
+ {
481
+ "name": "source_trace_9",
482
+ "pointsToConnect": [
483
+ {
484
+ "x": 3.8000405000001383,
485
+ "y": 1.9300289000000315,
486
+ "layer": "top",
487
+ "pointId": "pcb_port_11",
488
+ "pcb_port_id": "pcb_port_11"
489
+ },
490
+ {
491
+ "x": 4.050040000000138,
492
+ "y": 3.7000280000000316,
493
+ "layer": "top",
494
+ "pointId": "pcb_port_4",
495
+ "pcb_port_id": "pcb_port_4"
496
+ }
497
+ ],
498
+ "source_trace_id": "source_trace_9"
499
+ },
500
+ {
501
+ "name": "source_trace_12",
502
+ "pointsToConnect": [
503
+ {
504
+ "x": 6.410040500000138,
505
+ "y": 1.9300289000000315,
506
+ "layer": "top",
507
+ "pointId": "pcb_port_14",
508
+ "pcb_port_id": "pcb_port_14"
509
+ },
510
+ {
511
+ "x": 5.949959999999862,
512
+ "y": 3.7000280000000316,
513
+ "layer": "top",
514
+ "pointId": "pcb_port_6",
515
+ "pcb_port_id": "pcb_port_6"
516
+ }
517
+ ],
518
+ "source_trace_id": "source_trace_12"
519
+ },
520
+ {
521
+ "name": "source_net_0",
522
+ "pointsToConnect": [
523
+ {
524
+ "x": 1,
525
+ "y": 9,
526
+ "layer": "top",
527
+ "pointId": "pcb_port_1",
528
+ "pcb_port_id": "pcb_port_1"
529
+ },
530
+ {
531
+ "x": 3.8000405000001383,
532
+ "y": 1.9300289000000315,
533
+ "layer": "top",
534
+ "pointId": "pcb_port_11",
535
+ "pcb_port_id": "pcb_port_11"
536
+ },
537
+ {
538
+ "x": 6.410040500000138,
539
+ "y": 0.9100289000000319,
540
+ "layer": "top",
541
+ "pointId": "pcb_port_13",
542
+ "pcb_port_id": "pcb_port_13"
543
+ }
544
+ ]
545
+ },
546
+ {
547
+ "name": "source_net_1",
548
+ "pointsToConnect": [
549
+ {
550
+ "x": 9,
551
+ "y": 9,
552
+ "layer": "top",
553
+ "pointId": "pcb_port_2",
554
+ "pcb_port_id": "pcb_port_2"
555
+ },
556
+ {
557
+ "x": 2.4800405000001375,
558
+ "y": 5.849972899999968,
559
+ "layer": "top",
560
+ "pointId": "pcb_port_9",
561
+ "pcb_port_id": "pcb_port_9"
562
+ }
563
+ ]
564
+ },
565
+ {
566
+ "name": "source_net_2",
567
+ "pointsToConnect": [
568
+ {
569
+ "x": 1,
570
+ "y": 1,
571
+ "layer": "top",
572
+ "pointId": "pcb_port_0",
573
+ "pcb_port_id": "pcb_port_0"
574
+ },
575
+ {
576
+ "x": 9,
577
+ "y": 1,
578
+ "layer": "top",
579
+ "pointId": "pcb_port_3",
580
+ "pcb_port_id": "pcb_port_3"
581
+ },
582
+ {
583
+ "x": 4.999999999999943,
584
+ "y": 3.7000280000000316,
585
+ "layer": "top",
586
+ "pointId": "pcb_port_5",
587
+ "pcb_port_id": "pcb_port_5"
588
+ },
589
+ {
590
+ "x": 2.4800405000001375,
591
+ "y": 4.8299728999999685,
592
+ "layer": "top",
593
+ "pointId": "pcb_port_10",
594
+ "pcb_port_id": "pcb_port_10"
595
+ },
596
+ {
597
+ "x": 4.820040500000138,
598
+ "y": 1.9300289000000315,
599
+ "layer": "top",
600
+ "pointId": "pcb_port_12",
601
+ "pcb_port_id": "pcb_port_12"
602
+ }
603
+ ]
604
+ },
605
+ {
606
+ "name": "source_net_3",
607
+ "pointsToConnect": [
608
+ {
609
+ "x": 6.410040500000138,
610
+ "y": 1.9300289000000315,
611
+ "layer": "top",
612
+ "pointId": "pcb_port_14",
613
+ "pcb_port_id": "pcb_port_14"
614
+ }
615
+ ]
616
+ }
617
+ ],
618
+ "minTraceWidth": 0.15
619
+ },
620
+ "circuit_json": null,
621
+ "subcircuit_id": null,
622
+ "created_at": "2025-09-11T03:49:29.844Z"
623
+ }
@@ -0,0 +1,93 @@
1
+ import { expect, test } from "bun:test"
2
+ import srj_json from "./bugreport16-d95f38.json"
3
+ import {
4
+ getBounds,
5
+ getSvgFromGraphicsObject,
6
+ mergeGraphics,
7
+ stackGraphicsVertically,
8
+ type GraphicsObject,
9
+ type Rect,
10
+ } from "graphics-debug"
11
+ import { RectDiffPipeline } from "lib/RectDiffPipeline"
12
+ import { makeCapacityMeshNodeWithLayerInfo } from "tests/fixtures/makeCapacityMeshNodeWithLayerInfo"
13
+ import { makeSimpleRouteOutlineGraphics } from "tests/fixtures/makeSimpleRouteOutlineGraphics"
14
+
15
+ const srj = srj_json.simple_route_json ?? srj_json.simpleRouteJson ?? srj_json
16
+
17
+ test("bugreport16-d95f38", async () => {
18
+ const solver = new RectDiffPipeline({
19
+ simpleRouteJson: srj,
20
+ })
21
+
22
+ const outline = makeSimpleRouteOutlineGraphics(srj)
23
+
24
+ solver.solve()
25
+
26
+ const { meshNodes } = solver.getOutput()
27
+ const rectsByCombo = makeCapacityMeshNodeWithLayerInfo(meshNodes)
28
+ const allGraphicsObjects: GraphicsObject[] = []
29
+
30
+ for (const z of Array.from({ length: srj.layerCount }, (_, index) => index)) {
31
+ const layerRects: Rect[] = []
32
+
33
+ for (const [key, rects] of rectsByCombo) {
34
+ const layers = key
35
+ .split(",")
36
+ .map((value) => Number.parseInt(value, 10))
37
+ .filter((value) => !Number.isNaN(value))
38
+
39
+ if (layers.includes(z)) {
40
+ layerRects.push(...rects)
41
+ }
42
+ }
43
+
44
+ let labelY = 0
45
+
46
+ if (layerRects.length > 0) {
47
+ let maxY = -Infinity
48
+
49
+ for (const rect of layerRects) {
50
+ const top = rect.center.y + rect.height * (2 / 3)
51
+
52
+ if (top > maxY) maxY = top
53
+ }
54
+
55
+ labelY = maxY
56
+ }
57
+
58
+ const graphics: GraphicsObject = {
59
+ title: `RectDiffPipeline - z${z}`,
60
+ texts: [
61
+ {
62
+ anchorSide: "top_right",
63
+ text: `Layer z=${z}`,
64
+ x: 0,
65
+ y: labelY,
66
+ fontSize: 0.5,
67
+ },
68
+ ],
69
+ coordinateSystem: "cartesian",
70
+ rects: layerRects,
71
+ points: [],
72
+ lines: [],
73
+ }
74
+
75
+ allGraphicsObjects.push(mergeGraphics(graphics, outline))
76
+ }
77
+
78
+ const stackedGraphics = stackGraphicsVertically(allGraphicsObjects)
79
+ const bounds = getBounds(stackedGraphics)
80
+ const boundsWidth = Math.max(1, bounds.maxX - bounds.minX)
81
+ const boundsHeight = Math.max(1, bounds.maxY - bounds.minY)
82
+ const svgWidth = 640
83
+ const svgHeight = Math.max(
84
+ svgWidth,
85
+ Math.ceil((boundsHeight / boundsWidth) * svgWidth),
86
+ )
87
+
88
+ const svg = getSvgFromGraphicsObject(stackedGraphics, {
89
+ svgWidth,
90
+ svgHeight,
91
+ })
92
+ await expect(svg).toMatchSvgSnapshot(import.meta.path)
93
+ })