def test_smallish_sparse_map(): data = "1 2 3 4 5 6 7 8 9 10 11".split() incomplete_data = data[:-6] sparse_spec = SparseEnumap("ThingSparse", "a b c d e f g h i j k") spec = Enumap("Thing", sparse_spec.names()) print() print(spec.map(*data)) print(spec.map(*data, d="override")) print(sparse_spec.map(*incomplete_data)) # time Enumap.map() when all data is given enumap_map_time = timeit("spec.map(*data)", globals=dict(data=data, spec=spec), number=N_RUNS) # time Enumap.map() when all data is given as kwargs kwarg_data = dict(zip(spec.names(), data)) enumap_kwargs_map_time = timeit("spec.map(**data)", globals=dict(data=kwarg_data, spec=spec), number=N_RUNS) # time Enumap.map() when data is given with overrides enumap_override_map_time = timeit("spec.map(*data, d='override')", globals=dict(data=data, spec=spec), number=N_RUNS) # time SparseEnumap.map() when partial data is given enumap_sparse_map_time = timeit("spec.map(*data)", globals=dict(data=incomplete_data, spec=sparse_spec), number=N_RUNS) # time a regular dict(zip(...)) call regular_dict_time = timeit("dict(zip(spec.names(), data))", globals=dict(data=data, spec=spec), number=N_RUNS) # time a regular OrderedDict(zip(...)) call ordered_dict_time = timeit("OrderedDict(zip(spec.names(), data))", globals=dict(data=data, OrderedDict=OrderedDict, spec=spec), number=N_RUNS) print(f"{'Enumap.map':<40} {enumap_map_time:.2f}") print(f"{'Enumap.map (with kwargs)':<40} {enumap_kwargs_map_time:.2f}") print(f"{'Enumap.map (with override)':<40} {enumap_override_map_time:.2f}") print(f"{'Enumap.map (sparse)':<40} {enumap_sparse_map_time:.2f}") print(f"{'dict':<40} {regular_dict_time:.2f}") print(f"{'OrderedDict':<40} {ordered_dict_time:.2f}")
def test_map(): a = Enumap("a", names="b c e") assert (a.map(1, 2, 3, e=33) == OrderedDict([('b', 1), ('c', 2), ('e', 33)]))
def test_copy_from_names(): """Check that Enumap.names() can be used to construct another Enumap""" a = Enumap("a", "b c d") b = Enumap("b", a.names()) assert a.map(*range(3)) == b.map(*range(3))