Remove `skip-string-normalization` in Python formatter config
[babeltrace.git] / tests / bindings / python / bt2 / test_value.py
index a56f2c1ed996b5ad8c15bdd8197ee46cc46b3835..62b09888d796043c75f887f2a3aac772f799a72b 100644 (file)
@@ -1,25 +1,12 @@
+# SPDX-License-Identifier: GPL-2.0-only
 #
 # Copyright (C) 2019 EfficiOS Inc.
 #
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; only version 2
-# of the License.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-#
 
 from functools import partial, partialmethod
 import operator
+import collections
 import unittest
-import numbers
 import math
 import copy
 import bt2
@@ -38,10 +25,7 @@ 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.
@@ -215,19 +199,23 @@ class _TestNumericValue(_TestCopySimple):
     # `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')
-
-        with self.assertRaises(TypeError):
-            op(self._def, object())
-
-    def _test_binop_invalid_none(self, op):
-        if op in _COMP_BINOPS:
-            self.skipTest('not testing')
-
-        with self.assertRaises(TypeError):
-            op(self._def, None)
+    def _test_binop_unknown(self, op):
+        if op is operator.eq:
+            self.assertIs(op(self._def, object()), False)
+        elif op is operator.ne:
+            self.assertIs(op(self._def, object()), True)
+        else:
+            with self.assertRaises(TypeError):
+                op(self._def, object())
+
+    def _test_binop_none(self, op):
+        if op is operator.eq:
+            self.assertIs(op(self._def, None), False)
+        elif op is operator.ne:
+            self.assertIs(op(self._def, None), True)
+        else:
+            with self.assertRaises(TypeError):
+                op(self._def, None)
 
     def _test_binop_rhs_false(self, test_cb, op):
         test_cb(op, False)
@@ -262,6 +250,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))
 
@@ -313,6 +307,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)
 
@@ -355,6 +355,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)
 
@@ -397,6 +403,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)
 
@@ -439,6 +451,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))
 
@@ -455,10 +473,14 @@ class _TestNumericValue(_TestCopySimple):
         self.assertEqual(str(self._def), str(self._def_value))
 
     def test_eq_none(self):
-        self.assertFalse(self._def == None)
+        # Disable the "comparison to None" warning, as this is precisely what
+        # we want to test here.
+        self.assertFalse(self._def == None)  # noqa: E711
 
     def test_ne_none(self):
-        self.assertTrue(self._def != None)
+        # Disable the "comparison to None" warning, as this is precisely what
+        # we want to test here.
+        self.assertTrue(self._def != None)  # noqa: E711
 
 
 # This is a list of binary operators used for
@@ -467,36 +489,36 @@ class _TestNumericValue(_TestCopySimple):
 # 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),
