imposm3/expire/tilelist_test.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)
}
}
}
}