//===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // __half_positive divides an integer number by 2 as unsigned number for known types. // It can be an important optimization for lower bound, for example. #include <__cxx03/__algorithm/half_positive.h> #include #include #include #include "test_macros.h" #include "user_defined_integral.h" namespace { template TEST_CONSTEXPR bool test(IntType max_v = IntType(std::numeric_limits::max())) { return std::__half_positive(max_v) == max_v / 2; } } // namespace int main(int, char**) { { assert(test()); assert(test()); assert(test()); assert((test, int>())); assert(test()); #if !defined(TEST_HAS_NO_INT128) assert(test<__int128_t>()); #endif // !defined(TEST_HAS_NO_INT128) } #if TEST_STD_VER >= 11 { static_assert(test(), ""); static_assert(test(), ""); static_assert(test(), ""); static_assert(test(), ""); #if !defined(TEST_HAS_NO_INT128) static_assert(test<__int128_t>(), ""); #endif // !defined(TEST_HAS_NO_INT128) } #endif // TEST_STD_VER >= 11 return 0; }