1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
|
import pytest
from pyrsistent import b, pbag
def test_literalish_works():
assert b(1, 2) == pbag([1, 2])
def test_empty_bag():
"""
creating an empty pbag returns a singleton.
Note that this should NOT be relied upon in application code.
"""
assert b() is b()
def test_supports_hash():
assert hash(b(1, 2)) == hash(b(2, 1))
def test_hash_in_dict():
assert {b(1,2,3,3): "hello"}[b(3,3,2,1)] == "hello"
def test_empty_truthiness():
assert b(1)
assert not b()
def test_repr_empty():
assert repr(b()) == 'pbag([])'
def test_repr_elements():
assert repr(b(1, 2)) in ('pbag([1, 2])', 'pbag([2, 1])')
def test_add_empty():
assert b().add(1) == b(1)
def test_remove_final():
assert b().add(1).remove(1) == b()
def test_remove_nonfinal():
assert b().add(1).add(1).remove(1) == b(1)
def test_remove_nonexistent():
with pytest.raises(KeyError) as excinfo:
b().remove(1)
assert str(excinfo.exconly()) == 'KeyError: 1'
def test_eq_empty():
assert b() == b()
def test_neq():
assert b(1) != b()
def test_eq_same_order():
assert b(1, 2, 1) == b(1, 2, 1)
def test_eq_different_order():
assert b(2, 1, 2) == b(1, 2, 2)
def test_count_non_existent():
assert b().count(1) == 0
def test_count_unique():
assert b(1).count(1) == 1
def test_count_duplicate():
assert b(1, 1).count(1) == 2
def test_length_empty():
assert len(b()) == 0
def test_length_unique():
assert len(b(1)) == 1
def test_length_duplicates():
assert len(b(1, 1)) == 2
def test_length_multiple_elements():
assert len(b(1, 1, 2, 3)) == 4
def test_iter_duplicates():
assert list(b(1, 1)) == [1, 1]
def test_iter_multiple_elements():
assert list(b(1, 2, 2)) in ([1, 2, 2], [2, 2, 1])
def test_contains():
assert 1 in b(1)
def test_not_contains():
assert 1 not in b(2)
def test_add():
assert b(3, 3, 3, 2, 2, 1) + b(4, 3, 2, 1) == b(4,
3, 3, 3, 3,
2, 2, 2,
1, 1)
def test_sub():
assert b(1, 2, 3, 3) - b(3, 4) == b(1, 2, 3)
def test_or():
assert b(1, 2, 2, 3, 3, 3) | b(1, 2, 3, 4, 4) == b(1,
2, 2,
3, 3, 3,
4, 4)
def test_and():
assert b(1, 2, 2, 3, 3, 3) & b(2, 3, 3, 4) == b(2, 3, 3)
def test_pbag_is_unorderable():
with pytest.raises(TypeError):
_ = b(1) < b(2) # type: ignore
with pytest.raises(TypeError):
_ = b(1) <= b(2) # type: ignore
with pytest.raises(TypeError):
_ = b(1) > b(2) # type: ignore
with pytest.raises(TypeError):
_ = b(1) >= b(2) # type: ignore
def test_supports_weakref():
import weakref
weakref.ref(b(1))
def test_update():
assert pbag([1, 2, 2]).update([3, 3, 4]) == pbag([1, 2, 2, 3, 3, 4])
def test_update_no_elements():
b = pbag([1, 2, 2])
assert b.update([]) is b
def test_iterable():
"""
PBags can be created from iterables even though they can't be len() hinted.
"""
assert pbag(iter("a")) == pbag(iter("a"))
|