X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=tests%2Fbindings%2Fpython%2Fbt2%2Ftest_value.py;h=f1bd4949ef69bfcad945333dd58d664f9e4532ac;hb=f3c9a159782f70dbd0e5dedb37e4a1ef8a6d304e;hp=6f66930e93ca9c3e009fbd8434898fd48a79d30e;hpb=e502b15acf555af2b6f5c43c1ab1876e816c45f9;p=babeltrace.git diff --git a/tests/bindings/python/bt2/test_value.py b/tests/bindings/python/bt2/test_value.py index 6f66930e..f1bd4949 100644 --- a/tests/bindings/python/bt2/test_value.py +++ b/tests/bindings/python/bt2/test_value.py @@ -18,6 +18,7 @@ from functools import partial, partialmethod import operator +import collections import unittest import numbers import math @@ -25,6 +26,9 @@ import copy import bt2 +# The value object classes explicitly do not implement the copy methods, +# raising `NotImplementedError`, just in case we decide to implement +# them someday. class _TestCopySimple: def test_copy(self): with self.assertRaises(NotImplementedError): @@ -35,62 +39,93 @@ class _TestCopySimple: copy.deepcopy(self._def) -_COMP_BINOPS = ( - operator.eq, - operator.ne, -) +_COMP_BINOPS = (operator.eq, operator.ne) +# Base class for numeric value test cases. +# +# To be compatible with this base class, a derived class must, in its +# setUp() method: +# +# * Set `self._def` to a value object with an arbitrary raw value. +# * Set `self._def_value` to the equivalent raw value of `self._def`. class _TestNumericValue(_TestCopySimple): + # Tries the binary operation `op`: + # + # 1. Between `self._def`, which is a value object, and `rhs`. + # 2. Between `self._def_value`, which is the raw value of + # `self._def`, and `rhs`. + # + # Returns the results of 1. and 2. + # + # If there's an exception while performing 1. or 2., asserts that + # both operations raised exceptions, that both exceptions have the + # same type, and returns `None` for both results. def _binop(self, op, rhs): - rexc = None - rvexc = None + type_rexc = None + type_rvexc = None comp_value = rhs + # try with value object try: r = op(self._def, rhs) except Exception as e: - rexc = e + type_rexc = type(e) + # try with raw value try: rv = op(self._def_value, comp_value) except Exception as e: - rvexc = e + type_rvexc = type(e) - if rexc is not None or rvexc is not None: + if type_rexc is not None or type_rvexc is not None: # at least one of the operations raised an exception: in # this case both operations should have raised the same # type of exception (division by zero, bit shift with a # floating point number operand, etc.) - self.assertIs(type(rexc), type(rvexc)) + self.assertIs(type_rexc, type_rvexc) return None, None return r, rv + # Tries the unary operation `op`: + # + # 1. On `self._def`, which is a value object. + # 2. On `self._def_value`, which is the raw value of `self._def`. + # + # Returns the results of 1. and 2. + # + # If there's an exception while performing 1. or 2., asserts that + # both operations raised exceptions, that both exceptions have the + # same type, and returns `None` for both results. def _unaryop(self, op): - rexc = None - rvexc = None + type_rexc = None + type_rvexc = None + # try with value object try: r = op(self._def) except Exception as e: - rexc = e + type_rexc = type(e) + # try with raw value try: rv = op(self._def_value) except Exception as e: - rvexc = e + type_rvexc = type(e) - if rexc is not None or rvexc is not None: + if type_rexc is not None or type_rvexc is not None: # at least one of the operations raised an exception: in # this case both operations should have raised the same # type of exception (division by zero, bit shift with a # floating point number operand, etc.) - self.assertIs(type(rexc), type(rvexc)) + self.assertIs(type_rexc, type_rvexc) return None, None return r, rv + # Tests that the unary operation `op` gives results with the same + # type for both `self._def` and `self._def_value`. def _test_unaryop_type(self, op): r, rv = self._unaryop(op) @@ -99,6 +134,9 @@ class _TestNumericValue(_TestCopySimple): self.assertIsInstance(r, type(rv)) + # Tests that the unary operation `op` gives results with the same + # value for both `self._def` and `self._def_value`. This uses the + # __eq__() operator of `self._def`. def _test_unaryop_value(self, op): r, rv = self._unaryop(op) @@ -107,16 +145,22 @@ class _TestNumericValue(_TestCopySimple): self.assertEqual(r, rv) + # Tests that the unary operation `op`, when applied to `self._def`, + # does not change its underlying BT object address. def _test_unaryop_addr_same(self, op): addr_before = self._def.addr self._unaryop(op) self.assertEqual(self._def.addr, addr_before) + # Tests that the unary operation `op`, when applied to `self._def`, + # does not change its value. def _test_unaryop_value_same(self, op): value_before = self._def.__class__(self._def) self._unaryop(op) self.assertEqual(self._def, value_before) + # Tests that the binary operation `op` gives results with the same + # type for both `self._def` and `self._def_value`. def _test_binop_type(self, op, rhs): r, rv = self._binop(op, rhs) @@ -129,6 +173,9 @@ class _TestNumericValue(_TestCopySimple): else: self.assertIsInstance(r, type(rv)) + # Tests that the binary operation `op` gives results with the same + # value for both `self._def` and `self._def_value`. This uses the + # __eq__() operator of `self._def`. def _test_binop_value(self, op, rhs): r, rv = self._binop(op, rhs) @@ -137,25 +184,41 @@ class _TestNumericValue(_TestCopySimple): self.assertEqual(r, rv) + # Tests that the binary operation `op`, when applied to `self._def`, + # does not change its underlying BT object address. def _test_binop_lhs_addr_same(self, op, rhs): addr_before = self._def.addr r, rv = self._binop(op, rhs) self.assertEqual(self._def.addr, addr_before) + # Tests that the binary operation `op`, when applied to `self._def`, + # does not change its value. def _test_binop_lhs_value_same(self, op, rhs): value_before = self._def.__class__(self._def) r, rv = self._binop(op, rhs) self.assertEqual(self._def, value_before) + # The methods below which take the `test_cb` and `op` parameters + # are meant to be used with one of the _test_binop_*() functions + # above as `test_cb` and a binary operator function as `op`. + # + # For example: + # + # self._test_binop_rhs_pos_int(self._test_binop_value, + # operator.add) + # + # This tests that a numeric value object added to a positive integer + # raw value gives a result with the expected value. + # + # `vint` and `vfloat` mean a signed integer value object and a real + # value object. + def _test_binop_invalid_unknown(self, op): if op in _COMP_BINOPS: self.skipTest('not testing') - class A: - pass - with self.assertRaises(TypeError): - op(self._def, A()) + op(self._def, object()) def _test_binop_invalid_none(self, op): if op in _COMP_BINOPS: @@ -197,6 +260,12 @@ class _TestNumericValue(_TestCopySimple): def _test_binop_rhs_zero_float(self, test_cb, op): test_cb(op, 0.0) + def _test_binop_rhs_complex(self, test_cb, op): + test_cb(op, -23 + 19j) + + def _test_binop_rhs_zero_complex(self, test_cb, op): + test_cb(op, 0j) + def _test_binop_rhs_pos_vfloat(self, test_cb, op): test_cb(op, bt2.create_value(2.2)) @@ -248,6 +317,12 @@ class _TestNumericValue(_TestCopySimple): def _test_binop_type_zero_vfloat(self, op): self._test_binop_rhs_zero_vfloat(self._test_binop_type, op) + def _test_binop_type_complex(self, op): + self._test_binop_rhs_complex(self._test_binop_type, op) + + def _test_binop_type_zero_complex(self, op): + self._test_binop_rhs_zero_complex(self._test_binop_type, op) + def _test_binop_value_false(self, op): self._test_binop_rhs_false(self._test_binop_value, op) @@ -290,6 +365,12 @@ class _TestNumericValue(_TestCopySimple): def _test_binop_value_zero_vfloat(self, op): self._test_binop_rhs_zero_vfloat(self._test_binop_value, op) + def _test_binop_value_complex(self, op): + self._test_binop_rhs_complex(self._test_binop_value, op) + + def _test_binop_value_zero_complex(self, op): + self._test_binop_rhs_zero_complex(self._test_binop_value, op) + def _test_binop_lhs_addr_same_false(self, op): self._test_binop_rhs_false(self._test_binop_lhs_addr_same, op) @@ -332,6 +413,12 @@ class _TestNumericValue(_TestCopySimple): def _test_binop_lhs_addr_same_zero_vfloat(self, op): self._test_binop_rhs_zero_vfloat(self._test_binop_lhs_addr_same, op) + def _test_binop_lhs_addr_same_complex(self, op): + self._test_binop_rhs_complex(self._test_binop_lhs_addr_same, op) + + def _test_binop_lhs_addr_same_zero_complex(self, op): + self._test_binop_rhs_zero_complex(self._test_binop_lhs_addr_same, op) + def _test_binop_lhs_value_same_false(self, op): self._test_binop_rhs_false(self._test_binop_lhs_value_same, op) @@ -374,6 +461,12 @@ class _TestNumericValue(_TestCopySimple): def _test_binop_lhs_value_same_zero_vfloat(self, op): self._test_binop_rhs_zero_vfloat(self._test_binop_lhs_value_same, op) + def _test_binop_lhs_value_same_complex(self, op): + self._test_binop_rhs_complex(self._test_binop_lhs_value_same, op) + + def _test_binop_lhs_value_same_zero_complex(self, op): + self._test_binop_rhs_zero_complex(self._test_binop_lhs_value_same, op) + def test_bool_op(self): self.assertEqual(bool(self._def), bool(self._def_value)) @@ -396,6 +489,11 @@ class _TestNumericValue(_TestCopySimple): self.assertTrue(self._def != None) +# This is a list of binary operators used for +# _inject_numeric_testing_methods(). +# +# Each entry is a pair of binary operator name (used as part of the +# created testing method's name) and operator function. _BINOPS = ( ('lt', operator.lt), ('le', operator.le), @@ -430,6 +528,11 @@ _BINOPS = ( ) +# This is a list of unary operators used for +# _inject_numeric_testing_methods(). +# +# Each entry is a pair of unary operator name (used as part of the +# created testing method's name) and operator function. _UNARYOPS = ( ('neg', operator.neg), ('pos', operator.pos), @@ -446,7 +549,21 @@ _UNARYOPS = ( ) -def _inject_numeric_testing_methods(cls, has_neg=True): +# This function injects a bunch of testing methods to a numeric +# value test case. +# +# It is meant to be used like this: +# +# _inject_numeric_testing_methods(MyNumericValueTestCase) +# +# This function injects: +# +# * One testing method for each _TestNumericValue._test_binop_*() +# method, for each binary operator in the _BINOPS tuple. +# +# * One testing method for each _TestNumericValue._test_unaryop*() +# method, for each unary operator in the _UNARYOPS tuple. +def _inject_numeric_testing_methods(cls): def test_binop_name(suffix): return 'test_binop_{}_{}'.format(name, suffix) @@ -455,77 +572,415 @@ def _inject_numeric_testing_methods(cls, has_neg=True): # inject testing methods for each binary operation for name, binop in _BINOPS: - setattr(cls, test_binop_name('invalid_unknown'), partialmethod(_TestNumericValue._test_binop_invalid_unknown, op=binop)) - setattr(cls, test_binop_name('invalid_none'), partialmethod(_TestNumericValue._test_binop_invalid_none, op=binop)) - setattr(cls, test_binop_name('type_true'), partialmethod(_TestNumericValue._test_binop_type_true, op=binop)) - setattr(cls, test_binop_name('type_pos_int'), partialmethod(_TestNumericValue._test_binop_type_pos_int, op=binop)) - setattr(cls, test_binop_name('type_pos_vint'), partialmethod(_TestNumericValue._test_binop_type_pos_vint, op=binop)) - setattr(cls, test_binop_name('value_true'), partialmethod(_TestNumericValue._test_binop_value_true, op=binop)) - setattr(cls, test_binop_name('value_pos_int'), partialmethod(_TestNumericValue._test_binop_value_pos_int, op=binop)) - setattr(cls, test_binop_name('value_pos_vint'), partialmethod(_TestNumericValue._test_binop_value_pos_vint, op=binop)) - setattr(cls, test_binop_name('lhs_addr_same_true'), partialmethod(_TestNumericValue._test_binop_lhs_addr_same_true, op=binop)) - setattr(cls, test_binop_name('lhs_addr_same_pos_int'), partialmethod(_TestNumericValue._test_binop_lhs_addr_same_pos_int, op=binop)) - setattr(cls, test_binop_name('lhs_addr_same_pos_vint'), partialmethod(_TestNumericValue._test_binop_lhs_addr_same_pos_vint, op=binop)) - setattr(cls, test_binop_name('lhs_value_same_true'), partialmethod(_TestNumericValue._test_binop_lhs_value_same_true, op=binop)) - setattr(cls, test_binop_name('lhs_value_same_pos_int'), partialmethod(_TestNumericValue._test_binop_lhs_value_same_pos_int, op=binop)) - setattr(cls, test_binop_name('lhs_value_same_pos_vint'), partialmethod(_TestNumericValue._test_binop_lhs_value_same_pos_vint, op=binop)) - - if has_neg: - setattr(cls, test_binop_name('type_neg_int'), partialmethod(_TestNumericValue._test_binop_type_neg_int, op=binop)) - setattr(cls, test_binop_name('type_neg_vint'), partialmethod(_TestNumericValue._test_binop_type_neg_vint, op=binop)) - setattr(cls, test_binop_name('value_neg_int'), partialmethod(_TestNumericValue._test_binop_value_neg_int, op=binop)) - setattr(cls, test_binop_name('value_neg_vint'), partialmethod(_TestNumericValue._test_binop_value_neg_vint, op=binop)) - setattr(cls, test_binop_name('lhs_addr_same_neg_int'), partialmethod(_TestNumericValue._test_binop_lhs_addr_same_neg_int, op=binop)) - setattr(cls, test_binop_name('lhs_addr_same_neg_vint'), partialmethod(_TestNumericValue._test_binop_lhs_addr_same_neg_vint, op=binop)) - setattr(cls, test_binop_name('lhs_value_same_neg_int'), partialmethod(_TestNumericValue._test_binop_lhs_value_same_neg_int, op=binop)) - setattr(cls, test_binop_name('lhs_value_same_neg_vint'), partialmethod(_TestNumericValue._test_binop_lhs_value_same_neg_vint, op=binop)) - - setattr(cls, test_binop_name('type_false'), partialmethod(_TestNumericValue._test_binop_type_false, op=binop)) - setattr(cls, test_binop_name('type_zero_int'), partialmethod(_TestNumericValue._test_binop_type_zero_int, op=binop)) - setattr(cls, test_binop_name('type_zero_vint'), partialmethod(_TestNumericValue._test_binop_type_zero_vint, op=binop)) - setattr(cls, test_binop_name('value_false'), partialmethod(_TestNumericValue._test_binop_value_false, op=binop)) - setattr(cls, test_binop_name('value_zero_int'), partialmethod(_TestNumericValue._test_binop_value_zero_int, op=binop)) - setattr(cls, test_binop_name('value_zero_vint'), partialmethod(_TestNumericValue._test_binop_value_zero_vint, op=binop)) - setattr(cls, test_binop_name('lhs_addr_same_false'), partialmethod(_TestNumericValue._test_binop_lhs_addr_same_false, op=binop)) - setattr(cls, test_binop_name('lhs_addr_same_zero_int'), partialmethod(_TestNumericValue._test_binop_lhs_addr_same_zero_int, op=binop)) - setattr(cls, test_binop_name('lhs_addr_same_zero_vint'), partialmethod(_TestNumericValue._test_binop_lhs_addr_same_zero_vint, op=binop)) - setattr(cls, test_binop_name('lhs_value_same_false'), partialmethod(_TestNumericValue._test_binop_lhs_value_same_false, op=binop)) - setattr(cls, test_binop_name('lhs_value_same_zero_int'), partialmethod(_TestNumericValue._test_binop_lhs_value_same_zero_int, op=binop)) - setattr(cls, test_binop_name('lhs_value_same_zero_vint'), partialmethod(_TestNumericValue._test_binop_lhs_value_same_zero_vint, op=binop)) - - if has_neg: - setattr(cls, test_binop_name('type_neg_float'), partialmethod(_TestNumericValue._test_binop_type_neg_float, op=binop)) - setattr(cls, test_binop_name('type_neg_vfloat'), partialmethod(_TestNumericValue._test_binop_type_neg_vfloat, op=binop)) - setattr(cls, test_binop_name('value_neg_float'), partialmethod(_TestNumericValue._test_binop_value_neg_float, op=binop)) - setattr(cls, test_binop_name('value_neg_vfloat'), partialmethod(_TestNumericValue._test_binop_value_neg_vfloat, op=binop)) - setattr(cls, test_binop_name('lhs_addr_same_neg_float'), partialmethod(_TestNumericValue._test_binop_lhs_addr_same_neg_float, op=binop)) - setattr(cls, test_binop_name('lhs_addr_same_neg_vfloat'), partialmethod(_TestNumericValue._test_binop_lhs_addr_same_neg_vfloat, op=binop)) - setattr(cls, test_binop_name('lhs_value_same_neg_float'), partialmethod(_TestNumericValue._test_binop_lhs_value_same_neg_float, op=binop)) - setattr(cls, test_binop_name('lhs_value_same_neg_vfloat'), partialmethod(_TestNumericValue._test_binop_lhs_value_same_neg_vfloat, op=binop)) - - setattr(cls, test_binop_name('type_pos_float'), partialmethod(_TestNumericValue._test_binop_type_pos_float, op=binop)) - setattr(cls, test_binop_name('type_pos_vfloat'), partialmethod(_TestNumericValue._test_binop_type_pos_vfloat, op=binop)) - setattr(cls, test_binop_name('value_pos_float'), partialmethod(_TestNumericValue._test_binop_value_pos_float, op=binop)) - setattr(cls, test_binop_name('value_pos_vfloat'), partialmethod(_TestNumericValue._test_binop_value_pos_vfloat, op=binop)) - setattr(cls, test_binop_name('lhs_addr_same_pos_float'), partialmethod(_TestNumericValue._test_binop_lhs_addr_same_pos_float, op=binop)) - setattr(cls, test_binop_name('lhs_addr_same_pos_vfloat'), partialmethod(_TestNumericValue._test_binop_lhs_addr_same_pos_vfloat, op=binop)) - setattr(cls, test_binop_name('lhs_value_same_pos_float'), partialmethod(_TestNumericValue._test_binop_lhs_value_same_pos_float, op=binop)) - setattr(cls, test_binop_name('lhs_value_same_pos_vfloat'), partialmethod(_TestNumericValue._test_binop_lhs_value_same_pos_vfloat, op=binop)) - setattr(cls, test_binop_name('type_zero_float'), partialmethod(_TestNumericValue._test_binop_type_zero_float, op=binop)) - setattr(cls, test_binop_name('type_zero_vfloat'), partialmethod(_TestNumericValue._test_binop_type_zero_vfloat, op=binop)) - setattr(cls, test_binop_name('value_zero_float'), partialmethod(_TestNumericValue._test_binop_value_zero_float, op=binop)) - setattr(cls, test_binop_name('value_zero_vfloat'), partialmethod(_TestNumericValue._test_binop_value_zero_vfloat, op=binop)) - setattr(cls, test_binop_name('lhs_addr_same_zero_float'), partialmethod(_TestNumericValue._test_binop_lhs_addr_same_zero_float, op=binop)) - setattr(cls, test_binop_name('lhs_addr_same_zero_vfloat'), partialmethod(_TestNumericValue._test_binop_lhs_addr_same_zero_vfloat, op=binop)) - setattr(cls, test_binop_name('lhs_value_same_zero_float'), partialmethod(_TestNumericValue._test_binop_lhs_value_same_zero_float, op=binop)) - setattr(cls, test_binop_name('lhs_value_same_zero_vfloat'), partialmethod(_TestNumericValue._test_binop_lhs_value_same_zero_vfloat, op=binop)) + setattr( + cls, + test_binop_name('invalid_unknown'), + partialmethod(_TestNumericValue._test_binop_invalid_unknown, op=binop), + ) + setattr( + cls, + test_binop_name('invalid_none'), + partialmethod(_TestNumericValue._test_binop_invalid_none, op=binop), + ) + setattr( + cls, + test_binop_name('type_true'), + partialmethod(_TestNumericValue._test_binop_type_true, op=binop), + ) + setattr( + cls, + test_binop_name('type_pos_int'), + partialmethod(_TestNumericValue._test_binop_type_pos_int, op=binop), + ) + setattr( + cls, + test_binop_name('type_pos_vint'), + partialmethod(_TestNumericValue._test_binop_type_pos_vint, op=binop), + ) + setattr( + cls, + test_binop_name('value_true'), + partialmethod(_TestNumericValue._test_binop_value_true, op=binop), + ) + setattr( + cls, + test_binop_name('value_pos_int'), + partialmethod(_TestNumericValue._test_binop_value_pos_int, op=binop), + ) + setattr( + cls, + test_binop_name('value_pos_vint'), + partialmethod(_TestNumericValue._test_binop_value_pos_vint, op=binop), + ) + setattr( + cls, + test_binop_name('lhs_addr_same_true'), + partialmethod(_TestNumericValue._test_binop_lhs_addr_same_true, op=binop), + ) + setattr( + cls, + test_binop_name('lhs_addr_same_pos_int'), + partialmethod( + _TestNumericValue._test_binop_lhs_addr_same_pos_int, op=binop + ), + ) + setattr( + cls, + test_binop_name('lhs_addr_same_pos_vint'), + partialmethod( + _TestNumericValue._test_binop_lhs_addr_same_pos_vint, op=binop + ), + ) + setattr( + cls, + test_binop_name('lhs_value_same_true'), + partialmethod(_TestNumericValue._test_binop_lhs_value_same_true, op=binop), + ) + setattr( + cls, + test_binop_name('lhs_value_same_pos_int'), + partialmethod( + _TestNumericValue._test_binop_lhs_value_same_pos_int, op=binop + ), + ) + setattr( + cls, + test_binop_name('lhs_value_same_pos_vint'), + partialmethod( + _TestNumericValue._test_binop_lhs_value_same_pos_vint, op=binop + ), + ) + setattr( + cls, + test_binop_name('type_neg_int'), + partialmethod(_TestNumericValue._test_binop_type_neg_int, op=binop), + ) + setattr( + cls, + test_binop_name('type_neg_vint'), + partialmethod(_TestNumericValue._test_binop_type_neg_vint, op=binop), + ) + setattr( + cls, + test_binop_name('value_neg_int'), + partialmethod(_TestNumericValue._test_binop_value_neg_int, op=binop), + ) + setattr( + cls, + test_binop_name('value_neg_vint'), + partialmethod(_TestNumericValue._test_binop_value_neg_vint, op=binop), + ) + setattr( + cls, + test_binop_name('lhs_addr_same_neg_int'), + partialmethod( + _TestNumericValue._test_binop_lhs_addr_same_neg_int, op=binop + ), + ) + setattr( + cls, + test_binop_name('lhs_addr_same_neg_vint'), + partialmethod( + _TestNumericValue._test_binop_lhs_addr_same_neg_vint, op=binop + ), + ) + setattr( + cls, + test_binop_name('lhs_value_same_neg_int'), + partialmethod( + _TestNumericValue._test_binop_lhs_value_same_neg_int, op=binop + ), + ) + setattr( + cls, + test_binop_name('lhs_value_same_neg_vint'), + partialmethod( + _TestNumericValue._test_binop_lhs_value_same_neg_vint, op=binop + ), + ) + setattr( + cls, + test_binop_name('type_false'), + partialmethod(_TestNumericValue._test_binop_type_false, op=binop), + ) + setattr( + cls, + test_binop_name('type_zero_int'), + partialmethod(_TestNumericValue._test_binop_type_zero_int, op=binop), + ) + setattr( + cls, + test_binop_name('type_zero_vint'), + partialmethod(_TestNumericValue._test_binop_type_zero_vint, op=binop), + ) + setattr( + cls, + test_binop_name('value_false'), + partialmethod(_TestNumericValue._test_binop_value_false, op=binop), + ) + setattr( + cls, + test_binop_name('value_zero_int'), + partialmethod(_TestNumericValue._test_binop_value_zero_int, op=binop), + ) + setattr( + cls, + test_binop_name('value_zero_vint'), + partialmethod(_TestNumericValue._test_binop_value_zero_vint, op=binop), + ) + setattr( + cls, + test_binop_name('lhs_addr_same_false'), + partialmethod(_TestNumericValue._test_binop_lhs_addr_same_false, op=binop), + ) + setattr( + cls, + test_binop_name('lhs_addr_same_zero_int'), + partialmethod( + _TestNumericValue._test_binop_lhs_addr_same_zero_int, op=binop + ), + ) + setattr( + cls, + test_binop_name('lhs_addr_same_zero_vint'), + partialmethod( + _TestNumericValue._test_binop_lhs_addr_same_zero_vint, op=binop + ), + ) + setattr( + cls, + test_binop_name('lhs_value_same_false'), + partialmethod(_TestNumericValue._test_binop_lhs_value_same_false, op=binop), + ) + setattr( + cls, + test_binop_name('lhs_value_same_zero_int'), + partialmethod( + _TestNumericValue._test_binop_lhs_value_same_zero_int, op=binop + ), + ) + setattr( + cls, + test_binop_name('lhs_value_same_zero_vint'), + partialmethod( + _TestNumericValue._test_binop_lhs_value_same_zero_vint, op=binop + ), + ) + setattr( + cls, + test_binop_name('type_neg_float'), + partialmethod(_TestNumericValue._test_binop_type_neg_float, op=binop), + ) + setattr( + cls, + test_binop_name('type_neg_vfloat'), + partialmethod(_TestNumericValue._test_binop_type_neg_vfloat, op=binop), + ) + setattr( + cls, + test_binop_name('value_neg_float'), + partialmethod(_TestNumericValue._test_binop_value_neg_float, op=binop), + ) + setattr( + cls, + test_binop_name('value_neg_vfloat'), + partialmethod(_TestNumericValue._test_binop_value_neg_vfloat, op=binop), + ) + setattr( + cls, + test_binop_name('lhs_addr_same_neg_float'), + partialmethod( + _TestNumericValue._test_binop_lhs_addr_same_neg_float, op=binop + ), + ) + setattr( + cls, + test_binop_name('lhs_addr_same_neg_vfloat'), + partialmethod( + _TestNumericValue._test_binop_lhs_addr_same_neg_vfloat, op=binop + ), + ) + setattr( + cls, + test_binop_name('lhs_value_same_neg_float'), + partialmethod( + _TestNumericValue._test_binop_lhs_value_same_neg_float, op=binop + ), + ) + setattr( + cls, + test_binop_name('lhs_value_same_neg_vfloat'), + partialmethod( + _TestNumericValue._test_binop_lhs_value_same_neg_vfloat, op=binop + ), + ) + setattr( + cls, + test_binop_name('type_pos_float'), + partialmethod(_TestNumericValue._test_binop_type_pos_float, op=binop), + ) + setattr( + cls, + test_binop_name('type_pos_vfloat'), + partialmethod(_TestNumericValue._test_binop_type_pos_vfloat, op=binop), + ) + setattr( + cls, + test_binop_name('value_pos_float'), + partialmethod(_TestNumericValue._test_binop_value_pos_float, op=binop), + ) + setattr( + cls, + test_binop_name('value_pos_vfloat'), + partialmethod(_TestNumericValue._test_binop_value_pos_vfloat, op=binop), + ) + setattr( + cls, + test_binop_name('lhs_addr_same_pos_float'), + partialmethod( + _TestNumericValue._test_binop_lhs_addr_same_pos_float, op=binop + ), + ) + setattr( + cls, + test_binop_name('lhs_addr_same_pos_vfloat'), + partialmethod( + _TestNumericValue._test_binop_lhs_addr_same_pos_vfloat, op=binop + ), + ) + setattr( + cls, + test_binop_name('lhs_value_same_pos_float'), + partialmethod( + _TestNumericValue._test_binop_lhs_value_same_pos_float, op=binop + ), + ) + setattr( + cls, + test_binop_name('lhs_value_same_pos_vfloat'), + partialmethod( + _TestNumericValue._test_binop_lhs_value_same_pos_vfloat, op=binop + ), + ) + setattr( + cls, + test_binop_name('type_zero_float'), + partialmethod(_TestNumericValue._test_binop_type_zero_float, op=binop), + ) + setattr( + cls, + test_binop_name('type_zero_vfloat'), + partialmethod(_TestNumericValue._test_binop_type_zero_vfloat, op=binop), + ) + setattr( + cls, + test_binop_name('value_zero_float'), + partialmethod(_TestNumericValue._test_binop_value_zero_float, op=binop), + ) + setattr( + cls, + test_binop_name('value_zero_vfloat'), + partialmethod(_TestNumericValue._test_binop_value_zero_vfloat, op=binop), + ) + setattr( + cls, + test_binop_name('lhs_addr_same_zero_float'), + partialmethod( + _TestNumericValue._test_binop_lhs_addr_same_zero_float, op=binop + ), + ) + setattr( + cls, + test_binop_name('lhs_addr_same_zero_vfloat'), + partialmethod( + _TestNumericValue._test_binop_lhs_addr_same_zero_vfloat, op=binop + ), + ) + setattr( + cls, + test_binop_name('lhs_value_same_zero_float'), + partialmethod( + _TestNumericValue._test_binop_lhs_value_same_zero_float, op=binop + ), + ) + setattr( + cls, + test_binop_name('lhs_value_same_zero_vfloat'), + partialmethod( + _TestNumericValue._test_binop_lhs_value_same_zero_vfloat, op=binop + ), + ) + setattr( + cls, + test_binop_name('type_complex'), + partialmethod(_TestNumericValue._test_binop_type_complex, op=binop), + ) + setattr( + cls, + test_binop_name('type_zero_complex'), + partialmethod(_TestNumericValue._test_binop_type_zero_complex, op=binop), + ) + setattr( + cls, + test_binop_name('value_complex'), + partialmethod(_TestNumericValue._test_binop_value_complex, op=binop), + ) + setattr( + cls, + test_binop_name('value_zero_complex'), + partialmethod(_TestNumericValue._test_binop_value_zero_complex, op=binop), + ) + setattr( + cls, + test_binop_name('lhs_addr_same_complex'), + partialmethod( + _TestNumericValue._test_binop_lhs_addr_same_complex, op=binop + ), + ) + setattr( + cls, + test_binop_name('lhs_addr_same_zero_complex'), + partialmethod( + _TestNumericValue._test_binop_lhs_addr_same_zero_complex, op=binop + ), + ) + setattr( + cls, + test_binop_name('lhs_value_same_complex'), + partialmethod( + _TestNumericValue._test_binop_lhs_value_same_complex, op=binop + ), + ) + setattr( + cls, + test_binop_name('lhs_value_same_zero_complex'), + partialmethod( + _TestNumericValue._test_binop_lhs_value_same_zero_complex, op=binop + ), + ) # inject testing methods for each unary operation for name, unaryop in _UNARYOPS: - setattr(cls, test_unaryop_name('type'), partialmethod(_TestNumericValue._test_unaryop_type, op=unaryop)) - setattr(cls, test_unaryop_name('value'), partialmethod(_TestNumericValue._test_unaryop_value, op=unaryop)) - setattr(cls, test_unaryop_name('addr_same'), partialmethod(_TestNumericValue._test_unaryop_addr_same, op=unaryop)) - setattr(cls, test_unaryop_name('value_same'), partialmethod(_TestNumericValue._test_unaryop_value_same, op=unaryop)) + setattr( + cls, + test_unaryop_name('type'), + partialmethod(_TestNumericValue._test_unaryop_type, op=unaryop), + ) + setattr( + cls, + test_unaryop_name('value'), + partialmethod(_TestNumericValue._test_unaryop_value, op=unaryop), + ) + setattr( + cls, + test_unaryop_name('addr_same'), + partialmethod(_TestNumericValue._test_unaryop_addr_same, op=unaryop), + ) + setattr( + cls, + test_unaryop_name('value_same'), + partialmethod(_TestNumericValue._test_unaryop_value_same, op=unaryop), + ) class CreateValueFuncTestCase(unittest.TestCase): @@ -626,11 +1081,13 @@ class CreateValueFuncTestCase(unittest.TestCase): a = A() - with self.assertRaisesRegex(TypeError, "cannot create value object from 'A' object") as cm: + with self.assertRaisesRegex( + TypeError, "cannot create value object from 'A' object" + ) as cm: v = bt2.create_value(a) -class BoolValueTestCase(_TestCopySimple, unittest.TestCase): +class BoolValueTestCase(_TestNumericValue, unittest.TestCase): def setUp(self): self._f = bt2.BoolValue(False) self._t = bt2.BoolValue(True) @@ -722,6 +1179,9 @@ class BoolValueTestCase(_TestCopySimple, unittest.TestCase): self.assertNotEqual(self._t, False) +_inject_numeric_testing_methods(BoolValueTestCase) + + class _TestIntegerValue(_TestNumericValue): def setUp(self): self._pv = 23 @@ -739,10 +1199,14 @@ class _TestIntegerValue(_TestNumericValue): return self.assertRaisesRegex(TypeError, r'expecting an integral number object') def _assert_expecting_int64(self): - return self.assertRaisesRegex(ValueError, r"expecting a signed 64-bit integral value") + return self.assertRaisesRegex( + ValueError, r"expecting a signed 64-bit integral value" + ) def _assert_expecting_uint64(self): - return self.assertRaisesRegex(ValueError, r"expecting an unsigned 64-bit integral value") + return self.assertRaisesRegex( + ValueError, r"expecting an unsigned 64-bit integral value" + ) def test_create_default(self): i = self._CLS() @@ -830,7 +1294,7 @@ class SignedIntegerValueTestCase(_TestIntegerValue, unittest.TestCase): def test_compare_big_int(self): # Larger than the IEEE 754 double-precision exact representation of # integers. - raw = (2**53) + 1 + raw = (2 ** 53) + 1 v = bt2.create_value(raw) self.assertEqual(v, raw) @@ -850,7 +1314,7 @@ class UnsignedIntegerValueTestCase(_TestIntegerValue, unittest.TestCase): i = self._CLS(-1) -_inject_numeric_testing_methods(UnsignedIntegerValueTestCase, False) +_inject_numeric_testing_methods(UnsignedIntegerValueTestCase) class RealValueTestCase(_TestNumericValue, unittest.TestCase): @@ -1163,6 +1627,12 @@ class ArrayValueTestCase(_TestCopySimple, unittest.TestCase): a2 = bt2.ArrayValue(copy.deepcopy(raw)) self.assertEqual(a1, a2) + def test_eq_non_sequence_iterable(self): + dct = collections.OrderedDict([(1, 2), (3, 4), (5, 6)]) + a = bt2.ArrayValue((1, 3, 5)) + self.assertEqual(a, list(dct.keys())) + self.assertNotEqual(a, dct) + def test_setitem_int(self): raw = 19 self._def[2] = raw @@ -1247,7 +1717,7 @@ class MapValueTestCase(_TestCopySimple, unittest.TestCase): 'pos-int': 42, 'neg-float': -42.4, 'pos-float': 23.17, - 'str': 'yes' + 'str': 'yes', } self._def = bt2.MapValue(copy.deepcopy(self._def_value)) @@ -1304,11 +1774,7 @@ class MapValueTestCase(_TestCopySimple, unittest.TestCase): self.assertNotEqual(a1, a2) def test_eq_same_content_same_len(self): - raw = { - '3': 3, - 'True': True, - 'array': [1, 2.5, None, {'a': 17.6, 'b': None}] - } + raw = {'3': 3, 'True': True, 'array': [1, 2.5, None, {'a': 17.6, 'b': None}]} a1 = bt2.MapValue(raw) a2 = bt2.MapValue(copy.deepcopy(raw)) self.assertEqual(a1, a2)