def test_hashing(): map = { List(Integer)([1,2,3]): 'foo', Map(String,Integer)({'a': 1, 'b': 2}): 'bar' } assert List(Integer)([1,2,3]) in map assert Map(String,Integer)({'a': 1, 'b': 2}) in map assert List(Integer)([3,2,1]) not in map assert Map(String,Integer)({'a': 2, 'b': 1}) not in map
def test_map_iteration(): mi = Map(String,Integer)({'a': 1, 'b': 2}) miter = iter(mi) assert next(miter) in (String('a'), String('b')) assert next(miter) in (String('a'), String('b')) with pytest.raises(StopIteration): next(miter) mi = Map(String,Integer)({}) with pytest.raises(StopIteration): next(iter(mi))
def test_map_idioms(): mi = Map(String,Integer)({'a': 1, 'b': 2}) for key in ['a', String('a')]: assert mi[key] == Integer(1) assert key in mi for key in ['b', String('b')]: assert mi[key] == Integer(2) assert key in mi for key in [1, 'c', String('c')]: with pytest.raises(KeyError): mi[key] assert key not in mi
def test_basic_maps(): assert Map(String,Integer)({}).check().ok() assert Map(String,Integer)({'a':1}).check().ok() assert Map(String,Integer)(('a', 1)).check().ok() assert Map(String,Integer)(('a', 1), ('b', 2)).check().ok() assert not Map(String,Integer)({'a':'{{foo}}'}).check().ok() assert not Map(Integer,String)({'{{foo}}':'a'}).check().ok() assert Map(String,Integer)({'a':'{{foo}}'}).bind(foo = 5).check().ok() with pytest.raises(TypeError): Map(String,Integer)(a = 1) with pytest.raises(ValueError): Map(String,Integer)({'a': 1}, {'b': 2}) for value in [None, type, 123, 'a']: with pytest.raises(ValueError): Map(String,Integer)(value) repr(Map(String,Integer)(('a', 1), ('b', 2)))
def test_map_keys_that_should_improve(): mi = Map(String, Integer)() for key in [{2: "hello"}, String, Integer, type]: with pytest.raises(KeyError): mi[key] assert key not in mi
def test_map_find(): msi = Map(String,Integer)({'a':1}) assert msi.find(ref('[a]')) == Integer(1) with pytest.raises(Namable.NamingError): msi.find(ref('.a')) with pytest.raises(Namable.NotFound): msi.find(ref('[b]')) with pytest.raises(Namable.Unnamable): msi.find(ref('[a].foo')) mii = Map(Integer,String)({3: 'foo', '5': 'bar'}) assert mii.find(ref('[3]')) == String('foo') assert mii.find(ref('[5]')) == String('bar')
class Process(Struct): name = Required(String) resources = Map(String, Resources)