From 64f442908ec0f5725155d2144ee2dfebbd6e7890 Mon Sep 17 00:00:00 2001 From: Paul Mach Date: Fri, 6 Jan 2023 10:50:22 -0800 Subject: [PATCH] lint tests: check all errors --- encoding/ewkb/ewkb_test.go | 17 ++- encoding/internal/wkbcommon/wkb_test.go | 5 +- encoding/mvt/example_test.go | 9 +- encoding/mvt/marshal_test.go | 10 +- encoding/wkb/wkb_test.go | 15 +- geojson/example_pointer_test.go | 11 +- geojson/example_test.go | 19 ++- geojson/geometry_test.go | 10 +- maptile/tilecover/benchmarks_test.go | 50 +++++-- maptile/tilecover/helpers_test.go | 5 +- quadtree/benchmarks_test.go | 45 ++++-- quadtree/example_test.go | 20 ++- quadtree/quadtree_test.go | 184 +++++++++++++++++------- simplify/benchmarks_test.go | 13 +- simplify/helpers.go | 16 --- 15 files changed, 314 insertions(+), 115 deletions(-) diff --git a/encoding/ewkb/ewkb_test.go b/encoding/ewkb/ewkb_test.go index 0abfcba..a6eea3f 100644 --- a/encoding/ewkb/ewkb_test.go +++ b/encoding/ewkb/ewkb_test.go @@ -13,7 +13,10 @@ import ( func TestMarshal(t *testing.T) { for _, g := range orb.AllGeometries { - Marshal(g, 0, binary.BigEndian) + _, err := Marshal(g, 0, binary.BigEndian) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } } } @@ -39,7 +42,10 @@ func BenchmarkEncode_Point(b *testing.B) { b.ReportAllocs() b.ResetTimer() for i := 0; i < b.N; i++ { - e.Encode(g) + err := e.Encode(g) + if err != nil { + b.Fatalf("unexpected error: %v", err) + } } } @@ -53,7 +59,10 @@ func BenchmarkEncode_LineString(b *testing.B) { b.ReportAllocs() b.ResetTimer() for i := 0; i < b.N; i++ { - e.Encode(g) + err := e.Encode(g) + if err != nil { + b.Fatalf("unexpected error: %v", err) + } } } @@ -129,7 +138,7 @@ func compare(t testing.TB, e orb.Geometry, s int, b []byte) { // pass in srid buf.Reset() en.SetSRID(10101) - en.Encode(e, s) + err = en.Encode(e, s) if err != nil { t.Errorf("encode with srid error: %v", err) } diff --git a/encoding/internal/wkbcommon/wkb_test.go b/encoding/internal/wkbcommon/wkb_test.go index b872ca0..6a06ee3 100644 --- a/encoding/internal/wkbcommon/wkb_test.go +++ b/encoding/internal/wkbcommon/wkb_test.go @@ -10,7 +10,10 @@ import ( func TestMarshal(t *testing.T) { for _, g := range orb.AllGeometries { - Marshal(g, 0, binary.BigEndian) + _, err := Marshal(g, 0, binary.BigEndian) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } } } diff --git a/encoding/mvt/example_test.go b/encoding/mvt/example_test.go index a2a5901..a5fb1a5 100644 --- a/encoding/mvt/example_test.go +++ b/encoding/mvt/example_test.go @@ -27,14 +27,19 @@ func ExampleMarshal() { // encoding using the Mapbox Vector Tile protobuf encoding. data, err := mvt.Marshal(layers) // this data is NOT gzipped. + _ = data + + // error checking + if err != nil { + log.Fatalf("marshal error: %v", err) + } // Sometimes MVT data is stored and transferred gzip compressed. In that case: data, err = mvt.MarshalGzipped(layers) + _ = data // error checking if err != nil { log.Fatalf("marshal error: %v", err) } - - _ = data } diff --git a/encoding/mvt/marshal_test.go b/encoding/mvt/marshal_test.go index f92c3f9..2ad2d44 100644 --- a/encoding/mvt/marshal_test.go +++ b/encoding/mvt/marshal_test.go @@ -558,7 +558,10 @@ func BenchmarkMarshal(b *testing.B) { b.ResetTimer() for i := 0; i < b.N; i++ { - Marshal(layers) + _, err := Marshal(layers) + if err != nil { + b.Fatalf("unexpected error: %v", err) + } } } @@ -573,7 +576,10 @@ func BenchmarkUnmarshal(b *testing.B) { b.ResetTimer() for i := 0; i < b.N; i++ { - Unmarshal(data) + _, err := Unmarshal(data) + if err != nil { + b.Fatalf("unexpected error: %v", err) + } } } diff --git a/encoding/wkb/wkb_test.go b/encoding/wkb/wkb_test.go index 30d242c..9bf6353 100644 --- a/encoding/wkb/wkb_test.go +++ b/encoding/wkb/wkb_test.go @@ -12,7 +12,10 @@ import ( func TestMarshal(t *testing.T) { for _, g := range orb.AllGeometries { - Marshal(g, binary.BigEndian) + _, err := Marshal(g, binary.BigEndian) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } } } @@ -29,7 +32,10 @@ func BenchmarkEncode_Point(b *testing.B) { b.ReportAllocs() b.ResetTimer() for i := 0; i < b.N; i++ { - e.Encode(g) + err := e.Encode(g) + if err != nil { + b.Fatalf("unexpected error: %v", err) + } } } @@ -43,7 +49,10 @@ func BenchmarkEncode_LineString(b *testing.B) { b.ReportAllocs() b.ResetTimer() for i := 0; i < b.N; i++ { - e.Encode(g) + err := e.Encode(g) + if err != nil { + b.Fatalf("unexpected error: %v", err) + } } } diff --git a/geojson/example_pointer_test.go b/geojson/example_pointer_test.go index 50f2cbf..b27a0fd 100644 --- a/geojson/example_pointer_test.go +++ b/geojson/example_pointer_test.go @@ -2,6 +2,7 @@ package geojson_test import ( "fmt" + "log" "github.com/paulmach/orb" "github.com/paulmach/orb/geojson" @@ -26,12 +27,18 @@ func Example_centroid() { // feature with center {0.5, 0.5} but centroid {0.25, 0.25} f := geojson.NewFeature(orb.MultiPoint{{0, 0}, {0, 0}, {0, 0}, {1, 1}}) f.Properties["centroid"] = "0.25" - qt.Add(CentroidPoint{f}) + err := qt.Add(CentroidPoint{f}) + if err != nil { + log.Fatalf("unexpected error: %v", err) + } // feature with centroid {0.6, 0.6} f = geojson.NewFeature(orb.Point{0.6, 0.6}) f.Properties["centroid"] = "0.6" - qt.Add(CentroidPoint{f}) + err = qt.Add(CentroidPoint{f}) + if err != nil { + log.Fatalf("unexpected error: %v", err) + } feature := qt.Find(orb.Point{0.5, 0.5}).(CentroidPoint).Feature fmt.Printf("centroid=%s", feature.Properties["centroid"]) diff --git a/geojson/example_test.go b/geojson/example_test.go index 7282b3a..2f0ef0e 100644 --- a/geojson/example_test.go +++ b/geojson/example_test.go @@ -15,7 +15,10 @@ func ExampleFeature_Point() { f.Properties["key"] = "value" qt := quadtree.New(f.Geometry.Bound().Pad(1)) - qt.Add(f) // add the feature to a quadtree + err := qt.Add(f) // add the feature to a quadtree + if err != nil { + log.Fatalf("unexpected error: %v", err) + } // type assert the feature back into a Feature from // the orb.Pointer interface. @@ -39,7 +42,10 @@ func ExampleFeatureCollection_foreignMembers() { }`) fc := geojson.NewFeatureCollection() - json.Unmarshal(rawJSON, &fc) + err := json.Unmarshal(rawJSON, &fc) + if err != nil { + log.Fatalf("invalid json: %v", err) + } fmt.Println(fc.Features[0].Geometry) fmt.Println(fc.ExtraMembers["title"]) @@ -90,7 +96,10 @@ func ExampleFeatureCollection_foreignMembersCustom() { }`) fc := &MyFeatureCollection{} - json.Unmarshal(rawJSON, &fc) + err := json.Unmarshal(rawJSON, &fc) + if err != nil { + log.Fatalf("invalid json: %v", err) + } fmt.Println(fc.FeatureCollection.Features[0].Geometry) fmt.Println(fc.Features[0].Geometry) @@ -151,13 +160,13 @@ func ExampleFeatureCollection_MarshalJSON() { fc := geojson.NewFeatureCollection() fc.Append(geojson.NewFeature(orb.Point{1, 2})) - data, err := fc.MarshalJSON() + _, err := fc.MarshalJSON() if err != nil { log.Fatalf("marshal error: %v", err) } // standard lib encoding/json package will also work - data, err = json.MarshalIndent(fc, "", " ") + data, err := json.MarshalIndent(fc, "", " ") if err != nil { log.Fatalf("marshal error: %v", err) } diff --git a/geojson/geometry_test.go b/geojson/geometry_test.go index 8201655..f92b50c 100644 --- a/geojson/geometry_test.go +++ b/geojson/geometry_test.go @@ -356,7 +356,10 @@ func BenchmarkGeometryMarshalJSON(b *testing.B) { b.ReportAllocs() b.ResetTimer() for i := 0; i < b.N; i++ { - g.MarshalJSON() + _, err := g.MarshalJSON() + if err != nil { + b.Fatalf("unexpected error: %v", err) + } } } @@ -375,6 +378,9 @@ func BenchmarkGeometryUnmarshalJSON(b *testing.B) { b.ReportAllocs() b.ResetTimer() for i := 0; i < b.N; i++ { - g.UnmarshalJSON(data) + err := g.UnmarshalJSON(data) + if err != nil { + b.Fatalf("unexpected error: %v", err) + } } } diff --git a/maptile/tilecover/benchmarks_test.go b/maptile/tilecover/benchmarks_test.go index 2ab15aa..c71a381 100644 --- a/maptile/tilecover/benchmarks_test.go +++ b/maptile/tilecover/benchmarks_test.go @@ -12,7 +12,10 @@ func BenchmarkPoint(b *testing.B) { b.ReportAllocs() b.ResetTimer() for i := 0; i < b.N; i++ { - Geometry(p, 6) + _, err := Geometry(p, 6) + if err != nil { + b.Fatalf("unexpected error: %v", err) + } } } @@ -22,7 +25,10 @@ func BenchmarkRoad_z6(b *testing.B) { b.ReportAllocs() b.ResetTimer() for i := 0; i < b.N; i++ { - Geometry(g, 6) + _, err := Geometry(g, 6) + if err != nil { + b.Fatalf("unexpected error: %v", err) + } } } @@ -32,7 +38,10 @@ func BenchmarkRoad_z18(b *testing.B) { b.ReportAllocs() b.ResetTimer() for i := 0; i < b.N; i++ { - Geometry(g, 18) + _, err := Geometry(g, 18) + if err != nil { + b.Fatalf("unexpected error: %v", err) + } } } @@ -42,7 +51,10 @@ func BenchmarkRoad_z28(b *testing.B) { b.ReportAllocs() b.ResetTimer() for i := 0; i < b.N; i++ { - Geometry(g, 28) + _, err := Geometry(g, 28) + if err != nil { + b.Fatalf("unexpected error: %v", err) + } } } @@ -52,7 +64,10 @@ func BenchmarkRussia_z6(b *testing.B) { b.ReportAllocs() b.ResetTimer() for i := 0; i < b.N; i++ { - Geometry(g, 6) + _, err := Geometry(g, 6) + if err != nil { + b.Fatalf("unexpected error: %v", err) + } } } @@ -62,7 +77,10 @@ func BenchmarkRussia_z8(b *testing.B) { b.ReportAllocs() b.ResetTimer() for i := 0; i < b.N; i++ { - Geometry(g, 8) + _, err := Geometry(g, 8) + if err != nil { + b.Fatalf("unexpected error: %v", err) + } } } @@ -72,7 +90,10 @@ func BenchmarkRussia_z10(b *testing.B) { b.ReportAllocs() b.ResetTimer() for i := 0; i < b.N; i++ { - Geometry(g, 10) + _, err := Geometry(g, 10) + if err != nil { + b.Fatalf("unexpected error: %v", err) + } } } @@ -94,7 +115,10 @@ func BenchmarkRussiaLine_z6(b *testing.B) { b.ReportAllocs() b.ResetTimer() for i := 0; i < b.N; i++ { - Geometry(g, 6) + _, err := Geometry(g, 6) + if err != nil { + b.Fatalf("unexpected error: %v", err) + } } } @@ -105,7 +129,10 @@ func BenchmarkRussiaLine_z8(b *testing.B) { b.ReportAllocs() b.ResetTimer() for i := 0; i < b.N; i++ { - Geometry(g, 8) + _, err := Geometry(g, 8) + if err != nil { + b.Fatalf("unexpected error: %v", err) + } } } @@ -116,6 +143,9 @@ func BenchmarkRussiaLine_z10(b *testing.B) { b.ReportAllocs() b.ResetTimer() for i := 0; i < b.N; i++ { - Geometry(g, 10) + _, err := Geometry(g, 10) + if err != nil { + b.Fatalf("unexpected error: %v", err) + } } } diff --git a/maptile/tilecover/helpers_test.go b/maptile/tilecover/helpers_test.go index ba6def1..6b61a60 100644 --- a/maptile/tilecover/helpers_test.go +++ b/maptile/tilecover/helpers_test.go @@ -8,6 +8,9 @@ import ( func TestGeometry(t *testing.T) { for _, g := range orb.AllGeometries { - Geometry(g, 1) + _, err := Geometry(g, 1) + if err != nil { + t.Fatalf("unexpected error for %T: %v", g, err) + } } } diff --git a/quadtree/benchmarks_test.go b/quadtree/benchmarks_test.go index 908c486..ea6b493 100644 --- a/quadtree/benchmarks_test.go +++ b/quadtree/benchmarks_test.go @@ -16,7 +16,10 @@ func BenchmarkAdd(b *testing.B) { b.ReportAllocs() b.ResetTimer() for i := 0; i < b.N; i++ { - qt.Add(orb.Point{r.Float64(), r.Float64()}) + err := qt.Add(orb.Point{r.Float64(), r.Float64()}) + if err != nil { + b.Fatalf("unexpected error: %v", err) + } } } @@ -25,7 +28,10 @@ func BenchmarkRandomFind1000(b *testing.B) { qt := New(orb.Bound{Min: orb.Point{0, 0}, Max: orb.Point{1, 1}}) for i := 0; i < 1000; i++ { - qt.Add(orb.Point{r.Float64(), r.Float64()}) + err := qt.Add(orb.Point{r.Float64(), r.Float64()}) + if err != nil { + b.Fatalf("unexpected error: %v", err) + } } b.ReportAllocs() @@ -44,7 +50,10 @@ func BenchmarkRandomFind1000Naive(b *testing.B) { for i := 0; i < 1000; i++ { p := orb.Point{r.Float64(), r.Float64()} - qt.Add(p) + err := qt.Add(p) + if err != nil { + b.Fatalf("unexpected error: %v", err) + } points = append(points, p) } @@ -71,7 +80,11 @@ func BenchmarkRandomInBound1000(b *testing.B) { qt := New(orb.Bound{Min: orb.Point{0, 0}, Max: orb.Point{1, 1}}) for i := 0; i < 1000; i++ { - qt.Add(orb.Point{r.Float64(), r.Float64()}) + p := orb.Point{r.Float64(), r.Float64()} + err := qt.Add(p) + if err != nil { + b.Fatalf("unexpected error for %v: %v", p, err) + } } b.ReportAllocs() @@ -91,7 +104,11 @@ func BenchmarkRandomInBound1000Naive(b *testing.B) { for i := 0; i < 1000; i++ { p := orb.Point{r.Float64(), r.Float64()} - qt.Add(p) + err := qt.Add(p) + if err != nil { + b.Fatalf("unexpected error for %v: %v", p, err) + } + points = append(points, p) } @@ -120,7 +137,11 @@ func BenchmarkRandomInBound1000Buf(b *testing.B) { qt := New(orb.Bound{Min: orb.Point{0, 0}, Max: orb.Point{1, 1}}) for i := 0; i < 1000; i++ { - qt.Add(orb.Point{r.Float64(), r.Float64()}) + p := orb.Point{r.Float64(), r.Float64()} + err := qt.Add(p) + if err != nil { + b.Fatalf("unexpected error for %v: %v", p, err) + } } var buf []orb.Pointer @@ -137,7 +158,11 @@ func BenchmarkRandomKNearest10(b *testing.B) { qt := New(orb.Bound{Min: orb.Point{0, 0}, Max: orb.Point{1, 1}}) for i := 0; i < 1000; i++ { - qt.Add(orb.Point{r.Float64(), r.Float64()}) + p := orb.Point{r.Float64(), r.Float64()} + err := qt.Add(p) + if err != nil { + b.Fatalf("unexpected error for %v: %v", p, err) + } } buf := make([]orb.Pointer, 0, 10) @@ -154,7 +179,11 @@ func BenchmarkRandomKNearest100(b *testing.B) { qt := New(orb.Bound{Min: orb.Point{0, 0}, Max: orb.Point{1, 1}}) for i := 0; i < 1000; i++ { - qt.Add(orb.Point{r.Float64(), r.Float64()}) + p := orb.Point{r.Float64(), r.Float64()} + err := qt.Add(p) + if err != nil { + b.Fatalf("unexpected error for %v: %v", p, err) + } } buf := make([]orb.Pointer, 0, 100) diff --git a/quadtree/example_test.go b/quadtree/example_test.go index 8a891a1..5e50e7c 100644 --- a/quadtree/example_test.go +++ b/quadtree/example_test.go @@ -15,7 +15,10 @@ func ExampleQuadtree_Find() { // add 1000 random points for i := 0; i < 1000; i++ { - qt.Add(orb.Point{r.Float64(), r.Float64()}) + err := qt.Add(orb.Point{r.Float64(), r.Float64()}) + if err != nil { + panic(err) + } } nearest := qt.Find(orb.Point{0.5, 0.5}) @@ -37,10 +40,16 @@ func ExampleQuadtree_Matching() { // add 100 random points for i := 0; i < 100; i++ { - qt.Add(dataPoint{orb.Point{r.Float64(), r.Float64()}, false}) + err := qt.Add(dataPoint{orb.Point{r.Float64(), r.Float64()}, false}) + if err != nil { + panic(err) + } } - qt.Add(dataPoint{orb.Point{0, 0}, true}) + err := qt.Add(dataPoint{orb.Point{0, 0}, true}) + if err != nil { + panic(err) + } nearest := qt.Matching( orb.Point{0.5, 0.5}, @@ -60,7 +69,10 @@ func ExampleQuadtree_InBound() { // add 1000 random points for i := 0; i < 1000; i++ { - qt.Add(orb.Point{r.Float64(), r.Float64()}) + err := qt.Add(orb.Point{r.Float64(), r.Float64()}) + if err != nil { + panic(err) + } } bounded := qt.InBound(nil, orb.Point{0.5, 0.5}.Bound().Pad(0.05)) diff --git a/quadtree/quadtree_test.go b/quadtree/quadtree_test.go index e443615..965fdf3 100644 --- a/quadtree/quadtree_test.go +++ b/quadtree/quadtree_test.go @@ -26,7 +26,10 @@ func TestQuadtreeAdd(t *testing.T) { qt := New(orb.Bound{Min: orb.Point{0, 0}, Max: orb.Point{1, 1}}) for i := 0; i < 10; i++ { // should be able to insert the same point over and over. - qt.Add(p) + err := qt.Add(p) + if err != nil { + t.Fatalf("unexpected error for %v: %v", p, err) + } } } @@ -37,7 +40,10 @@ func TestQuadtreeRemove(t *testing.T) { mp := orb.MultiPoint{} for i := 0; i < 1000; i++ { mp = append(mp, orb.Point{r.Float64(), r.Float64()}) - qt.Add(mp[i]) + err := qt.Add(mp[i]) + if err != nil { + t.Fatalf("unexpected error for %v: %v", mp[i], err) + } } for i := 0; i < 1000; i += 3 { @@ -81,9 +87,18 @@ func TestQuadtreeRemoveAndAdd_inOrder(t *testing.T) { p2 := &PExtra{p: orb.Point{p1.p[0], p1.p[1]}, id: "2"} p3 := &PExtra{p: orb.Point{p1.p[0], p1.p[1]}, id: "3"} - qt.Add(p1) - qt.Add(p2) - qt.Add(p3) + err := qt.Add(p1) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + err = qt.Add(p2) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + err = qt.Add(p3) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } // rm 3 found := qt.Remove(p3, func(p orb.Pointer) bool { @@ -143,9 +158,18 @@ func TestQuadtreeRemoveAndAdd_sameLoc(t *testing.T) { p4 := &PExtra{p: orb.Point{p1.p[0], p1.p[1]}, id: "4"} p5 := &PExtra{p: orb.Point{p1.p[0], p1.p[1]}, id: "5"} - qt.Add(p1) - qt.Add(p2) - qt.Add(p3) + err := qt.Add(p1) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + err = qt.Add(p2) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + err = qt.Add(p3) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } // remove middle point found := qt.Remove(p2, func(p orb.Pointer) bool { @@ -172,7 +196,10 @@ func TestQuadtreeRemoveAndAdd_sameLoc(t *testing.T) { } // add a 4th point - qt.Add(p4) + err = qt.Add(p4) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } // remove third point found = qt.Remove(p3, func(p orb.Pointer) bool { @@ -187,7 +214,10 @@ func TestQuadtreeRemoveAndAdd_sameLoc(t *testing.T) { } // add a 5th point - qt.Add(p5) + err = qt.Add(p5) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } // remove the 5th point found = qt.Remove(p5, func(p orb.Pointer) bool { @@ -203,7 +233,10 @@ func TestQuadtreeRemoveAndAdd_sameLoc(t *testing.T) { } // add a 3th point again - qt.Add(p3) + err = qt.Add(p3) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } // should reuse the tail point left by p5 if c := countNodes(qt.root); c != 2 { @@ -236,7 +269,10 @@ func TestQuadtreeRemoveAndAdd_sameLoc(t *testing.T) { } // add back a point to be put in the root - qt.Add(p3) + err = qt.Add(p3) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } if c := countNodes(qt.root); c != 1 { t.Errorf("incorrect number of nodes: %v != 1", c) @@ -262,7 +298,12 @@ func TestQuadtreeRemoveAndAdd_random(t *testing.T) { y := r.Int63n(30) id++ p := &PExtra{p: orb.Point{float64(x), float64(y)}, id: fmt.Sprintf("%d", id)} - qt.Add(p) + + err := qt.Add(p) + if err != nil { + t.Fatalf("unexpected error for %v: %v", p, err) + } + points = append(points, p) } @@ -294,7 +335,10 @@ func TestQuadtreeFind(t *testing.T) { qt := New(points.Bound()) for _, p := range points { - qt.Add(p) + err := qt.Add(p) + if err != nil { + t.Fatalf("unexpected error for %v: %v", p, err) + } } cases := []struct { @@ -322,7 +366,10 @@ func TestQuadtreeFind_Random(t *testing.T) { mp := orb.MultiPoint{} for i := 0; i < 1000; i++ { mp = append(mp, orb.Point{r.Float64(), r.Float64()}) - qt.Add(mp[i]) + err := qt.Add(mp[i]) + if err != nil { + t.Fatalf("unexpected error for %v: %v", mp[i], err) + } } for i := 0; i < 1000; i++ { @@ -344,8 +391,14 @@ func TestQuadtreeMatching(t *testing.T) { } qt := New(orb.Bound{Min: orb.Point{0, 0}, Max: orb.Point{1, 1}}) - qt.Add(dataPointer{orb.Point{0, 0}, false}) - qt.Add(dataPointer{orb.Point{1, 1}, true}) + err := qt.Add(dataPointer{orb.Point{0, 0}, false}) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + err = qt.Add(dataPointer{orb.Point{1, 1}, true}) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } cases := []struct { name string @@ -396,12 +449,22 @@ func TestQuadtreeKNearest(t *testing.T) { } q := New(orb.Bound{Max: orb.Point{5, 5}}) - q.Add(dataPointer{orb.Point{0, 0}, false}) - q.Add(dataPointer{orb.Point{1, 1}, true}) - q.Add(dataPointer{orb.Point{2, 2}, false}) - q.Add(dataPointer{orb.Point{3, 3}, true}) - q.Add(dataPointer{orb.Point{4, 4}, false}) - q.Add(dataPointer{orb.Point{5, 5}, true}) + + pointers := []dataPointer{ + {orb.Point{0, 0}, false}, + {orb.Point{1, 1}, true}, + {orb.Point{2, 2}, false}, + {orb.Point{3, 3}, true}, + {orb.Point{4, 4}, false}, + {orb.Point{5, 5}, true}, + } + + for _, p := range pointers { + err := q.Add(p) + if err != nil { + t.Fatalf("unexpected error for %v: %v", p, err) + } + } filters := map[bool]FilterFunc{ false: nil, @@ -466,12 +529,12 @@ func TestQuadtreeKNearest(t *testing.T) { func TestQuadtreeKNearest_sorted(t *testing.T) { q := New(orb.Bound{Max: orb.Point{5, 5}}) - q.Add(orb.Point{0, 0}) - q.Add(orb.Point{1, 1}) - q.Add(orb.Point{2, 2}) - q.Add(orb.Point{3, 3}) - q.Add(orb.Point{4, 4}) - q.Add(orb.Point{5, 5}) + for i := 0; i <= 5; i++ { + err := q.Add(orb.Point{float64(i), float64(i)}) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + } nearest := q.KNearest(nil, orb.Point{2.25, 2.25}, 5) @@ -485,14 +548,12 @@ func TestQuadtreeKNearest_sorted(t *testing.T) { func TestQuadtreeKNearest_sorted2(t *testing.T) { q := New(orb.Bound{Max: orb.Point{8, 8}}) - q.Add(orb.Point{0, 0}) - q.Add(orb.Point{1, 1}) - q.Add(orb.Point{2, 2}) - q.Add(orb.Point{3, 3}) - q.Add(orb.Point{4, 4}) - q.Add(orb.Point{5, 5}) - q.Add(orb.Point{6, 6}) - q.Add(orb.Point{7, 7}) + for i := 0; i <= 7; i++ { + err := q.Add(orb.Point{float64(i), float64(i)}) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + } nearest := q.KNearest(nil, orb.Point{5.25, 5.25}, 3) @@ -511,12 +572,22 @@ func TestQuadtreeKNearest_DistanceLimit(t *testing.T) { } q := New(orb.Bound{Max: orb.Point{5, 5}}) - q.Add(dataPointer{orb.Point{0, 0}, false}) - q.Add(dataPointer{orb.Point{1, 1}, true}) - q.Add(dataPointer{orb.Point{2, 2}, false}) - q.Add(dataPointer{orb.Point{3, 3}, true}) - q.Add(dataPointer{orb.Point{4, 4}, false}) - q.Add(dataPointer{orb.Point{5, 5}, true}) + + pointers := []dataPointer{ + {orb.Point{0, 0}, false}, + {orb.Point{1, 1}, true}, + {orb.Point{2, 2}, false}, + {orb.Point{3, 3}, true}, + {orb.Point{4, 4}, false}, + {orb.Point{5, 5}, true}, + } + + for _, p := range pointers { + err := q.Add(p) + if err != nil { + t.Fatalf("unexpected error for %v: %v", p, err) + } + } filters := map[bool]FilterFunc{ false: nil, @@ -583,12 +654,22 @@ func TestQuadtreeInBoundMatching(t *testing.T) { } q := New(orb.Bound{Max: orb.Point{5, 5}}) - q.Add(dataPointer{orb.Point{0, 0}, false}) - q.Add(dataPointer{orb.Point{1, 1}, true}) - q.Add(dataPointer{orb.Point{2, 2}, false}) - q.Add(dataPointer{orb.Point{3, 3}, true}) - q.Add(dataPointer{orb.Point{4, 4}, false}) - q.Add(dataPointer{orb.Point{5, 5}, true}) + + pointers := []dataPointer{ + {orb.Point{0, 0}, false}, + {orb.Point{1, 1}, true}, + {orb.Point{2, 2}, false}, + {orb.Point{3, 3}, true}, + {orb.Point{4, 4}, false}, + {orb.Point{5, 5}, true}, + } + + for _, p := range pointers { + err := q.Add(p) + if err != nil { + t.Fatalf("unexpected error for %v: %v", p, err) + } + } filters := map[bool]FilterFunc{ false: nil, @@ -652,7 +733,10 @@ func TestQuadtreeInBound_Random(t *testing.T) { mp := orb.MultiPoint{} for i := 0; i < 1000; i++ { mp = append(mp, orb.Point{r.Float64(), r.Float64()}) - qt.Add(mp[i]) + err := qt.Add(mp[i]) + if err != nil { + t.Fatalf("unexpected error for %v: %v", mp[i], err) + } } for i := 0; i < 1000; i++ { diff --git a/simplify/benchmarks_test.go b/simplify/benchmarks_test.go index 7416c36..c1e258a 100644 --- a/simplify/benchmarks_test.go +++ b/simplify/benchmarks_test.go @@ -66,9 +66,9 @@ func TestRadial_BenchmarkData(t *testing.T) { ls := benchmarkData() for i, tc := range cases { - ls := Radial(planar.Distance, tc.threshold).LineString(ls.Clone()) - if len(ls) != tc.length { - t.Errorf("%d: data reduced poorly: %v != %v", i, len(ls), tc.length) + r := Radial(planar.Distance, tc.threshold).LineString(ls.Clone()) + if len(r) != tc.length { + t.Errorf("%d: data reduced poorly: %v != %v", i, len(r), tc.length) } } } @@ -122,7 +122,7 @@ func TestVisvalingam_BenchmarkData(t *testing.T) { for i, tc := range cases { r := VisvalingamThreshold(tc.threshold).LineString(ls.Clone()) if len(r) != tc.length { - t.Errorf("%d: data reduced poorly: %v != %v", i, len(ls), tc.length) + t.Errorf("%d: data reduced poorly: %v != %v", i, len(r), tc.length) } } } @@ -167,7 +167,10 @@ func benchmarkData() orb.LineString { defer f.Close() var points []float64 - json.NewDecoder(f).Decode(&points) + err = json.NewDecoder(f).Decode(&points) + if err != nil { + panic(err) + } var ls orb.LineString for i := 0; i < len(points); i += 2 { diff --git a/simplify/helpers.go b/simplify/helpers.go index 3e6677e..c44bb79 100644 --- a/simplify/helpers.go +++ b/simplify/helpers.go @@ -120,19 +120,3 @@ func runSimplify(s simplifier, ls orb.LineString) orb.LineString { ls, _ = s.simplify(ls, false) return ls } - -func runSimplifyWithIndexes(s simplifier, ls orb.LineString) (orb.LineString, []int) { - if len(ls) == 0 { - return ls, []int{} - } - - if len(ls) == 1 { - return ls, []int{0} - } - - if len(ls) == 2 { - return ls, []int{0, 1} - } - - return s.simplify(ls, true) -}