-
Notifications
You must be signed in to change notification settings - Fork 0
/
bwpngvisualizer_test.go
105 lines (86 loc) · 2.72 KB
/
bwpngvisualizer_test.go
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
package latvis
import (
"github.com/mrjones/gt"
"fmt"
"image"
"image/color"
"testing"
)
var (
B = BLACK
W = WHITE
)
func TestBwPngVisualizer2By2(t *testing.T) {
bounds, err := NewBoundingBox(
Coordinate{Lat: 0, Lng: 0},
Coordinate{Lat: 2, Lng: 2})
gt.AssertNil(t, err)
h := make(History, 0)
h = append(h, &Coordinate{Lat: .5, Lng: .5})
visualizer := &BwPngVisualizer{}
img := visualizer.makeImage(&h, bounds, 2, 2)
assertImage(t, [][]color.Color{
[]color.Color{W, W},
[]color.Color{B, W}}, img)
h = append(h, &Coordinate{Lat: 1.5, Lng: 1.5})
img = visualizer.makeImage(&h, bounds, 2, 2)
assertImage(t, [][]color.Color{
[]color.Color{W, B},
[]color.Color{B, W}}, img)
}
func TestBwPngVisualizerNotSquare(t *testing.T) {
bounds, err := NewBoundingBox(
Coordinate{Lat: 0, Lng: 0},
Coordinate{Lat: 3, Lng: 5})
gt.AssertNil(t, err)
h := make(History, 0)
h = append(h, &Coordinate{Lat: .5, Lng: .5})
h = append(h, &Coordinate{Lat: 1.5, Lng: 1.5})
h = append(h, &Coordinate{Lat: 2.5, Lng: 2.5})
h = append(h, &Coordinate{Lat: 1.5, Lng: 3.5})
h = append(h, &Coordinate{Lat: .5, Lng: 4.5})
visualizer := &BwPngVisualizer{}
img := visualizer.makeImage(&h, bounds, 5, 3)
assertImage(t, [][]color.Color{
[]color.Color{W, W, B, W, W},
[]color.Color{W, B, W, B, W},
[]color.Color{B, W, W, W, B}}, img)
}
func TestBwPngVisualizerSmushed(t *testing.T) {
bounds, err := NewBoundingBox(
Coordinate{Lat: 0, Lng: 0},
Coordinate{Lat: 50, Lng: 50})
gt.AssertNil(t, err)
h := make(History, 0)
// Lots of points, but they're all in the lower left.
h = append(h, &Coordinate{Lat: 1, Lng: 1})
h = append(h, &Coordinate{Lat: 2, Lng: 2})
h = append(h, &Coordinate{Lat: 3, Lng: 3})
h = append(h, &Coordinate{Lat: 4, Lng: 4})
h = append(h, &Coordinate{Lat: 5, Lng: 5})
visualizer := &BwPngVisualizer{}
img := visualizer.makeImage(&h, bounds, 2, 2)
assertImage(t, [][]color.Color{
[]color.Color{W, W},
[]color.Color{B, W}}, img)
}
func assertImage(t *testing.T, expected [][]color.Color, actual image.Image) {
gt.AssertEqualM(t, len(expected), actual.Bounds().Dy(), "Unexpected image height")
gt.AssertEqualM(t, len(expected[0]), actual.Bounds().Dx(), "Unexpected image width")
// WxH image (0,0) is in the top left:
// (i.e. increasing Y-coordinates move downwards)
// (0,0) ----- (W,0)
// | |
// (0,H) ----- (W,H)
//
// This works, because the ASCII arrays in the asserts are laid out similarly.
// However, it means that printed coordinates might be y-inverted from
// intuition.
for x := 0; x < len(expected[0]); x++ {
for y := 0; y < len(expected); y++ {
expPix := expected[y][x]
gt.AssertEqualM(t, expPix, actual.At(x, y),
fmt.Sprintf("Unexpected pixel at: (%d, %d)", x, y))
}
}
}