1 from functools
import partial
, partialmethod
10 class _TestCopySimple
:
12 cpy
= copy
.copy(self
._def
)
13 self
.assertIsNot(cpy
, self
._def
)
14 self
.assertNotEqual(cpy
.addr
, self
._def
.addr
)
15 self
.assertEqual(cpy
, self
._def
)
17 def test_deepcopy(self
):
18 cpy
= copy
.deepcopy(self
._def
)
19 self
.assertIsNot(cpy
, self
._def
)
20 self
.assertNotEqual(cpy
.addr
, self
._def
.addr
)
21 self
.assertEqual(cpy
, self
._def
)
30 class _TestNumericField(_TestCopySimple
):
31 def _binop(self
, op
, rhs
):
36 if isinstance(rhs
, (bt2
.fields
._IntegerField
, bt2
.fields
._FloatingPointNumberField
)):
37 comp_value
= rhs
.value
40 r
= op(self
._def
, rhs
)
41 except Exception as e
:
45 rv
= op(self
._def
_value
, comp_value
)
46 except Exception as e
:
49 if rexc
is not None or rvexc
is not None:
50 # at least one of the operations raised an exception: in
51 # this case both operations should have raised the same
52 # type of exception (division by zero, bit shift with a
53 # floating point number operand, etc.)
54 self
.assertIs(type(rexc
), type(rvexc
))
59 def _unaryop(self
, op
):
65 except Exception as e
:
69 rv
= op(self
._def
_value
)
70 except Exception as e
:
73 if rexc
is not None or rvexc
is not None:
74 # at least one of the operations raised an exception: in
75 # this case both operations should have raised the same
76 # type of exception (division by zero, bit shift with a
77 # floating point number operand, etc.)
78 self
.assertIs(type(rexc
), type(rvexc
))
83 def _test_unaryop_type(self
, op
):
84 r
, rv
= self
._unaryop
(op
)
89 self
.assertIsInstance(r
, type(rv
))
91 def _test_unaryop_value(self
, op
):
92 r
, rv
= self
._unaryop
(op
)
97 self
.assertEqual(r
, rv
)
99 def _test_unaryop_addr_same(self
, op
):
100 addr_before
= self
._def
.addr
102 self
.assertEqual(self
._def
.addr
, addr_before
)
104 def _test_unaryop_value_same(self
, op
):
105 value_before
= self
._def
.value
107 self
.assertEqual(self
._def
.value
, value_before
)
109 def _test_binop_type(self
, op
, rhs
):
110 r
, rv
= self
._binop
(op
, rhs
)
115 if op
in _COMP_BINOPS
:
116 # __eq__() and __ne__() always return a 'bool' object
117 self
.assertIsInstance(r
, bool)
119 self
.assertIsInstance(r
, type(rv
))
121 def _test_binop_value(self
, op
, rhs
):
122 r
, rv
= self
._binop
(op
, rhs
)
127 self
.assertEqual(r
, rv
)
129 def _test_binop_lhs_addr_same(self
, op
, rhs
):
130 addr_before
= self
._def
.addr
131 r
, rv
= self
._binop
(op
, rhs
)
132 self
.assertEqual(self
._def
.addr
, addr_before
)
134 def _test_binop_lhs_value_same(self
, op
, rhs
):
135 value_before
= self
._def
.value
136 r
, rv
= self
._binop
(op
, rhs
)
137 self
.assertEqual(self
._def
.value
, value_before
)
139 def _test_binop_invalid_unknown(self
, op
):
140 if op
in _COMP_BINOPS
:
141 self
.skipTest('not testing')
146 with self
.assertRaises(TypeError):
149 def _test_binop_invalid_none(self
, op
):
150 if op
in _COMP_BINOPS
:
151 self
.skipTest('not testing')
153 with self
.assertRaises(TypeError):
156 def _test_ibinop_value(self
, op
, rhs
):
157 r
, rv
= self
._binop
(op
, rhs
)
162 # The inplace operators are special for field objects because
163 # they do not return a new, immutable object like it's the case
164 # for Python numbers. In Python, `a += 2`, where `a` is a number
165 # object, assigns a new number object reference to `a`, dropping
166 # the old reference. Since BT's field objects are mutable, we
167 # modify their internal value with the inplace operators. This
168 # means however that we can lose data in the process, for
171 # int_value_obj += 3.3
173 # Here, if `int_value_obj` is a Python `int` with the value 2,
174 # it would be a `float` object after this, holding the value
175 # 5.3. In our case, if `int_value_obj` is an integer field
176 # object, 3.3 is converted to an `int` object (3) and added to
177 # the current value of `int_value_obj`, so after this the value
178 # of the object is 5. This does not compare to 5.3, which is
179 # why we also use the `int()` type here.
180 if isinstance(self
._def
, bt2
.fields
._IntegerField
):
183 self
.assertEqual(r
, rv
)
185 def _test_ibinop_type(self
, op
, rhs
):
186 r
, rv
= self
._binop
(op
, rhs
)
191 self
.assertIs(r
, self
._def
)
193 def _test_ibinop_invalid_unknown(self
, op
):
197 with self
.assertRaises(TypeError):
200 def _test_ibinop_invalid_none(self
, op
):
201 with self
.assertRaises(TypeError):
204 def _test_binop_rhs_false(self
, test_cb
, op
):
207 def _test_binop_rhs_true(self
, test_cb
, op
):
210 def _test_binop_rhs_pos_int(self
, test_cb
, op
):
213 def _test_binop_rhs_neg_int(self
, test_cb
, op
):
216 def _test_binop_rhs_zero_int(self
, test_cb
, op
):
219 def _test_binop_rhs_pos_vint(self
, test_cb
, op
):
220 test_cb(op
, bt2
.create_value(2))
222 def _test_binop_rhs_neg_vint(self
, test_cb
, op
):
223 test_cb(op
, bt2
.create_value(-23))
225 def _test_binop_rhs_zero_vint(self
, test_cb
, op
):
226 test_cb(op
, bt2
.create_value(0))
228 def _test_binop_rhs_pos_float(self
, test_cb
, op
):
231 def _test_binop_rhs_neg_float(self
, test_cb
, op
):
234 def _test_binop_rhs_zero_float(self
, test_cb
, op
):
237 def _test_binop_rhs_pos_vfloat(self
, test_cb
, op
):
238 test_cb(op
, bt2
.create_value(2.2))
240 def _test_binop_rhs_neg_vfloat(self
, test_cb
, op
):
241 test_cb(op
, bt2
.create_value(-23.4))
243 def _test_binop_rhs_zero_vfloat(self
, test_cb
, op
):
244 test_cb(op
, bt2
.create_value(0.0))
246 def _test_binop_type_false(self
, op
):
247 self
._test
_binop
_rhs
_false
(self
._test
_binop
_type
, op
)
249 def _test_binop_type_true(self
, op
):
250 self
._test
_binop
_rhs
_true
(self
._test
_binop
_type
, op
)
252 def _test_binop_type_pos_int(self
, op
):
253 self
._test
_binop
_rhs
_pos
_int
(self
._test
_binop
_type
, op
)
255 def _test_binop_type_neg_int(self
, op
):
256 self
._test
_binop
_rhs
_neg
_int
(self
._test
_binop
_type
, op
)
258 def _test_binop_type_zero_int(self
, op
):
259 self
._test
_binop
_rhs
_zero
_int
(self
._test
_binop
_type
, op
)
261 def _test_binop_type_pos_vint(self
, op
):
262 self
._test
_binop
_rhs
_pos
_vint
(self
._test
_binop
_type
, op
)
264 def _test_binop_type_neg_vint(self
, op
):
265 self
._test
_binop
_rhs
_neg
_vint
(self
._test
_binop
_type
, op
)
267 def _test_binop_type_zero_vint(self
, op
):
268 self
._test
_binop
_rhs
_zero
_vint
(self
._test
_binop
_type
, op
)
270 def _test_binop_type_pos_float(self
, op
):
271 self
._test
_binop
_rhs
_pos
_float
(self
._test
_binop
_type
, op
)
273 def _test_binop_type_neg_float(self
, op
):
274 self
._test
_binop
_rhs
_neg
_float
(self
._test
_binop
_type
, op
)
276 def _test_binop_type_zero_float(self
, op
):
277 self
._test
_binop
_rhs
_zero
_float
(self
._test
_binop
_type
, op
)
279 def _test_binop_type_pos_vfloat(self
, op
):
280 self
._test
_binop
_rhs
_pos
_vfloat
(self
._test
_binop
_type
, op
)
282 def _test_binop_type_neg_vfloat(self
, op
):
283 self
._test
_binop
_rhs
_neg
_vfloat
(self
._test
_binop
_type
, op
)
285 def _test_binop_type_zero_vfloat(self
, op
):
286 self
._test
_binop
_rhs
_zero
_vfloat
(self
._test
_binop
_type
, op
)
288 def _test_binop_value_false(self
, op
):
289 self
._test
_binop
_rhs
_false
(self
._test
_binop
_value
, op
)
291 def _test_binop_value_true(self
, op
):
292 self
._test
_binop
_rhs
_true
(self
._test
_binop
_value
, op
)
294 def _test_binop_value_pos_int(self
, op
):
295 self
._test
_binop
_rhs
_pos
_int
(self
._test
_binop
_value
, op
)
297 def _test_binop_value_neg_int(self
, op
):
298 self
._test
_binop
_rhs
_neg
_int
(self
._test
_binop
_value
, op
)
300 def _test_binop_value_zero_int(self
, op
):
301 self
._test
_binop
_rhs
_zero
_int
(self
._test
_binop
_value
, op
)
303 def _test_binop_value_pos_vint(self
, op
):
304 self
._test
_binop
_rhs
_pos
_vint
(self
._test
_binop
_value
, op
)
306 def _test_binop_value_neg_vint(self
, op
):
307 self
._test
_binop
_rhs
_neg
_vint
(self
._test
_binop
_value
, op
)
309 def _test_binop_value_zero_vint(self
, op
):
310 self
._test
_binop
_rhs
_zero
_vint
(self
._test
_binop
_value
, op
)
312 def _test_binop_value_pos_float(self
, op
):
313 self
._test
_binop
_rhs
_pos
_float
(self
._test
_binop
_value
, op
)
315 def _test_binop_value_neg_float(self
, op
):
316 self
._test
_binop
_rhs
_neg
_float
(self
._test
_binop
_value
, op
)
318 def _test_binop_value_zero_float(self
, op
):
319 self
._test
_binop
_rhs
_zero
_float
(self
._test
_binop
_value
, op
)
321 def _test_binop_value_pos_vfloat(self
, op
):
322 self
._test
_binop
_rhs
_pos
_vfloat
(self
._test
_binop
_value
, op
)
324 def _test_binop_value_neg_vfloat(self
, op
):
325 self
._test
_binop
_rhs
_neg
_vfloat
(self
._test
_binop
_value
, op
)
327 def _test_binop_value_zero_vfloat(self
, op
):
328 self
._test
_binop
_rhs
_zero
_vfloat
(self
._test
_binop
_value
, op
)
330 def _test_binop_lhs_addr_same_false(self
, op
):
331 self
._test
_binop
_rhs
_false
(self
._test
_binop
_lhs
_addr
_same
, op
)
333 def _test_binop_lhs_addr_same_true(self
, op
):
334 self
._test
_binop
_rhs
_true
(self
._test
_binop
_lhs
_addr
_same
, op
)
336 def _test_binop_lhs_addr_same_pos_int(self
, op
):
337 self
._test
_binop
_rhs
_pos
_int
(self
._test
_binop
_lhs
_addr
_same
, op
)
339 def _test_binop_lhs_addr_same_neg_int(self
, op
):
340 self
._test
_binop
_rhs
_neg
_int
(self
._test
_binop
_lhs
_addr
_same
, op
)
342 def _test_binop_lhs_addr_same_zero_int(self
, op
):
343 self
._test
_binop
_rhs
_zero
_int
(self
._test
_binop
_lhs
_addr
_same
, op
)
345 def _test_binop_lhs_addr_same_pos_vint(self
, op
):
346 self
._test
_binop
_rhs
_pos
_vint
(self
._test
_binop
_lhs
_addr
_same
, op
)
348 def _test_binop_lhs_addr_same_neg_vint(self
, op
):
349 self
._test
_binop
_rhs
_neg
_vint
(self
._test
_binop
_lhs
_addr
_same
, op
)
351 def _test_binop_lhs_addr_same_zero_vint(self
, op
):
352 self
._test
_binop
_rhs
_zero
_vint
(self
._test
_binop
_lhs
_addr
_same
, op
)
354 def _test_binop_lhs_addr_same_pos_float(self
, op
):
355 self
._test
_binop
_rhs
_pos
_float
(self
._test
_binop
_lhs
_addr
_same
, op
)
357 def _test_binop_lhs_addr_same_neg_float(self
, op
):
358 self
._test
_binop
_rhs
_neg
_float
(self
._test
_binop
_lhs
_addr
_same
, op
)
360 def _test_binop_lhs_addr_same_zero_float(self
, op
):
361 self
._test
_binop
_rhs
_zero
_float
(self
._test
_binop
_lhs
_addr
_same
, op
)
363 def _test_binop_lhs_addr_same_pos_vfloat(self
, op
):
364 self
._test
_binop
_rhs
_pos
_vfloat
(self
._test
_binop
_lhs
_addr
_same
, op
)
366 def _test_binop_lhs_addr_same_neg_vfloat(self
, op
):
367 self
._test
_binop
_rhs
_neg
_vfloat
(self
._test
_binop
_lhs
_addr
_same
, op
)
369 def _test_binop_lhs_addr_same_zero_vfloat(self
, op
):
370 self
._test
_binop
_rhs
_zero
_vfloat
(self
._test
_binop
_lhs
_addr
_same
, op
)
372 def _test_binop_lhs_value_same_false(self
, op
):
373 self
._test
_binop
_rhs
_false
(self
._test
_binop
_lhs
_value
_same
, op
)
375 def _test_binop_lhs_value_same_true(self
, op
):
376 self
._test
_binop
_rhs
_true
(self
._test
_binop
_lhs
_value
_same
, op
)
378 def _test_binop_lhs_value_same_pos_int(self
, op
):
379 self
._test
_binop
_rhs
_pos
_int
(self
._test
_binop
_lhs
_value
_same
, op
)
381 def _test_binop_lhs_value_same_neg_int(self
, op
):
382 self
._test
_binop
_rhs
_neg
_int
(self
._test
_binop
_lhs
_value
_same
, op
)
384 def _test_binop_lhs_value_same_zero_int(self
, op
):
385 self
._test
_binop
_rhs
_zero
_int
(self
._test
_binop
_lhs
_value
_same
, op
)
387 def _test_binop_lhs_value_same_pos_vint(self
, op
):
388 self
._test
_binop
_rhs
_pos
_vint
(self
._test
_binop
_lhs
_value
_same
, op
)
390 def _test_binop_lhs_value_same_neg_vint(self
, op
):
391 self
._test
_binop
_rhs
_neg
_vint
(self
._test
_binop
_lhs
_value
_same
, op
)
393 def _test_binop_lhs_value_same_zero_vint(self
, op
):
394 self
._test
_binop
_rhs
_zero
_vint
(self
._test
_binop
_lhs
_value
_same
, op
)
396 def _test_binop_lhs_value_same_pos_float(self
, op
):
397 self
._test
_binop
_rhs
_pos
_float
(self
._test
_binop
_lhs
_value
_same
, op
)
399 def _test_binop_lhs_value_same_neg_float(self
, op
):
400 self
._test
_binop
_rhs
_neg
_float
(self
._test
_binop
_lhs
_value
_same
, op
)
402 def _test_binop_lhs_value_same_zero_float(self
, op
):
403 self
._test
_binop
_rhs
_zero
_float
(self
._test
_binop
_lhs
_value
_same
, op
)
405 def _test_binop_lhs_value_same_pos_vfloat(self
, op
):
406 self
._test
_binop
_rhs
_pos
_vfloat
(self
._test
_binop
_lhs
_value
_same
, op
)
408 def _test_binop_lhs_value_same_neg_vfloat(self
, op
):
409 self
._test
_binop
_rhs
_neg
_vfloat
(self
._test
_binop
_lhs
_value
_same
, op
)
411 def _test_binop_lhs_value_same_zero_vfloat(self
, op
):
412 self
._test
_binop
_rhs
_zero
_vfloat
(self
._test
_binop
_lhs
_value
_same
, op
)
414 def _test_ibinop_type_false(self
, op
):
415 self
._test
_binop
_rhs
_false
(self
._test
_ibinop
_type
, op
)
417 def _test_ibinop_type_true(self
, op
):
418 self
._test
_binop
_rhs
_true
(self
._test
_ibinop
_type
, op
)
420 def _test_ibinop_type_pos_int(self
, op
):
421 self
._test
_binop
_rhs
_pos
_int
(self
._test
_ibinop
_type
, op
)
423 def _test_ibinop_type_neg_int(self
, op
):
424 self
._test
_binop
_rhs
_neg
_int
(self
._test
_ibinop
_type
, op
)
426 def _test_ibinop_type_zero_int(self
, op
):
427 self
._test
_binop
_rhs
_zero
_int
(self
._test
_ibinop
_type
, op
)
429 def _test_ibinop_type_pos_vint(self
, op
):
430 self
._test
_binop
_rhs
_pos
_vint
(self
._test
_ibinop
_type
, op
)
432 def _test_ibinop_type_neg_vint(self
, op
):
433 self
._test
_binop
_rhs
_neg
_vint
(self
._test
_ibinop
_type
, op
)
435 def _test_ibinop_type_zero_vint(self
, op
):
436 self
._test
_binop
_rhs
_zero
_vint
(self
._test
_ibinop
_type
, op
)
438 def _test_ibinop_type_pos_float(self
, op
):
439 self
._test
_binop
_rhs
_pos
_float
(self
._test
_ibinop
_type
, op
)
441 def _test_ibinop_type_neg_float(self
, op
):
442 self
._test
_binop
_rhs
_neg
_float
(self
._test
_ibinop
_type
, op
)
444 def _test_ibinop_type_zero_float(self
, op
):
445 self
._test
_binop
_rhs
_zero
_float
(self
._test
_ibinop
_type
, op
)
447 def _test_ibinop_type_pos_vfloat(self
, op
):
448 self
._test
_binop
_rhs
_pos
_vfloat
(self
._test
_ibinop
_type
, op
)
450 def _test_ibinop_type_neg_vfloat(self
, op
):
451 self
._test
_binop
_rhs
_neg
_vfloat
(self
._test
_ibinop
_type
, op
)
453 def _test_ibinop_type_zero_vfloat(self
, op
):
454 self
._test
_binop
_rhs
_zero
_vfloat
(self
._test
_ibinop
_type
, op
)
456 def _test_ibinop_value_false(self
, op
):
457 self
._test
_binop
_rhs
_false
(self
._test
_ibinop
_value
, op
)
459 def _test_ibinop_value_true(self
, op
):
460 self
._test
_binop
_rhs
_true
(self
._test
_ibinop
_value
, op
)
462 def _test_ibinop_value_pos_int(self
, op
):
463 self
._test
_binop
_rhs
_pos
_int
(self
._test
_ibinop
_value
, op
)
465 def _test_ibinop_value_neg_int(self
, op
):
466 self
._test
_binop
_rhs
_neg
_int
(self
._test
_ibinop
_value
, op
)
468 def _test_ibinop_value_zero_int(self
, op
):
469 self
._test
_binop
_rhs
_zero
_int
(self
._test
_ibinop
_value
, op
)
471 def _test_ibinop_value_pos_vint(self
, op
):
472 self
._test
_binop
_rhs
_pos
_vint
(self
._test
_ibinop
_value
, op
)
474 def _test_ibinop_value_neg_vint(self
, op
):
475 self
._test
_binop
_rhs
_neg
_vint
(self
._test
_ibinop
_value
, op
)
477 def _test_ibinop_value_zero_vint(self
, op
):
478 self
._test
_binop
_rhs
_zero
_vint
(self
._test
_ibinop
_value
, op
)
480 def _test_ibinop_value_pos_float(self
, op
):
481 self
._test
_binop
_rhs
_pos
_float
(self
._test
_ibinop
_value
, op
)
483 def _test_ibinop_value_neg_float(self
, op
):
484 self
._test
_binop
_rhs
_neg
_float
(self
._test
_ibinop
_value
, op
)
486 def _test_ibinop_value_zero_float(self
, op
):
487 self
._test
_binop
_rhs
_zero
_float
(self
._test
_ibinop
_value
, op
)
489 def _test_ibinop_value_pos_vfloat(self
, op
):
490 self
._test
_binop
_rhs
_pos
_vfloat
(self
._test
_ibinop
_value
, op
)
492 def _test_ibinop_value_neg_vfloat(self
, op
):
493 self
._test
_binop
_rhs
_neg
_vfloat
(self
._test
_ibinop
_value
, op
)
495 def _test_ibinop_value_zero_vfloat(self
, op
):
496 self
._test
_binop
_rhs
_zero
_vfloat
(self
._test
_ibinop
_value
, op
)
498 def test_bool_op(self
):
499 self
.assertEqual(bool(self
._def
), bool(self
._def
_value
))
501 def test_int_op(self
):
502 self
.assertEqual(int(self
._def
), int(self
._def
_value
))
504 def test_float_op(self
):
505 self
.assertEqual(float(self
._def
), float(self
._def
_value
))
507 def test_complex_op(self
):
508 self
.assertEqual(complex(self
._def
), complex(self
._def
_value
))
510 def test_str_op(self
):
511 self
.assertEqual(str(self
._def
), str(self
._def
_value
))
513 def test_eq_none(self
):
514 self
.assertFalse(self
._def
== None)
516 def test_ne_none(self
):
517 self
.assertTrue(self
._def
!= None)
527 ('add', operator
.add
),
528 ('radd', lambda a
, b
: operator
.add(b
, a
)),
529 ('and', operator
.and_
),
530 ('rand', lambda a
, b
: operator
.and_(b
, a
)),
531 ('floordiv', operator
.floordiv
),
532 ('rfloordiv', lambda a
, b
: operator
.floordiv(b
, a
)),
533 ('lshift', operator
.lshift
),
534 ('rlshift', lambda a
, b
: operator
.lshift(b
, a
)),
535 ('mod', operator
.mod
),
536 ('rmod', lambda a
, b
: operator
.mod(b
, a
)),
537 ('mul', operator
.mul
),
538 ('rmul', lambda a
, b
: operator
.mul(b
, a
)),
539 ('or', operator
.or_
),
540 ('ror', lambda a
, b
: operator
.or_(b
, a
)),
541 ('pow', operator
.pow),
542 ('rpow', lambda a
, b
: operator
.pow(b
, a
)),
543 ('rshift', operator
.rshift
),
544 ('rrshift', lambda a
, b
: operator
.rshift(b
, a
)),
545 ('sub', operator
.sub
),
546 ('rsub', lambda a
, b
: operator
.sub(b
, a
)),
547 ('truediv', operator
.truediv
),
548 ('rtruediv', lambda a
, b
: operator
.truediv(b
, a
)),
549 ('xor', operator
.xor
),
550 ('rxor', lambda a
, b
: operator
.xor(b
, a
)),
555 ('iadd', operator
.iadd
),
556 ('iand', operator
.iand
),
557 ('ifloordiv', operator
.ifloordiv
),
558 ('ilshift', operator
.ilshift
),
559 ('imod', operator
.imod
),
560 ('imul', operator
.imul
),
561 ('ior', operator
.ior
),
562 ('ipow', operator
.ipow
),
563 ('irshift', operator
.irshift
),
564 ('isub', operator
.isub
),
565 ('itruediv', operator
.itruediv
),
566 ('ixor', operator
.ixor
),
571 ('neg', operator
.neg
),
572 ('pos', operator
.pos
),
573 ('abs', operator
.abs),
574 ('invert', operator
.invert
),
576 ('round_0', partial(round, ndigits
=0)),
577 ('round_1', partial(round, ndigits
=1)),
578 ('round_2', partial(round, ndigits
=2)),
579 ('round_3', partial(round, ndigits
=3)),
581 ('floor', math
.floor
),
582 ('trunc', math
.trunc
),
586 def _inject_numeric_testing_methods(cls
):
587 def test_binop_name(suffix
):
588 return 'test_binop_{}_{}'.format(name
, suffix
)
590 def test_ibinop_name(suffix
):
591 return 'test_ibinop_{}_{}'.format(name
, suffix
)
593 def test_unaryop_name(suffix
):
594 return 'test_unaryop_{}_{}'.format(name
, suffix
)
596 # inject testing methods for each binary operation
597 for name
, binop
in _BINOPS
:
599 setattr(cls
, test_binop_name('invalid_unknown'), partialmethod(_TestNumericField
._test
_binop
_invalid
_unknown
, op
=binop
))
600 setattr(cls
, test_binop_name('invalid_none'), partialmethod(_TestNumericField
._test
_binop
_invalid
_none
, op
=binop
))
601 setattr(cls
, test_binop_name('type_true'), partialmethod(_TestNumericField
._test
_binop
_type
_true
, op
=binop
))
602 setattr(cls
, test_binop_name('type_pos_int'), partialmethod(_TestNumericField
._test
_binop
_type
_pos
_int
, op
=binop
))
603 setattr(cls
, test_binop_name('type_pos_vint'), partialmethod(_TestNumericField
._test
_binop
_type
_pos
_vint
, op
=binop
))
604 setattr(cls
, test_binop_name('value_true'), partialmethod(_TestNumericField
._test
_binop
_value
_true
, op
=binop
))
605 setattr(cls
, test_binop_name('value_pos_int'), partialmethod(_TestNumericField
._test
_binop
_value
_pos
_int
, op
=binop
))
606 setattr(cls
, test_binop_name('value_pos_vint'), partialmethod(_TestNumericField
._test
_binop
_value
_pos
_vint
, op
=binop
))
607 setattr(cls
, test_binop_name('lhs_addr_same_true'), partialmethod(_TestNumericField
._test
_binop
_lhs
_addr
_same
_true
, op
=binop
))
608 setattr(cls
, test_binop_name('lhs_addr_same_pos_int'), partialmethod(_TestNumericField
._test
_binop
_lhs
_addr
_same
_pos
_int
, op
=binop
))
609 setattr(cls
, test_binop_name('lhs_addr_same_pos_vint'), partialmethod(_TestNumericField
._test
_binop
_lhs
_addr
_same
_pos
_vint
, op
=binop
))
610 setattr(cls
, test_binop_name('lhs_value_same_true'), partialmethod(_TestNumericField
._test
_binop
_lhs
_value
_same
_true
, op
=binop
))
611 setattr(cls
, test_binop_name('lhs_value_same_pos_int'), partialmethod(_TestNumericField
._test
_binop
_lhs
_value
_same
_pos
_int
, op
=binop
))
612 setattr(cls
, test_binop_name('lhs_value_same_pos_vint'), partialmethod(_TestNumericField
._test
_binop
_lhs
_value
_same
_pos
_vint
, op
=binop
))
613 setattr(cls
, test_binop_name('type_neg_int'), partialmethod(_TestNumericField
._test
_binop
_type
_neg
_int
, op
=binop
))
614 setattr(cls
, test_binop_name('type_neg_vint'), partialmethod(_TestNumericField
._test
_binop
_type
_neg
_vint
, op
=binop
))
615 setattr(cls
, test_binop_name('value_neg_int'), partialmethod(_TestNumericField
._test
_binop
_value
_neg
_int
, op
=binop
))
616 setattr(cls
, test_binop_name('value_neg_vint'), partialmethod(_TestNumericField
._test
_binop
_value
_neg
_vint
, op
=binop
))
617 setattr(cls
, test_binop_name('lhs_addr_same_neg_int'), partialmethod(_TestNumericField
._test
_binop
_lhs
_addr
_same
_neg
_int
, op
=binop
))
618 setattr(cls
, test_binop_name('lhs_addr_same_neg_vint'), partialmethod(_TestNumericField
._test
_binop
_lhs
_addr
_same
_neg
_vint
, op
=binop
))
619 setattr(cls
, test_binop_name('lhs_value_same_neg_int'), partialmethod(_TestNumericField
._test
_binop
_lhs
_value
_same
_neg
_int
, op
=binop
))
620 setattr(cls
, test_binop_name('lhs_value_same_neg_vint'), partialmethod(_TestNumericField
._test
_binop
_lhs
_value
_same
_neg
_vint
, op
=binop
))
621 setattr(cls
, test_binop_name('type_false'), partialmethod(_TestNumericField
._test
_binop
_type
_false
, op
=binop
))
622 setattr(cls
, test_binop_name('type_zero_int'), partialmethod(_TestNumericField
._test
_binop
_type
_zero
_int
, op
=binop
))
623 setattr(cls
, test_binop_name('type_zero_vint'), partialmethod(_TestNumericField
._test
_binop
_type
_zero
_vint
, op
=binop
))
624 setattr(cls
, test_binop_name('value_false'), partialmethod(_TestNumericField
._test
_binop
_value
_false
, op
=binop
))
625 setattr(cls
, test_binop_name('value_zero_int'), partialmethod(_TestNumericField
._test
_binop
_value
_zero
_int
, op
=binop
))
626 setattr(cls
, test_binop_name('value_zero_vint'), partialmethod(_TestNumericField
._test
_binop
_value
_zero
_vint
, op
=binop
))
627 setattr(cls
, test_binop_name('lhs_addr_same_false'), partialmethod(_TestNumericField
._test
_binop
_lhs
_addr
_same
_false
, op
=binop
))
628 setattr(cls
, test_binop_name('lhs_addr_same_zero_int'), partialmethod(_TestNumericField
._test
_binop
_lhs
_addr
_same
_zero
_int
, op
=binop
))
629 setattr(cls
, test_binop_name('lhs_addr_same_zero_vint'), partialmethod(_TestNumericField
._test
_binop
_lhs
_addr
_same
_zero
_vint
, op
=binop
))
630 setattr(cls
, test_binop_name('lhs_value_same_false'), partialmethod(_TestNumericField
._test
_binop
_lhs
_value
_same
_false
, op
=binop
))
631 setattr(cls
, test_binop_name('lhs_value_same_zero_int'), partialmethod(_TestNumericField
._test
_binop
_lhs
_value
_same
_zero
_int
, op
=binop
))
632 setattr(cls
, test_binop_name('lhs_value_same_zero_vint'), partialmethod(_TestNumericField
._test
_binop
_lhs
_value
_same
_zero
_vint
, op
=binop
))
633 setattr(cls
, test_binop_name('type_pos_float'), partialmethod(_TestNumericField
._test
_binop
_type
_pos
_float
, op
=binop
))
634 setattr(cls
, test_binop_name('type_neg_float'), partialmethod(_TestNumericField
._test
_binop
_type
_neg
_float
, op
=binop
))
635 setattr(cls
, test_binop_name('type_pos_vfloat'), partialmethod(_TestNumericField
._test
_binop
_type
_pos
_vfloat
, op
=binop
))
636 setattr(cls
, test_binop_name('type_neg_vfloat'), partialmethod(_TestNumericField
._test
_binop
_type
_neg
_vfloat
, op
=binop
))
637 setattr(cls
, test_binop_name('value_pos_float'), partialmethod(_TestNumericField
._test
_binop
_value
_pos
_float
, op
=binop
))
638 setattr(cls
, test_binop_name('value_neg_float'), partialmethod(_TestNumericField
._test
_binop
_value
_neg
_float
, op
=binop
))
639 setattr(cls
, test_binop_name('value_pos_vfloat'), partialmethod(_TestNumericField
._test
_binop
_value
_pos
_vfloat
, op
=binop
))
640 setattr(cls
, test_binop_name('value_neg_vfloat'), partialmethod(_TestNumericField
._test
_binop
_value
_neg
_vfloat
, op
=binop
))
641 setattr(cls
, test_binop_name('lhs_addr_same_pos_float'), partialmethod(_TestNumericField
._test
_binop
_lhs
_addr
_same
_pos
_float
, op
=binop
))
642 setattr(cls
, test_binop_name('lhs_addr_same_neg_float'), partialmethod(_TestNumericField
._test
_binop
_lhs
_addr
_same
_neg
_float
, op
=binop
))
643 setattr(cls
, test_binop_name('lhs_addr_same_pos_vfloat'), partialmethod(_TestNumericField
._test
_binop
_lhs
_addr
_same
_pos
_vfloat
, op
=binop
))
644 setattr(cls
, test_binop_name('lhs_addr_same_neg_vfloat'), partialmethod(_TestNumericField
._test
_binop
_lhs
_addr
_same
_neg
_vfloat
, op
=binop
))
645 setattr(cls
, test_binop_name('lhs_value_same_pos_float'), partialmethod(_TestNumericField
._test
_binop
_lhs
_value
_same
_pos
_float
, op
=binop
))
646 setattr(cls
, test_binop_name('lhs_value_same_neg_float'), partialmethod(_TestNumericField
._test
_binop
_lhs
_value
_same
_neg
_float
, op
=binop
))
647 setattr(cls
, test_binop_name('lhs_value_same_pos_vfloat'), partialmethod(_TestNumericField
._test
_binop
_lhs
_value
_same
_pos
_vfloat
, op
=binop
))
648 setattr(cls
, test_binop_name('lhs_value_same_neg_vfloat'), partialmethod(_TestNumericField
._test
_binop
_lhs
_value
_same
_neg
_vfloat
, op
=binop
))
649 setattr(cls
, test_binop_name('type_zero_float'), partialmethod(_TestNumericField
._test
_binop
_type
_zero
_float
, op
=binop
))
650 setattr(cls
, test_binop_name('type_zero_vfloat'), partialmethod(_TestNumericField
._test
_binop
_type
_zero
_vfloat
, op
=binop
))
651 setattr(cls
, test_binop_name('value_zero_float'), partialmethod(_TestNumericField
._test
_binop
_value
_zero
_float
, op
=binop
))
652 setattr(cls
, test_binop_name('value_zero_vfloat'), partialmethod(_TestNumericField
._test
_binop
_value
_zero
_vfloat
, op
=binop
))
653 setattr(cls
, test_binop_name('lhs_addr_same_zero_float'), partialmethod(_TestNumericField
._test
_binop
_lhs
_addr
_same
_zero
_float
, op
=binop
))
654 setattr(cls
, test_binop_name('lhs_addr_same_zero_vfloat'), partialmethod(_TestNumericField
._test
_binop
_lhs
_addr
_same
_zero
_vfloat
, op
=binop
))
655 setattr(cls
, test_binop_name('lhs_value_same_zero_float'), partialmethod(_TestNumericField
._test
_binop
_lhs
_value
_same
_zero
_float
, op
=binop
))
656 setattr(cls
, test_binop_name('lhs_value_same_zero_vfloat'), partialmethod(_TestNumericField
._test
_binop
_lhs
_value
_same
_zero
_vfloat
, op
=binop
))
658 # inject testing methods for each unary operation
659 for name
, unaryop
in _UNARYOPS
:
660 setattr(cls
, test_unaryop_name('type'), partialmethod(_TestNumericField
._test
_unaryop
_type
, op
=unaryop
))
661 setattr(cls
, test_unaryop_name('value'), partialmethod(_TestNumericField
._test
_unaryop
_value
, op
=unaryop
))
662 setattr(cls
, test_unaryop_name('addr_same'), partialmethod(_TestNumericField
._test
_unaryop
_addr
_same
, op
=unaryop
))
663 setattr(cls
, test_unaryop_name('value_same'), partialmethod(_TestNumericField
._test
_unaryop
_value
_same
, op
=unaryop
))
665 # inject testing methods for each inplace binary operation
666 for name
, ibinop
in _IBINOPS
:
667 setattr(cls
, test_ibinop_name('invalid_unknown'), partialmethod(_TestNumericField
._test
_ibinop
_invalid
_unknown
, op
=ibinop
))
668 setattr(cls
, test_ibinop_name('invalid_none'), partialmethod(_TestNumericField
._test
_ibinop
_invalid
_none
, op
=ibinop
))
669 setattr(cls
, test_ibinop_name('type_true'), partialmethod(_TestNumericField
._test
_ibinop
_type
_true
, op
=ibinop
))
670 setattr(cls
, test_ibinop_name('value_true'), partialmethod(_TestNumericField
._test
_ibinop
_value
_true
, op
=ibinop
))
671 setattr(cls
, test_ibinop_name('type_pos_int'), partialmethod(_TestNumericField
._test
_ibinop
_type
_pos
_int
, op
=ibinop
))
672 setattr(cls
, test_ibinop_name('type_pos_vint'), partialmethod(_TestNumericField
._test
_ibinop
_type
_pos
_vint
, op
=ibinop
))
673 setattr(cls
, test_ibinop_name('value_pos_int'), partialmethod(_TestNumericField
._test
_ibinop
_value
_pos
_int
, op
=ibinop
))
674 setattr(cls
, test_ibinop_name('value_pos_vint'), partialmethod(_TestNumericField
._test
_ibinop
_value
_pos
_vint
, op
=ibinop
))
675 setattr(cls
, test_ibinop_name('type_neg_int'), partialmethod(_TestNumericField
._test
_ibinop
_type
_neg
_int
, op
=ibinop
))
676 setattr(cls
, test_ibinop_name('type_neg_vint'), partialmethod(_TestNumericField
._test
_ibinop
_type
_neg
_vint
, op
=ibinop
))
677 setattr(cls
, test_ibinop_name('value_neg_int'), partialmethod(_TestNumericField
._test
_ibinop
_value
_neg
_int
, op
=ibinop
))
678 setattr(cls
, test_ibinop_name('value_neg_vint'), partialmethod(_TestNumericField
._test
_ibinop
_value
_neg
_vint
, op
=ibinop
))
679 setattr(cls
, test_ibinop_name('type_false'), partialmethod(_TestNumericField
._test
_ibinop
_type
_false
, op
=ibinop
))
680 setattr(cls
, test_ibinop_name('value_false'), partialmethod(_TestNumericField
._test
_ibinop
_value
_false
, op
=ibinop
))
681 setattr(cls
, test_ibinop_name('type_zero_int'), partialmethod(_TestNumericField
._test
_ibinop
_type
_zero
_int
, op
=ibinop
))
682 setattr(cls
, test_ibinop_name('type_zero_vint'), partialmethod(_TestNumericField
._test
_ibinop
_type
_zero
_vint
, op
=ibinop
))
683 setattr(cls
, test_ibinop_name('value_zero_int'), partialmethod(_TestNumericField
._test
_ibinop
_value
_zero
_int
, op
=ibinop
))
684 setattr(cls
, test_ibinop_name('value_zero_vint'), partialmethod(_TestNumericField
._test
_ibinop
_value
_zero
_vint
, op
=ibinop
))
685 setattr(cls
, test_ibinop_name('type_pos_float'), partialmethod(_TestNumericField
._test
_ibinop
_type
_pos
_float
, op
=ibinop
))
686 setattr(cls
, test_ibinop_name('type_neg_float'), partialmethod(_TestNumericField
._test
_ibinop
_type
_neg
_float
, op
=ibinop
))
687 setattr(cls
, test_ibinop_name('type_pos_vfloat'), partialmethod(_TestNumericField
._test
_ibinop
_type
_pos
_vfloat
, op
=ibinop
))
688 setattr(cls
, test_ibinop_name('type_neg_vfloat'), partialmethod(_TestNumericField
._test
_ibinop
_type
_neg
_vfloat
, op
=ibinop
))
689 setattr(cls
, test_ibinop_name('value_pos_float'), partialmethod(_TestNumericField
._test
_ibinop
_value
_pos
_float
, op
=ibinop
))
690 setattr(cls
, test_ibinop_name('value_neg_float'), partialmethod(_TestNumericField
._test
_ibinop
_value
_neg
_float
, op
=ibinop
))
691 setattr(cls
, test_ibinop_name('value_pos_vfloat'), partialmethod(_TestNumericField
._test
_ibinop
_value
_pos
_vfloat
, op
=ibinop
))
692 setattr(cls
, test_ibinop_name('value_neg_vfloat'), partialmethod(_TestNumericField
._test
_ibinop
_value
_neg
_vfloat
, op
=ibinop
))
693 setattr(cls
, test_ibinop_name('type_zero_float'), partialmethod(_TestNumericField
._test
_ibinop
_type
_zero
_float
, op
=ibinop
))
694 setattr(cls
, test_ibinop_name('type_zero_vfloat'), partialmethod(_TestNumericField
._test
_ibinop
_type
_zero
_vfloat
, op
=ibinop
))
695 setattr(cls
, test_ibinop_name('value_zero_float'), partialmethod(_TestNumericField
._test
_ibinop
_value
_zero
_float
, op
=ibinop
))
696 setattr(cls
, test_ibinop_name('value_zero_vfloat'), partialmethod(_TestNumericField
._test
_ibinop
_value
_zero
_vfloat
, op
=ibinop
))
699 class _TestIntegerFieldCommon(_TestNumericField
):
700 def test_assign_true(self
):
702 self
._def
.value
= raw
703 self
.assertEqual(self
._def
, raw
)
704 self
.assertEqual(self
._def
.value
, raw
)
706 def test_assign_false(self
):
708 self
._def
.value
= raw
709 self
.assertEqual(self
._def
, raw
)
710 self
.assertEqual(self
._def
.value
, raw
)
712 def test_assign_pos_int(self
):
714 self
._def
.value
= raw
715 self
.assertEqual(self
._def
, raw
)
716 self
.assertEqual(self
._def
.value
, raw
)
718 def test_assign_neg_int(self
):
720 self
._def
.value
= raw
721 self
.assertEqual(self
._def
, raw
)
722 self
.assertEqual(self
._def
.value
, raw
)
724 def test_assign_int_field(self
):
728 self
._def
.value
= field
729 self
.assertEqual(self
._def
, raw
)
730 self
.assertEqual(self
._def
.value
, raw
)
732 def test_assign_float(self
):
734 self
._def
.value
= raw
735 self
.assertEqual(self
._def
, int(raw
))
736 self
.assertEqual(self
._def
.value
, int(raw
))
738 def test_assign_invalid_type(self
):
739 with self
.assertRaises(TypeError):
740 self
._def
.value
= 'yes'
742 def test_assign_uint(self
):
743 ft
= bt2
.IntegerFieldType(size
=32, is_signed
=False)
747 self
.assertEqual(field
, raw
)
748 self
.assertEqual(field
.value
, raw
)
750 def test_assign_uint_invalid_neg(self
):
751 ft
= bt2
.IntegerFieldType(size
=32, is_signed
=False)
754 with self
.assertRaises(ValueError):
758 _inject_numeric_testing_methods(_TestIntegerFieldCommon
)
761 class IntegerFieldTestCase(_TestIntegerFieldCommon
, unittest
.TestCase
):
763 self
._ft
= bt2
.IntegerFieldType(25, is_signed
=True)
764 self
._field
= self
._ft
()
765 self
._def
= self
._ft
()
768 self
._def
_new
_value
= -101
771 class EnumerationFieldTestCase(_TestIntegerFieldCommon
, unittest
.TestCase
):
773 self
._ft
= bt2
.EnumerationFieldType(size
=32, is_signed
=True)
774 self
._ft
.append_mapping('whole range', -(2 ** 31), (2 ** 31) - 1)
775 self
._def
= self
._ft
()
778 self
._def
_new
_value
= -101
781 class FloatingPointNumberFieldTestCase(_TestNumericField
, unittest
.TestCase
):
783 self
._ft
= bt2
.FloatingPointNumberFieldType()
784 self
._field
= self
._ft
()
785 self
._def
= self
._ft
()
786 self
._def
.value
= 52.7
787 self
._def
_value
= 52.7
788 self
._def
_new
_value
= -17.164857
790 def _test_invalid_op(self
, cb
):
791 with self
.assertRaises(TypeError):
794 def test_assign_true(self
):
795 self
._def
.value
= True
796 self
.assertTrue(self
._def
)
797 self
.assertTrue(self
._def
.value
)
799 def test_assign_false(self
):
800 self
._def
.value
= False
801 self
.assertFalse(self
._def
)
802 self
.assertFalse(self
._def
.value
)
804 def test_assign_pos_int(self
):
806 self
._def
.value
= raw
807 self
.assertEqual(self
._def
, float(raw
))
808 self
.assertEqual(self
._def
.value
, float(raw
))
810 def test_assign_neg_int(self
):
812 self
._def
.value
= raw
813 self
.assertEqual(self
._def
, float(raw
))
814 self
.assertEqual(self
._def
.value
, float(raw
))
816 def test_assign_int_field(self
):
817 ft
= bt2
.IntegerFieldType(32)
821 self
._def
.value
= field
822 self
.assertEqual(self
._def
, float(raw
))
823 self
.assertEqual(self
._def
.value
, float(raw
))
825 def test_assign_float(self
):
827 self
._def
.value
= raw
828 self
.assertEqual(self
._def
, raw
)
829 self
.assertEqual(self
._def
.value
, raw
)
831 def test_assign_float_field(self
):
832 ft
= bt2
.FloatingPointNumberFieldType(32)
836 self
._def
.value
= field
837 self
.assertEqual(self
._def
, raw
)
838 self
.assertEqual(self
._def
.value
, raw
)
840 def test_assign_invalid_type(self
):
841 with self
.assertRaises(TypeError):
842 self
._def
.value
= 'yes'
844 def test_invalid_lshift(self
):
845 self
._test
_invalid
_op
(lambda: self
._def
<< 23)
847 def test_invalid_rshift(self
):
848 self
._test
_invalid
_op
(lambda: self
._def
>> 23)
850 def test_invalid_and(self
):
851 self
._test
_invalid
_op
(lambda: self
._def
& 23)
853 def test_invalid_or(self
):
854 self
._test
_invalid
_op
(lambda: self
._def |
23)
856 def test_invalid_xor(self
):
857 self
._test
_invalid
_op
(lambda: self
._def ^
23)
859 def test_invalid_invert(self
):
860 self
._test
_invalid
_op
(lambda: ~self
._def
)
863 _inject_numeric_testing_methods(FloatingPointNumberFieldTestCase
)
866 class StringFieldTestCase(_TestCopySimple
, unittest
.TestCase
):
868 self
._ft
= bt2
.StringFieldType()
869 self
._def
_value
= 'Hello, World!'
870 self
._def
= self
._ft
()
871 self
._def
.value
= self
._def
_value
872 self
._def
_new
_value
= 'Yes!'
874 def test_assign_int(self
):
875 with self
.assertRaises(TypeError):
876 self
._def
.value
= 283
878 def test_assign_str(self
):
881 self
.assertEqual(self
._def
, raw
)
883 def test_assign_string_field(self
):
884 ft
= bt2
.StringFieldType()
888 self
.assertEqual(field
, raw
)
891 self
.assertEqual(self
._def
, self
._def
_value
)
894 self
.assertNotEqual(self
._def
, 23)
896 def test_lt_vstring(self
):
901 self
.assertLess(s1
, s2
)
903 def test_lt_string(self
):
906 self
.assertLess(s1
, 'bateau')
908 def test_le_vstring(self
):
913 self
.assertLessEqual(s1
, s2
)
915 def test_le_string(self
):
918 self
.assertLessEqual(s1
, 'bateau')
920 def test_gt_vstring(self
):
925 self
.assertGreater(s2
, s1
)
927 def test_gt_string(self
):
930 self
.assertGreater('bateau', s1
)
932 def test_ge_vstring(self
):
937 self
.assertGreaterEqual(s2
, s1
)
939 def test_ge_string(self
):
942 self
.assertGreaterEqual('bateau', s1
)
944 def test_bool_op(self
):
945 self
.assertEqual(bool(self
._def
), bool(self
._def
_value
))
947 def test_str_op(self
):
948 self
.assertEqual(str(self
._def
), str(self
._def
_value
))
951 self
.assertEqual(len(self
._def
), len(self
._def
_value
))
953 def test_getitem(self
):
954 self
.assertEqual(self
._def
[5], self
._def
_value
[5])
956 def test_append_str(self
):
957 to_append
= 'meow meow meow'
958 self
._def
+= to_append
959 self
._def
_value
+= to_append
960 self
.assertEqual(self
._def
, self
._def
_value
)
962 def test_append_string_field(self
):
963 ft
= bt2
.StringFieldType()
965 to_append
= 'meow meow meow'
966 field
.value
= to_append
968 self
._def
_value
+= to_append
969 self
.assertEqual(self
._def
, self
._def
_value
)
972 class _TestArraySequenceFieldCommon(_TestCopySimple
):
973 def _modify_def(self
):
976 def test_bool_op_true(self
):
977 self
.assertTrue(self
._def
)
980 self
.assertEqual(len(self
._def
), 3)
982 def test_getitem(self
):
984 self
.assertIs(type(field
), bt2
.fields
._IntegerField
)
985 self
.assertEqual(field
, 1847)
988 ft
= bt2
.ArrayFieldType(self
._elem
_ft
, 3)
993 self
.assertEqual(self
._def
, field
)
995 def test_eq_invalid_type(self
):
996 self
.assertNotEqual(self
._def
, 23)
998 def test_eq_diff_len(self
):
999 ft
= bt2
.ArrayFieldType(self
._elem
_ft
, 2)
1003 self
.assertNotEqual(self
._def
, field
)
1005 def test_eq_diff_content_same_len(self
):
1006 ft
= bt2
.ArrayFieldType(self
._elem
_ft
, 3)
1011 self
.assertNotEqual(self
._def
, field
)
1013 def test_setitem(self
):
1015 self
.assertEqual(self
._def
[2], 24)
1017 def test_setitem_int_field(self
):
1018 int_field
= self
._elem
_ft
()
1019 int_field
.value
= 19487
1020 self
._def
[1] = int_field
1021 self
.assertEqual(self
._def
[1], 19487)
1023 def test_setitem_non_basic_field(self
):
1024 elem_ft
= bt2
.StructureFieldType()
1025 array_ft
= bt2
.ArrayFieldType(elem_ft
, 3)
1026 elem_field
= elem_ft()
1027 array_field
= array_ft()
1029 with self
.assertRaises(TypeError):
1032 def test_setitem_none(self
):
1033 with self
.assertRaises(TypeError):
1036 def test_setitem_index_wrong_type(self
):
1037 with self
.assertRaises(TypeError):
1038 self
._def
['yes'] = 23
1040 def test_setitem_index_neg(self
):
1041 with self
.assertRaises(IndexError):
1044 def test_setitem_index_out_of_range(self
):
1045 with self
.assertRaises(IndexError):
1046 self
._def
[len(self
._def
)] = 134679
1048 def test_iter(self
):
1049 for field
, value
in zip(self
._def
, (45, 1847, 1948754)):
1050 self
.assertEqual(field
, value
)
1053 class ArrayFieldTestCase(_TestArraySequenceFieldCommon
, unittest
.TestCase
):
1055 self
._elem
_ft
= bt2
.IntegerFieldType(32)
1056 self
._ft
= bt2
.ArrayFieldType(self
._elem
_ft
, 3)
1057 self
._def
= self
._ft
()
1060 self
._def
[2] = 1948754
1063 class SequenceFieldTestCase(_TestArraySequenceFieldCommon
, unittest
.TestCase
):
1065 self
._elem
_ft
= bt2
.IntegerFieldType(32)
1066 self
._ft
= bt2
.SequenceFieldType(self
._elem
_ft
, 'the.length')
1067 self
._def
= self
._ft
()
1068 self
._length
_field
= self
._elem
_ft
(3)
1069 self
._def
.length_field
= self
._length
_field
1072 self
._def
[2] = 1948754
1075 class StructureFieldTestCase(_TestCopySimple
, unittest
.TestCase
):
1077 self
._ft
0 = bt2
.IntegerFieldType(32, is_signed
=True)
1078 self
._ft
1 = bt2
.StringFieldType()
1079 self
._ft
2 = bt2
.FloatingPointNumberFieldType()
1080 self
._ft
3 = bt2
.IntegerFieldType(17)
1081 self
._ft
= bt2
.StructureFieldType()
1082 self
._ft
.append_field('A', self
._ft
0)
1083 self
._ft
.append_field('B', self
._ft
1)
1084 self
._ft
.append_field('C', self
._ft
2)
1085 self
._ft
.append_field('D', self
._ft
3)
1086 self
._def
= self
._ft
()
1087 self
._def
['A'] = -1872
1088 self
._def
['B'] = 'salut'
1089 self
._def
['C'] = 17.5
1090 self
._def
['D'] = 16497
1092 def _modify_def(self
):
1093 self
._def
['B'] = 'hola'
1095 def test_bool_op_true(self
):
1096 self
.assertTrue(self
._def
)
1098 def test_bool_op_false(self
):
1099 ft
= bt2
.StructureFieldType()
1101 self
.assertFalse(field
)
1104 self
.assertEqual(len(self
._def
), 4)
1106 def test_getitem(self
):
1107 field
= self
._def
['A']
1108 self
.assertIs(type(field
), bt2
.fields
._IntegerField
)
1109 self
.assertEqual(field
, -1872)
1112 ft
= bt2
.StructureFieldType()
1113 ft
.append_field('A', self
._ft
0)
1114 ft
.append_field('B', self
._ft
1)
1115 ft
.append_field('C', self
._ft
2)
1116 ft
.append_field('D', self
._ft
3)
1119 field
['B'] = 'salut'
1122 self
.assertEqual(self
._def
, field
)
1124 def test_eq_invalid_type(self
):
1125 self
.assertNotEqual(self
._def
, 23)
1127 def test_eq_diff_len(self
):
1128 ft
= bt2
.StructureFieldType()
1129 ft
.append_field('A', self
._ft
0)
1130 ft
.append_field('B', self
._ft
1)
1131 ft
.append_field('C', self
._ft
2)
1134 field
['B'] = 'salut'
1136 self
.assertNotEqual(self
._def
, field
)
1138 def test_eq_diff_content_same_len(self
):
1139 ft
= bt2
.StructureFieldType()
1140 ft
.append_field('A', self
._ft
0)
1141 ft
.append_field('B', self
._ft
1)
1142 ft
.append_field('C', self
._ft
2)
1143 ft
.append_field('D', self
._ft
3)
1146 field
['B'] = 'salut'
1149 self
.assertNotEqual(self
._def
, field
)
1151 def test_eq_same_content_diff_keys(self
):
1152 ft
= bt2
.StructureFieldType()
1153 ft
.append_field('A', self
._ft
0)
1154 ft
.append_field('B', self
._ft
1)
1155 ft
.append_field('E', self
._ft
2)
1156 ft
.append_field('D', self
._ft
3)
1159 field
['B'] = 'salut'
1162 self
.assertNotEqual(self
._def
, field
)
1164 def test_setitem(self
):
1165 self
._def
['C'] = -18.47
1166 self
.assertEqual(self
._def
['C'], -18.47)
1168 def test_setitem_int_field(self
):
1169 int_ft
= bt2
.IntegerFieldType(16)
1170 int_field
= int_ft()
1171 int_field
.value
= 19487
1172 self
._def
['D'] = int_field
1173 self
.assertEqual(self
._def
['D'], 19487)
1175 def test_setitem_non_basic_field(self
):
1176 elem_ft
= bt2
.StructureFieldType()
1177 elem_field
= elem_ft()
1178 struct_ft
= bt2
.StructureFieldType()
1179 struct_ft
.append_field('A', elem_ft
)
1180 struct_field
= struct_ft()
1182 with self
.assertRaises(TypeError):
1183 struct_field
['A'] = 23
1185 def test_setitem_none(self
):
1186 with self
.assertRaises(TypeError):
1187 self
._def
['C'] = None
1189 def test_setitem_key_wrong_type(self
):
1190 with self
.assertRaises(TypeError):
1193 def test_setitem_wrong_key(self
):
1194 with self
.assertRaises(KeyError):
1195 self
._def
['hi'] = 134679
1197 def test_at_index(self
):
1198 self
.assertEqual(self
._def
.at_index(1), 'salut')
1200 def test_iter(self
):
1208 for vkey
, vval
in self
._def
.items():
1209 val
= orig_values
[vkey
]
1210 self
.assertEqual(vval
, val
)