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')
Esempio n. 7
0
 class Process(Struct):
   name = Required(String)
   resources = Map(String, Resources)