35 lines
1.5 KiB
Python
35 lines
1.5 KiB
Python
def _test(consolidate=consolidate):
|
|
|
|
def freze(list_of_sets):
|
|
'return a set of frozensets from the list of sets to allow comparison'
|
|
return set(frozenset(s) for s in list_of_sets)
|
|
|
|
# Define some variables
|
|
A,B,C,D,E,F,G,H,I,J,K = 'A,B,C,D,E,F,G,H,I,J,K'.split(',')
|
|
# Consolidate some lists of sets
|
|
assert (freze(consolidate([{A,B}, {C,D}])) == freze([{'A', 'B'}, {'C', 'D'}]))
|
|
assert (freze(consolidate([{A,B}, {B,D}])) == freze([{'A', 'B', 'D'}]))
|
|
assert (freze(consolidate([{A,B}, {C,D}, {D,B}])) == freze([{'A', 'C', 'B', 'D'}]))
|
|
assert (freze(consolidate([{H,I,K}, {A,B}, {C,D}, {D,B}, {F,G,H}])) ==
|
|
freze([{'A', 'C', 'B', 'D'}, {'G', 'F', 'I', 'H', 'K'}]))
|
|
assert (freze(consolidate([{A,H}, {H,I,K}, {A,B}, {C,D}, {D,B}, {F,G,H}])) ==
|
|
freze([{'A', 'C', 'B', 'D', 'G', 'F', 'I', 'H', 'K'}]))
|
|
assert (freze(consolidate([{H,I,K}, {A,B}, {C,D}, {D,B}, {F,G,H}, {A,H}])) ==
|
|
freze([{'A', 'C', 'B', 'D', 'G', 'F', 'I', 'H', 'K'}]))
|
|
# Confirm order-independence
|
|
from copy import deepcopy
|
|
import itertools
|
|
sets = [{H,I,K}, {A,B}, {C,D}, {D,B}, {F,G,H}, {A,H}]
|
|
answer = consolidate(deepcopy(sets))
|
|
for perm in itertools.permutations(sets):
|
|
assert consolidate(deepcopy(perm)) == answer
|
|
|
|
assert (answer == [{'A', 'C', 'B', 'D', 'G', 'F', 'I', 'H', 'K'}])
|
|
assert (len(list(itertools.permutations(sets))) == 720)
|
|
|
|
print('_test(%s) complete' % consolidate.__name__)
|
|
|
|
if __name__ == '__main__':
|
|
_test(consolidate)
|
|
_test(conso)
|