Author: marshall Date: Sun Oct 25 14:53:29 2015 New Revision: 251254 URL: http://llvm.org/viewvc/llvm-project?rev=251254&view=rev Log: Add the tests for the last commit
Added: libcxx/trunk/test/std/utilities/allocator.adaptor/scoped.adaptor.operators/copy_assign.pass.cpp libcxx/trunk/test/std/utilities/allocator.adaptor/scoped.adaptor.operators/move_assign.pass.cpp Added: libcxx/trunk/test/std/utilities/allocator.adaptor/scoped.adaptor.operators/copy_assign.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/allocator.adaptor/scoped.adaptor.operators/copy_assign.pass.cpp?rev=251254&view=auto ============================================================================== --- libcxx/trunk/test/std/utilities/allocator.adaptor/scoped.adaptor.operators/copy_assign.pass.cpp (added) +++ libcxx/trunk/test/std/utilities/allocator.adaptor/scoped.adaptor.operators/copy_assign.pass.cpp Sun Oct 25 14:53:29 2015 @@ -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 +} Added: libcxx/trunk/test/std/utilities/allocator.adaptor/scoped.adaptor.operators/move_assign.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/allocator.adaptor/scoped.adaptor.operators/move_assign.pass.cpp?rev=251254&view=auto ============================================================================== --- libcxx/trunk/test/std/utilities/allocator.adaptor/scoped.adaptor.operators/move_assign.pass.cpp (added) +++ libcxx/trunk/test/std/utilities/allocator.adaptor/scoped.adaptor.operators/move_assign.pass.cpp Sun Oct 25 14:53:29 2015 @@ -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 +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits