def test_copy_kwargs(self): fod1 = FrozenOrderedDict(self.ITEMS_1) fod2 = fod1.copy(**self.ODICT_2) self.assertNotEqual(id(fod1), id(fod2)) self.assertEqual(dict(list(fod1.items()) + list(self.ODICT_2.items())), fod2)
def test_copy_ordereddict_items(self): fod1 = FrozenOrderedDict(self.ITEMS_1) fod2 = fod1.copy(self.ODICT_2) self.assertNotEqual(id(fod1), id(fod2)) self.assertEqual( list(fod1.items()) + list(self.ITEMS_2), list(fod2.items()))
def test_copy_no_items(self): fod1 = FrozenOrderedDict(self.ITEMS_1) fod2 = fod1.copy() self.assertNotEqual(id(fod1), id(fod2)) self.assertEqual(fod1.items(), fod2.items()) self.assertEqual(repr(fod1), repr(fod2)) self.assertEqual(len(fod1), len(fod2)) self.assertEqual(hash(fod1), hash(fod2))
class TMap(Generic[M, I]): """ Wrapper of `immutables.Map` with simpler type information. `immutables` seems to provide their own typeing, but we want to stay compatible with older versions of mypy. """ def __init__(self, *args, **kwargs) -> None: self.dict = FrozenOrderedDict(*args, **kwargs) def __getitem__(self, key: M) -> I: return self.dict.__getitem__(key) def __hash__(self): return self.dict.__hash__() def get(self, key: M, default: Optional[I] = None) -> I: return self.dict.get(key, default) def set(self, key: M, val: I) -> 'TMap[M,I]': return TMap(self.dict.copy({key: val})) def items(self) -> Iterable[Tuple[M, I]]: return self.dict.items() def values(self) -> Iterable[I]: return self.dict.values() def keys(self) -> Iterable[M]: return self.dict.keys() def __eq__(self, other): return self.dict == other.dict def __len__(self): return len(self.dict) def __repr__(self): return f"TMap({self.dict.__repr__()})"
def test_copy_kwargs(self): fod1 = FrozenOrderedDict(self.ITEMS_1) fod2 = fod1.copy(**self.ODICT_2) self.assertNotEqual(id(fod1), id(fod2)) self.assertEqual(dict(fod1.items() + self.ODICT_2.items()), fod2)
def test_copy_ordereddict_items(self): fod1 = FrozenOrderedDict(self.ITEMS_1) fod2 = fod1.copy(self.ODICT_2) self.assertNotEqual(id(fod1), id(fod2)) self.assertEqual(fod1.items() + list(self.ITEMS_2), fod2.items())
def test_copy_tuple_items(self): fod1 = FrozenOrderedDict(self.ITEMS_1) fod2 = fod1.copy(self.ITEMS_2) self.assertNotEqual(id(fod1), id(fod2)) self.assertEqual(fod1.items() + list(self.ITEMS_2), fod2.items())