package geojson

import "testing"

func TestMultiLineString(t *testing.T) {
	testJSON(t, `{"type":"MultiLineString","coordinates":[[[100.1,5.1],[101.1,6.1]],[[102.1,7.1],[103.1,8.1]]]}`)
	testJSON(t, `{
    "type": "MultiLineString",
    "coordinates": [
        [
            [-105.0214433670044,39.57805759162015],
            [-105.02150774002075,39.57780951131517],
            [-105.02157211303711,39.57749527498758],
            [-105.02157211303711,39.57716449836683],
            [-105.02157211303711,39.57703218727656],
            [-105.02152919769287,39.57678410330158]
        ],
        [
            [-105.01989841461182,39.574997872470774],
            [-105.01959800720215,39.57489863607502],
            [-105.01906156539916,39.57478286010041]
        ],
        [
            [-105.01717329025269,39.5744024519653],
            [-105.01698017120361,39.574385912433804],
            [-105.0166368484497,39.574385912433804],
            [-105.01650810241699,39.5744024519653],
            [-105.0159502029419,39.574270135602866]
        ],
        [
            [-105.0142765045166,39.57397242286402],
            [-105.01412630081175,39.57403858136094],
            [-105.0138258934021,39.57417089816531],
            [-105.01331090927124,39.57445207053608]
        ]
    ]
}`)
}

func TestMultiLineStringWithinBBox(t *testing.T) {
	bbox := BBox{Min: Position{0, 0, 0}, Max: Position{100, 100, 0}}
	p := testJSON(t, `{"type":"MultiLineString","coordinates":[[[10,10],[20,20]]],"bbox":[0,0,100,100]}`).(MultiLineString)
	if !p.WithinBBox(bbox) {
		t.Fatal("!")
	}
	p = testJSON(t, `{"type":"MultiLineString","coordinates":[[[10,10],[20,20]],[[30,30],[40,40]]]}`).(MultiLineString)
	if !p.WithinBBox(bbox) {
		t.Fatal("!")
	}
	p = testJSON(t, `{"type":"MultiLineString","coordinates":[[[10,10],[20,20]]],"bbox":[-10,-10,100,100]}`).(MultiLineString)
	if p.WithinBBox(bbox) {
		t.Fatal("!")
	}
	p = testJSON(t, `{"type":"MultiLineString","coordinates":[[[-10,-10],[-20,-20]]]}`).(MultiLineString)
	if p.WithinBBox(bbox) {
		t.Fatal("!")
	}
}

func TestMultiLineStringIntersectsBBox(t *testing.T) {
	bbox := BBox{Min: Position{0, 0, 0}, Max: Position{100, 100, 0}}
	p := testJSON(t, `{"type":"MultiLineString","coordinates":[[[10,10],[20,20]]],"bbox":[0,0,100,100]}`).(MultiLineString)
	if !p.IntersectsBBox(bbox) {
		t.Fatal("!")
	}
	p = testJSON(t, `{"type":"MultiLineString","coordinates":[[[-1,3],[3,-1]],[[-1000,-1000],[-1020,-1020]]]}`).(MultiLineString)
	if !p.IntersectsBBox(bbox) {
		t.Fatal("!")
	}
	p = testJSON(t, `{"type":"MultiLineString","coordinates":[[[-1,1],[1,-1]]]}`).(MultiLineString)
	if !p.IntersectsBBox(bbox) {
		t.Fatal("!")
	}
	p = testJSON(t, `{"type":"MultiLineString","coordinates":[[[-2,1],[1,-1]]]}`).(MultiLineString)
	if p.IntersectsBBox(bbox) {
		t.Fatal("!")
	}
}