Files
astro/internal/geodata/topology_test.go
T

38 lines
1.1 KiB
Go
Raw Normal View History

package geodata
import (
"math"
"testing"
)
func TestPolylineSegmentsTreatsExactAntimeridianAsOneMeridian(t *testing.T) {
segments := PolylineSegments([]GeoPoint{
{Longitude: -180, Latitude: 10},
{Longitude: 180, Latitude: 20},
}, ProjectionEquirectangular)
if len(segments) != 1 || len(segments[0]) != 2 {
t.Fatalf("exact-antimeridian line segments = %#v", segments)
}
if segments[0][0].Longitude != segments[0][1].Longitude {
t.Fatalf("exact-antimeridian line spans %.1f degrees",
math.Abs(segments[0][1].Longitude-segments[0][0].Longitude))
}
}
func TestPolygonFragmentsDropsExactAntimeridianZeroAreaDuplicate(t *testing.T) {
fragments := PolygonFragments([]GeoPoint{
{Longitude: -180, Latitude: 15},
{Longitude: 180, Latitude: 14},
{Longitude: 150, Latitude: 13},
{Longitude: 150, Latitude: -12},
{Longitude: 180, Latitude: -11},
{Longitude: -180, Latitude: -10},
}, ProjectionEquirectangular)
if len(fragments) != 1 {
t.Fatalf("exact-antimeridian polygon produced %d fragments, want 1", len(fragments))
}
if math.Abs(signedPolygonArea(fragments[0])) < 1e-12 {
t.Fatal("exact-antimeridian polygon fragment has zero area")
}
}