-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathheading_test.go
More file actions
116 lines (110 loc) · 3.05 KB
/
heading_test.go
File metadata and controls
116 lines (110 loc) · 3.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
package main
import (
"fmt"
"testing"
)
func Test_NewHeadingRange(t *testing.T) {
for i, tt := range []struct {
min, max, mid, width int
}{
{42, 121, 81, 79},
} {
t.Run(fmt.Sprintf("%d: <%d, %d>", i, tt.min, tt.max), func(t *testing.T) {
hr := NewHeadingRange(tt.min, tt.max)
if tt.mid != hr.Mid {
t.Errorf("exp %d got %d", tt.mid, hr.Mid)
}
if tt.width != hr.Variation {
t.Errorf("exp %d got %d", tt.width, hr.Variation)
}
})
}
}
func Test_HeadingRangeOverlaps(t *testing.T) {
for i, tt := range []struct {
min1, max1 int
min2, max2 int
overlaps bool
}{
{20, 60, 80, 200, false},
{80, 200, 20, 60, false},
{20, 80, 60, 200, true},
{60, 200, 20, 80, true},
{340, 80, 300, 30, true},
{340, 80, 30, 300, true},
{340, 30, 80, 300, false},
{20, 200, 60, 80, true},
{200, 20, 60, 80, false},
{20, 200, 80, 60, true},
{60, 80, 20, 200, true},
{20, 40, 40, 60, true},
} {
t.Run(fmt.Sprintf("%d: <%d, %d> overlaps <%d, %d>", i, tt.min1, tt.max1, tt.min2, tt.max2), func(t *testing.T) {
hr1 := NewHeadingRange(tt.min1, tt.max1)
hr2 := NewHeadingRange(tt.min2, tt.max2)
got := hr1.Overlaps(hr2)
if tt.overlaps != got {
t.Errorf("exp %t got %t", tt.overlaps, got)
}
})
}
}
func Test_HeadingRangeMerge(t *testing.T) {
for i, tt := range []struct {
min1, max1 int
min2, max2 int
min3, max3 int
}{
{20, 80, 60, 200, 20, 200},
{60, 200, 20, 80, 20, 200},
{340, 80, 300, 30, 300, 80},
{340, 80, 30, 300, 340, 300},
{20, 200, 60, 80, 20, 200},
{20, 200, 80, 60, 80, 60},
{60, 80, 20, 200, 20, 200},
{20, 40, 40, 60, 20, 60},
} {
t.Run(fmt.Sprintf("%d: <%d,%d> overlaps <%d,%d>", i, tt.min1, tt.max1, tt.min2, tt.max2), func(t *testing.T) {
hr1 := NewHeadingRange(tt.min1, tt.max1)
hr2 := NewHeadingRange(tt.min2, tt.max2)
got := hr1.Merge(hr2)
if tt.min3 != got.Min {
t.Errorf("min: exp %d got %d", tt.min3, got.Min)
}
if tt.max3 != got.Max {
t.Errorf("max: exp %d got %d", tt.max3, got.Max)
}
})
}
}
func Test_HeadingSetAdd(t *testing.T) {
for i, tt := range []struct {
set1, set2, set3 []int
}{
{[]int{}, []int{20, 80, 160, 200}, []int{20, 80, 160, 200}},
{[]int{}, []int{20, 80, 60, 200}, []int{20, 200}},
{[]int{50, 150, 200, 300}, []int{250, 100}, []int{200, 150}},
{[]int{50, 150, 200, 300, 340, 30}, []int{20, 100}, []int{200, 300, 340, 150}},
{[]int{200, 300, 340, 30}, []int{20, 100}, []int{200, 300, 340, 100}},
{[]int{279, 32, 121, 214, 219, 250}, []int{208, 235}, []int{279, 32, 121, 250}},
{[]int{208, 250, 279, 351, 16, 32, 134, 207}, []int{343, 47}, []int{208, 250, 279, 47, 134, 207}},
} {
set1 := setFrom(tt.set1)
set2 := setFrom(tt.set2)
set3 := setFrom(tt.set3)
t.Run(fmt.Sprintf("%d: %s add %s", i, set1, set2), func(t *testing.T) {
for _, hr := range set2 {
set1 = set1.Add(hr)
}
if set1.String() != set3.String() {
t.Errorf("exp %s got %s", set3, set1)
}
})
}
}
func setFrom(nrs []int) (hs HeadingSet) {
for i := 0; i < len(nrs); i += 2 {
hs = append(hs, NewHeadingRange(nrs[i], nrs[i+1]))
}
return hs
}