tests: use os.pathsep when appending to BABELTRACE_PLUGIN_PATH
[babeltrace.git] / tests / bindings / python / bt2 / test_value.py
index 2d6e25109d7a3e2c6c71bb9d18664ed4c7084f0c..f1bd4949ef69bfcad945333dd58d664f9e4532ac 100644 (file)
@@ -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
@@ -736,13 +1196,17 @@ class _TestIntegerValue(_TestNumericValue):
         del self._def_value
 
     def _assert_expecting_int(self):
-        return self.assertRaisesRegex(TypeError, r'expecting a number object')
+        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()
@@ -766,15 +1230,6 @@ class _TestIntegerValue(_TestNumericValue):
         i = self._CLS(True)
         self.assertTrue(i)
 
-    def test_create_from_float(self):
-        i = self._CLS(99.6)
-        self.assertEqual(i, 99)
-
-    def test_create_from_vfloat(self):
-        f = bt2.create_value(17.5)
-        i = self._CLS(f)
-        self.assertEqual(i, 17)
-
     def test_create_from_unknown(self):
         class A:
             pass
@@ -806,11 +1261,6 @@ class _TestIntegerValue(_TestNumericValue):
         self._def.value = bt2.create_value(raw)
         self.assertEqual(self._def, raw)
 
-    def test_assign_vfloat(self):
-        raw = 123.456
-        self._def.value = bt2.create_value(raw)
-        self.assertEqual(self._def, int(raw))
-
 
 class SignedIntegerValueTestCase(_TestIntegerValue, unittest.TestCase):
     _CLS = bt2.SignedIntegerValue
@@ -844,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)
 
@@ -864,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):
@@ -1177,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
@@ -1261,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))
 
@@ -1318,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)
This page took 0.032735 seconds and 4 git commands to generate.