84 lines
2.0 KiB
Go
84 lines
2.0 KiB
Go
package expire
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/omniscale/imposm3/element"
|
|
)
|
|
|
|
func TestTileList_ExpireNodes(t *testing.T) {
|
|
tests := []struct {
|
|
nodes []element.Node
|
|
expected int
|
|
polygon bool
|
|
}{
|
|
// point
|
|
{[]element.Node{{Long: 8.30, Lat: 53.26}}, 1, false},
|
|
|
|
// point + paddings
|
|
{[]element.Node{{Long: 0, Lat: 0}}, 4, false},
|
|
{[]element.Node{{Long: 0.01, Lat: 0}}, 2, false},
|
|
{[]element.Node{{Long: 0, Lat: 0.01}}, 2, false},
|
|
{[]element.Node{{Long: 0.01, Lat: 0.01}}, 1, false},
|
|
|
|
// line
|
|
{[]element.Node{
|
|
{Long: 8.30, Lat: 53.25},
|
|
{Long: 8.30, Lat: 53.30},
|
|
}, 5, false},
|
|
// same line, but split into multiple segments
|
|
{[]element.Node{
|
|
{Long: 8.30, Lat: 53.25},
|
|
{Long: 8.30, Lat: 53.27},
|
|
{Long: 8.30, Lat: 53.29},
|
|
{Long: 8.30, Lat: 53.30},
|
|
}, 5, false},
|
|
|
|
// L-shape
|
|
{[]element.Node{
|
|
{Long: 8.30, Lat: 53.25},
|
|
{Long: 8.30, Lat: 53.30},
|
|
{Long: 8.35, Lat: 53.30},
|
|
}, 8, false},
|
|
|
|
// closed line (triangle)
|
|
{[]element.Node{
|
|
{Long: 8.30, Lat: 53.25},
|
|
{Long: 8.30, Lat: 53.30},
|
|
{Long: 8.35, Lat: 53.30},
|
|
{Long: 8.30, Lat: 53.25},
|
|
}, 11, false},
|
|
// same closed line but polygon (triangle), whole bbox (4x5 tiles) is expired
|
|
{[]element.Node{
|
|
{Long: 8.30, Lat: 53.25},
|
|
{Long: 8.30, Lat: 53.30},
|
|
{Long: 8.35, Lat: 53.30},
|
|
{Long: 8.30, Lat: 53.25},
|
|
}, 20, true},
|
|
|
|
// large triangle, only outline expired for polygons and lines
|
|
{[]element.Node{
|
|
{Long: 8.30, Lat: 53.25},
|
|
{Long: 8.30, Lat: 53.90},
|
|
{Long: 8.85, Lat: 53.90},
|
|
{Long: 8.30, Lat: 53.25},
|
|
}, 124, true},
|
|
{[]element.Node{
|
|
{Long: 8.30, Lat: 53.25},
|
|
{Long: 8.30, Lat: 53.90},
|
|
{Long: 8.85, Lat: 53.90},
|
|
{Long: 8.30, Lat: 53.25},
|
|
}, 124, false},
|
|
}
|
|
for _, test := range tests {
|
|
tl := NewTileList(14, "")
|
|
tl.ExpireNodes(test.nodes, test.polygon)
|
|
if len(tl.tiles) != test.expected {
|
|
t.Errorf("expected %d tiles, got %d", test.expected, len(tl.tiles))
|
|
for tk, _ := range tl.tiles {
|
|
t.Errorf("\t%v", tk)
|
|
}
|
|
}
|
|
}
|
|
}
|