1*71db0c75SAndroid Build Coastguard Worker //===-- Utility class to test sqrt[f|l] -------------------------*- C++ -*-===// 2*71db0c75SAndroid Build Coastguard Worker // 3*71db0c75SAndroid Build Coastguard Worker // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*71db0c75SAndroid Build Coastguard Worker // See https://llvm.org/LICENSE.txt for license information. 5*71db0c75SAndroid Build Coastguard Worker // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*71db0c75SAndroid Build Coastguard Worker // 7*71db0c75SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 8*71db0c75SAndroid Build Coastguard Worker 9*71db0c75SAndroid Build Coastguard Worker #include "test/UnitTest/FEnvSafeTest.h" 10*71db0c75SAndroid Build Coastguard Worker #include "test/UnitTest/FPMatcher.h" 11*71db0c75SAndroid Build Coastguard Worker #include "test/UnitTest/Test.h" 12*71db0c75SAndroid Build Coastguard Worker 13*71db0c75SAndroid Build Coastguard Worker template <typename OutType, typename InType> 14*71db0c75SAndroid Build Coastguard Worker class SqrtTest : public LIBC_NAMESPACE::testing::FEnvSafeTest { 15*71db0c75SAndroid Build Coastguard Worker 16*71db0c75SAndroid Build Coastguard Worker DECLARE_SPECIAL_CONSTANTS(OutType) 17*71db0c75SAndroid Build Coastguard Worker 18*71db0c75SAndroid Build Coastguard Worker struct InConstants { 19*71db0c75SAndroid Build Coastguard Worker DECLARE_SPECIAL_CONSTANTS(InType) 20*71db0c75SAndroid Build Coastguard Worker }; 21*71db0c75SAndroid Build Coastguard Worker 22*71db0c75SAndroid Build Coastguard Worker InConstants in; 23*71db0c75SAndroid Build Coastguard Worker 24*71db0c75SAndroid Build Coastguard Worker public: 25*71db0c75SAndroid Build Coastguard Worker typedef OutType (*SqrtFunc)(InType); 26*71db0c75SAndroid Build Coastguard Worker test_special_numbers(SqrtFunc func)27*71db0c75SAndroid Build Coastguard Worker void test_special_numbers(SqrtFunc func) { 28*71db0c75SAndroid Build Coastguard Worker ASSERT_FP_EQ(aNaN, func(in.aNaN)); 29*71db0c75SAndroid Build Coastguard Worker ASSERT_FP_EQ(inf, func(in.inf)); 30*71db0c75SAndroid Build Coastguard Worker ASSERT_FP_EQ(aNaN, func(in.neg_inf)); 31*71db0c75SAndroid Build Coastguard Worker ASSERT_FP_EQ(zero, func(in.zero)); 32*71db0c75SAndroid Build Coastguard Worker ASSERT_FP_EQ(neg_zero, func(in.neg_zero)); 33*71db0c75SAndroid Build Coastguard Worker ASSERT_FP_EQ(aNaN, func(InType(-1.0))); 34*71db0c75SAndroid Build Coastguard Worker ASSERT_FP_EQ(OutType(1.0), func(InType(1.0))); 35*71db0c75SAndroid Build Coastguard Worker ASSERT_FP_EQ(OutType(2.0), func(InType(4.0))); 36*71db0c75SAndroid Build Coastguard Worker ASSERT_FP_EQ(OutType(3.0), func(InType(9.0))); 37*71db0c75SAndroid Build Coastguard Worker } 38*71db0c75SAndroid Build Coastguard Worker }; 39*71db0c75SAndroid Build Coastguard Worker 40*71db0c75SAndroid Build Coastguard Worker #define LIST_SQRT_TESTS(T, func) \ 41*71db0c75SAndroid Build Coastguard Worker using LlvmLibcSqrtTest = SqrtTest<T, T>; \ 42*71db0c75SAndroid Build Coastguard Worker TEST_F(LlvmLibcSqrtTest, SpecialNumbers) { test_special_numbers(&func); } 43*71db0c75SAndroid Build Coastguard Worker 44*71db0c75SAndroid Build Coastguard Worker #define LIST_NARROWING_SQRT_TESTS(OutType, InType, func) \ 45*71db0c75SAndroid Build Coastguard Worker using LlvmLibcSqrtTest = SqrtTest<OutType, InType>; \ 46*71db0c75SAndroid Build Coastguard Worker TEST_F(LlvmLibcSqrtTest, SpecialNumbers) { test_special_numbers(&func); } 47