Move to kernel style SPDX license identifiers
[babeltrace.git] / tests / bindings / python / bt2 / test_integer_range_set.py
CommitLineData
0235b0db 1# SPDX-License-Identifier: GPL-2.0-only
19bb8b5a
PP
2#
3# Copyright (C) 2019 EfficiOS Inc.
4#
19bb8b5a
PP
5
6import bt2
7import unittest
8
1abe38eb 9from utils import get_default_trace_class, create_const_field
fc866000
FD
10
11
12def get_const_signed_integer_range(int_ranges):
13 def range_setter(field):
14 field.value = 12
15
16 tc = get_default_trace_class()
17 fc = tc.create_signed_enumeration_field_class(32)
18 fc.add_mapping('something', bt2.SignedIntegerRangeSet(int_ranges))
19
20 return create_const_field(tc, fc, range_setter).cls['something'].ranges
21
22
23def get_const_unsigned_integer_range(int_ranges):
24 def range_setter(field):
25 field.value = 12
26
27 tc = get_default_trace_class()
28 fc = tc.create_unsigned_enumeration_field_class(32)
29 fc.add_mapping('something', bt2.UnsignedIntegerRangeSet(int_ranges))
30
31 return create_const_field(tc, fc, range_setter).cls['something'].ranges
32
19bb8b5a
PP
33
34class _IntegerRangeTestCase:
35 def setUp(self):
36 self._rg = self._CLS(self._def_lower, self._def_upper)
fc866000
FD
37 self._const_rg = list(
38 self._GET_CONST_RANGE_SET([(self._def_lower, self._def_upper)])
39 )[0]
19bb8b5a
PP
40
41 def test_create(self):
42 self.assertEqual(self._rg.lower, self._def_lower)
43 self.assertEqual(self._rg.upper, self._def_upper)
fc866000
FD
44 self.assertIs(type(self._rg), self._CLS)
45
46 def test_const_create(self):
47 self.assertEqual(self._const_rg.lower, self._def_lower)
48 self.assertEqual(self._const_rg.upper, self._def_upper)
49 self.assertIs(type(self._const_rg), self._CONST_CLS)
19bb8b5a
PP
50
51 def test_create_same(self):
52 rg = self._CLS(self._def_lower, self._def_lower)
53 self.assertEqual(rg.lower, self._def_lower)
54 self.assertEqual(rg.upper, self._def_lower)
55
7a2a2328
PP
56 def test_create_single(self):
57 rg = self._CLS(self._def_lower)
58 self.assertEqual(rg.lower, self._def_lower)
59 self.assertEqual(rg.upper, self._def_lower)
60
19bb8b5a
PP
61 def test_create_wrong_type_lower(self):
62 with self.assertRaises(TypeError):
082db648 63 self._CLS(19.3, self._def_upper)
19bb8b5a 64
43ab0346 65 def test_create_wrong_type_upper(self):
19bb8b5a 66 with self.assertRaises(TypeError):
082db648 67 self._CLS(self._def_lower, 19.3)
19bb8b5a
PP
68
69 def test_create_out_of_bound_lower(self):
70 with self.assertRaises(ValueError):
082db648 71 self._CLS(self._oob_lower, self._def_upper)
19bb8b5a
PP
72
73 def test_create_out_of_bound_upper(self):
74 with self.assertRaises(ValueError):
082db648 75 self._CLS(self._def_lower, self._oob_upper)
19bb8b5a
PP
76
77 def test_create_lower_gt_upper(self):
78 with self.assertRaises(ValueError):
082db648 79 self._CLS(self._def_lower, self._def_lower - 1)
19bb8b5a
PP
80
81 def test_contains_lower(self):
82 self.assertTrue(self._rg.contains(self._def_lower))
83
84 def test_contains_upper(self):
85 self.assertTrue(self._rg.contains(self._def_upper))
86
87 def test_contains_avg(self):
88 avg = (self._def_lower + self._def_upper) // 2
89 self.assertTrue(self._rg.contains(avg))
90
91 def test_contains_wrong_type(self):
92 with self.assertRaises(TypeError):
93 self._rg.contains('allo')
94
95 def test_contains_out_of_bound(self):
96 with self.assertRaises(ValueError):
97 self._rg.contains(self._oob_upper)
98
99 def test_eq(self):
100 rg = self._CLS(self._def_lower, self._def_upper)
101 self.assertEqual(rg, self._rg)
102
fc866000
FD
103 def test_const_eq(self):
104 rg = list(self._GET_CONST_RANGE_SET([(self._def_lower, self._def_upper)]))[0]
105 self.assertEqual(rg, self._const_rg)
106
107 def test_const_nonconst_eq(self):
108 self.assertEqual(self._rg, self._const_rg)
109
19bb8b5a
PP
110 def test_ne(self):
111 rg = self._CLS(self._def_lower, self._def_upper - 1)
112 self.assertNotEqual(rg, self._rg)
113
fc866000
FD
114 def test_const_ne(self):
115 rg = list(self._GET_CONST_RANGE_SET([(self._def_lower, self._def_upper - 1)]))[
116 0
117 ]
118 self.assertNotEqual(rg, self._const_rg)
119
19bb8b5a
PP
120 def test_ne_other_type(self):
121 self.assertNotEqual(self._rg, 48)
122
123
124class UnsignedIntegerRangeTestCase(_IntegerRangeTestCase, unittest.TestCase):
125 _CLS = bt2.UnsignedIntegerRange
fc866000
FD
126 _CONST_CLS = bt2._UnsignedIntegerRangeConst
127 _GET_CONST_RANGE_SET = staticmethod(get_const_unsigned_integer_range)
19bb8b5a
PP
128 _def_lower = 23
129 _def_upper = 18293
130 _oob_lower = -1
131 _oob_upper = 1 << 64
132
133
134class SignedIntegerRangeTestCase(_IntegerRangeTestCase, unittest.TestCase):
135 _CLS = bt2.SignedIntegerRange
fc866000
FD
136 _CONST_CLS = bt2._SignedIntegerRangeConst
137 _GET_CONST_RANGE_SET = staticmethod(get_const_signed_integer_range)
19bb8b5a
PP
138 _def_lower = -184
139 _def_upper = 11547
140 _oob_lower = -(1 << 63) - 1
141 _oob_upper = 1 << 63
142
143
144class _IntegerRangeSetTestCase:
145 def setUp(self):
146 self._rs = self._CLS((self._range1, self._range2, self._range3))
fc866000
FD
147 self._const_rs = self._GET_CONST_RANGE_SET(
148 [self._range1, self._range2, self._range3]
149 )
19bb8b5a
PP
150
151 def test_create(self):
152 self.assertEqual(len(self._rs), 3)
153 self.assertIn(self._range1, self._rs)
154 self.assertIn(self._range2, self._rs)
155 self.assertIn(self._range3, self._rs)
fc866000
FD
156 self.assertIs(type(self._range1), self._RANGE_CLS)
157
158 def test_const_create(self):
159 self.assertEqual(len(self._const_rs), 3)
160 self.assertIn(self._range1, self._const_rs)
161 self.assertIn(self._range2, self._const_rs)
162 self.assertIn(self._range3, self._const_rs)
163 self.assertIs(type(self._range1), self._RANGE_CLS)
19bb8b5a
PP
164
165 def test_create_tuples(self):
cfbd7cf3
FD
166 rs = self._CLS(
167 (
168 (self._range1.lower, self._range1.upper),
169 (self._range2.lower, self._range2.upper),
170 (self._range3.lower, self._range3.upper),
171 )
172 )
19bb8b5a
PP
173 self.assertEqual(len(rs), 3)
174 self.assertIn(self._range1, rs)
175 self.assertIn(self._range2, rs)
176 self.assertIn(self._range3, rs)
177
7a2a2328
PP
178 def test_create_single(self):
179 rs = self._CLS((self._range_same.lower,))
180 self.assertEqual(len(rs), 1)
181 self.assertIn(self._range_same, rs)
182
19bb8b5a
PP
183 def test_create_non_iter(self):
184 with self.assertRaises(TypeError):
185 self._rs = self._CLS(23)
186
187 def test_create_wrong_elem_type(self):
188 with self.assertRaises(TypeError):
7a2a2328 189 self._rs = self._CLS((self._range1, self._range2, 'lel'))
19bb8b5a
PP
190
191 def test_len(self):
192 self.assertEqual(len(self._rs), 3)
193
194 def test_contains(self):
195 rs = self._CLS((self._range1, self._range2))
196 self.assertIn(self._range1, rs)
197 self.assertIn(self._range2, rs)
198 self.assertNotIn(self._range3, rs)
199
200 def test_contains_value(self):
201 rs = self._CLS((self._range1, self._range2))
202 self.assertTrue(rs.contains_value(self._range1.upper))
203 self.assertTrue(rs.contains_value(self._range2.lower))
204 self.assertFalse(rs.contains_value(self._range3.upper))
205
206 def test_contains_value_wrong_type(self):
207 with self.assertRaises(TypeError):
208 self._rs.contains_value('meow')
209
210 def test_iter(self):
211 range_list = list(self._rs)
212 self.assertIn(self._range1, range_list)
213 self.assertIn(self._range2, range_list)
214 self.assertIn(self._range3, range_list)
215
fc866000
FD
216 for rg in range_list:
217 self.assertIs(type(rg), self._RANGE_CLS)
218
219 def test_const_iter(self):
220 range_list = list(self._const_rs)
221 self.assertIn(self._range1, range_list)
222 self.assertIn(self._range2, range_list)
223 self.assertIn(self._range3, range_list)
224
225 for rg in range_list:
226 self.assertIs(type(rg), self._CONST_RANGE_CLS)
227
19bb8b5a
PP
228 def test_empty(self):
229 rs = self._CLS()
230 self.assertEqual(len(rs), 0)
231 self.assertEqual(len(list(rs)), 0)
232
233 def test_add_range_obj(self):
234 rs = self._CLS((self._range1,))
235 self.assertEqual(len(rs), 1)
236 rs.add(self._range2)
237 self.assertEqual(len(rs), 2)
238 self.assertIn(self._range2, rs)
239
fc866000
FD
240 def test_const_add_range_obj(self):
241 with self.assertRaises(AttributeError):
242 self._const_rs.add((12, 4434))
243
19bb8b5a
PP
244 def test_discard_not_implemented(self):
245 with self.assertRaises(NotImplementedError):
246 self._rs.discard(self._range2)
247
248 def test_eq_same_order(self):
249 rs = self._CLS((self._range1, self._range2, self._range3))
250 self.assertEqual(self._rs, rs)
251
252 def test_eq_diff_order(self):
253 rs = self._CLS((self._range1, self._range3, self._range2))
254 self.assertEqual(self._rs, rs)
255
256 def test_eq_same_addr(self):
257 self.assertEqual(self._rs, self._rs)
258
259 def test_ne_diff_len(self):
260 rs = self._CLS((self._range1, self._range2))
261 self.assertNotEqual(self._rs, rs)
262
263 def test_ne_diff_values(self):
264 rs1 = self._CLS((self._range1, self._range2))
265 rs2 = self._CLS((self._range1, self._range3))
266 self.assertNotEqual(rs1, rs2)
267
268 def test_ne_incompatible_type(self):
269 self.assertNotEqual(self._rs, object())
270
271
272class UnsignedIntegerRangeSetTestCase(_IntegerRangeSetTestCase, unittest.TestCase):
273 _CLS = bt2.UnsignedIntegerRangeSet
fc866000
FD
274 _CONST_CLS = bt2._UnsignedIntegerRangeSetConst
275 _RANGE_CLS = bt2.UnsignedIntegerRange
276 _CONST_RANGE_CLS = bt2._UnsignedIntegerRangeConst
277 _GET_CONST_RANGE_SET = staticmethod(get_const_unsigned_integer_range)
19bb8b5a
PP
278
279 def setUp(self):
280 self._range1 = bt2.UnsignedIntegerRange(4, 192)
281 self._range2 = bt2.UnsignedIntegerRange(17, 228)
282 self._range3 = bt2.UnsignedIntegerRange(1000, 2000)
7a2a2328 283 self._range_same = bt2.UnsignedIntegerRange(1300, 1300)
19bb8b5a
PP
284 super().setUp()
285
286
287class SignedIntegerRangeSetTestCase(_IntegerRangeSetTestCase, unittest.TestCase):
288 _CLS = bt2.SignedIntegerRangeSet
fc866000
FD
289 _CONST_CLS = bt2._SignedIntegerRangeSetConst
290 _RANGE_CLS = bt2.SignedIntegerRange
291 _CONST_RANGE_CLS = bt2._SignedIntegerRangeConst
292 _GET_CONST_RANGE_SET = staticmethod(get_const_signed_integer_range)
19bb8b5a
PP
293
294 def setUp(self):
295 self._range1 = bt2.SignedIntegerRange(-1484, -17)
296 self._range2 = bt2.SignedIntegerRange(-101, 1500)
297 self._range3 = bt2.SignedIntegerRange(1948, 2019)
7a2a2328 298 self._range_same = bt2.SignedIntegerRange(-1300, -1300)
19bb8b5a 299 super().setUp()
d14ddbba
SM
300
301
302if __name__ == '__main__':
303 unittest.main()
This page took 0.049618 seconds and 4 git commands to generate.