@@ -33,7 +33,7 @@ func TestVisvalingamThreshold(t *testing.T) {
3333
3434 for _ , tc := range cases {
3535 t .Run (tc .name , func (t * testing.T ) {
36- v , im := VisvalingamThreshold (tc .threshold ).simplify (tc .ls , true )
36+ v , im := VisvalingamThreshold (tc .threshold ).simplify (tc .ls , false , true )
3737 if ! v .Equal (tc .expected ) {
3838 t .Log (v )
3939 t .Log (tc .expected )
@@ -49,6 +49,45 @@ func TestVisvalingamThreshold(t *testing.T) {
4949 }
5050}
5151
52+ func TestVisvalingamThreshold_area (t * testing.T ) {
53+ cases := []struct {
54+ name string
55+ r orb.Ring
56+ expected orb.Ring
57+ indexMap []int
58+ }{
59+ {
60+ name : "reduction" ,
61+ r : orb.Ring {{0 , 0 }, {1 , 0 }, {1 , 0.5 }, {1 , 1 }, {0.5 , 1 }, {0 , 1 }},
62+ expected : orb.Ring {{0 , 0 }, {1 , 0 }, {0 , 1 }},
63+ indexMap : []int {0 , 1 , 5 },
64+ },
65+ {
66+ name : "reduction closed" ,
67+ r : orb.Ring {{0 , 0 }, {1 , 0 }, {1 , 0.5 }, {1 , 1 }, {0.5 , 1 }, {0 , 1 }, {0 , 0 }},
68+ expected : orb.Ring {{0 , 0 }, {1 , 0 }, {1 , 1 }, {0 , 0 }},
69+ indexMap : []int {0 , 1 , 3 , 6 },
70+ },
71+ }
72+
73+ for _ , tc := range cases {
74+ t .Run (tc .name , func (t * testing.T ) {
75+ v , im := VisvalingamThreshold (10 ).simplify (orb .LineString (tc .r ), true , true )
76+ if ! v .Equal (orb .LineString (tc .expected )) {
77+ t .Log (v )
78+ t .Log (tc .expected )
79+ t .Errorf ("incorrect ring" )
80+ }
81+
82+ if ! reflect .DeepEqual (im , tc .indexMap ) {
83+ t .Log (im )
84+ t .Log (tc .indexMap )
85+ t .Errorf ("incorrect index map" )
86+ }
87+ })
88+ }
89+ }
90+
5291func TestVisvalingamKeep (t * testing.T ) {
5392 cases := []struct {
5493 name string
@@ -96,7 +135,7 @@ func TestVisvalingamKeep(t *testing.T) {
96135
97136 for _ , tc := range cases {
98137 t .Run (tc .name , func (t * testing.T ) {
99- v , im := VisvalingamKeep (tc .keep ).simplify (tc .ls , true )
138+ v , im := VisvalingamKeep (tc .keep ).simplify (tc .ls , false , true )
100139 if ! v .Equal (tc .expected ) {
101140 t .Log (v )
102141 t .Log (tc .expected )
@@ -181,7 +220,7 @@ func TestVisvalingam(t *testing.T) {
181220
182221 for _ , tc := range cases {
183222 t .Run (tc .name , func (t * testing.T ) {
184- v , im := Visvalingam (tc .threshold , tc .keep ).simplify (tc .ls , true )
223+ v , im := Visvalingam (tc .threshold , tc .keep ).simplify (tc .ls , false , true )
185224 if ! v .Equal (tc .expected ) {
186225 t .Log (v )
187226 t .Log (tc .expected )
0 commit comments