[PATCH] D10669: Part 1 of N4279 - "Improved insertion interface for unique-key maps"

Marshall Clow mclow.lists at gmail.com
Mon Jul 6 20:30:49 PDT 2015


================
Comment at: test/std/containers/associative/map/map.modifiers/try.emplace.pass.cpp:73
@@ +72,3 @@
+
+        Moveable mv1(3, 3.0);
+        r = m.try_emplace(2, std::move(mv1));
----------------
EricWF wrote:
> For the sake of covering corner cases could we test every inserted value? This applies for `insert_or_assign` as well.
> 
> ```
> for (int i=0; i < 20; i += 2) {
>   Movable mv1(i, (double)i);
>   r = m.try_emplace(2, std::move(mv1));
>   assert(m.size() == 10);
>   assert(!r.second);                  // was not inserted
>   assert(!mv1.moved());               // was not moved from
>   assert(r.first->first == 2);        // key
> }
> ```
This doesn't really buy us anything, because it won't look at the value (`mv1`) unless the key doesn't exist. So this code is not testing every inserted value.

I think that this is what you meant:

    for (int i=0; i < 20; i += 2) {
      Movable mv1(i, (double)i);
      r = m.try_emplace(i, std::move(mv1));
      assert(m.size() == 10);
      assert(!r.second);                  // was not inserted
      assert(!mv1.moved());               // was not moved from
      assert(r.first->first == i);        // key
    }

================
Comment at: test/std/containers/associative/map/map.modifiers/try.emplace.pass.cpp:80
@@ +79,3 @@
+
+        r = m.try_emplace(3, std::move(mv1));
+        assert(m.size() == 11);
----------------
EricWF wrote:
> We should test the cases where insertion happens at the front and at the back.
If you want; though the behavior that we're checking for here is "was this inserted?" and "was the value moved from?", which are dependent upon "Did the value exist in the map before", as opposed to the position in the map.



http://reviews.llvm.org/D10669







More information about the cfe-commits mailing list