1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package s2
16
17 import (
18 "testing"
19
20 "github.com/golang/geo/s1"
21 )
22
23 func TestIdentitySnapper(t *testing.T) {
24 rad := s1.Angle(1.0)
25 i := NewIdentitySnapper(rad)
26
27 if i.SnapRadius() != rad {
28 t.Errorf("identSnap.SnapRadius() = %v, want %v", i.SnapRadius(), rad)
29 }
30
31 if i.MinVertexSeparation() != rad {
32 t.Errorf("identSnap.MinVertexSeparation() = %v, want %v", i.MinVertexSeparation(), rad)
33 }
34
35 if i.MinEdgeVertexSeparation() != 0.5*rad {
36 t.Errorf("identSnap.MinEdgeVertexSeparation() = %v, want %v", i.MinEdgeVertexSeparation(), 0.5*rad)
37 }
38
39 if i.MaxEdgeDeviation() != maxEdgeDeviationRatio {
40 t.Errorf("identSnap.SnapRadius() = %v, want %v", i.MaxEdgeDeviation(), maxEdgeDeviationRatio)
41 }
42
43 p := randomPoint()
44 if got := i.SnapPoint(p); !p.ApproxEqual(got) {
45 t.Errorf("identSnap.SnapPoint(%v) = %v, want %v", p, got, p)
46 }
47
48 }
49
50 func TestCellIDSnapperLevelToFromSnapRadius(t *testing.T) {
51 f := NewCellIDSnapper()
52 for level := 0; level <= MaxLevel; level++ {
53 radius := f.minSnapRadiusForLevel(level)
54 if got := f.levelForMaxSnapRadius(radius); got != level {
55 t.Errorf("levelForMaxSnapRadius(%v) = %v, want %v", radius, got, level)
56 }
57 if got, want := f.levelForMaxSnapRadius(0.999*radius), minInt(level+1, MaxLevel); got != want {
58 t.Errorf("levelForMaxSnapRadius(0.999*%v) = %v, want %v (level %d)", radius, got, want, level)
59 }
60 }
61
62 if got := f.levelForMaxSnapRadius(5); got != 0 {
63 t.Errorf("levelForMaxSnapRadius(5) = %v, want 0", got)
64 }
65 if got := f.levelForMaxSnapRadius(1e-30); got != MaxLevel {
66 t.Errorf("levelForMaxSnapRadius(1e-30) = %v, want 0", got)
67 }
68 }
69
70 func TestCellIDSnapperSnapPoint(t *testing.T) {
71 for iter := 0; iter < 1; iter++ {
72 for level := 0; level <= MaxLevel; level++ {
73
74
75 f := CellIDSnapperForLevel(level)
76 p := randomCellIDForLevel(level).Point()
77 if got, want := f.SnapPoint(p), p; !got.ApproxEqual(want) {
78 t.Errorf("%v.SnapPoint(%v) = %v, want %v", f, p, got, want)
79 }
80 }
81 }
82 }
83
84 func TestIntLatLngSnapperExponentToFromSnapRadius(t *testing.T) {
85 for exp := minIntSnappingExponent; exp <= maxIntSnappingExponent; exp++ {
86 sf := NewIntLatLngSnapper(exp)
87 radius := sf.minSnapRadiusForExponent(exp)
88 if got := sf.exponentForMaxSnapRadius(radius); got != exp {
89 t.Errorf("exponentForMaxSnapRadius(%v) = %v, want %v", radius, got, exp)
90 }
91 if got, want := sf.exponentForMaxSnapRadius(0.999*radius), minInt(exp+1, maxIntSnappingExponent); got != want {
92 t.Errorf("exponentForMaxSnapRadius(%v) = %v, want %v", 0.999*radius, got, want)
93 }
94 }
95 sf := IntLatLngSnapper{}
96 if got := sf.exponentForMaxSnapRadius(5); got != minIntSnappingExponent {
97 t.Errorf("exponentForMaxSnapRadius(5) = %v, want %v", got, minIntSnappingExponent)
98 }
99 if got := sf.exponentForMaxSnapRadius(1e-30); got != maxIntSnappingExponent {
100 t.Errorf("exponentForMaxSnapRadius(1e-30) = %v, want %v", got, maxIntSnappingExponent)
101 }
102 }
103
104
135
136
137
138
139
140
141
142
143
144
145
View as plain text