65 lines
2.3 KiB
Python
65 lines
2.3 KiB
Python
import pytest
|
|
|
|
from dopt_basics import datastructures as dst
|
|
|
|
|
|
def test_flatten():
|
|
nested_iterable = ([1, 2], [[3], [4, 5]], [6, [7, 8, 9]])
|
|
target = tuple(i for i in range(1, 10))
|
|
|
|
ret_iter = dst.flatten(nested_iterable)
|
|
ret = tuple(ret_iter)
|
|
assert ret == target
|
|
|
|
|
|
def test_DualDict():
|
|
base_dict: dict[str, int] = {"test1": 1, "test2": 2, "test3": 3}
|
|
inverted_dict: dict[int, str] = {1: "test1", 2: "test2", 3: "test3"}
|
|
assert all((key == inverted_dict[value] for key, value in base_dict.items()))
|
|
|
|
dual_dict: dst.DualDict[str, int] = dst.DualDict(test1=1, test2=2, test3=3)
|
|
|
|
assert all((key in dual_dict for key in base_dict.keys()))
|
|
assert all((base_dict[key] == dual_dict[key] for key in base_dict.keys()))
|
|
assert all((key == dual_dict.inverted[value] for key, value in base_dict.items()))
|
|
assert all(
|
|
(inverted_dict[key] == dual_dict.inverted[key] for key in inverted_dict.keys())
|
|
)
|
|
base_dict["test_add"] = 5
|
|
dual_dict["test_add"] = 5
|
|
assert len(base_dict) == len(dual_dict)
|
|
assert len(dual_dict) == len(dual_dict.inverted)
|
|
del base_dict["test_add"]
|
|
del dual_dict["test_add"]
|
|
assert len(base_dict) == len(dual_dict)
|
|
assert len(dual_dict) == len(dual_dict.inverted)
|
|
|
|
for key_base, key_dd in zip(base_dict, dual_dict):
|
|
assert key_base == key_dd
|
|
|
|
|
|
def test_DualDict_update_Success():
|
|
base_dict: dict[str, int] = {"test1": 1, "test2": 2, "test3": 3}
|
|
dual_dict: dst.DualDict[str, int] = dst.DualDict(test1=1, test2=2, test3=3)
|
|
|
|
update = dict(test3=4, test4=5)
|
|
base_dict.update(**update)
|
|
dual_dict.update(**update)
|
|
|
|
assert all((key in dual_dict for key in base_dict.keys()))
|
|
assert all((base_dict[key] == dual_dict[key] for key in base_dict.keys()))
|
|
assert all((key == dual_dict.inverted[value] for key, value in base_dict.items()))
|
|
|
|
|
|
def test_DualDict_update_FailIdenticalValues():
|
|
base_dict: dict[str, int] = {"test1": 1, "test2": 2, "test3": 3}
|
|
|
|
with pytest.raises(ValueError):
|
|
_: dst.DualDict[str, int] = dst.DualDict(test1=1, test2=3, test3=3)
|
|
|
|
dual_dict: dst.DualDict[str, int] = dst.DualDict(test1=1, test2=2, test3=3)
|
|
update = dict(test3=4, test4=4)
|
|
base_dict.update(**update)
|
|
with pytest.raises(ValueError):
|
|
dual_dict.update(**update)
|