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.
22 from utils
import get_default_trace_class
, create_const_field
25 def get_const_signed_integer_range(int_ranges
):
26 def range_setter(field
):
29 tc
= get_default_trace_class()
30 fc
= tc
.create_signed_enumeration_field_class(32)
31 fc
.add_mapping('something', bt2
.SignedIntegerRangeSet(int_ranges
))
33 return create_const_field(tc
, fc
, range_setter
).cls
['something'].ranges
36 def get_const_unsigned_integer_range(int_ranges
):
37 def range_setter(field
):
40 tc
= get_default_trace_class()
41 fc
= tc
.create_unsigned_enumeration_field_class(32)
42 fc
.add_mapping('something', bt2
.UnsignedIntegerRangeSet(int_ranges
))
44 return create_const_field(tc
, fc
, range_setter
).cls
['something'].ranges
47 class _IntegerRangeTestCase
:
49 self
._rg
= self
._CLS
(self
._def
_lower
, self
._def
_upper
)
50 self
._const
_rg
= list(
51 self
._GET
_CONST
_RANGE
_SET
([(self
._def
_lower
, self
._def
_upper
)])
54 def test_create(self
):
55 self
.assertEqual(self
._rg
.lower
, self
._def
_lower
)
56 self
.assertEqual(self
._rg
.upper
, self
._def
_upper
)
57 self
.assertIs(type(self
._rg
), self
._CLS
)
59 def test_const_create(self
):
60 self
.assertEqual(self
._const
_rg
.lower
, self
._def
_lower
)
61 self
.assertEqual(self
._const
_rg
.upper
, self
._def
_upper
)
62 self
.assertIs(type(self
._const
_rg
), self
._CONST
_CLS
)
64 def test_create_same(self
):
65 rg
= self
._CLS
(self
._def
_lower
, self
._def
_lower
)
66 self
.assertEqual(rg
.lower
, self
._def
_lower
)
67 self
.assertEqual(rg
.upper
, self
._def
_lower
)
69 def test_create_single(self
):
70 rg
= self
._CLS
(self
._def
_lower
)
71 self
.assertEqual(rg
.lower
, self
._def
_lower
)
72 self
.assertEqual(rg
.upper
, self
._def
_lower
)
74 def test_create_wrong_type_lower(self
):
75 with self
.assertRaises(TypeError):
76 self
._CLS
(19.3, self
._def
_upper
)
78 def test_create_wrong_type_upper(self
):
79 with self
.assertRaises(TypeError):
80 self
._CLS
(self
._def
_lower
, 19.3)
82 def test_create_out_of_bound_lower(self
):
83 with self
.assertRaises(ValueError):
84 self
._CLS
(self
._oob
_lower
, self
._def
_upper
)
86 def test_create_out_of_bound_upper(self
):
87 with self
.assertRaises(ValueError):
88 self
._CLS
(self
._def
_lower
, self
._oob
_upper
)
90 def test_create_lower_gt_upper(self
):
91 with self
.assertRaises(ValueError):
92 self
._CLS
(self
._def
_lower
, self
._def
_lower
- 1)
94 def test_contains_lower(self
):
95 self
.assertTrue(self
._rg
.contains(self
._def
_lower
))
97 def test_contains_upper(self
):
98 self
.assertTrue(self
._rg
.contains(self
._def
_upper
))
100 def test_contains_avg(self
):
101 avg
= (self
._def
_lower
+ self
._def
_upper
) // 2
102 self
.assertTrue(self
._rg
.contains(avg
))
104 def test_contains_wrong_type(self
):
105 with self
.assertRaises(TypeError):
106 self
._rg
.contains('allo')
108 def test_contains_out_of_bound(self
):
109 with self
.assertRaises(ValueError):
110 self
._rg
.contains(self
._oob
_upper
)
113 rg
= self
._CLS
(self
._def
_lower
, self
._def
_upper
)
114 self
.assertEqual(rg
, self
._rg
)
116 def test_const_eq(self
):
117 rg
= list(self
._GET
_CONST
_RANGE
_SET
([(self
._def
_lower
, self
._def
_upper
)]))[0]
118 self
.assertEqual(rg
, self
._const
_rg
)
120 def test_const_nonconst_eq(self
):
121 self
.assertEqual(self
._rg
, self
._const
_rg
)
124 rg
= self
._CLS
(self
._def
_lower
, self
._def
_upper
- 1)
125 self
.assertNotEqual(rg
, self
._rg
)
127 def test_const_ne(self
):
128 rg
= list(self
._GET
_CONST
_RANGE
_SET
([(self
._def
_lower
, self
._def
_upper
- 1)]))[
131 self
.assertNotEqual(rg
, self
._const
_rg
)
133 def test_ne_other_type(self
):
134 self
.assertNotEqual(self
._rg
, 48)
137 class UnsignedIntegerRangeTestCase(_IntegerRangeTestCase
, unittest
.TestCase
):
138 _CLS
= bt2
.UnsignedIntegerRange
139 _CONST_CLS
= bt2
._UnsignedIntegerRangeConst
140 _GET_CONST_RANGE_SET
= staticmethod(get_const_unsigned_integer_range
)
147 class SignedIntegerRangeTestCase(_IntegerRangeTestCase
, unittest
.TestCase
):
148 _CLS
= bt2
.SignedIntegerRange
149 _CONST_CLS
= bt2
._SignedIntegerRangeConst
150 _GET_CONST_RANGE_SET
= staticmethod(get_const_signed_integer_range
)
153 _oob_lower
= -(1 << 63) - 1
157 class _IntegerRangeSetTestCase
:
159 self
._rs
= self
._CLS
((self
._range
1, self
._range
2, self
._range
3))
160 self
._const
_rs
= self
._GET
_CONST
_RANGE
_SET
(
161 [self
._range
1, self
._range
2, self
._range
3]
164 def test_create(self
):
165 self
.assertEqual(len(self
._rs
), 3)
166 self
.assertIn(self
._range
1, self
._rs
)
167 self
.assertIn(self
._range
2, self
._rs
)
168 self
.assertIn(self
._range
3, self
._rs
)
169 self
.assertIs(type(self
._range
1), self
._RANGE
_CLS
)
171 def test_const_create(self
):
172 self
.assertEqual(len(self
._const
_rs
), 3)
173 self
.assertIn(self
._range
1, self
._const
_rs
)
174 self
.assertIn(self
._range
2, self
._const
_rs
)
175 self
.assertIn(self
._range
3, self
._const
_rs
)
176 self
.assertIs(type(self
._range
1), self
._RANGE
_CLS
)
178 def test_create_tuples(self
):
181 (self
._range
1.lower
, self
._range
1.upper
),
182 (self
._range
2.lower
, self
._range
2.upper
),
183 (self
._range
3.lower
, self
._range
3.upper
),
186 self
.assertEqual(len(rs
), 3)
187 self
.assertIn(self
._range
1, rs
)
188 self
.assertIn(self
._range
2, rs
)
189 self
.assertIn(self
._range
3, rs
)
191 def test_create_single(self
):
192 rs
= self
._CLS
((self
._range
_same
.lower
,))
193 self
.assertEqual(len(rs
), 1)
194 self
.assertIn(self
._range
_same
, rs
)
196 def test_create_non_iter(self
):
197 with self
.assertRaises(TypeError):
198 self
._rs
= self
._CLS
(23)
200 def test_create_wrong_elem_type(self
):
201 with self
.assertRaises(TypeError):
202 self
._rs
= self
._CLS
((self
._range
1, self
._range
2, 'lel'))
205 self
.assertEqual(len(self
._rs
), 3)
207 def test_contains(self
):
208 rs
= self
._CLS
((self
._range
1, self
._range
2))
209 self
.assertIn(self
._range
1, rs
)
210 self
.assertIn(self
._range
2, rs
)
211 self
.assertNotIn(self
._range
3, rs
)
213 def test_contains_value(self
):
214 rs
= self
._CLS
((self
._range
1, self
._range
2))
215 self
.assertTrue(rs
.contains_value(self
._range
1.upper
))
216 self
.assertTrue(rs
.contains_value(self
._range
2.lower
))
217 self
.assertFalse(rs
.contains_value(self
._range
3.upper
))
219 def test_contains_value_wrong_type(self
):
220 with self
.assertRaises(TypeError):
221 self
._rs
.contains_value('meow')
224 range_list
= list(self
._rs
)
225 self
.assertIn(self
._range
1, range_list
)
226 self
.assertIn(self
._range
2, range_list
)
227 self
.assertIn(self
._range
3, range_list
)
229 for rg
in range_list
:
230 self
.assertIs(type(rg
), self
._RANGE
_CLS
)
232 def test_const_iter(self
):
233 range_list
= list(self
._const
_rs
)
234 self
.assertIn(self
._range
1, range_list
)
235 self
.assertIn(self
._range
2, range_list
)
236 self
.assertIn(self
._range
3, range_list
)
238 for rg
in range_list
:
239 self
.assertIs(type(rg
), self
._CONST
_RANGE
_CLS
)
241 def test_empty(self
):
243 self
.assertEqual(len(rs
), 0)
244 self
.assertEqual(len(list(rs
)), 0)
246 def test_add_range_obj(self
):
247 rs
= self
._CLS
((self
._range
1,))
248 self
.assertEqual(len(rs
), 1)
250 self
.assertEqual(len(rs
), 2)
251 self
.assertIn(self
._range
2, rs
)
253 def test_const_add_range_obj(self
):
254 with self
.assertRaises(AttributeError):
255 self
._const
_rs
.add((12, 4434))
257 def test_discard_not_implemented(self
):
258 with self
.assertRaises(NotImplementedError):
259 self
._rs
.discard(self
._range
2)
261 def test_eq_same_order(self
):
262 rs
= self
._CLS
((self
._range
1, self
._range
2, self
._range
3))
263 self
.assertEqual(self
._rs
, rs
)
265 def test_eq_diff_order(self
):
266 rs
= self
._CLS
((self
._range
1, self
._range
3, self
._range
2))
267 self
.assertEqual(self
._rs
, rs
)
269 def test_eq_same_addr(self
):
270 self
.assertEqual(self
._rs
, self
._rs
)
272 def test_ne_diff_len(self
):
273 rs
= self
._CLS
((self
._range
1, self
._range
2))
274 self
.assertNotEqual(self
._rs
, rs
)
276 def test_ne_diff_values(self
):
277 rs1
= self
._CLS
((self
._range
1, self
._range
2))
278 rs2
= self
._CLS
((self
._range
1, self
._range
3))
279 self
.assertNotEqual(rs1
, rs2
)
281 def test_ne_incompatible_type(self
):
282 self
.assertNotEqual(self
._rs
, object())
285 class UnsignedIntegerRangeSetTestCase(_IntegerRangeSetTestCase
, unittest
.TestCase
):
286 _CLS
= bt2
.UnsignedIntegerRangeSet
287 _CONST_CLS
= bt2
._UnsignedIntegerRangeSetConst
288 _RANGE_CLS
= bt2
.UnsignedIntegerRange
289 _CONST_RANGE_CLS
= bt2
._UnsignedIntegerRangeConst
290 _GET_CONST_RANGE_SET
= staticmethod(get_const_unsigned_integer_range
)
293 self
._range
1 = bt2
.UnsignedIntegerRange(4, 192)
294 self
._range
2 = bt2
.UnsignedIntegerRange(17, 228)
295 self
._range
3 = bt2
.UnsignedIntegerRange(1000, 2000)
296 self
._range
_same
= bt2
.UnsignedIntegerRange(1300, 1300)
300 class SignedIntegerRangeSetTestCase(_IntegerRangeSetTestCase
, unittest
.TestCase
):
301 _CLS
= bt2
.SignedIntegerRangeSet
302 _CONST_CLS
= bt2
._SignedIntegerRangeSetConst
303 _RANGE_CLS
= bt2
.SignedIntegerRange
304 _CONST_RANGE_CLS
= bt2
._SignedIntegerRangeConst
305 _GET_CONST_RANGE_SET
= staticmethod(get_const_signed_integer_range
)
308 self
._range
1 = bt2
.SignedIntegerRange(-1484, -17)
309 self
._range
2 = bt2
.SignedIntegerRange(-101, 1500)
310 self
._range
3 = bt2
.SignedIntegerRange(1948, 2019)
311 self
._range
_same
= bt2
.SignedIntegerRange(-1300, -1300)
315 if __name__
== '__main__':