diff options
author | Eric Fiselier <eric@efcs.ca> | 2016-07-21 03:20:17 +0000 |
---|---|---|
committer | Eric Fiselier <eric@efcs.ca> | 2016-07-21 03:20:17 +0000 |
commit | 0e411641a338b0effbdcbcd6f0772a0663729afd (patch) | |
tree | 0c0f13d524a1dede6b8bf225a6110a9bfc19efd9 /libcxx/test/std | |
parent | fa7c6f0d84bc1148eb1d17a18ad0b80d5521ba16 (diff) | |
download | bcm5719-llvm-0e411641a338b0effbdcbcd6f0772a0663729afd.tar.gz bcm5719-llvm-0e411641a338b0effbdcbcd6f0772a0663729afd.zip |
Implement P0084r2. Changing emplace return types.
llvm-svn: 276230
Diffstat (limited to 'libcxx/test/std')
9 files changed, 104 insertions, 80 deletions
diff --git a/libcxx/test/std/containers/container.adaptors/queue/queue.defn/emplace.pass.cpp b/libcxx/test/std/containers/container.adaptors/queue/queue.defn/emplace.pass.cpp index 1d9c08b156b..77d822a0794 100644 --- a/libcxx/test/std/containers/container.adaptors/queue/queue.defn/emplace.pass.cpp +++ b/libcxx/test/std/containers/container.adaptors/queue/queue.defn/emplace.pass.cpp @@ -7,9 +7,11 @@ // //===----------------------------------------------------------------------===// +// UNSUPPORTED: c++98, c++03 + // <queue> -// template <class... Args> void emplace(Args&&... args); +// template <class... Args> reference emplace(Args&&... args); #include <queue> #include <cassert> @@ -18,13 +20,17 @@ int main() { -#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES + typedef Emplaceable T; std::queue<Emplaceable> q; - q.emplace(1, 2.5); - q.emplace(2, 3.5); - q.emplace(3, 4.5); + T& r1 = q.emplace(1, 2.5); + assert(&r1 == &q.back()); + T& r2 = q.emplace(2, 3.5); + assert(&r2 == &q.back()); + T& r3 = q.emplace(3, 4.5); + assert(&r3 == &q.back()); assert(q.size() == 3); assert(q.front() == Emplaceable(1, 2.5)); assert(q.back() == Emplaceable(3, 4.5)); -#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES + assert(&r3 == &q.back()); + assert(&r1 == &q.front()); } diff --git a/libcxx/test/std/containers/container.adaptors/stack/stack.defn/emplace.pass.cpp b/libcxx/test/std/containers/container.adaptors/stack/stack.defn/emplace.pass.cpp index 3573c220ece..71fe903b74a 100644 --- a/libcxx/test/std/containers/container.adaptors/stack/stack.defn/emplace.pass.cpp +++ b/libcxx/test/std/containers/container.adaptors/stack/stack.defn/emplace.pass.cpp @@ -7,9 +7,11 @@ // //===----------------------------------------------------------------------===// +// UNSUPPORTED: c++98, c++03 + // <stack> -// template <class... Args> void emplace(Args&&... args); +// template <class... Args> reference emplace(Args&&... args); #include <stack> #include <cassert> @@ -18,12 +20,14 @@ int main() { -#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES + typedef Emplaceable T; std::stack<Emplaceable> q; - q.emplace(1, 2.5); - q.emplace(2, 3.5); - q.emplace(3, 4.5); + T& r1 = q.emplace(1, 2.5); + assert(&r1 == &q.top()); + T& r2 = q.emplace(2, 3.5); + assert(&r2 == &q.top()); + T& r3 = q.emplace(3, 4.5); + assert(&r3 == &q.top()); assert(q.size() == 3); assert(q.top() == Emplaceable(3, 4.5)); -#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES } diff --git a/libcxx/test/std/containers/sequences/deque/deque.modifiers/emplace_back.pass.cpp b/libcxx/test/std/containers/sequences/deque/deque.modifiers/emplace_back.pass.cpp index 784b3a38553..f81cdf90419 100644 --- a/libcxx/test/std/containers/sequences/deque/deque.modifiers/emplace_back.pass.cpp +++ b/libcxx/test/std/containers/sequences/deque/deque.modifiers/emplace_back.pass.cpp @@ -7,9 +7,11 @@ // //===----------------------------------------------------------------------===// +// UNSUPPORTED: c++98, c++03 + // <deque> -// template <class... Args> void emplace_back(Args&&... args); +// template <class... Args> reference emplace_back(Args&&... args); #include <deque> #include <cassert> @@ -18,8 +20,6 @@ #include "min_allocator.h" #include "test_allocator.h" -#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES - template <class C> C make(int size, int start = 0 ) @@ -47,12 +47,14 @@ void test(C& c1) { typedef typename C::iterator I; + typedef typename C::reference Ref; std::size_t c1_osize = c1.size(); - c1.emplace_back(Emplaceable(1, 2.5)); + Ref ref = c1.emplace_back(Emplaceable(1, 2.5)); assert(c1.size() == c1_osize + 1); assert(distance(c1.begin(), c1.end()) == c1.size()); I i = c1.end(); assert(*--i == Emplaceable(1, 2.5)); + assert(&(*i) == &ref); } template <class C> @@ -63,11 +65,8 @@ testN(int start, int N) test(c1); } -#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES - int main() { -#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES { int rng[] = {0, 1, 2, 3, 1023, 1024, 1025, 2047, 2048, 2049}; const int N = sizeof(rng)/sizeof(rng[0]); @@ -75,7 +74,6 @@ int main() for (int j = 0; j < N; ++j) testN<std::deque<Emplaceable> >(rng[i], rng[j]); } -#if TEST_STD_VER >= 11 { int rng[] = {0, 1, 2, 3, 1023, 1024, 1025, 2047, 2048, 2049}; const int N = sizeof(rng)/sizeof(rng[0]); @@ -94,6 +92,4 @@ int main() c.emplace_front(1, 2, 3); assert(c.size() == 4); } -#endif -#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES } diff --git a/libcxx/test/std/containers/sequences/deque/deque.modifiers/emplace_front.pass.cpp b/libcxx/test/std/containers/sequences/deque/deque.modifiers/emplace_front.pass.cpp index afc0e4972e3..668062d4af3 100644 --- a/libcxx/test/std/containers/sequences/deque/deque.modifiers/emplace_front.pass.cpp +++ b/libcxx/test/std/containers/sequences/deque/deque.modifiers/emplace_front.pass.cpp @@ -7,9 +7,11 @@ // //===----------------------------------------------------------------------===// +// UNSUPPORTED: c++98, c++03 + // <deque> -// template <class... Args> void emplace_front(Args&&... args); +// template <class... Args> reference emplace_front(Args&&... args); #include <deque> #include <cassert> @@ -17,8 +19,6 @@ #include "../../../Emplaceable.h" #include "min_allocator.h" -#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES - template <class C> C make(int size, int start = 0 ) @@ -46,12 +46,14 @@ void test(C& c1) { typedef typename C::iterator I; + typedef typename C::reference Ref; std::size_t c1_osize = c1.size(); - c1.emplace_front(Emplaceable(1, 2.5)); + Ref res_ref = c1.emplace_front(Emplaceable(1, 2.5)); assert(c1.size() == c1_osize + 1); assert(distance(c1.begin(), c1.end()) == c1.size()); I i = c1.begin(); assert(*i == Emplaceable(1, 2.5)); + assert(&res_ref == &(*i)); } template <class C> @@ -62,11 +64,9 @@ testN(int start, int N) test(c1); } -#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES int main() { -#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES { int rng[] = {0, 1, 2, 3, 1023, 1024, 1025, 2047, 2048, 2049}; const int N = sizeof(rng)/sizeof(rng[0]); @@ -74,7 +74,6 @@ int main() for (int j = 0; j < N; ++j) testN<std::deque<Emplaceable> >(rng[i], rng[j]); } -#if TEST_STD_VER >= 11 { int rng[] = {0, 1, 2, 3, 1023, 1024, 1025, 2047, 2048, 2049}; const int N = sizeof(rng)/sizeof(rng[0]); @@ -82,6 +81,4 @@ int main() for (int j = 0; j < N; ++j) testN<std::deque<Emplaceable, min_allocator<Emplaceable>> >(rng[i], rng[j]); } -#endif -#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES } diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/emplace_front.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/emplace_front.pass.cpp index 18ed69d33f0..589e71894b8 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/emplace_front.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/emplace_front.pass.cpp @@ -7,9 +7,11 @@ // //===----------------------------------------------------------------------===// +// UNSUPPORTED: c++98, c++03 + // <forward_list> -// template <class... Args> void emplace_front(Args&&... args); +// template <class... Args> reference emplace_front(Args&&... args); #include <forward_list> #include <cassert> @@ -19,32 +21,32 @@ int main() { -#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES { typedef Emplaceable T; typedef std::forward_list<T> C; C c; - c.emplace_front(); + T& r1 = c.emplace_front(); assert(c.front() == Emplaceable()); + assert(&r1 == &c.front()); assert(distance(c.begin(), c.end()) == 1); - c.emplace_front(1, 2.5); + T& r2 = c.emplace_front(1, 2.5); assert(c.front() == Emplaceable(1, 2.5)); + assert(&r2 == &c.front()); assert(*next(c.begin()) == Emplaceable()); assert(distance(c.begin(), c.end()) == 2); } -#if TEST_STD_VER >= 11 { typedef Emplaceable T; typedef std::forward_list<T, min_allocator<T>> C; C c; - c.emplace_front(); + T& r1 = c.emplace_front(); assert(c.front() == Emplaceable()); + assert(&r1 == &c.front()); assert(distance(c.begin(), c.end()) == 1); - c.emplace_front(1, 2.5); + T& r2 = c.emplace_front(1, 2.5); assert(c.front() == Emplaceable(1, 2.5)); + assert(&r2 == &c.front()); assert(*next(c.begin()) == Emplaceable()); assert(distance(c.begin(), c.end()) == 2); } -#endif -#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES } diff --git a/libcxx/test/std/containers/sequences/list/list.modifiers/emplace_back.pass.cpp b/libcxx/test/std/containers/sequences/list/list.modifiers/emplace_back.pass.cpp index 2ff01f1676f..2aae2b9b09e 100644 --- a/libcxx/test/std/containers/sequences/list/list.modifiers/emplace_back.pass.cpp +++ b/libcxx/test/std/containers/sequences/list/list.modifiers/emplace_back.pass.cpp @@ -7,9 +7,11 @@ // //===----------------------------------------------------------------------===// +// UNSUPPORTED: c++98, c++03 + // <list> -// template <class... Args> void emplace_back(Args&&... args); +// template <class... Args> reference emplace_back(Args&&... args); #include <list> #include <cassert> @@ -33,34 +35,34 @@ public: int main() { -#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES { std::list<A> c; - c.emplace_back(2, 3.5); + A& r1 = c.emplace_back(2, 3.5); assert(c.size() == 1); + assert(&r1 == &c.back()); assert(c.front().geti() == 2); assert(c.front().getd() == 3.5); - c.emplace_back(3, 4.5); + A& r2 = c.emplace_back(3, 4.5); assert(c.size() == 2); + assert(&r2 == &c.back()); assert(c.front().geti() == 2); assert(c.front().getd() == 3.5); assert(c.back().geti() == 3); assert(c.back().getd() == 4.5); } -#if TEST_STD_VER >= 11 { std::list<A, min_allocator<A>> c; - c.emplace_back(2, 3.5); + A& r1 = c.emplace_back(2, 3.5); assert(c.size() == 1); + assert(&r1 == &c.back()); assert(c.front().geti() == 2); assert(c.front().getd() == 3.5); - c.emplace_back(3, 4.5); + A& r2 = c.emplace_back(3, 4.5); assert(c.size() == 2); + assert(&r2 == &c.back()); assert(c.front().geti() == 2); assert(c.front().getd() == 3.5); assert(c.back().geti() == 3); assert(c.back().getd() == 4.5); } -#endif -#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES } diff --git a/libcxx/test/std/containers/sequences/list/list.modifiers/emplace_front.pass.cpp b/libcxx/test/std/containers/sequences/list/list.modifiers/emplace_front.pass.cpp index 8a3df46a31e..994dac258f8 100644 --- a/libcxx/test/std/containers/sequences/list/list.modifiers/emplace_front.pass.cpp +++ b/libcxx/test/std/containers/sequences/list/list.modifiers/emplace_front.pass.cpp @@ -7,9 +7,11 @@ // //===----------------------------------------------------------------------===// +// UNSUPPORTED: c++98, c++03 + // <list> -// template <class... Args> void emplace_front(Args&&... args); +// template <class... Args> reference emplace_front(Args&&... args); #include <list> #include <cassert> @@ -33,34 +35,34 @@ public: int main() { -#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES { std::list<A> c; - c.emplace_front(2, 3.5); + A& r1 = c.emplace_front(2, 3.5); assert(c.size() == 1); + assert(&r1 == &c.front()); assert(c.front().geti() == 2); assert(c.front().getd() == 3.5); - c.emplace_front(3, 4.5); + A& r2 = c.emplace_front(3, 4.5); assert(c.size() == 2); + assert(&r2 == &c.front()); assert(c.front().geti() == 3); assert(c.front().getd() == 4.5); assert(c.back().geti() == 2); assert(c.back().getd() == 3.5); } -#if TEST_STD_VER >= 11 { std::list<A, min_allocator<A>> c; - c.emplace_front(2, 3.5); + A& r1 = c.emplace_front(2, 3.5); assert(c.size() == 1); + assert(&r1 == &c.front()); assert(c.front().geti() == 2); assert(c.front().getd() == 3.5); - c.emplace_front(3, 4.5); + A& r2 = c.emplace_front(3, 4.5); assert(c.size() == 2); + assert(&r2 == &c.front()); assert(c.front().geti() == 3); assert(c.front().getd() == 4.5); assert(c.back().geti() == 2); assert(c.back().getd() == 3.5); } -#endif -#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES } diff --git a/libcxx/test/std/containers/sequences/vector.bool/emplace_back.pass.cpp b/libcxx/test/std/containers/sequences/vector.bool/emplace_back.pass.cpp index 2950ee3882f..24005bec82d 100644 --- a/libcxx/test/std/containers/sequences/vector.bool/emplace_back.pass.cpp +++ b/libcxx/test/std/containers/sequences/vector.bool/emplace_back.pass.cpp @@ -11,42 +11,57 @@ // <vector> // vector.bool -// template <class... Args> void emplace_back(Args&&... args); +// template <class... Args> reference emplace_back(Args&&... args); #include <vector> #include <cassert> #include "min_allocator.h" - int main() { { typedef std::vector<bool> C; + typedef C::reference Ref; C c; - c.emplace_back(); + Ref r1 = c.emplace_back(); assert(c.size() == 1); assert(c.front() == false); - c.emplace_back(true); + r1 = true; + assert(c.front() == true); + r1 = false; + Ref r2 = c.emplace_back(true); assert(c.size() == 2); assert(c.front() == false); assert(c.back() == true); - c.emplace_back(1 == 1); + r2 = false; + assert(c.back() == false); + r2 = true; + Ref r3 = c.emplace_back(1 == 1); assert(c.size() == 3); assert(c.front() == false); assert(c[1] == true); assert(c.back() == true); + r3 = false; + assert(c.back() == false); } { typedef std::vector<bool, min_allocator<bool>> C; + typedef C::reference Ref; C c; - c.emplace_back(); + Ref r1 = c.emplace_back(); assert(c.size() == 1); assert(c.front() == false); - c.emplace_back(true); + r1 = true; + assert(c.front() == true); + r1 = false; + Ref r2 = c.emplace_back(true); assert(c.size() == 2); assert(c.front() == false); assert(c.back() == true); + r2 = false; + assert(c.back() == false); + r2 = true; c.emplace_back(1 == 1); assert(c.size() == 3); assert(c.front() == false); diff --git a/libcxx/test/std/containers/sequences/vector/vector.modifiers/emplace_back.pass.cpp b/libcxx/test/std/containers/sequences/vector/vector.modifiers/emplace_back.pass.cpp index 61ccade76b0..6b435484d01 100644 --- a/libcxx/test/std/containers/sequences/vector/vector.modifiers/emplace_back.pass.cpp +++ b/libcxx/test/std/containers/sequences/vector/vector.modifiers/emplace_back.pass.cpp @@ -7,9 +7,11 @@ // //===----------------------------------------------------------------------===// +// UNSUPPORTED: c++98, c++03 + // <vector> -// template <class... Args> void emplace_back(Args&&... args); +// template <class... Args> reference emplace_back(Args&&... args); #include <vector> #include <cassert> @@ -18,8 +20,6 @@ #include "test_allocator.h" #include "asan_testing.h" -#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES - class A { int i_; @@ -52,20 +52,19 @@ public: double getd() const {return d_;} }; -#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES - int main() { -#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES { std::vector<A> c; - c.emplace_back(2, 3.5); + A& r1 = c.emplace_back(2, 3.5); assert(c.size() == 1); + assert(&r1 == &c.back()); assert(c.front().geti() == 2); assert(c.front().getd() == 3.5); assert(is_contiguous_container_asan_correct(c)); - c.emplace_back(3, 4.5); + A& r2 = c.emplace_back(3, 4.5); assert(c.size() == 2); + assert(&r2 == &c.back()); assert(c.front().geti() == 2); assert(c.front().getd() == 3.5); assert(c.back().geti() == 3); @@ -74,29 +73,32 @@ int main() } { std::vector<A, stack_allocator<A, 4> > c; - c.emplace_back(2, 3.5); + A& r1 = c.emplace_back(2, 3.5); assert(c.size() == 1); + assert(&r1 == &c.back()); assert(c.front().geti() == 2); assert(c.front().getd() == 3.5); assert(is_contiguous_container_asan_correct(c)); - c.emplace_back(3, 4.5); + A& r2 = c.emplace_back(3, 4.5); assert(c.size() == 2); + assert(&r2 == &c.back()); assert(c.front().geti() == 2); assert(c.front().getd() == 3.5); assert(c.back().geti() == 3); assert(c.back().getd() == 4.5); assert(is_contiguous_container_asan_correct(c)); } -#if TEST_STD_VER >= 11 { std::vector<A, min_allocator<A>> c; - c.emplace_back(2, 3.5); + A& r1 = c.emplace_back(2, 3.5); assert(c.size() == 1); + assert(&r1 == &c.back()); assert(c.front().geti() == 2); assert(c.front().getd() == 3.5); assert(is_contiguous_container_asan_correct(c)); - c.emplace_back(3, 4.5); + A& r2 = c.emplace_back(3, 4.5); assert(c.size() == 2); + assert(&r2 == &c.back()); assert(c.front().geti() == 2); assert(c.front().getd() == 3.5); assert(c.back().geti() == 3); @@ -111,6 +113,4 @@ int main() assert(c.size() == 2); assert(is_contiguous_container_asan_correct(c)); } -#endif -#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES } |