[PATCH] D44411: [libc++] Fix Container::insert(value_type const&) tests

2018-04-03 Thread Eric Fiselier via Phabricator via cfe-commits
EricWF added a comment.

Have you verified that we're not losing test coverage here? That is, are you 
sure we still have tests for the rvalue overloads in other test files?




Comment at: 
libcxx/test/std/containers/associative/multiset/insert_cv.pass.cpp:41
+const VT v3(3);
+r = m.insert(3);
+assert(r == prev(m.end()));

Should be `v3`?


Repository:
  rCXX libc++

https://reviews.llvm.org/D44411



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D44411: [libc++] Fix Container::insert(value_type const&) tests

2018-03-12 Thread Joe Loser via Phabricator via cfe-commits
jloser created this revision.
jloser added reviewers: EricWF, matthew.
Herald added subscribers: cfe-commits, christof.

[libc++] Fix Container::insert(value_type const&) tests

Several unit tests meaning to test the behavior of lvalue insertion incorrectly 
pass rvalues.  Fixes bug 27394.


Repository:
  rCXX libc++

https://reviews.llvm.org/D44411

Files:
  libcxx/test/std/containers/associative/multiset/insert_cv.pass.cpp
  libcxx/test/std/containers/associative/set/insert_cv.pass.cpp
  
libcxx/test/std/containers/unord/unord.map/unord.map.modifiers/insert_const_lvalue.pass.cpp
  
libcxx/test/std/containers/unord/unord.map/unord.map.modifiers/insert_hint_const_lvalue.pass.cpp
  
libcxx/test/std/containers/unord/unord.multimap/unord.multimap.modifiers/insert_const_lvalue.pass.cpp
  
libcxx/test/std/containers/unord/unord.multimap/unord.multimap.modifiers/insert_hint_const_lvalue.pass.cpp
  libcxx/test/std/containers/unord/unord.multiset/insert_const_lvalue.pass.cpp
  
libcxx/test/std/containers/unord/unord.multiset/insert_hint_const_lvalue.pass.cpp
  libcxx/test/std/containers/unord/unord.set/insert_const_lvalue.pass.cpp
  libcxx/test/std/containers/unord/unord.set/insert_hint_const_lvalue.pass.cpp

Index: libcxx/test/std/containers/unord/unord.set/insert_hint_const_lvalue.pass.cpp
===
--- libcxx/test/std/containers/unord/unord.set/insert_hint_const_lvalue.pass.cpp
+++ libcxx/test/std/containers/unord/unord.set/insert_hint_const_lvalue.pass.cpp
@@ -24,53 +24,42 @@
 
 #include "min_allocator.h"
 
+template
+void do_insert_hint_const_lvalue_test()
+{
+typedef Container C;
+typedef typename C::iterator R;
+typedef typename C::value_type VT;
+C c;
+typename C::const_iterator e = c.end();
+const VT v1(3.5);
+R r = c.insert(e, v1);
+assert(c.size() == 1);
+assert(*r == 3.5);
+
+r = c.insert(e, v1);
+assert(c.size() == 1);
+assert(*r == 3.5);
+
+const VT v2(4.5);
+r = c.insert(e, v2);
+assert(c.size() == 2);
+assert(*r == 4.5);
+
+const VT v3(5.5);
+r = c.insert(e, v3);
+assert(c.size() == 3);
+assert(*r == 5.5);
+}
+
 int main()
 {
-{
-typedef std::unordered_set C;
-typedef C::iterator R;
-typedef C::value_type P;
-C c;
-C::const_iterator e = c.end();
-R r = c.insert(e, P(3.5));
-assert(c.size() == 1);
-assert(*r == 3.5);
-
-r = c.insert(e, P(3.5));
-assert(c.size() == 1);
-assert(*r == 3.5);
-
-r = c.insert(e, P(4.5));
-assert(c.size() == 2);
-assert(*r == 4.5);
-
-r = c.insert(e, P(5.5));
-assert(c.size() == 3);
-assert(*r == 5.5);
-}
+do_insert_hint_const_lvalue_test();
 #if TEST_STD_VER >= 11
 {
 typedef std::unordered_set C;
-typedef C::iterator R;
-typedef C::value_type P;
-C c;
-C::const_iterator e = c.end();
-R r = c.insert(e, P(3.5));
-assert(c.size() == 1);
-assert(*r == 3.5);
-
-r = c.insert(e, P(3.5));
-assert(c.size() == 1);
-assert(*r == 3.5);
-
-r = c.insert(e, P(4.5));
-assert(c.size() == 2);
-assert(*r == 4.5);
-
-r = c.insert(e, P(5.5));
-assert(c.size() == 3);
-assert(*r == 5.5);
+do_insert_hint_const_lvalue_test();
 }
 #endif
 #if _LIBCPP_DEBUG >= 1
Index: libcxx/test/std/containers/unord/unord.set/insert_const_lvalue.pass.cpp
===
--- libcxx/test/std/containers/unord/unord.set/insert_const_lvalue.pass.cpp
+++ libcxx/test/std/containers/unord/unord.set/insert_const_lvalue.pass.cpp
@@ -20,59 +20,45 @@
 
 #include "min_allocator.h"
 
+template
+void do_insert_const_lvalue_test()
+{
+typedef Container C;
+typedef std::pair R;
+typedef typename C::value_type VT;
+C c;
+const VT v1(3.5);
+R r = c.insert(v1);
+assert(c.size() == 1);
+assert(*r.first == 3.5);
+assert(r.second);
+
+r = c.insert(v1);
+assert(c.size() == 1);
+assert(*r.first == 3.5);
+assert(!r.second);
+
+const VT v2(4.5);
+r = c.insert(v2);
+assert(c.size() == 2);
+assert(*r.first == 4.5);
+assert(r.second);
+
+const VT v3(5.5);
+r = c.insert(v3);
+assert(c.size() == 3);
+assert(*r.first == 5.5);
+assert(r.second);
+}
+
 int main()
 {
-{
-typedef std::unordered_set C;
-typedef std::pair R;
-typedef C::value_type P;
-C c;
-R r = c.insert(P(3.5));
-assert(c.size() == 1);
-assert(*r.first == 3.5);
-assert(r.second);
-
-r = c.insert(P(3.5));
-assert(c.size() == 1);
-assert(*r.first == 3.5);
-assert(!r.second);
-
-r =