Add more flexibility in how whitespace is specified.
[gazelle.git] / tests / test_data_structures.lua
blob9f1f6acc0437590ea341480b2fdd132defcf639e
2 require "luaunit"
3 require "data_structures"
5 TestQueue = {}
6 function TestQueue:test_initial_state()
7 local queue = Queue:new()
8 assert_equals(true, queue:isempty())
9 assert_error(function() queue:dequeue() end)
10 end
12 function TestQueue:test_fifo_behavior()
13 local queue = Queue:new()
14 local list = {1, 2, 3, 4, 5}
15 for e in each(list) do
16 queue:enqueue(e)
17 assert_equals(false, queue:isempty())
18 end
20 for e in each(list) do
21 assert_equals(false, queue:isempty())
22 assert_equals(e, queue:dequeue())
23 end
25 assert_equals(true, queue:isempty())
26 end
27 -- class TestQueue
29 TestSet = {}
30 function TestSet:test_initial_state()
31 local set = Set:new()
32 assert_equals(true, set:isempty())
33 assert_equals(0, set:count())
34 assert_equals({}, set:to_array())
35 assert_equals(false, set:contains(5))
36 assert_equals(set:hash_key(), set:hash_key())
37 for _ in set:each() do
38 assert_fail()
39 end
40 end
42 function test_contains_one_value(set, val)
43 assert_equals(false, set:isempty())
44 assert_equals(1, set:count())
45 assert_equals({val}, set:to_array())
46 assert_equals(true, set:contains(val))
47 assert_equals(set:hash_key(), set:hash_key())
48 for elem in set:each() do
49 assert_equals(val, elem)
50 end
51 end
53 function TestSet:test_add_element()
54 local set = Set:new()
55 set:add(5)
56 test_contains_one_value(set, 5)
57 end
59 function TestSet:test_remove_element()
60 local set = Set:new()
61 local val = {foo="bar"}
62 set:add(5)
63 set:add(val)
64 set:remove(5)
65 test_contains_one_value(set, val)
66 end
68 function TestSet:test_add_collection()
69 local set = Set:new()
70 local values = {1, 2, 3, 4, 5}
71 set:add_collection(values)
72 assert_equals(false, set:isempty())
73 assert_equals(5, set:count())
74 assert_equals(values, set:to_array())
75 for val in each(values) do
76 assert_equals(true, set:contains(val))
77 end
78 assert_equals(set:hash_key(), set:hash_key())
79 end
80 -- class TestQueue
82 TestRange = {}
83 function TestRange:test_initial_state()
84 local range = Range:new(5, 10)
85 assert_equals(5, range.low)
86 assert_equals(10, range.high)
87 assert_equals(true, range:contains(5))
88 assert_equals(true, range:contains(7))
89 assert_equals(true, range:contains(10))
90 end
92 function TestRange:test_single_int_range()
93 local range = Range:new(3, 3)
94 assert_equals(true, range:contains(3))
95 end
97 function TestRange:test_invalid_construction()
98 assert_error(function () Range:new(5, 4) end)
99 assert_error(function () Range:new(5) end)
100 assert_error(function () Range:new() end)
103 function TestRange:test_union()
104 assert_equals(nil, Range:new(2, 4):union(Range:new(6, 7)))
105 assert_equals(nil, Range:new(2, 4):union(Range:new(6, 7)))
107 local union = Range:new(2, 4):union(Range:new(5, 7))
108 assert_equals(2, union.low)
109 assert_equals(7, union.high)
111 union = Range:new(1, 4):union(Range:new(2, 3))
112 assert_equals(1, union.low)
113 assert_equals(4, union.high)
115 union = Range:new(1, 5):union(Range:new(3, 7))
116 assert_equals(1, union.low)
117 assert_equals(7, union.high)
120 TestIntSet = {}
121 function TestIntSet:test_initial_state()
122 local int_set = IntSet:new()
123 assert_equals(false, int_set.negated)
124 assert_equals(false, int_set:contains(0))
125 assert_equals(false, int_set:contains(20))
126 assert_equals(false, int_set:contains(math.huge))
127 assert_equals(nil, int_set:sampleint())
130 function TestIntSet:test_adding_one_range()
131 local int_set = IntSet:new()
132 int_set:add(Range:new(3, 6))
134 assert_equals(false, int_set.negated)
135 assert_equals(false, int_set:contains(2))
136 assert_equals(false, int_set:contains(7))
137 assert_equals(true, int_set:contains(3))
138 assert_equals(true, int_set:contains(6))
139 assert_equals(true, int_set:contains(5))
141 assert_equals(true, int_set:contains(int_set:sampleint()))
144 function TestIntSet:test_adding_multiple_range()
145 local int_set = IntSet:new()
146 int_set:add(Range:new(3, 6))
147 int_set:add(Range:new(9, 10))
149 assert_equals(false, int_set:contains(2))
150 assert_equals(true, int_set:contains(3))
151 assert_equals(true, int_set:contains(6))
152 assert_equals(false, int_set:contains(7))
153 assert_equals(true, int_set:contains(9))
154 assert_equals(true, int_set:contains(10))
155 assert_equals(false, int_set:contains(11))
158 function TestIntSet:test_adding_overlapping_intset()
159 local int_set1 = IntSet:new()
160 int_set1:add(Range:new(1, 2))
161 int_set1:add(Range:new(4, 5))
162 int_set1:add(Range:new(7, 15))
164 local int_set2 = IntSet:new()
165 int_set2:add(Range:new(3, 3))
166 int_set2:add(Range:new(6, 20))
167 int_set2:add(Range:new(30, 32))
169 int_set1:add_intset(int_set2)
170 assert_equals("1-20,30-32", int_set1:tointstring())
173 function TestIntSet:test_negation()
174 local int_set1 = IntSet:new()
175 int_set1:add(Range:new(3, 5))
176 assert_equals("^0-2,6-inf", int_set1:invert():tointstring())
178 local int_set2 = IntSet:new()
179 int_set2:add(Range:new(3, 5))
180 int_set2:add(Range:new(10, math.huge))
181 int_set2.negated = true
182 assert_equals("0-2,6-9", int_set2:invert():tointstring())
185 LuaUnit:run()