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 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181
|
from pyrsistent import pset, s
import pytest
import pickle
def test_key_is_tuple():
with pytest.raises(KeyError):
pset().remove((1,1))
def test_literalish_works():
assert s() is pset()
assert s(1, 2) == pset([1, 2])
def test_supports_hash():
assert hash(s(1, 2)) == hash(s(1, 2))
def test_empty_truthiness():
assert s(1)
assert not s()
def test_contains_elements_that_it_was_initialized_with():
initial = [1, 2, 3]
s = pset(initial)
assert set(s) == set(initial)
assert len(s) == len(set(initial))
def test_is_immutable():
s1 = pset([1])
s2 = s1.add(2)
assert s1 == pset([1])
assert s2 == pset([1, 2])
s3 = s2.remove(1)
assert s2 == pset([1, 2])
assert s3 == pset([2])
def test_remove_when_not_present():
s1 = s(1, 2, 3)
with pytest.raises(KeyError):
s1.remove(4)
def test_discard():
s1 = s(1, 2, 3)
assert s1.discard(3) == s(1, 2)
assert s1.discard(4) is s1
def test_is_iterable():
assert sum(pset([1, 2, 3])) == 6
def test_contains():
s = pset([1, 2, 3])
assert 2 in s
assert 4 not in s
def test_supports_set_operations():
s1 = pset([1, 2, 3])
s2 = pset([3, 4, 5])
assert s1 | s2 == s(1, 2, 3, 4, 5)
assert s1.union(s2) == s1 | s2
assert s1 & s2 == s(3)
assert s1.intersection(s2) == s1 & s2
assert s1 - s2 == s(1, 2)
assert s1.difference(s2) == s1 - s2
assert s1 ^ s2 == s(1, 2, 4, 5)
assert s1.symmetric_difference(s2) == s1 ^ s2
def test_supports_set_comparisons():
s1 = s(1, 2, 3)
s3 = s(1, 2)
s4 = s(1, 2, 3)
assert s(1, 2, 3, 3, 5) == s(1, 2, 3, 5)
assert s1 != s3
assert s3 < s1
assert s3 <= s1
assert s3 <= s4
assert s1 > s3
assert s1 >= s3
assert s4 >= s3
def test_str():
rep = str(pset([1, 2, 3]))
assert rep == "pset([1, 2, 3])"
def test_is_disjoint():
s1 = pset([1, 2, 3])
s2 = pset([3, 4, 5])
s3 = pset([4, 5])
assert not s1.isdisjoint(s2)
assert s1.isdisjoint(s3)
def test_evolver_simple_add():
x = s(1, 2, 3)
e = x.evolver()
assert not e.is_dirty()
e.add(4)
assert e.is_dirty()
x2 = e.persistent()
assert not e.is_dirty()
assert x2 == s(1, 2, 3, 4)
assert x == s(1, 2, 3)
def test_evolver_simple_remove():
x = s(1, 2, 3)
e = x.evolver()
e.remove(2)
x2 = e.persistent()
assert x2 == s(1, 3)
assert x == s(1, 2, 3)
def test_evolver_no_update_produces_same_pset():
x = s(1, 2, 3)
e = x.evolver()
assert e.persistent() is x
def test_evolver_len():
x = s(1, 2, 3)
e = x.evolver()
assert len(e) == 3
def test_copy_returns_reference_to_self():
s1 = s(10)
assert s1.copy() is s1
def test_pickling_empty_set():
assert pickle.loads(pickle.dumps(s(), -1)) == s()
def test_pickling_non_empty_map():
assert pickle.loads(pickle.dumps(s(1, 2), -1)) == s(1, 2)
def test_supports_weakref():
import weakref
weakref.ref(s(1))
def test_update():
assert s(1, 2, 3).update([3, 4, 4, 5]) == s(1, 2, 3, 4, 5)
def test_update_no_elements():
s1 = s(1, 2)
assert s1.update([]) is s1
def test_iterable():
"""
PSets can be created from iterables even though they can't be len() hinted.
"""
assert pset(iter("a")) == pset(iter("a"))
|