summaryrefslogtreecommitdiff
path: root/city/geometry-test.lua
blob: f85bec0330dc0328d6c93a25b3cd7ad7c463c5bd (plain)
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
local test = require('minunit').test
local geom = require 'geometry'


-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
--
-- geom.point tests
--
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

test(
   'create point object',
   function()
      local pt = geom.point(1, 5.5)
      assert(pt.x == 1)
      assert(pt.y == 5.5)
      local mt = getmetatable(pt)
      assert(mt.__index == geom.point)
   end
)

test(
   'point distances',
   function()
      local a = geom.point(1, 3)
      local b = geom.point(4, 7)
      assert(a:distance_to(b) == 5)

      assert(a:distance_to(a) == 0)
   end
)


-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
--
-- geom.square tests
--
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

test(
   'create square object',
   function()
      local s = geom.square(geom.point(2, 5), 1)
      assert(s.center.x == 2)
      assert(s.center.y == 5)
      assert(s.span == 1)

      assert(s.x.min ==  1.5)
      assert(s.x.max ==  2.5)
      assert(s.y.min ==  4.5)
      assert(s.y.max ==  5.5)
   end
)

test(
   'check if point is in square',
   function()
      local center = geom.point(1, 1)
      local square = geom.square(center, 2)

      local interior_points = {
	 geom.point(1, 1),
	 geom.point(2, 2),
	 geom.point(2, 0.1),
	 geom.point(0.1, 0.1),
      }
      for _, point in ipairs(interior_points) do
	 assert(
	    square:contains(point),
	    string.format(
	       'point (%0.2f, %0.2f) was incorrectly outside!',
	       point.x, point.y
	    )
	 )
      end

      local exterior_points = {
	 geom.point(0, 0),
	 geom.point(10, 10),
	 geom.point(0, 1),
	 geom.point(1, 0),
	 geom.point(-2, 1),
	 geom.point(1, -2),
      }
      for _, point in ipairs(exterior_points) do
	 assert(
	    not square:contains(point),
	    string.format(
	       'point (%0.2f, %0.2f) was incorrectly inside!',
	       point.x, point.y
	    )
	 )
      end
   end
)