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
|
package jujusvg
import (
"image"
gc "gopkg.in/check.v1"
)
type HullSuite struct{}
var _ = gc.Suite(&HullSuite{})
func (s *HullSuite) TestGetPointOutside(c *gc.C) {
var tests = []struct {
about string
vertices []image.Point
expected image.Point
}{
{
about: "zero vertices",
vertices: []image.Point{},
expected: image.Point{0, 0},
},
{
about: "one vertex",
vertices: []image.Point{{0, 0}},
expected: image.Point{10, 10},
},
{
about: "two vertices",
vertices: []image.Point{{0, 0}, {10, 10}},
expected: image.Point{20, 20},
},
{
about: "three vertices (convexHull fall through)",
vertices: []image.Point{{0, 0}, {0, 10}, {10, 0}},
expected: image.Point{10, 20},
},
{
about: "four vertices",
vertices: []image.Point{{0, 0}, {0, 10}, {10, 0}, {10, 10}},
expected: image.Point{20, 20},
},
}
for _, test := range tests {
c.Log(test.about)
c.Assert(getPointOutside(test.vertices, image.Point{10, 10}), gc.Equals, test.expected)
}
}
func (s *HullSuite) TestConvexHull(c *gc.C) {
// Zero vertices
vertices := []image.Point{}
c.Assert(convexHull(vertices), gc.DeepEquals, []image.Point{{0, 0}})
// Identities
vertices = []image.Point{{1, 1}}
c.Assert(convexHull(vertices), gc.DeepEquals, vertices)
vertices = []image.Point{{1, 1}, {2, 2}}
c.Assert(convexHull(vertices), gc.DeepEquals, vertices)
vertices = []image.Point{{1, 1}, {2, 2}, {1, 2}}
c.Assert(convexHull(vertices), gc.DeepEquals, vertices)
// > 3 vertices
vertices = []image.Point{}
for i := 0; i < 100; i++ {
vertices = append(vertices, image.Point{i / 10, i % 10})
}
c.Assert(convexHull(vertices), gc.DeepEquals, []image.Point{
{0, 0},
{9, 0},
{9, 9},
{0, 9},
})
}
|