blob: 68edd1e6b77d4014d9cb574663af70c5fb995f59 [file] [log] [blame] [edit]
# Test cases for sets (compile and run)
[case testSets]
from typing import Set, List
def instantiateLiteral() -> Set[int]:
return {1, 2, 3, 5, 8}
def fromIterator() -> List[Set[int]]:
a = set([1, 3, 5])
b = set((1, 3, 5))
c = set({1: '1', 3: '3', 5: '5'})
d = set(x for x in range(1, 6, 2))
e = set((x for x in range(1, 6, 2)))
return [a, b, c, d, e]
def fromIterator2() -> Set[int]:
tmp_list = [1, 2, 3, 4, 5]
return set((x + 1) for x in ((y * 10) for y in (z for z in tmp_list if z < 4)))
def addIncrementing(s : Set[int]) -> None:
for a in [1, 2, 3]:
if a not in s:
s.add(a)
return
def replaceWith1(s : Set[int]) -> None:
s.clear()
s.add(1)
def remove1(s : Set[int]) -> None:
s.remove(1)
def discard1(s: Set[int]) -> None:
s.discard(1)
def pop(s : Set[int]) -> int:
return s.pop()
def update(s: Set[int], x: List[int]) -> None:
s.update(x)
[file driver.py]
from native import instantiateLiteral
from testutil import assertRaises
val = instantiateLiteral()
assert 1 in val
assert 2 in val
assert 3 in val
assert 5 in val
assert 8 in val
assert len(val) == 5
assert val == {1, 2, 3, 5, 8}
s = 0
for i in val:
s += i
assert s == 19
from native import fromIterator
sets = fromIterator()
for s in sets:
assert s == {1, 3, 5}
from native import fromIterator2
s = fromIterator2()
assert s == {11, 21, 31}
from native import addIncrementing
s = set()
addIncrementing(s)
assert s == {1}
addIncrementing(s)
assert s == {1, 2}
addIncrementing(s)
assert s == {1, 2, 3}
from native import replaceWith1
s = {3, 7, 12}
replaceWith1(s)
assert s == {1}
from native import remove1
import traceback
s = {1, 4, 6}
remove1(s)
assert s == {4, 6}
with assertRaises(KeyError, '1'):
remove1(s)
from native import discard1
s = {1, 4, 6}
discard1(s)
assert s == {4, 6}
discard1(s)
assert s == {4, 6}
from native import pop
s = {1, 2, 3}
x = pop(s)
assert len(s) == 2
assert x in [1, 2, 3]
y = pop(s)
assert len(s) == 1
assert y in [1, 2, 3]
assert x != y
z = pop(s)
assert len(s) == 0
assert z in [1, 2, 3]
assert x != z
assert y != z
with assertRaises(KeyError, 'pop from an empty set'):
pop(s)
from native import update
s = {1, 2, 3}
update(s, [5, 4, 3])
assert s == {1, 2, 3, 4, 5}
[case testFrozenSets]
from typing import FrozenSet, List, Any, cast
from testutil import assertRaises
def instantiateLiteral() -> FrozenSet[int]:
return frozenset((1, 2, 3, 5, 8))
def emptyFrozenSet1() -> FrozenSet[int]:
return frozenset()
def emptyFrozenSet2() -> FrozenSet[int]:
return frozenset(())
def fromIterator() -> List[FrozenSet[int]]:
a = frozenset([1, 3, 5])
b = frozenset((1, 3, 5))
c = frozenset({1, 3, 5})
d = frozenset({1: '1', 3: '3', 5: '5'})
e = frozenset(x for x in range(1, 6, 2))
f = frozenset((x for x in range(1, 6, 2)))
return [a, b, c, d, e, f]
def fromIterator2() -> FrozenSet[int]:
tmp_list = [1, 2, 3, 4, 5]
return frozenset((x + 1) for x in ((y * 10) for y in (z for z in tmp_list if z < 4)))
def castFrozenSet() -> FrozenSet[int]:
x: Any = frozenset((1, 2, 3, 5, 8))
return cast(FrozenSet, x)
def castFrozenSetError() -> FrozenSet[int]:
x: Any = {1, 2, 3, 5, 8}
return cast(FrozenSet, x)
def test_frozen_sets() -> None:
val = instantiateLiteral()
assert 1 in val
assert 2 in val
assert 3 in val
assert 5 in val
assert 8 in val
assert len(val) == 5
assert val == {1, 2, 3, 5, 8}
s = 0
for i in val:
s += i
assert s == 19
empty_set1 = emptyFrozenSet1()
assert empty_set1 == frozenset()
empty_set2 = emptyFrozenSet2()
assert empty_set2 == frozenset()
sets = fromIterator()
for s2 in sets:
assert s2 == {1, 3, 5}
s3 = fromIterator2()
assert s3 == {11, 21, 31}
val2 = castFrozenSet()
assert val2 == {1, 2, 3, 5, 8}
with assertRaises(TypeError, "frozenset object expected; got set"):
castFrozenSetError()
[case testFrozenSetsFromIterables]
from typing import FrozenSet
def f(x: int) -> int:
return x
def f1() -> FrozenSet[int]:
tmp_list = [1, 3, 5]
return frozenset(f(x) for x in tmp_list)
def f2() -> FrozenSet[int]:
tmp_tuple = (1, 3, 5)
return frozenset(f(x) for x in tmp_tuple)
def f3() -> FrozenSet[int]:
tmp_set = {1, 3, 5}
return frozenset(f(x) for x in tmp_set)
def f4() -> FrozenSet[int]:
tmp_dict = {1: '1', 3: '3', 5: '5'}
return frozenset(f(x) for x in tmp_dict)
def f5() -> FrozenSet[int]:
return frozenset(f(x) for x in range(1, 6, 2))
def f6() -> FrozenSet[int]:
return frozenset((f(x) for x in range(1, 6, 2)))
def g1(x: int) -> int:
return x
def g2(x: int) -> int:
return x * 10
def g3(x: int) -> int:
return x + 1
def g4() -> FrozenSet[int]:
tmp_list = [1, 2, 3, 4, 5]
return frozenset(g3(x) for x in (g2(y) for y in (g1(z) for z in tmp_list if z < 4)))
def test_frozen_sets_from_iterables() -> None:
val = frozenset({1, 3, 5})
assert f1() == val
assert f2() == val
assert f3() == val
assert f4() == val
assert f5() == val
assert f6() == val
assert g4() == frozenset({11, 21, 31})
[case testPrecomputedFrozenSets]
from typing import Final, Any
CONST: Final = "CONST"
non_const = "non_const"
def main_set(item: Any) -> bool:
return item in {None, False, 1, 2.0, "3", b"4", 5j, (6,), ((7,),), (), CONST}
def main_negated_set(item: Any) -> bool:
return item not in {None, False, 1, 2.0, "3", b"4", 5j, (6,), ((7,),), (), CONST}
def non_final_name_set(item: Any) -> bool:
return item in {non_const}
s = set()
for i in {None, False, 1, 2.0, "3", b"4", 5j, (6,), CONST}:
s.add(i)
def test_in_set() -> None:
for item in (None, False, 1, 2.0, "3", b"4", 5j, (6,), ((7,),), (), CONST):
assert main_set(item), f"{item!r} should be in set_main"
assert not main_negated_set(item), item
global non_const
assert non_final_name_set(non_const)
non_const = "updated"
assert non_final_name_set("updated")
def test_for_set() -> None:
assert not s ^ {None, False, 1, 2.0, "3", b"4", 5j, (6,), CONST}, s