# SPDX-License-Identifier: MIT
# Set iteration/representation order is unspecified: observe membership and effects.
s = {1, 2, 2, 3}
alias = s
print(len(s), bool(s), 2 in s, 9 not in s)
s.add(4)
s.discard(9)
s.remove(2)
print(s == {1, 3, 4}, alias is s)
copy = s.copy()
print(copy == s, copy is s)
copy.clear()
print(len(copy), bool(copy), len(s))
t = set([3, 4, 5, 5])
print(s | t == {1, 3, 4, 5}, s & t == {3, 4})
print(s - t == {1}, s ^ t == {1, 5})
print({1} < s, s > {1}, s <= s, s >= s, s == t, s != t)
print(s.isdisjoint({8, 9}), s.issubset({1, 3, 4, 8}), s.issuperset([1, 3]))
print(s.union([7]) == {1, 3, 4, 7})
print(s.intersection([3, 8]) == {3}, s.difference([1]) == {3, 4})
print(s.symmetric_difference([1, 8]) == {3, 4, 8})
s.update([5, 6], (6, 7))
print(s == {1, 3, 4, 5, 6, 7}, alias is s)
s.intersection_update({3, 4, 5})
print(s == {3, 4, 5}, alias is s)
s.difference_update([4])
s.symmetric_difference_update({3, 8})
print(s == {5, 8}, alias is s)
s |= {9}
s &= {5, 8}
s -= {5}
s ^= {10}
print(s == {8, 10}, alias is s)
s |= s
print(s == {8, 10})
s -= s
print(len(s), alias is s)
s.update({1, 2, 3})
total = 0
for item in s:
    total += item
print(total)
print({n * n for n in range(5) if n % 2 == 0} == {0, 4, 16})
item = s.pop()
print(item in {1, 2, 3}, len(s), item not in s)
s.clear()
try:
    s.pop()
except KeyError:
    print('empty pop')
try:
    s.remove(1)
except KeyError as error:
    print(repr(error))
print(set(), frozenset())
frozen = frozenset([1, 2, 2])
print(len(frozen), frozen == {1, 2}, 2 in frozen)
print(frozen | frozenset([3]) == {1, 2, 3})
print(frozen & {2} == frozenset([2]))
print(set(frozen) == {1, 2}, frozen.copy() is frozen)
print(set({'a': 1, 'b': 2}) == {'a', 'b'})
print(set({'a': 1, 'b': 2}.values()) == {1, 2})
print(set([(1, 2), (1, 2), (2, 3)]) == {(1, 2), (2, 3)})

print(set('é😀é') == {'é', '😀'}, set(b'\x00\xff\x00') == {0, 255})
def make_set():
    result = set()
    result.update([1, 2])
    return result
print(make_set() == {1, 2}, make_set() is not make_set())
