aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/python/pyrsistent/py3/tests/checked_vector_test.py
diff options
context:
space:
mode:
authorshmel1k <shmel1k@ydb.tech>2023-11-26 18:16:14 +0300
committershmel1k <shmel1k@ydb.tech>2023-11-26 18:43:30 +0300
commitb8cf9e88f4c5c64d9406af533d8948deb050d695 (patch)
tree218eb61fb3c3b96ec08b4d8cdfef383104a87d63 /contrib/python/pyrsistent/py3/tests/checked_vector_test.py
parent523f645a83a0ec97a0332dbc3863bb354c92a328 (diff)
downloadydb-b8cf9e88f4c5c64d9406af533d8948deb050d695.tar.gz
add kikimr_configure
Diffstat (limited to 'contrib/python/pyrsistent/py3/tests/checked_vector_test.py')
-rw-r--r--contrib/python/pyrsistent/py3/tests/checked_vector_test.py213
1 files changed, 213 insertions, 0 deletions
diff --git a/contrib/python/pyrsistent/py3/tests/checked_vector_test.py b/contrib/python/pyrsistent/py3/tests/checked_vector_test.py
new file mode 100644
index 0000000000..b2e3d43cd6
--- /dev/null
+++ b/contrib/python/pyrsistent/py3/tests/checked_vector_test.py
@@ -0,0 +1,213 @@
+import datetime
+import pickle
+import pytest
+from pyrsistent import CheckedPVector, InvariantException, optional, CheckedValueTypeError, PVector
+
+
+class Naturals(CheckedPVector):
+ __type__ = int
+ __invariant__ = lambda value: (value >= 0, 'Negative value')
+
+def test_instantiate():
+ x = Naturals([1, 2, 3])
+
+ assert list(x) == [1, 2, 3]
+ assert isinstance(x, Naturals)
+ assert isinstance(x, PVector)
+
+def test_append():
+ x = Naturals()
+ x2 = x.append(1)
+
+ assert list(x2) == [1]
+ assert isinstance(x2, Naturals)
+
+def test_extend():
+ x = Naturals()
+ x2 = x.extend([1])
+
+ assert list(x2) == [1]
+ assert isinstance(x2, Naturals)
+
+def test_set():
+ x = Naturals([1, 2])
+ x2 = x.set(1, 3)
+
+ assert list(x2) == [1, 3]
+ assert isinstance(x2, Naturals)
+
+
+def test_invalid_type():
+ try:
+ Naturals([1, 2.0])
+ assert False
+ except CheckedValueTypeError as e:
+ assert e.expected_types == (int,)
+ assert e.actual_type is float
+ assert e.actual_value == 2.0
+ assert e.source_class is Naturals
+
+ x = Naturals([1, 2])
+ with pytest.raises(TypeError):
+ x.append(3.0)
+
+ with pytest.raises(TypeError):
+ x.extend([3, 4.0])
+
+ with pytest.raises(TypeError):
+ x.set(1, 2.0)
+
+ with pytest.raises(TypeError):
+ x.evolver()[1] = 2.0
+
+def test_breaking_invariant():
+ try:
+ Naturals([1, -1])
+ assert False
+ except InvariantException as e:
+ assert e.invariant_errors == ('Negative value',)
+
+ x = Naturals([1, 2])
+ try:
+ x.append(-1)
+ assert False
+ except InvariantException as e:
+ assert e.invariant_errors == ('Negative value',)
+
+ try:
+ x.extend([-1])
+ assert False
+ except InvariantException as e:
+ assert e.invariant_errors == ('Negative value',)
+
+ try:
+ x.set(1, -1)
+ assert False
+ except InvariantException as e:
+ assert e.invariant_errors == ('Negative value',)
+
+def test_create_base_case():
+ x = Naturals.create([1, 2, 3])
+
+ assert isinstance(x, Naturals)
+ assert x == Naturals([1, 2, 3])
+
+def test_create_with_instance_of_checked_pvector_returns_the_argument():
+ x = Naturals([1, 2, 3])
+
+ assert Naturals.create(x) is x
+
+class OptionalNaturals(CheckedPVector):
+ __type__ = optional(int)
+ __invariant__ = lambda value: (value is None or value >= 0, 'Negative value')
+
+def test_multiple_allowed_types():
+ assert list(OptionalNaturals([1, None, 3])) == [1, None, 3]
+
+class NaturalsVector(CheckedPVector):
+ __type__ = optional(Naturals)
+
+def test_create_of_nested_structure():
+ assert NaturalsVector([Naturals([1, 2]), Naturals([3, 4]), None]) ==\
+ NaturalsVector.create([[1, 2], [3, 4], None])
+
+def test_serialize_default_case():
+ v = CheckedPVector([1, 2, 3])
+ assert v.serialize() == [1, 2, 3]
+
+class Dates(CheckedPVector):
+ __type__ = datetime.date
+
+ @staticmethod
+ def __serializer__(format, d):
+ return d.strftime(format)
+
+def test_serialize_custom_serializer():
+ d = datetime.date
+ v = Dates([d(2015, 2, 2), d(2015, 2, 3)])
+ assert v.serialize(format='%Y-%m-%d') == ['2015-02-02', '2015-02-03']
+
+def test_type_information_is_inherited():
+ class MultiDates(Dates):
+ __type__ = int
+
+ MultiDates([datetime.date(2015, 2, 4), 5])
+
+ with pytest.raises(TypeError):
+ MultiDates([5.0])
+
+def test_invariants_are_inherited():
+ class LimitNaturals(Naturals):
+ __invariant__ = lambda value: (value < 10, 'Too big')
+
+ try:
+ LimitNaturals([10, -1])
+ assert False
+ except InvariantException as e:
+ assert e.invariant_errors == ('Too big', 'Negative value')
+
+def test_invariant_must_be_callable():
+ with pytest.raises(TypeError):
+ class InvalidInvariant(CheckedPVector):
+ __invariant__ = 1
+
+def test_type_spec_must_be_type():
+ with pytest.raises(TypeError):
+ class InvalidType(CheckedPVector):
+ __type__ = 1
+
+def test_repr():
+ x = Naturals([1, 2])
+
+ assert str(x) == 'Naturals([1, 2])'
+
+def test_evolver_returns_same_instance_when_no_updates():
+ x = Naturals([1, 2])
+ assert x.evolver().persistent() is x
+
+def test_pickling():
+ x = Naturals([1, 2])
+ y = pickle.loads(pickle.dumps(x, -1))
+
+ assert x == y
+ assert isinstance(y, Naturals)
+
+def test_multiple_optional_types():
+ class Numbers(CheckedPVector):
+ __type__ = optional(int, float)
+
+ numbers = Numbers([1, 2.5, None])
+ assert numbers.serialize() == [1, 2.5, None]
+
+ with pytest.raises(TypeError):
+ numbers.append('foo')
+
+
+class NaturalsVectorStr(CheckedPVector):
+ __type__ = '__tests__.checked_vector_test.Naturals'
+
+
+def test_check_with_string_specification():
+ naturals_list = [Naturals([1, 2]), Naturals([3, 4])]
+ nv = NaturalsVectorStr(naturals_list)
+ assert nv == naturals_list
+
+
+def test_create_with_string_specification():
+ naturals_list = [[1, 2], [3, 4]]
+ nv = NaturalsVectorStr.create(naturals_list)
+ assert nv == naturals_list
+
+
+def test_supports_weakref():
+ import weakref
+ weakref.ref(Naturals([]))
+
+
+def test_create_with_generator_iterator():
+ # See issue #97
+ class Numbers(CheckedPVector):
+ __type__ = int
+
+ n = Numbers(i for i in [1, 2, 3])
+ assert n == Numbers([1, 2, 3]) \ No newline at end of file