118 lines
2.2 KiB
Plaintext
118 lines
2.2 KiB
Plaintext
|
# 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}
|