From 0d8df9832846c1fa0fc83282cdac78f2c01e31b2 Mon Sep 17 00:00:00 2001 From: Marshall Clow Date: Thu, 14 Mar 2019 17:43:41 +0000 Subject: [PATCH] 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 --- .../numeric.ops.midpoint/midpoint.pointer.pass.cpp | 50 +++++++++++++++++----- 1 file 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 48705d1..def7608 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 -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 +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 +void pointer_test() +{ + runtime_test< T>(); + runtime_test(); + runtime_test< volatile T>(); + runtime_test(); + +// The constexpr tests are always const, but we can test them anyway. + constexpr_test< T>(); + constexpr_test(); + +// 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(); +#endif +} + int main(int, char**) { - pointer_test< char>(); - pointer_test(); - pointer_test< volatile char>(); - pointer_test(); - + pointer_test(); pointer_test(); pointer_test(); -- 2.7.4