-    ('eq', operator.eq),
-    ('ne', operator.ne),
-    ('ge', operator.ge),
-    ('gt', operator.gt),
-    ('add', operator.add),
-    ('radd', lambda a, b: operator.add(b, a)),
-    ('and', operator.and_),
-    ('rand', lambda a, b: operator.and_(b, a)),
-    ('floordiv', operator.floordiv),
-    ('rfloordiv', lambda a, b: operator.floordiv(b, a)),
-    ('lshift', operator.lshift),
-    ('rlshift', lambda a, b: operator.lshift(b, a)),
-    ('mod', operator.mod),
-    ('rmod', lambda a, b: operator.mod(b, a)),
-    ('mul', operator.mul),
-    ('rmul', lambda a, b: operator.mul(b, a)),
-    ('or', operator.or_),
-    ('ror', lambda a, b: operator.or_(b, a)),
-    ('pow', operator.pow),
-    ('rpow', lambda a, b: operator.pow(b, a)),
-    ('rshift', operator.rshift),
-    ('rrshift', lambda a, b: operator.rshift(b, a)),
-    ('sub', operator.sub),
-    ('rsub', lambda a, b: operator.sub(b, a)),
-    ('truediv', operator.truediv),
-    ('rtruediv', lambda a, b: operator.truediv(b, a)),
-    ('xor', operator.xor),
-    ('rxor', lambda a, b: operator.xor(b, a)),
+    ("lt", operator.lt),
+    ("le", operator.le),
+    ("eq", operator.eq),
+    ("ne", operator.ne),
+    ("ge", operator.ge),
+    ("gt", operator.gt),
+    ("add", operator.add),
+    ("radd", lambda a, b: operator.add(b, a)),
+    ("and", operator.and_),
+    ("rand", lambda a, b: operator.and_(b, a)),
+    ("floordiv", operator.floordiv),
+    ("rfloordiv", lambda a, b: operator.floordiv(b, a)),
+    ("lshift", operator.lshift),
+    ("rlshift", lambda a, b: operator.lshift(b, a)),
+    ("mod", operator.mod),
+    ("rmod", lambda a, b: operator.mod(b, a)),
+    ("mul", operator.mul),
+    ("rmul", lambda a, b: operator.mul(b, a)),
+    ("or", operator.or_),
+    ("ror", lambda a, b: operator.or_(b, a)),
+    ("pow", operator.pow),
+    ("rpow", lambda a, b: operator.pow(b, a)),
+    ("rshift", operator.rshift),
+    ("rrshift", lambda a, b: operator.rshift(b, a)),
+    ("sub", operator.sub),
+    ("rsub", lambda a, b: operator.sub(b, a)),
+    ("truediv", operator.truediv),
+    ("rtruediv", lambda a, b: operator.truediv(b, a)),
+    ("xor", operator.xor),
+    ("rxor", lambda a, b: operator.xor(b, a)),
 )
 
 
@@ -506,18 +528,18 @@ _BINOPS = (
 # 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),
-    ('abs', operator.abs),
-    ('invert', operator.invert),
-    ('round', round),
-    ('round_0', partial(round, ndigits=0)),
-    ('round_1', partial(round, ndigits=1)),
-    ('round_2', partial(round, ndigits=2)),
-    ('round_3', partial(round, ndigits=3)),
-    ('ceil', math.ceil),
-    ('floor', math.floor),
-    ('trunc', math.trunc),
+    ("neg", operator.neg),
+    ("pos", operator.pos),
+    ("abs", operator.abs),
+    ("invert", operator.invert),
+    ("round", round),
+    ("round_0", partial(round, ndigits=0)),
+    ("round_1", partial(round, ndigits=1)),
+    ("round_2", partial(round, ndigits=2)),
+    ("round_3", partial(round, ndigits=3)),
+    ("ceil", math.ceil),
+    ("floor", math.floor),
+    ("trunc", math.trunc),
 )
 
 
