diff options
author | Marshall Clow <mclow.lists@gmail.com> | 2015-06-03 16:15:55 +0000 |
---|---|---|
committer | Marshall Clow <mclow.lists@gmail.com> | 2015-06-03 16:15:55 +0000 |
commit | 2abfcd5606b3035624a76c71b862e344077d5caa (patch) | |
tree | 1187a2141a6547cd9635333009f3a3d0409ce995 /libcxx | |
parent | a44130556450bd0abb1c93723de26f560b29663d (diff) | |
download | bcm5719-llvm-2abfcd5606b3035624a76c71b862e344077d5caa.tar.gz bcm5719-llvm-2abfcd5606b3035624a76c71b862e344077d5caa.zip |
Add 'is_always_equal' tests for scoped_allocator. Found that I had typed '||' where I meant '&&' in the code; fixed that, too
llvm-svn: 238931
Diffstat (limited to 'libcxx')
-rw-r--r-- | libcxx/include/scoped_allocator | 2 | ||||
-rw-r--r-- | libcxx/test/std/utilities/allocator.adaptor/allocator.adaptor.types/is_always_equal.pass.cpp | 75 |
2 files changed, 76 insertions, 1 deletions
diff --git a/libcxx/include/scoped_allocator b/libcxx/include/scoped_allocator index 22e3a30847e..cd4987ad9bb 100644 --- a/libcxx/include/scoped_allocator +++ b/libcxx/include/scoped_allocator @@ -183,7 +183,7 @@ template <class _A0, class ..._Allocs> struct __get_is_always_equal<_A0, _Allocs...> { static const bool value = - allocator_traits<_A0>::is_always_equal::value || + allocator_traits<_A0>::is_always_equal::value && __get_is_always_equal<_Allocs...>::value; }; diff --git a/libcxx/test/std/utilities/allocator.adaptor/allocator.adaptor.types/is_always_equal.pass.cpp b/libcxx/test/std/utilities/allocator.adaptor/allocator.adaptor.types/is_always_equal.pass.cpp new file mode 100644 index 00000000000..e19e731f6cf --- /dev/null +++ b/libcxx/test/std/utilities/allocator.adaptor/allocator.adaptor.types/is_always_equal.pass.cpp @@ -0,0 +1,75 @@ +//===----------------------------------------------------------------------===// +// +// 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 + +// typedef see below is_always_equal; + +#include <scoped_allocator> +#include <type_traits> + +#include "allocators.h" +#include "min_allocator.h" + +int main() +{ +#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES + + // sanity checks + static_assert( (std::is_same< + std::allocator_traits<A1<int>>::is_always_equal, std::false_type>::value + ), "" ); + + static_assert( (std::is_same< + std::allocator_traits<min_allocator<int>>::is_always_equal, std::true_type>::value + ), "" ); + + // wrapping one allocator + static_assert( + (std::is_same< + std::scoped_allocator_adaptor<A1<int>>::is_always_equal, + std::allocator_traits<A1<int>>::is_always_equal + >::value), ""); + + // wrapping one allocator + static_assert( + (std::is_same< + std::scoped_allocator_adaptor<min_allocator<int>>::is_always_equal, + std::allocator_traits<min_allocator<int>>::is_always_equal + >::value), ""); + + // wrapping two allocators (check the values instead of the types) + static_assert(( + std::scoped_allocator_adaptor<A1<int>, A2<int>>::is_always_equal::value == + ( std::allocator_traits<A1<int>>::is_always_equal::value && + std::allocator_traits<A2<int>>::is_always_equal::value) + ), ""); + + // wrapping two allocators (check the values instead of the types) + static_assert(( + std::scoped_allocator_adaptor<A1<int>, min_allocator<int>>::is_always_equal::value == + ( std::allocator_traits<A1<int>>::is_always_equal::value && + std::allocator_traits<min_allocator<int>>::is_always_equal::value) + ), ""); + + + // wrapping three allocators (check the values instead of the types) + static_assert(( + std::scoped_allocator_adaptor<A1<int>, A2<int>, A3<int>>::is_always_equal::value == + ( std::allocator_traits<A1<int>>::is_always_equal::value && + std::allocator_traits<A2<int>>::is_always_equal::value && + std::allocator_traits<A3<int>>::is_always_equal::value) + ), ""); + + +#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES +} |