mirror of https://github.com/tidwall/grect.git
102 lines
3.3 KiB
Go
102 lines
3.3 KiB
Go
|
package grect
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"math/rand"
|
||
|
"testing"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
func testGet(t *testing.T, s, expect string) {
|
||
|
if Get(s).String() != expect {
|
||
|
t.Fatalf("for '%v': expected '%v', got '%v'", s, expect, Get(s).String())
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestRect(t *testing.T) {
|
||
|
testGet(t, "", "[]")
|
||
|
testGet(t, "[]", "[]")
|
||
|
testGet(t, "[],[]", "[]")
|
||
|
testGet(t, "[],[],[]", "[]")
|
||
|
testGet(t, "[10]", "[10]")
|
||
|
testGet(t, "[10],[10]", "[10]")
|
||
|
testGet(t, "[10 11],[10]", "[10 11]")
|
||
|
testGet(t, "[10 11],[11 10]", "[10 10],[11 11]")
|
||
|
testGet(t, ",[10]", "[10]")
|
||
|
testGet(t, "[10 11]", "[10 11]")
|
||
|
testGet(t, "[-3 -2 -1 0 1 2 3],[3 2 1 0 -1 -2 -3]", "[-3 -2 -1 0 -1 -2 -3],[3 2 1 0 1 2 3]")
|
||
|
}
|
||
|
|
||
|
func TestWKT(t *testing.T) {
|
||
|
testGet(t, "POINT(1 2)", "[1 2]")
|
||
|
testGet(t, "LINESTRING(3 4, -1 -3, (-20 15 18 ))", "[-20 -3 18],[3 15 18]")
|
||
|
testGet(t, "POLYGON (((1 2 0), 3 4 1, -1 -3 123))", "[-1 -3 0],[3 4 123]")
|
||
|
testGet(t, "MULTIPOINT (1 2, 3 4, -1 0)", "[-1 0],[3 4]")
|
||
|
testGet(t, " mUltiLineString ( (1 2, 3 4),(3 4, (5 6)), (-1 -2 -3)) ", "[-1 -2 -3],[5 6 -3]")
|
||
|
testGet(t, ` MULTIPOLYGON (
|
||
|
((1 2,2 3),(2 3,8 9)),
|
||
|
((4 5,6 7))
|
||
|
)`, "[1 2],[8 9]")
|
||
|
testGet(t, `
|
||
|
GEOMETRYCOLLECTION (
|
||
|
POLYGON EMPTY,
|
||
|
POINT EMPTY,
|
||
|
POINT(1000 2),
|
||
|
POINT EMPTY,
|
||
|
LINESTRING(3 4, -1 -3, (-20 15 18)),
|
||
|
GEOMETRYCOLLECTION EMPTY,
|
||
|
GEOMETRYCOLLECTION(POINT(-1000),POLYGON((10 20,-50 1500))),
|
||
|
)`, "[-1000 -3 18],[1000 1500 18]")
|
||
|
}
|
||
|
|
||
|
func TestGeoJSON(t *testing.T) {
|
||
|
testGet(t, `{"type":"Point","coordinates":[1,2]}`, "[1 2]")
|
||
|
testGet(t, `{"type":"LineString","coordinates":[[3,4], [-1,-3], [-20,15,18]]}`, "[-20 -3 18],[3 15 18]")
|
||
|
testGet(t, `{"type":"Polygon", "coordinates": [[[[1,2,0]],[ 3,4,1], [-1,-3,123]]]}`, "[-1 -3 0],[3 4 123]")
|
||
|
testGet(t, `{"type":"MultiPoint", "coordinates":[[1,2], [3,4], [-1,0]]}`, "[-1 0],[3 4]")
|
||
|
testGet(t, `{"type":"mUltiLineString","coordinates": [ [[1,2], [3,4]],[[3,4], [5,6]], [-1,-2,-3]]} `, "[-1 -2 -3],[5 6 -3]")
|
||
|
testGet(t, `{"type":"MULTIPOLYGON","coordinates": [
|
||
|
[[[1 2],[2 3]],[[2 3],[8 9]]],
|
||
|
[[[4 5],[6 7]]]
|
||
|
)`, "[1 2],[8 9]")
|
||
|
testGet(t, `{"type":"GeometryCollection", "geometries":[
|
||
|
{"type":"Feature","geometry":{"type":"Point","coordinates":[0 -10, 17]}},
|
||
|
{"type":"FeatureCollection","features":[
|
||
|
{"type":"Feature","geometry":{"type":"Point","coordinates":[0 -10]}},
|
||
|
{"type":"Feature","geometry":{"type":"Point","coordinates":[0 -11]}}
|
||
|
]},
|
||
|
{"type":"POLYGON","coordinates":[]},
|
||
|
{"type":"POINT","coordinates":[]},
|
||
|
{"type":"POINT","coordinates":[1000,2]},
|
||
|
{"type":"POINT","coordinates":[]},
|
||
|
{"type":"LINESTRING","coordinates":[[3,4], [-1,-3], [[-20,15,18]]]},
|
||
|
{"type":"GeometryCollection","geometries":[]},
|
||
|
{"type":"GeometryCollection","geometries":[
|
||
|
{"type":"Point","coordinates":[-1000]},
|
||
|
{"type":"Polygon","coordinates":[[[10,20],[-50,1500]]]}
|
||
|
],
|
||
|
]}`, "[-1000 -11 17],[1000 1500 18]")
|
||
|
}
|
||
|
|
||
|
func TestRandom(t *testing.T) {
|
||
|
buf := make([]byte, 50)
|
||
|
rand.Seed(time.Now().UnixNano())
|
||
|
for i := 0; i < 10000000; i++ {
|
||
|
rand.Read(buf)
|
||
|
Get(string(buf))
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func ExampleGet() {
|
||
|
r := Get(`{
|
||
|
"type": "Polygon",
|
||
|
"coordinates": [
|
||
|
[ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0],
|
||
|
[100.0, 1.0], [100.0, 0.0] ]
|
||
|
]
|
||
|
}`)
|
||
|
fmt.Printf("%v %v\n", r.Min, r.Max)
|
||
|
// Output:
|
||
|
// [100 0] [101 1]
|
||
|
}
|