3 require
"data_structures"
6 function TestQueue
:test_initial_state()
7 local queue
= Queue
:new()
8 assert_equals(true, queue
:isempty())
9 assert_error(function() queue
:dequeue() 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
17 assert_equals(false, queue
:isempty())
20 for e
in each(list
) do
21 assert_equals(false, queue
:isempty())
22 assert_equals(e
, queue
:dequeue())
25 assert_equals(true, queue
:isempty())
30 function TestSet
:test_initial_state()
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
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
)
53 function TestSet
:test_add_element()
56 test_contains_one_value(set
, 5)
59 function TestSet
:test_remove_element()
61 local val
= {foo
="bar"}
65 test_contains_one_value(set
, val
)
68 function TestSet
:test_add_collection()
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
))
78 assert_equals(set
:hash_key(), set
:hash_key())
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))
92 function TestRange
:test_single_int_range()
93 local range
= Range
:new(3, 3)
94 assert_equals(true, range
:contains(3))
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
)
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())