123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 |
- discard """
- output: '''
- set is empty
- '''
- """
- import sets, hashes
- block tsetpop:
- var a = initSet[int]()
- for i in 1..1000:
- a.incl(i)
- doAssert len(a) == 1000
- for i in 1..1000:
- discard a.pop()
- doAssert len(a) == 0
- try:
- echo a.pop()
- except KeyError as e:
- echo e.msg
- block tsets_lt:
- var s, s1: set[char]
- s = {'a'..'d'}
- s1 = {'a'..'c'}
- doAssert s1 < s
- doAssert s1 * s == {'a'..'c'}
- doAssert s1 <= s
- block tsets2:
- const
- data = [
- "34", "12",
- "90", "0",
- "1", "2",
- "3", "4",
- "5", "6",
- "7", "8",
- "9", "---00",
- "10", "11", "19",
- "20", "30", "40",
- "50", "60", "70",
- "80"]
- block tableTest1:
- var t = initSet[tuple[x, y: int]]()
- t.incl((0,0))
- t.incl((1,0))
- assert(not t.containsOrIncl((0,1)))
- t.incl((1,1))
- for x in 0..1:
- for y in 0..1:
- assert((x,y) in t)
- #assert($t ==
- # "{(x: 0, y: 0), (x: 0, y: 1), (x: 1, y: 0), (x: 1, y: 1)}")
- block setTest2:
- var t = initSet[string]()
- t.incl("test")
- t.incl("111")
- t.incl("123")
- t.excl("111")
- t.incl("012")
- t.incl("123") # test duplicates
- assert "123" in t
- assert "111" notin t # deleted
- assert t.missingOrExcl("000")
- assert "000" notin t
- assert t.missingOrExcl("012") == false
- assert "012" notin t
- assert t.containsOrIncl("012") == false
- assert t.containsOrIncl("012")
- assert "012" in t # added back
- for key in items(data): t.incl(key)
- for key in items(data): assert key in t
- for key in items(data): t.excl(key)
- for key in items(data): assert key notin t
- block orderedSetTest1:
- var t = data.toOrderedSet
- for key in items(data): assert key in t
- var i = 0
- # `items` needs to yield in insertion order:
- for key in items(t):
- assert key == data[i]
- inc(i)
- block tsets3:
- let
- s1: HashSet[int] = toSet([1, 2, 4, 8, 16])
- s2: HashSet[int] = toSet([1, 2, 3, 5, 8])
- s3: HashSet[int] = toSet([3, 5, 7])
- block union:
- let
- s1_s2 = union(s1, s2)
- s1_s3 = s1 + s3
- s2_s3 = s2 + s3
- assert s1_s2.len == 7
- assert s1_s3.len == 8
- assert s2_s3.len == 6
- for i in s1:
- assert i in s1_s2
- assert i in s1_s3
- for i in s2:
- assert i in s1_s2
- assert i in s2_s3
- for i in s3:
- assert i in s1_s3
- assert i in s2_s3
- assert((s1 + s1) == s1)
- assert((s2 + s1) == s1_s2)
- block intersection:
- let
- s1_s2 = intersection(s1, s2)
- s1_s3 = intersection(s1, s3)
- s2_s3 = s2 * s3
- assert s1_s2.len == 3
- assert s1_s3.len == 0
- assert s2_s3.len == 2
- for i in s1_s2:
- assert i in s1
- assert i in s2
- for i in s1_s3:
- assert i in s1
- assert i in s3
- for i in s2_s3:
- assert i in s2
- assert i in s3
- assert((s2 * s2) == s2)
- assert((s3 * s2) == s2_s3)
- block symmetricDifference:
- let
- s1_s2 = symmetricDifference(s1, s2)
- s1_s3 = s1 -+- s3
- s2_s3 = s2 -+- s3
- assert s1_s2.len == 4
- assert s1_s3.len == 8
- assert s2_s3.len == 4
- for i in s1:
- assert i in s1_s2 xor i in s2
- assert i in s1_s3 xor i in s3
- for i in s2:
- assert i in s1_s2 xor i in s1
- assert i in s2_s3 xor i in s3
- for i in s3:
- assert i in s1_s3 xor i in s1
- assert i in s2_s3 xor i in s2
- assert((s3 -+- s3) == initSet[int]())
- assert((s3 -+- s1) == s1_s3)
- block difference:
- let
- s1_s2 = difference(s1, s2)
- s1_s3 = difference(s1, s3)
- s2_s3 = s2 - s3
- assert s1_s2.len == 2
- assert s1_s3.len == 5
- assert s2_s3.len == 3
- for i in s1:
- assert i in s1_s2 xor i in s2
- assert i in s1_s3 xor i in s3
- for i in s2:
- assert i in s2_s3 xor i in s3
- assert((s2 - s2) == initSet[int]())
- block disjoint:
- assert(not disjoint(s1, s2))
- assert disjoint(s1, s3)
- assert(not disjoint(s2, s3))
- assert(not disjoint(s2, s2))
|