diff options
author | Marshall Clow <mclow.lists@gmail.com> | 2019-03-14 17:43:41 +0000 |
---|---|---|
committer | Marshall Clow <mclow.lists@gmail.com> | 2019-03-14 17:43:41 +0000 |
commit | 0d8df9832846c1fa0fc83282cdac78f2c01e31b2 (patch) | |
tree | bfbef14e58964f950daf18e24ca6f27a3b29e229 /libcxx/test/std/numerics/numeric.ops/numeric.ops.midpoint | |
parent | 1dbbf2de330762ff2951d695432bf01e9ed52032 (diff) | |
download | bcm5719-llvm-0d8df9832846c1fa0fc83282cdac78f2c01e31b2.tar.gz bcm5719-llvm-0d8df9832846c1fa0fc83282cdac78f2c01e31b2.zip |
Reorg the midpoint pointer test into runtime and constexpr tests; comment out the volatile constexpr tests for GCC because our experimental gcc bot barfs on them.
llvm-svn: 356177
Diffstat (limited to 'libcxx/test/std/numerics/numeric.ops/numeric.ops.midpoint')
-rw-r--r-- | libcxx/test/std/numerics/numeric.ops/numeric.ops.midpoint/midpoint.pointer.pass.cpp | 50 |
1 files changed, 40 insertions, 10 deletions
diff --git a/libcxx/test/std/numerics/numeric.ops/numeric.ops.midpoint/midpoint.pointer.pass.cpp b/libcxx/test/std/numerics/numeric.ops/numeric.ops.midpoint/midpoint.pointer.pass.cpp index 48705d16fff..def76084835 100644 --- a/libcxx/test/std/numerics/numeric.ops/numeric.ops.midpoint/midpoint.pointer.pass.cpp +++ b/libcxx/test/std/numerics/numeric.ops/numeric.ops.midpoint/midpoint.pointer.pass.cpp @@ -21,16 +21,30 @@ template <typename T> -void pointer_test() +constexpr void constexpr_test() +{ + constexpr T array[1000] = {}; + ASSERT_SAME_TYPE(decltype(std::midpoint(array, array)), const T*); + ASSERT_NOEXCEPT( std::midpoint(array, array)); + + static_assert(std::midpoint(array, array) == array, ""); + static_assert(std::midpoint(array, array + 1000) == array + 500, ""); + + static_assert(std::midpoint(array, array + 9) == array + 4, ""); + static_assert(std::midpoint(array, array + 10) == array + 5, ""); + static_assert(std::midpoint(array, array + 11) == array + 5, ""); + static_assert(std::midpoint(array + 9, array) == array + 5, ""); + static_assert(std::midpoint(array + 10, array) == array + 5, ""); + static_assert(std::midpoint(array + 11, array) == array + 6, ""); +} + +template <typename T> +void runtime_test() { T array[1000] = {}; // we need an array to make valid pointers - constexpr T cArray[2] = {}; ASSERT_SAME_TYPE(decltype(std::midpoint(array, array)), T*); ASSERT_NOEXCEPT( std::midpoint(array, array)); - static_assert(std::midpoint(cArray, cArray + 2) == cArray + 1, ""); - static_assert(std::midpoint(cArray + 2, cArray) == cArray + 1, ""); - assert(std::midpoint(array, array) == array); assert(std::midpoint(array, array + 1000) == array + 500); @@ -42,14 +56,30 @@ void pointer_test() assert(std::midpoint(array + 11, array) == array + 6); } +template <typename T> +void pointer_test() +{ + runtime_test< T>(); + runtime_test<const T>(); + runtime_test< volatile T>(); + runtime_test<const volatile T>(); + +// The constexpr tests are always const, but we can test them anyway. + constexpr_test< T>(); + constexpr_test<const T>(); + +// GCC 9.0.1 (unreleased as of 2019-03) barfs on this, but we have a bot for it. +// Uncomment when gcc 9.1 is released +#ifndef TEST_COMPILER_GCC + constexpr_test< volatile T>(); + constexpr_test<const volatile T>(); +#endif +} + int main(int, char**) { - pointer_test< char>(); - pointer_test<const char>(); - pointer_test< volatile char>(); - pointer_test<const volatile char>(); - + pointer_test<char>(); pointer_test<int>(); pointer_test<double>(); |