fix return from std::map bindings to __delitem__ (#1229)

Fix return from `std::map` bindings to `__delitem__`: we should be returning `void`, not an iterator.

Also adds a test for map item deletion.
This commit is contained in:
Jeff VanOss 2018-01-11 18:43:37 -05:00 committed by Wenzel Jakob
parent ed0a72eb0e
commit 17ad517d61
2 changed files with 23 additions and 1 deletions

View File

@ -587,7 +587,7 @@ class_<Map, holder_type> bind_map(handle scope, const std::string &name, Args&&.
auto it = m.find(k); auto it = m.find(k);
if (it == m.end()) if (it == m.end())
throw key_error(); throw key_error();
return m.erase(it); m.erase(it);
} }
); );

View File

@ -181,3 +181,25 @@ def test_noncopyable_containers():
vsum += v.value vsum += v.value
assert vsum == 150 assert vsum == 150
def test_map_delitem():
mm = m.MapStringDouble()
mm['a'] = 1
mm['b'] = 2.5
assert list(mm) == ['a', 'b']
assert list(mm.items()) == [('a', 1), ('b', 2.5)]
del mm['a']
assert list(mm) == ['b']
assert list(mm.items()) == [('b', 2.5)]
um = m.UnorderedMapStringDouble()
um['ua'] = 1.1
um['ub'] = 2.6
assert sorted(list(um)) == ['ua', 'ub']
assert sorted(list(um.items())) == [('ua', 1.1), ('ub', 2.6)]
del um['ua']
assert sorted(list(um)) == ['ub']
assert sorted(list(um.items())) == [('ub', 2.6)]