diff options
Diffstat (limited to 'libcxx/test/std/utilities/allocator.adaptor')
2 files changed, 144 insertions, 0 deletions
diff --git a/libcxx/test/std/utilities/allocator.adaptor/scoped.adaptor.operators/copy_assign.pass.cpp b/libcxx/test/std/utilities/allocator.adaptor/scoped.adaptor.operators/copy_assign.pass.cpp new file mode 100644 index 00000000000..72f0e867b1d --- /dev/null +++ b/libcxx/test/std/utilities/allocator.adaptor/scoped.adaptor.operators/copy_assign.pass.cpp @@ -0,0 +1,72 @@ +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// <memory> + +// template <class OuterAlloc, class... InnerAllocs> +// class scoped_allocator_adaptor + +// scoped_allocator_adaptor& operator=(const scoped_allocator_adaptor& other); + + +#include <scoped_allocator> +#include <cassert> + +#include "allocators.h" + +int main() +{ +#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES + { + typedef std::scoped_allocator_adaptor<A1<int>> A; + A a1(A1<int>(3)); + A aN; + A1<int>::copy_called = false; + A1<int>::move_called = false; + aN = a1; + assert(A1<int>::copy_called == true); + assert(A1<int>::move_called == false); + assert(aN == a1); + } + { + typedef std::scoped_allocator_adaptor<A1<int>, A2<int>> A; + A a1(A1<int>(4), A2<int>(5)); + A aN; + A1<int>::copy_called = false; + A1<int>::move_called = false; + A2<int>::copy_called = false; + A2<int>::move_called = false; + aN = a1; + assert(A1<int>::copy_called == true); + assert(A1<int>::move_called == false); + assert(A2<int>::copy_called == true); + assert(A2<int>::move_called == false); + assert(aN == a1); + } + { + typedef std::scoped_allocator_adaptor<A1<int>, A2<int>, A3<int>> A; + A a1(A1<int>(4), A2<int>(5), A3<int>(6)); + A aN; + A1<int>::copy_called = false; + A1<int>::move_called = false; + A2<int>::copy_called = false; + A2<int>::move_called = false; + A3<int>::copy_called = false; + A3<int>::move_called = false; + aN = a1; + assert(A1<int>::copy_called == true); + assert(A1<int>::move_called == false); + assert(A2<int>::copy_called == true); + assert(A2<int>::move_called == false); + assert(A3<int>::copy_called == true); + assert(A3<int>::move_called == false); + assert(aN == a1); + } +#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES +} diff --git a/libcxx/test/std/utilities/allocator.adaptor/scoped.adaptor.operators/move_assign.pass.cpp b/libcxx/test/std/utilities/allocator.adaptor/scoped.adaptor.operators/move_assign.pass.cpp new file mode 100644 index 00000000000..0dc479c246c --- /dev/null +++ b/libcxx/test/std/utilities/allocator.adaptor/scoped.adaptor.operators/move_assign.pass.cpp @@ -0,0 +1,72 @@ +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// <memory> + +// template <class OuterAlloc, class... InnerAllocs> +// class scoped_allocator_adaptor + +// scoped_allocator_adaptor& operator=(const scoped_allocator_adaptor&& other); + + +#include <scoped_allocator> +#include <cassert> + +#include "allocators.h" + +int main() +{ +#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES + { + typedef std::scoped_allocator_adaptor<A1<int>> A; + A a1(A1<int>(3)); + A aN; + A1<int>::copy_called = false; + A1<int>::move_called = false; + aN = std::move(a1); + assert(A1<int>::copy_called == false); + assert(A1<int>::move_called == true); + assert(aN == a1); + } + { + typedef std::scoped_allocator_adaptor<A1<int>, A2<int>> A; + A a1(A1<int>(4), A2<int>(5)); + A aN; + A1<int>::copy_called = false; + A1<int>::move_called = false; + A2<int>::copy_called = false; + A2<int>::move_called = false; + aN = std::move(a1); + assert(A1<int>::copy_called == false); + assert(A1<int>::move_called == true); + assert(A2<int>::copy_called == false); + assert(A2<int>::move_called == true); + assert(aN == a1); + } + { + typedef std::scoped_allocator_adaptor<A1<int>, A2<int>, A3<int>> A; + A a1(A1<int>(4), A2<int>(5), A3<int>(6)); + A aN; + A1<int>::copy_called = false; + A1<int>::move_called = false; + A2<int>::copy_called = false; + A2<int>::move_called = false; + A3<int>::copy_called = false; + A3<int>::move_called = false; + aN = std::move(a1); + assert(A1<int>::copy_called == false); + assert(A1<int>::move_called == true); + assert(A2<int>::copy_called == false); + assert(A2<int>::move_called == true); + assert(A3<int>::copy_called == false); + assert(A3<int>::move_called == true); + assert(aN == a1); + } +#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES +} |