diff --git a/go.mod b/go.mod index b1f2f0e..93ea3bd 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,7 @@ module github.com/tidwall/geojson go 1.15 require ( + github.com/stretchr/testify v1.8.4 github.com/tidwall/gjson v1.12.1 github.com/tidwall/lotsa v1.0.2 github.com/tidwall/pretty v1.2.0 diff --git a/go.sum b/go.sum index 541e0cf..db9e2c1 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,15 @@ +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/tidwall/cities v0.1.0 h1:CVNkmMf7NEC9Bvokf5GoSsArHCKRMTgLuubRTHnH0mE= github.com/tidwall/cities v0.1.0/go.mod h1:lV/HDp2gCcRcHJWqgt6Di54GiDrTZwh1aG2ZUPNbqa4= github.com/tidwall/geoindex v1.4.4 h1:hdwzy5qNtK75i7nus59Ibr+SwcH4F2v65bw4txrLJ9M= @@ -14,3 +26,8 @@ github.com/tidwall/rtree v1.3.1 h1:xu3vJPKJrmGce7YJcFUCoqLrp9DTUEJBnVgdPSXHgHs= github.com/tidwall/rtree v1.3.1/go.mod h1:S+JSsqPTI8LfWA4xHBo5eXzie8WJLVFeppAutSegl6M= github.com/tidwall/sjson v1.2.4 h1:cuiLzLnaMeBhRmEv00Lpk3tkYrcxpmbU81tAY4Dw0tc= github.com/tidwall/sjson v1.2.4/go.mod h1:098SZ494YoMWPmMO6ct4dcFnqxwj9r/gF0Etp19pSNM= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/object.go b/object.go index c726ceb..27f777a 100644 --- a/object.go +++ b/object.go @@ -258,7 +258,10 @@ func appendJSONPoint(dst []byte, point geometry.Point, ex *extra, idx int) []byt dims := int(ex.dims) for i := 0; i < dims; i++ { dst = append(dst, ',') - dst = appendJSONFloat(dst, ex.values[idx*dims+i]) + k := idx*dims + i + if k < len(ex.values) { + dst = appendJSONFloat(dst, ex.values[k]) + } } } dst = append(dst, ']') diff --git a/object_test.go b/object_test.go index 1f12c5d..963c6a0 100644 --- a/object_test.go +++ b/object_test.go @@ -2,6 +2,7 @@ package geojson import ( "encoding/json" + "errors" "fmt" "math" "math/rand" @@ -77,7 +78,7 @@ func expectJSONOpts(t testing.TB, data string, expect interface{}, opts *ParseOp exstr = data } obj, err := Parse(data, opts) - if err != exerr { + if !errors.Is(err, exerr) { if t == nil { panic(fmt.Sprintf("expected '%v', got '%v'", exerr, err)) } else { diff --git a/polygon_test.go b/polygon_test.go index 3f23f2f..30d9a6e 100644 --- a/polygon_test.go +++ b/polygon_test.go @@ -1,6 +1,7 @@ package geojson import ( + "github.com/stretchr/testify/assert" "testing" ) @@ -76,6 +77,16 @@ func TestEmptyPolygon(t *testing.T) { expect(t, p.JSON() == `{"type":"Polygon","coordinates":[]}`) } +func TestPanic(t *testing.T) { + p, err := Parse("{\"type\":\"Polygon\",\"coordinates\":[[[0,0],[10,0],[0,10],[0,0]],[[0,0,0],[0,10,0],[10,0,0],[0,0,0]]]}", nil) + if err != nil { + t.Fatal(err) + } + s := p.String() + e := "{\"type\":\"Polygon\",\"coordinates\":[[[0,0],[10,0],[0,10],[0,0]],[[0,0,0],[0,10,0],[10,0,0],[0,0,0]]]}" + assert.Equal(t, e, s) +} + // https://github.com/tidwall/tile38/issues/664 func TestIssue664(t *testing.T) { // original geojson from issue