xref: /aosp_15_r20/external/llvm-libc/test/include/IsFiniteTest.h (revision 71db0c75aadcf003ffe3238005f61d7618a3fead)
1  //===-- Utility class to test the isfinite macro [f|l] ----------*- C++ -*-===//
2  //
3  // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4  // See https://llvm.org/LICENSE.txt for license information.
5  // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6  //
7  //===----------------------------------------------------------------------===//
8  
9  #ifndef LLVM_LIBC_TEST_INCLUDE_MATH_ISFINITE_H
10  #define LLVM_LIBC_TEST_INCLUDE_MATH_ISFINITE_H
11  
12  #include "test/UnitTest/FPMatcher.h"
13  #include "test/UnitTest/Test.h"
14  
15  #include "include/llvm-libc-macros/math-function-macros.h"
16  
17  template <typename T>
18  class IsFiniteTest : public LIBC_NAMESPACE::testing::Test {
19    DECLARE_SPECIAL_CONSTANTS(T)
20  
21  public:
22    typedef int (*IsFiniteFunc)(T);
23  
testSpecialNumbers(IsFiniteFunc func)24    void testSpecialNumbers(IsFiniteFunc func) {
25      EXPECT_EQ(func(inf), 0);
26      EXPECT_EQ(func(neg_inf), 0);
27      EXPECT_EQ(func(zero), 1);
28      EXPECT_EQ(func(neg_zero), 1);
29    }
30  };
31  
32  #define LIST_ISFINITE_TESTS(T, func)                                           \
33    using LlvmLibcIsFiniteTest = IsFiniteTest<T>;                                \
34    TEST_F(LlvmLibcIsFiniteTest, SpecialNumbers) {                               \
35      auto isfinite_func = [](T x) { return func(x); };                          \
36      testSpecialNumbers(isfinite_func);                                         \
37    }
38  
39  #endif // LLVM_LIBC_TEST_INCLUDE_MATH_ISFINITE_H
40