2 # Copyright (C) 2019 EfficiOS Inc.
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; only version 2
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
23 get_default_trace_class
,
24 TestOutputPortMessageIterator
,
29 def get_const_signed_integer_range(int_ranges
):
30 def range_setter(field
):
33 tc
= get_default_trace_class()
34 fc
= tc
.create_signed_enumeration_field_class(32)
35 fc
.add_mapping('something', bt2
.SignedIntegerRangeSet(int_ranges
))
37 return create_const_field(tc
, fc
, range_setter
).cls
['something'].ranges
40 def get_const_unsigned_integer_range(int_ranges
):
41 def range_setter(field
):
44 tc
= get_default_trace_class()
45 fc
= tc
.create_unsigned_enumeration_field_class(32)
46 fc
.add_mapping('something', bt2
.UnsignedIntegerRangeSet(int_ranges
))
48 return create_const_field(tc
, fc
, range_setter
).cls
['something'].ranges
51 class _IntegerRangeTestCase
:
53 self
._rg
= self
._CLS
(self
._def
_lower
, self
._def
_upper
)
54 self
._const
_rg
= list(
55 self
._GET
_CONST
_RANGE
_SET
([(self
._def
_lower
, self
._def
_upper
)])
58 def test_create(self
):
59 self
.assertEqual(self
._rg
.lower
, self
._def
_lower
)
60 self
.assertEqual(self
._rg
.upper
, self
._def
_upper
)
61 self
.assertIs(type(self
._rg
), self
._CLS
)
63 def test_const_create(self
):
64 self
.assertEqual(self
._const
_rg
.lower
, self
._def
_lower
)
65 self
.assertEqual(self
._const
_rg
.upper
, self
._def
_upper
)
66 self
.assertIs(type(self
._const
_rg
), self
._CONST
_CLS
)
68 def test_create_same(self
):
69 rg
= self
._CLS
(self
._def
_lower
, self
._def
_lower
)
70 self
.assertEqual(rg
.lower
, self
._def
_lower
)
71 self
.assertEqual(rg
.upper
, self
._def
_lower
)
73 def test_create_single(self
):
74 rg
= self
._CLS
(self
._def
_lower
)
75 self
.assertEqual(rg
.lower
, self
._def
_lower
)
76 self
.assertEqual(rg
.upper
, self
._def
_lower
)
78 def test_create_wrong_type_lower(self
):
79 with self
.assertRaises(TypeError):
80 self
._CLS
(19.3, self
._def
_upper
)
82 def test_create_wrong_type_upper(self
):
83 with self
.assertRaises(TypeError):
84 self
._CLS
(self
._def
_lower
, 19.3)
86 def test_create_out_of_bound_lower(self
):
87 with self
.assertRaises(ValueError):
88 self
._CLS
(self
._oob
_lower
, self
._def
_upper
)
90 def test_create_out_of_bound_upper(self
):
91 with self
.assertRaises(ValueError):
92 self
._CLS
(self
._def
_lower
, self
._oob
_upper
)
94 def test_create_lower_gt_upper(self
):
95 with self
.assertRaises(ValueError):
96 self
._CLS
(self
._def
_lower
, self
._def
_lower
- 1)
98 def test_contains_lower(self
):
99 self
.assertTrue(self
._rg
.contains(self
._def
_lower
))
101 def test_contains_upper(self
):
102 self
.assertTrue(self
._rg
.contains(self
._def
_upper
))
104 def test_contains_avg(self
):
105 avg
= (self
._def
_lower
+ self
._def
_upper
) // 2
106 self
.assertTrue(self
._rg
.contains(avg
))
108 def test_contains_wrong_type(self
):
109 with self
.assertRaises(TypeError):
110 self
._rg
.contains('allo')
112 def test_contains_out_of_bound(self
):
113 with self
.assertRaises(ValueError):
114 self
._rg
.contains(self
._oob
_upper
)
117 rg
= self
._CLS
(self
._def
_lower
, self
._def
_upper
)
118 self
.assertEqual(rg
, self
._rg
)
120 def test_const_eq(self
):
121 rg
= list(self
._GET
_CONST
_RANGE
_SET
([(self
._def
_lower
, self
._def
_upper
)]))[0]
122 self
.assertEqual(rg
, self
._const
_rg
)
124 def test_const_nonconst_eq(self
):
125 self
.assertEqual(self
._rg
, self
._const
_rg
)
128 rg
= self
._CLS
(self
._def
_lower
, self
._def
_upper
- 1)
129 self
.assertNotEqual(rg
, self
._rg
)
131 def test_const_ne(self
):
132 rg
= list(self
._GET
_CONST
_RANGE
_SET
([(self
._def
_lower
, self
._def
_upper
- 1)]))[
135 self
.assertNotEqual(rg
, self
._const
_rg
)
137 def test_ne_other_type(self
):
138 self
.assertNotEqual(self
._rg
, 48)
141 class UnsignedIntegerRangeTestCase(_IntegerRangeTestCase
, unittest
.TestCase
):
142 _CLS
= bt2
.UnsignedIntegerRange
143 _CONST_CLS
= bt2
._UnsignedIntegerRangeConst
144 _GET_CONST_RANGE_SET
= staticmethod(get_const_unsigned_integer_range
)
151 class SignedIntegerRangeTestCase(_IntegerRangeTestCase
, unittest
.TestCase
):
152 _CLS
= bt2
.SignedIntegerRange
153 _CONST_CLS
= bt2
._SignedIntegerRangeConst
154 _GET_CONST_RANGE_SET
= staticmethod(get_const_signed_integer_range
)
157 _oob_lower
= -(1 << 63) - 1
161 class _IntegerRangeSetTestCase
:
163 self
._rs
= self
._CLS
((self
._range
1, self
._range
2, self
._range
3))
164 self
._const
_rs
= self
._GET
_CONST
_RANGE
_SET
(
165 [self
._range
1, self
._range
2, self
._range
3]
168 def test_create(self
):
169 self
.assertEqual(len(self
._rs
), 3)
170 self
.assertIn(self
._range
1, self
._rs
)
171 self
.assertIn(self
._range
2, self
._rs
)
172 self
.assertIn(self
._range
3, self
._rs
)
173 self
.assertIs(type(self
._range
1), self
._RANGE
_CLS
)
175 def test_const_create(self
):
176 self
.assertEqual(len(self
._const
_rs
), 3)
177 self
.assertIn(self
._range
1, self
._const
_rs
)
178 self
.assertIn(self
._range
2, self
._const
_rs
)
179 self
.assertIn(self
._range
3, self
._const
_rs
)
180 self
.assertIs(type(self
._range
1), self
._RANGE
_CLS
)
182 def test_create_tuples(self
):
185 (self
._range
1.lower
, self
._range
1.upper
),
186 (self
._range
2.lower
, self
._range
2.upper
),
187 (self
._range
3.lower
, self
._range
3.upper
),
190 self
.assertEqual(len(rs
), 3)
191 self
.assertIn(self
._range
1, rs
)
192 self
.assertIn(self
._range
2, rs
)
193 self
.assertIn(self
._range
3, rs
)
195 def test_create_single(self
):
196 rs
= self
._CLS
((self
._range
_same
.lower
,))
197 self
.assertEqual(len(rs
), 1)
198 self
.assertIn(self
._range
_same
, rs
)
200 def test_create_non_iter(self
):
201 with self
.assertRaises(TypeError):
202 self
._rs
= self
._CLS
(23)
204 def test_create_wrong_elem_type(self
):
205 with self
.assertRaises(TypeError):
206 self
._rs
= self
._CLS
((self
._range
1, self
._range
2, 'lel'))
209 self
.assertEqual(len(self
._rs
), 3)
211 def test_contains(self
):
212 rs
= self
._CLS
((self
._range
1, self
._range
2))
213 self
.assertIn(self
._range
1, rs
)
214 self
.assertIn(self
._range
2, rs
)
215 self
.assertNotIn(self
._range
3, rs
)
217 def test_contains_value(self
):
218 rs
= self
._CLS
((self
._range
1, self
._range
2))
219 self
.assertTrue(rs
.contains_value(self
._range
1.upper
))
220 self
.assertTrue(rs
.contains_value(self
._range
2.lower
))
221 self
.assertFalse(rs
.contains_value(self
._range
3.upper
))
223 def test_contains_value_wrong_type(self
):
224 with self
.assertRaises(TypeError):
225 self
._rs
.contains_value('meow')
228 range_list
= list(self
._rs
)
229 self
.assertIn(self
._range
1, range_list
)
230 self
.assertIn(self
._range
2, range_list
)
231 self
.assertIn(self
._range
3, range_list
)
233 for rg
in range_list
:
234 self
.assertIs(type(rg
), self
._RANGE
_CLS
)
236 def test_const_iter(self
):
237 range_list
= list(self
._const
_rs
)
238 self
.assertIn(self
._range
1, range_list
)
239 self
.assertIn(self
._range
2, range_list
)
240 self
.assertIn(self
._range
3, range_list
)
242 for rg
in range_list
:
243 self
.assertIs(type(rg
), self
._CONST
_RANGE
_CLS
)
245 def test_empty(self
):
247 self
.assertEqual(len(rs
), 0)
248 self
.assertEqual(len(list(rs
)), 0)
250 def test_add_range_obj(self
):
251 rs
= self
._CLS
((self
._range
1,))
252 self
.assertEqual(len(rs
), 1)
254 self
.assertEqual(len(rs
), 2)
255 self
.assertIn(self
._range
2, rs
)
257 def test_const_add_range_obj(self
):
258 with self
.assertRaises(AttributeError):
259 self
._const
_rs
.add((12, 4434))
261 def test_discard_not_implemented(self
):
262 with self
.assertRaises(NotImplementedError):
263 self
._rs
.discard(self
._range
2)
265 def test_eq_same_order(self
):
266 rs
= self
._CLS
((self
._range
1, self
._range
2, self
._range
3))
267 self
.assertEqual(self
._rs
, rs
)
269 def test_eq_diff_order(self
):
270 rs
= self
._CLS
((self
._range
1, self
._range
3, self
._range
2))
271 self
.assertEqual(self
._rs
, rs
)
273 def test_eq_same_addr(self
):
274 self
.assertEqual(self
._rs
, self
._rs
)
276 def test_ne_diff_len(self
):
277 rs
= self
._CLS
((self
._range
1, self
._range
2))
278 self
.assertNotEqual(self
._rs
, rs
)
280 def test_ne_diff_values(self
):
281 rs1
= self
._CLS
((self
._range
1, self
._range
2))
282 rs2
= self
._CLS
((self
._range
1, self
._range
3))
283 self
.assertNotEqual(rs1
, rs2
)
285 def test_ne_incompatible_type(self
):
286 self
.assertNotEqual(self
._rs
, object())
289 class UnsignedIntegerRangeSetTestCase(_IntegerRangeSetTestCase
, unittest
.TestCase
):
290 _CLS
= bt2
.UnsignedIntegerRangeSet
291 _CONST_CLS
= bt2
._UnsignedIntegerRangeSetConst
292 _RANGE_CLS
= bt2
.UnsignedIntegerRange
293 _CONST_RANGE_CLS
= bt2
._UnsignedIntegerRangeConst
294 _GET_CONST_RANGE_SET
= staticmethod(get_const_unsigned_integer_range
)
297 self
._range
1 = bt2
.UnsignedIntegerRange(4, 192)
298 self
._range
2 = bt2
.UnsignedIntegerRange(17, 228)
299 self
._range
3 = bt2
.UnsignedIntegerRange(1000, 2000)
300 self
._range
_same
= bt2
.UnsignedIntegerRange(1300, 1300)
304 class SignedIntegerRangeSetTestCase(_IntegerRangeSetTestCase
, unittest
.TestCase
):
305 _CLS
= bt2
.SignedIntegerRangeSet
306 _CONST_CLS
= bt2
._SignedIntegerRangeSetConst
307 _RANGE_CLS
= bt2
.SignedIntegerRange
308 _CONST_RANGE_CLS
= bt2
._SignedIntegerRangeConst
309 _GET_CONST_RANGE_SET
= staticmethod(get_const_signed_integer_range
)
312 self
._range
1 = bt2
.SignedIntegerRange(-1484, -17)
313 self
._range
2 = bt2
.SignedIntegerRange(-101, 1500)
314 self
._range
3 = bt2
.SignedIntegerRange(1948, 2019)
315 self
._range
_same
= bt2
.SignedIntegerRange(-1300, -1300)
319 if __name__
== '__main__':