@@ -528,9 +550,6 @@ _UNARYOPS = (
 #
 #     _inject_numeric_testing_methods(MyNumericValueTestCase)
 #
-# If `has_neg` is true, then the function injects testing methods which
-# involve operations with a negative value.
-#
 # This function injects:
 #
 # * One testing method for each _TestNumericValue._test_binop_*()
@@ -538,86 +557,424 @@ _UNARYOPS = (
 #
 # * One testing method for each _TestNumericValue._test_unaryop*()
 #   method, for each unary operator in the _UNARYOPS tuple.
-def _inject_numeric_testing_methods(cls, has_neg=True):
+def _inject_numeric_testing_methods(cls):
     def test_binop_name(suffix):
-        return 'test_binop_{}_{}'.format(name, suffix)
+        return "test_binop_{}_{}".format(name, suffix)
 
     def test_unaryop_name(suffix):
-        return 'test_unaryop_{}_{}'.format(name, suffix)
+        return "test_unaryop_{}_{}".format(name, suffix)
 
     # 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("unknown"),
+            partialmethod(_TestNumericValue._test_binop_unknown, op=binop),
+        )
+        setattr(
+            cls,
+            test_binop_name("none"),
+            partialmethod(_TestNumericValue._test_binop_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):
@@ -660,13 +1017,13 @@ class CreateValueFuncTestCase(unittest.TestCase):
         self.assertEqual(v, raw)
 
     def test_create_string(self):
-        raw = 'salut'
+        raw = "salut"
         v = bt2.create_value(raw)
         self.assertIsInstance(v, bt2.StringValue)
         self.assertEqual(v, raw)
 
     def test_create_string_empty(self):
-        raw = ''
+        raw = ""
         v = bt2.create_value(raw)
         self.assertIsInstance(v, bt2.StringValue)
         self.assertEqual(v, raw)
@@ -696,7 +1053,7 @@ class CreateValueFuncTestCase(unittest.TestCase):
         self.assertEqual(v, raw)
 
     def test_create_map(self):
-        raw = {'salut': 23}
+        raw = {"salut": 23}
         v = bt2.create_value(raw)
         self.assertIsInstance(v, bt2.MapValue)
         self.assertEqual(v, raw)
@@ -718,11 +1075,27 @@ class CreateValueFuncTestCase(unittest.TestCase):
 
         a = A()
 
-        with self.assertRaisesRegex(TypeError, "cannot create value object from 'A' object") as cm:
-            v = bt2.create_value(a)
+        with self.assertRaisesRegex(
+            TypeError, "cannot create value object from 'A' object"
+        ):
+            bt2.create_value(a)
+
+
+def _create_const_value(value):
+    class MySink(bt2._UserSinkComponent):
+        def _user_consume(self):
+            pass
 
+        @classmethod
+        def _user_query(cls, priv_query_exec, obj, params, method_obj):
+            nonlocal value
+            return {"my_value": value}
 
-class BoolValueTestCase(_TestCopySimple, unittest.TestCase):
+    res = bt2.QueryExecutor(MySink, "obj", None).query()
+    return res["my_value"]
+
+
+class BoolValueTestCase(_TestNumericValue, unittest.TestCase):
     def setUp(self):
         self._f = bt2.BoolValue(False)
         self._t = bt2.BoolValue(True)
@@ -758,11 +1131,11 @@ class BoolValueTestCase(_TestCopySimple, unittest.TestCase):
 
     def test_create_from_int_non_zero(self):
         with self.assertRaises(TypeError):
-            b = bt2.BoolValue(23)
+            bt2.BoolValue(23)
 
     def test_create_from_int_zero(self):
         with self.assertRaises(TypeError):
-            b = bt2.BoolValue(0)
+            bt2.BoolValue(0)
 
     def test_assign_true(self):
         b = bt2.BoolValue()
@@ -796,10 +1169,14 @@ class BoolValueTestCase(_TestCopySimple, unittest.TestCase):
         self.assertEqual(str(self._def), str(self._def_value))
 
     def test_eq_none(self):
-        self.assertFalse(self._def == None)
+        # Disable the "comparison to None" warning, as this is precisely what
+        # we want to test here.
+        self.assertFalse(self._def == None)  # noqa: E711
 
     def test_ne_none(self):
-        self.assertTrue(self._def != None)
+        # Disable the "comparison to None" warning, as this is precisely what
+        # we want to test here.
+        self.assertTrue(self._def != None)  # noqa: E711
 
     def test_vfalse_eq_false(self):
         self.assertEqual(self._f, False)
@@ -814,6 +1191,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
@@ -828,13 +1208,17 @@ class _TestIntegerValue(_TestNumericValue):
         del self._def_value
 
     def _assert_expecting_int(self):
-        return self.assertRaisesRegex(TypeError, r'expecting an integral 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()
@@ -863,11 +1247,11 @@ class _TestIntegerValue(_TestNumericValue):
             pass
 
         with self._assert_expecting_int():
-            i = self._CLS(A())
+            self._CLS(A())
 
     def test_create_from_varray(self):
         with self._assert_expecting_int():
-            i = self._CLS(bt2.ArrayValue())
+            self._CLS(bt2.ArrayValue())
 
     def test_assign_true(self):
         raw = True
@@ -908,11 +1292,11 @@ class SignedIntegerValueTestCase(_TestIntegerValue, unittest.TestCase):
 
     def test_create_pos_too_big(self):
         with self._assert_expecting_int64():
-            i = self._CLS(2 ** 63)
+            self._CLS(2**63)
 
     def test_create_neg_too_big(self):
         with self._assert_expecting_int64():
-            i = self._CLS(-(2 ** 63) - 1)
+            self._CLS(-(2**63) - 1)
 
     def test_assign_neg_int(self):
         raw = -13
@@ -935,14 +1319,14 @@ class UnsignedIntegerValueTestCase(_TestIntegerValue, unittest.TestCase):
 
     def test_create_pos_too_big(self):
         with self._assert_expecting_uint64():
-            i = self._CLS(2 ** 64)
+            self._CLS(2**64)
 
     def test_create_neg(self):
         with self._assert_expecting_uint64():
-            i = self._CLS(-1)
+            self._CLS(-1)
 
 
-_inject_numeric_testing_methods(UnsignedIntegerValueTestCase, False)
+_inject_numeric_testing_methods(UnsignedIntegerValueTestCase)
 
 
 class RealValueTestCase(_TestNumericValue, unittest.TestCase):
@@ -978,10 +1362,6 @@ class RealValueTestCase(_TestNumericValue, unittest.TestCase):
     def test_create_neg(self):
         self.assertEqual(self._fn, self._nv)
 
-    def test_create_from_vint(self):
-        f = bt2.RealValue(self._fp)
-        self.assertEqual(f, self._pv)
-
     def test_create_from_false(self):
         f = bt2.RealValue(False)
         self.assertFalse(f)
@@ -1010,11 +1390,11 @@ class RealValueTestCase(_TestNumericValue, unittest.TestCase):
             pass
 
         with self._assert_expecting_float():
-            f = bt2.RealValue(A())
+            bt2.RealValue(A())
 
     def test_create_from_varray(self):
         with self._assert_expecting_float():
-            f = bt2.RealValue(bt2.ArrayValue())
+            bt2.RealValue(bt2.ArrayValue())
 
     def test_assign_true(self):
         self._def.value = True
@@ -1073,9 +1453,10 @@ _inject_numeric_testing_methods(RealValueTestCase)
 
 class StringValueTestCase(_TestCopySimple, unittest.TestCase):
     def setUp(self):
-        self._def_value = 'Hello, World!'
+        self._def_value = "Hello, World!"
         self._def = bt2.StringValue(self._def_value)
-        self._def_new_value = 'Yes!'
+        self._def_const = _create_const_value(self._def_value)
+        self._def_new_value = "Yes!"
 
     def tearDown(self):
         del self._def
@@ -1085,15 +1466,15 @@ class StringValueTestCase(_TestCopySimple, unittest.TestCase):
 
     def test_create_default(self):
         s = bt2.StringValue()
-        self.assertEqual(s, '')
+        self.assertEqual(s, "")
 
     def test_create_from_str(self):
-        raw = 'liberté'
+        raw = "liberté"
         s = bt2.StringValue(raw)
         self.assertEqual(s, raw)
 
     def test_create_from_vstr(self):
-        raw = 'liberté'
+        raw = "liberté"
         s = bt2.StringValue(bt2.create_value(raw))
         self.assertEqual(s, raw)
 
@@ -1102,67 +1483,79 @@ class StringValueTestCase(_TestCopySimple, unittest.TestCase):
             pass
 
         with self._assert_expecting_str():
-            i = bt2.StringValue(A())
+            bt2.StringValue(A())
 
     def test_create_from_varray(self):
         with self._assert_expecting_str():
-            i = bt2.StringValue(bt2.ArrayValue())
+            bt2.StringValue(bt2.ArrayValue())
 
     def test_assign_int(self):
         with self._assert_expecting_str():
             self._def.value = 283
 
     def test_assign_str(self):
-        raw = 'zorg'
+        raw = "zorg"
         self._def = raw
         self.assertEqual(self._def, raw)
 
     def test_assign_vstr(self):
-        raw = 'zorg'
+        raw = "zorg"
         self._def = bt2.create_value(raw)
         self.assertEqual(self._def, raw)
 
     def test_eq(self):
         self.assertEqual(self._def, self._def_value)
 
-    def test_eq(self):
+    def test_const_eq(self):
+        self.assertEqual(self._def_const, self._def_value)
+
+    def test_eq_raw(self):
         self.assertNotEqual(self._def, 23)
 
     def test_lt_vstring(self):
-        s1 = bt2.StringValue('allo')
-        s2 = bt2.StringValue('bateau')
+        s1 = bt2.StringValue("allo")
+        s2 = bt2.StringValue("bateau")
         self.assertLess(s1, s2)
 
     def test_lt_string(self):
-        s1 = bt2.StringValue('allo')
-        self.assertLess(s1, 'bateau')
+        s1 = bt2.StringValue("allo")
+        self.assertLess(s1, "bateau")
 
     def test_le_vstring(self):
-        s1 = bt2.StringValue('allo')
-        s2 = bt2.StringValue('bateau')
+        s1 = bt2.StringValue("allo")
+        s2 = bt2.StringValue("bateau")
         self.assertLessEqual(s1, s2)
 
     def test_le_string(self):
-        s1 = bt2.StringValue('allo')
-        self.assertLessEqual(s1, 'bateau')
+        s1 = bt2.StringValue("allo")
+        self.assertLessEqual(s1, "bateau")
 
     def test_gt_vstring(self):
-        s1 = bt2.StringValue('allo')
-        s2 = bt2.StringValue('bateau')
+        s1 = bt2.StringValue("allo")
+        s2 = bt2.StringValue("bateau")
         self.assertGreater(s2, s1)
 
     def test_gt_string(self):
-        s1 = bt2.StringValue('allo')
-        self.assertGreater('bateau', s1)
+        s1 = bt2.StringValue("allo")
+        self.assertGreater("bateau", s1)
 
     def test_ge_vstring(self):
-        s1 = bt2.StringValue('allo')
-        s2 = bt2.StringValue('bateau')
+        s1 = bt2.StringValue("allo")
+        s2 = bt2.StringValue("bateau")
         self.assertGreaterEqual(s2, s1)
 
     def test_ge_string(self):
-        s1 = bt2.StringValue('allo')
-        self.assertGreaterEqual('bateau', s1)
+        s1 = bt2.StringValue("allo")
+        self.assertGreaterEqual("bateau", s1)
+
+    def test_in_string(self):
+        s1 = bt2.StringValue("beau grand bateau")
+        self.assertIn("bateau", s1)
+
+    def test_in_vstring(self):
+        s1 = bt2.StringValue("beau grand bateau")
+        s2 = bt2.StringValue("bateau")
+        self.assertIn(s2, s1)
 
     def test_bool_op(self):
         self.assertEqual(bool(self._def), bool(self._def_value))
@@ -1176,14 +1569,24 @@ class StringValueTestCase(_TestCopySimple, unittest.TestCase):
     def test_getitem(self):
         self.assertEqual(self._def[5], self._def_value[5])
 
-    def test_append_str(self):
-        to_append = 'meow meow meow'
+    def test_const_getitem(self):
+        self.assertEqual(self._def_const[5], self._def_value[5])
+
+    def test_iadd_str(self):
+        to_append = "meow meow meow"
         self._def += to_append
         self._def_value += to_append
         self.assertEqual(self._def, self._def_value)
 
+    def test_const_iadd_str(self):
+        to_append = "meow meow meow"
+        with self.assertRaises(TypeError):
+            self._def_const += to_append
+
+        self.assertEqual(self._def_const, self._def_value)
+
     def test_append_vstr(self):
-        to_append = 'meow meow meow'
+        to_append = "meow meow meow"
         self._def += bt2.create_value(to_append)
         self._def_value += to_append
         self.assertEqual(self._def, self._def_value)
@@ -1191,14 +1594,15 @@ class StringValueTestCase(_TestCopySimple, unittest.TestCase):
 
 class ArrayValueTestCase(_TestCopySimple, unittest.TestCase):
     def setUp(self):
-        self._def_value = [None, False, True, -23, 0, 42, -42.4, 23.17, 'yes']
+        self._def_value = [None, False, True, -23, 0, 42, -42.4, 23.17, "yes"]
         self._def = bt2.ArrayValue(copy.deepcopy(self._def_value))
+        self._def_const = _create_const_value(copy.deepcopy(self._def_value))
 
     def tearDown(self):
         del self._def
 
     def _modify_def(self):
-        self._def[2] = 'xyz'
+        self._def[2] = "xyz"
 
     def _assert_type_error(self):
         return self.assertRaises(TypeError)
@@ -1225,7 +1629,7 @@ class ArrayValueTestCase(_TestCopySimple, unittest.TestCase):
             pass
 
         with self._assert_type_error():
-            a = bt2.ArrayValue(A())
+            bt2.ArrayValue(A())
 
     def test_bool_op_true(self):
         self.assertTrue(bool(self._def))
@@ -1239,9 +1643,16 @@ class ArrayValueTestCase(_TestCopySimple, unittest.TestCase):
     def test_eq_int(self):
         self.assertNotEqual(self._def, 23)
 
+    def test_const_eq(self):
+        a1 = _create_const_value([1, 2, 3])
+        a2 = [1, 2, 3]
+        self.assertEqual(a1, a2)
+
     def test_eq_diff_len(self):
         a1 = bt2.create_value([1, 2, 3])
         a2 = bt2.create_value([1, 2])
+        self.assertIs(type(a1), bt2.ArrayValue)
+        self.assertIs(type(a2), bt2.ArrayValue)
         self.assertNotEqual(a1, a2)
 
     def test_eq_diff_content_same_len(self):
@@ -1250,11 +1661,17 @@ class ArrayValueTestCase(_TestCopySimple, unittest.TestCase):
         self.assertNotEqual(a1, a2)
 
     def test_eq_same_content_same_len(self):
-        raw = (3, True, [1, 2.5, None, {'a': 17.6, 'b': None}])
+        raw = (3, True, [1, 2.5, None, {"a": 17.6, "b": None}])
         a1 = bt2.ArrayValue(raw)
         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
@@ -1271,7 +1688,7 @@ class ArrayValueTestCase(_TestCopySimple, unittest.TestCase):
 
     def test_setitem_index_wrong_type(self):
         with self._assert_type_error():
-            self._def['yes'] = 23
+            self._def["yes"] = 23
 
     def test_setitem_index_neg(self):
         with self.assertRaises(IndexError):
@@ -1281,6 +1698,10 @@ class ArrayValueTestCase(_TestCopySimple, unittest.TestCase):
         with self.assertRaises(IndexError):
             self._def[len(self._def)] = 23
 
+    def test_const_setitem(self):
+        with self.assertRaises(TypeError):
+            self._def_const[2] = 19
+
     def test_append_none(self):
         self._def.append(None)
         self.assertIsNone(self._def[len(self._def) - 1])
@@ -1290,6 +1711,10 @@ class ArrayValueTestCase(_TestCopySimple, unittest.TestCase):
         self._def.append(raw)
         self.assertEqual(self._def[len(self._def) - 1], raw)
 
+    def test_const_append(self):
+        with self.assertRaises(AttributeError):
+            self._def_const.append(12194)
+
     def test_append_vint(self):
         raw = 145
         self._def.append(bt2.create_value(raw))
@@ -1309,6 +1734,10 @@ class ArrayValueTestCase(_TestCopySimple, unittest.TestCase):
         self.assertEqual(self._def[len(self._def) - 2], raw[1])
         self.assertEqual(self._def[len(self._def) - 1], raw[2])
 
+    def test_const_iadd(self):
+        with self.assertRaises(TypeError):
+            self._def_const += 12194
+
     def test_iadd_unknown(self):
         class A:
             pass
@@ -1327,27 +1756,53 @@ class ArrayValueTestCase(_TestCopySimple, unittest.TestCase):
         for velem, elem in zip(self._def, self._def_value):
             self.assertEqual(velem, elem)
 
+    def test_const_iter(self):
+        for velem, elem in zip(self._def_const, self._def_value):
+            self.assertEqual(velem, elem)
+
+    def test_const_get_item(self):
+        item1 = self._def_const[0]
+        item2 = self._def_const[2]
+        item3 = self._def_const[5]
+        item4 = self._def_const[7]
+        item5 = self._def_const[8]
+
+        self.assertEqual(item1, None)
+
+        self.assertIs(type(item2), bt2._BoolValueConst)
+        self.assertEqual(item2, True)
+
+        self.assertIs(type(item3), bt2._SignedIntegerValueConst)
+        self.assertEqual(item3, 42)
+
+        self.assertIs(type(item4), bt2._RealValueConst)
+        self.assertEqual(item4, 23.17)
+
+        self.assertIs(type(item5), bt2._StringValueConst)
+        self.assertEqual(item5, "yes")
+
 
 class MapValueTestCase(_TestCopySimple, unittest.TestCase):
     def setUp(self):
         self._def_value = {
-            'none': None,
-            'false': False,
-            'true': True,
-            'neg-int': -23,
-            'zero': 0,
-            'pos-int': 42,
-            'neg-float': -42.4,
-            'pos-float': 23.17,
-            'str': 'yes'
+            "none": None,
+            "false": False,
+            "true": True,
+            "neg-int": -23,
+            "zero": 0,
+            "pos-int": 42,
+            "neg-float": -42.4,
+            "pos-float": 23.17,
+            "str": "yes",
         }
         self._def = bt2.MapValue(copy.deepcopy(self._def_value))
+        self._def_const = _create_const_value(self._def_value)
 
     def tearDown(self):
         del self._def
 
     def _modify_def(self):
-        self._def['zero'] = 1
+        self._def["zero"] = 1
 
     def test_create_default(self):
         m = bt2.MapValue()
@@ -1366,7 +1821,7 @@ class MapValueTestCase(_TestCopySimple, unittest.TestCase):
             pass
 
         with self.assertRaises(AttributeError):
-            m = bt2.MapValue(A())
+            bt2.MapValue(A())
 
     def test_bool_op_true(self):
         self.assertTrue(bool(self._def))
@@ -1377,53 +1832,80 @@ class MapValueTestCase(_TestCopySimple, unittest.TestCase):
     def test_len(self):
         self.assertEqual(len(self._def), len(self._def_value))
 
+    def test_const_eq(self):
+        a1 = _create_const_value({"a": 1, "b": 2, "c": 3})
+        a2 = {"a": 1, "b": 2, "c": 3}
+        self.assertEqual(a1, a2)
+
     def test_eq_int(self):
         self.assertNotEqual(self._def, 23)
 
     def test_eq_diff_len(self):
-        a1 = bt2.create_value({'a': 1, 'b': 2, 'c': 3})
-        a2 = bt2.create_value({'a': 1, 'b': 2})
+        a1 = bt2.create_value({"a": 1, "b": 2, "c": 3})
+        a2 = bt2.create_value({"a": 1, "b": 2})
+        self.assertNotEqual(a1, a2)
+
+    def test_const_eq_diff_len(self):
+        a1 = _create_const_value({"a": 1, "b": 2, "c": 3})
+        a2 = _create_const_value({"a": 1, "b": 2})
         self.assertNotEqual(a1, a2)
 
     def test_eq_diff_content_same_len(self):
-        a1 = bt2.create_value({'a': 1, 'b': 2, 'c': 3})
-        a2 = bt2.create_value({'a': 4, 'b': 2, 'c': 3})
+        a1 = bt2.create_value({"a": 1, "b": 2, "c": 3})
+        a2 = bt2.create_value({"a": 4, "b": 2, "c": 3})
+        self.assertNotEqual(a1, a2)
+
+    def test_const_eq_diff_content_same_len(self):
+        a1 = _create_const_value({"a": 1, "b": 2, "c": 3})
+        a2 = _create_const_value({"a": 4, "b": 2, "c": 3})
         self.assertNotEqual(a1, a2)
 
     def test_eq_same_content_diff_keys(self):
-        a1 = bt2.create_value({'a': 1, 'b': 2, 'c': 3})
-        a2 = bt2.create_value({'a': 1, 'k': 2, 'c': 3})
+        a1 = bt2.create_value({"a": 1, "b": 2, "c": 3})
+        a2 = bt2.create_value({"a": 1, "k": 2, "c": 3})
+        self.assertNotEqual(a1, a2)
+
+    def test_const_eq_same_content_diff_keys(self):
+        a1 = _create_const_value({"a": 1, "b": 2, "c": 3})
+        a2 = _create_const_value({"a": 1, "k": 2, "c": 3})
         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)
         self.assertEqual(a1, raw)
 
+    def test_const_eq_same_content_same_len(self):
+        raw = {"3": 3, "True": True, "array": [1, 2.5, None, {"a": 17.6, "b": None}]}
+        a1 = _create_const_value(raw)
+        a2 = _create_const_value(copy.deepcopy(raw))
+        self.assertEqual(a1, a2)
+        self.assertEqual(a1, raw)
+
     def test_setitem_int(self):
         raw = 19
-        self._def['pos-int'] = raw
-        self.assertEqual(self._def['pos-int'], raw)
+        self._def["pos-int"] = raw
+        self.assertEqual(self._def["pos-int"], raw)
+
+    def test_const_setitem_int(self):
+        with self.assertRaises(TypeError):
+            self._def_const["pos-int"] = 19
 
     def test_setitem_vint(self):
         raw = 19
-        self._def['pos-int'] = bt2.create_value(raw)
-        self.assertEqual(self._def['pos-int'], raw)
+        self._def["pos-int"] = bt2.create_value(raw)
+        self.assertEqual(self._def["pos-int"], raw)
 
     def test_setitem_none(self):
-        self._def['none'] = None
-        self.assertIsNone(self._def['none'])
+        self._def["none"] = None
+        self.assertIsNone(self._def["none"])
 
     def test_setitem_new_int(self):
         old_len = len(self._def)
-        self._def['new-int'] = 23
-        self.assertEqual(self._def['new-int'], 23)
+        self._def["new-int"] = 23
+        self.assertEqual(self._def["new-int"], 23)
         self.assertEqual(len(self._def), old_len + 1)
 
     def test_setitem_index_wrong_type(self):
@@ -1435,6 +1917,41 @@ class MapValueTestCase(_TestCopySimple, unittest.TestCase):
             val = self._def_value[vkey]
             self.assertEqual(vval, val)
 
+    def test_const_iter(self):
+        for vkey, vval in self._def_const.items():
+            val = self._def_value[vkey]
+            self.assertEqual(vval, val)
+
+    def test_get_item(self):
+        i = self._def["pos-float"]
+        self.assertIs(type(i), bt2.RealValue)
+        self.assertEqual(i, 23.17)
+
+    def test_const_get_item(self):
+        item1 = self._def_const["none"]
+        item2 = self._def_const["true"]
+        item3 = self._def_const["pos-int"]
+        item4 = self._def_const["pos-float"]
+        item5 = self._def_const["str"]
+
+        self.assertEqual(item1, None)
+
+        self.assertIs(type(item2), bt2._BoolValueConst)
+        self.assertEqual(item2, True)
+
+        self.assertIs(type(item3), bt2._SignedIntegerValueConst)
+        self.assertEqual(item3, 42)
+
+        self.assertIs(type(item4), bt2._RealValueConst)
+        self.assertEqual(item4, 23.17)
+
+        self.assertIs(type(item5), bt2._StringValueConst)
+        self.assertEqual(item5, "yes")
+
     def test_getitem_wrong_key(self):
         with self.assertRaises(KeyError):
-            self._def['kilojoule']
+            self._def["kilojoule"]
+
+
+if __name__ == "__main__":
+    unittest.main()
This page took 0.04091 seconds and 4 git commands to generate.