@@ -10,21 +10,20 @@ namespace SixLabors.ImageSharp.Drawing.Tests.Shapes.Scan
1010{
1111 public class ScanEdgeCollectionTests
1212 {
13- private ScanEdgeCollection edges ;
14-
1513 private static MemoryAllocator MemoryAllocator => Configuration . Default . MemoryAllocator ;
1614
1715 private static readonly DebugDraw DebugDraw = new DebugDraw ( nameof ( ScanEdgeCollectionTests ) ) ;
1816
1917 private void VerifyEdge (
18+ ScanEdgeCollection edges ,
2019 float y0 ,
2120 float y1 ,
2221 ( FuzzyFloat X , FuzzyFloat Y ) arbitraryPoint ,
2322 int emit0 ,
2423 int emit1 ,
2524 bool edgeUp )
2625 {
27- foreach ( ScanEdge e in this . edges . Edges )
26+ foreach ( ScanEdge e in edges . Edges )
2827 {
2928 if ( y0 == e . Y0 && y1 == e . Y1 )
3029 {
@@ -45,6 +44,7 @@ private void VerifyEdge(
4544 }
4645
4746 [ Fact ]
47+ [ ValidateDisposedMemoryAllocations ]
4848 public void SimplePolygon_AllEmitCases ( )
4949 {
5050 // see: SimplePolygon_AllEmitCases.png
@@ -78,29 +78,29 @@ public void SimplePolygon_AllEmitCases()
7878
7979 DebugDraw . Polygon ( polygon , 1 , 100 ) ;
8080
81- this . edges = ScanEdgeCollection . Create ( polygon , MemoryAllocator , 16 ) ;
82-
83- Assert . Equal ( 19 , this . edges . Edges . Length ) ;
84-
85- this . VerifyEdge ( 1f , 2f , ( 2.5f , 1.5f ) , 1 , 2 , true ) ;
86- this . VerifyEdge ( 1f , 3f , ( 3.5f , 2f ) , 1 , 1 , false ) ;
87- this . VerifyEdge ( 1f , 3f , ( 5f , 2f ) , 1 , 1 , true ) ;
88- this . VerifyEdge ( 1f , 2f , ( 6.5f , 1.5f ) , 1 , 2 , false ) ;
89- this . VerifyEdge ( 2f , 3f , ( 8.5f , 2.5f ) , 1 , 0 , false ) ;
90- this . VerifyEdge ( 3f , 4f , ( 9f , 3.5f ) , 1 , 0 , false ) ;
91- this . VerifyEdge ( 4f , 5f , ( 9.5f , 4.5f ) , 1 , 0 , false ) ;
92- this . VerifyEdge ( 5f , 6f , ( 9.5f , 5.5f ) , 1 , 1 , false ) ;
93- this . VerifyEdge ( 6f , 7f , ( 8f , 6.5f ) , 2 , 2 , false ) ;
94- this . VerifyEdge ( 7f , 8f , ( 9f , 7.5f ) , 1 , 1 , false ) ;
95- this . VerifyEdge ( 7f , 8f , ( 6.5f , 7.5f ) , 1 , 1 , true ) ;
96- this . VerifyEdge ( 7f , 8f , ( 5.5f , 7.5f ) , 1 , 1 , false ) ;
97- this . VerifyEdge ( 7f , 8f , ( 4.5f , 7.5f ) , 1 , 1 , true ) ;
98- this . VerifyEdge ( 7f , 8f , ( 3.5f , 7.5f ) , 1 , 1 , false ) ;
99- this . VerifyEdge ( 6f , 8f , ( 2f , 7f ) , 0 , 1 , true ) ;
100- this . VerifyEdge ( 5f , 6f , ( 2.5f , 5.5f ) , 2 , 1 , true ) ;
101- this . VerifyEdge ( 4f , 5f , ( 2f , 4.5f ) , 0 , 1 , true ) ;
102- this . VerifyEdge ( 3f , 4f , ( 1.5f , 3.5f ) , 0 , 1 , true ) ;
103- this . VerifyEdge ( 2f , 3f , ( 1f , 1.5f ) , 1 , 1 , true ) ;
81+ using var edges = ScanEdgeCollection . Create ( polygon , MemoryAllocator , 16 ) ;
82+
83+ Assert . Equal ( 19 , edges . Edges . Length ) ;
84+
85+ this . VerifyEdge ( edges , 1f , 2f , ( 2.5f , 1.5f ) , 1 , 2 , true ) ;
86+ this . VerifyEdge ( edges , 1f , 3f , ( 3.5f , 2f ) , 1 , 1 , false ) ;
87+ this . VerifyEdge ( edges , 1f , 3f , ( 5f , 2f ) , 1 , 1 , true ) ;
88+ this . VerifyEdge ( edges , 1f , 2f , ( 6.5f , 1.5f ) , 1 , 2 , false ) ;
89+ this . VerifyEdge ( edges , 2f , 3f , ( 8.5f , 2.5f ) , 1 , 0 , false ) ;
90+ this . VerifyEdge ( edges , 3f , 4f , ( 9f , 3.5f ) , 1 , 0 , false ) ;
91+ this . VerifyEdge ( edges , 4f , 5f , ( 9.5f , 4.5f ) , 1 , 0 , false ) ;
92+ this . VerifyEdge ( edges , 5f , 6f , ( 9.5f , 5.5f ) , 1 , 1 , false ) ;
93+ this . VerifyEdge ( edges , 6f , 7f , ( 8f , 6.5f ) , 2 , 2 , false ) ;
94+ this . VerifyEdge ( edges , 7f , 8f , ( 9f , 7.5f ) , 1 , 1 , false ) ;
95+ this . VerifyEdge ( edges , 7f , 8f , ( 6.5f , 7.5f ) , 1 , 1 , true ) ;
96+ this . VerifyEdge ( edges , 7f , 8f , ( 5.5f , 7.5f ) , 1 , 1 , false ) ;
97+ this . VerifyEdge ( edges , 7f , 8f , ( 4.5f , 7.5f ) , 1 , 1 , true ) ;
98+ this . VerifyEdge ( edges , 7f , 8f , ( 3.5f , 7.5f ) , 1 , 1 , false ) ;
99+ this . VerifyEdge ( edges , 6f , 8f , ( 2f , 7f ) , 0 , 1 , true ) ;
100+ this . VerifyEdge ( edges , 5f , 6f , ( 2.5f , 5.5f ) , 2 , 1 , true ) ;
101+ this . VerifyEdge ( edges , 4f , 5f , ( 2f , 4.5f ) , 0 , 1 , true ) ;
102+ this . VerifyEdge ( edges , 3f , 4f , ( 1.5f , 3.5f ) , 0 , 1 , true ) ;
103+ this . VerifyEdge ( edges , 2f , 3f , ( 1f , 1.5f ) , 1 , 1 , true ) ;
104104 }
105105
106106 [ Fact ]
@@ -114,54 +114,54 @@ public void ComplexPolygon()
114114 IPath polygon = contour . Clip ( hole ) ;
115115 DebugDraw . Polygon ( polygon , 1 , 100 ) ;
116116
117- this . edges = ScanEdgeCollection . Create ( polygon , MemoryAllocator , 16 ) ;
117+ using var edges = ScanEdgeCollection . Create ( polygon , MemoryAllocator , 16 ) ;
118118
119- Assert . Equal ( 8 , this . edges . Count ) ;
119+ Assert . Equal ( 8 , edges . Count ) ;
120120
121- this . VerifyEdge ( 1 , 4 , ( 1 , 2 ) , 1 , 1 , true ) ;
122- this . VerifyEdge ( 1 , 2 , ( 4 , 1.5f ) , 1 , 2 , false ) ;
123- this . VerifyEdge ( 4 , 5 , ( 2 , 4.5f ) , 2 , 1 , true ) ;
124- this . VerifyEdge ( 2 , 5 , ( 5 , 3f ) , 1 , 1 , false ) ;
121+ this . VerifyEdge ( edges , 1 , 4 , ( 1 , 2 ) , 1 , 1 , true ) ;
122+ this . VerifyEdge ( edges , 1 , 2 , ( 4 , 1.5f ) , 1 , 2 , false ) ;
123+ this . VerifyEdge ( edges , 4 , 5 , ( 2 , 4.5f ) , 2 , 1 , true ) ;
124+ this . VerifyEdge ( edges , 2 , 5 , ( 5 , 3f ) , 1 , 1 , false ) ;
125125
126- this . VerifyEdge ( 2 , 3 , ( 2 , 2.5f ) , 2 , 2 , false ) ;
127- this . VerifyEdge ( 2 , 3 , ( 3.5f , 2.5f ) , 2 , 1 , true ) ;
128- this . VerifyEdge ( 3 , 4 , ( 3 , 3.5f ) , 1 , 2 , false ) ;
129- this . VerifyEdge ( 3 , 4 , ( 4 , 3.5f ) , 0 , 2 , true ) ;
126+ this . VerifyEdge ( edges , 2 , 3 , ( 2 , 2.5f ) , 2 , 2 , false ) ;
127+ this . VerifyEdge ( edges , 2 , 3 , ( 3.5f , 2.5f ) , 2 , 1 , true ) ;
128+ this . VerifyEdge ( edges , 3 , 4 , ( 3 , 3.5f ) , 1 , 2 , false ) ;
129+ this . VerifyEdge ( edges , 3 , 4 , ( 4 , 3.5f ) , 0 , 2 , true ) ;
130130 }
131131
132132 [ Fact ]
133133 public void NumericCornerCase_C ( )
134134 {
135- this . edges = ScanEdgeCollection . Create ( NumericCornerCasePolygons . C , MemoryAllocator , 4 ) ;
136- Assert . Equal ( 2 , this . edges . Count ) ;
137- this . VerifyEdge ( 3.5f , 4f , ( 2f , 3.75f ) , 1 , 1 , true ) ;
138- this . VerifyEdge ( 3.5f , 4f , ( 8f , 3.75f ) , 1 , 1 , false ) ;
135+ using var edges = ScanEdgeCollection . Create ( NumericCornerCasePolygons . C , MemoryAllocator , 4 ) ;
136+ Assert . Equal ( 2 , edges . Count ) ;
137+ this . VerifyEdge ( edges , 3.5f , 4f , ( 2f , 3.75f ) , 1 , 1 , true ) ;
138+ this . VerifyEdge ( edges , 3.5f , 4f , ( 8f , 3.75f ) , 1 , 1 , false ) ;
139139 }
140140
141141 [ Fact ]
142142 public void NumericCornerCase_D ( )
143143 {
144- this . edges = ScanEdgeCollection . Create ( NumericCornerCasePolygons . D , MemoryAllocator , 4 ) ;
145- Assert . Equal ( 5 , this . edges . Count ) ;
144+ using var edges = ScanEdgeCollection . Create ( NumericCornerCasePolygons . D , MemoryAllocator , 4 ) ;
145+ Assert . Equal ( 5 , edges . Count ) ;
146146
147- this . VerifyEdge ( 3.25f , 4f , ( 12f , 3.75f ) , 1 , 1 , true ) ;
148- this . VerifyEdge ( 3.25f , 3.5f , ( 15f , 3.375f ) , 1 , 0 , false ) ;
149- this . VerifyEdge ( 3.5f , 4f , ( 18f , 3.75f ) , 1 , 1 , false ) ;
147+ this . VerifyEdge ( edges , 3.25f , 4f , ( 12f , 3.75f ) , 1 , 1 , true ) ;
148+ this . VerifyEdge ( edges , 3.25f , 3.5f , ( 15f , 3.375f ) , 1 , 0 , false ) ;
149+ this . VerifyEdge ( edges , 3.5f , 4f , ( 18f , 3.75f ) , 1 , 1 , false ) ;
150150
151151 // TODO: verify 2 more edges
152152 }
153153
154154 [ Fact ]
155155 public void NumericCornerCase_H_ShouldCollapseNearZeroEdge ( )
156156 {
157- this . edges = ScanEdgeCollection . Create ( NumericCornerCasePolygons . H , MemoryAllocator , 4 ) ;
157+ using var edges = ScanEdgeCollection . Create ( NumericCornerCasePolygons . H , MemoryAllocator , 4 ) ;
158158
159- Assert . Equal ( 3 , this . edges . Count ) ;
160- this . VerifyEdge ( 1.75f , 2f , ( 15f , 1.875f ) , 1 , 1 , true ) ;
161- this . VerifyEdge ( 1.75f , 2.25f , ( 16f , 2f ) , 1 , 1 , false ) ;
159+ Assert . Equal ( 3 , edges . Count ) ;
160+ this . VerifyEdge ( edges , 1.75f , 2f , ( 15f , 1.875f ) , 1 , 1 , true ) ;
161+ this . VerifyEdge ( edges , 1.75f , 2.25f , ( 16f , 2f ) , 1 , 1 , false ) ;
162162
163163 // this places two dummy points:
164- this . VerifyEdge ( 2f , 2.25f , ( 15f , 2.125f ) , 2 , 1 , true ) ;
164+ this . VerifyEdge ( edges , 2f , 2.25f , ( 15f , 2.125f ) , 2 , 1 , true ) ;
165165 }
166166
167167 private static FuzzyFloat F ( float value , float eps ) => new FuzzyFloat ( value , eps ) ;
0 commit comments