include sets let s1: TSet[int] = toSet([1, 2, 4, 8, 16]) s2: TSet[int] = toSet([1, 2, 3, 5, 8]) s3: TSet[int] = toSet([3, 5, 7]) block union: let s1_s2 = union(s1, s2) s1_s3 = s1 or s3 s2_s3 = s2 or 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 or s1) == s1) assert((s2 or s1) == s1_s2) block intersection: let s1_s2 = intersection(s1, s2) s1_s3 = intersection(s1, s3) s2_s3 = s2 and 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 and s2) == s2) assert((s3 and s2) == s2_s3) block symmetricDifference: let s1_s2 = symmetricDifference(s1, s2) s1_s3 = s1 xor s3 s2_s3 = s2 xor 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 xor s3) == initSet[int]()) assert((s3 xor s1) == s1_s3) block disjoint: assert(not disjoint(s1, s2)) assert disjoint(s1, s3) assert(not disjoint(s2, s3)) assert(not disjoint(s2, s2))