Skip to content

[libc][math] implement signbit and math macro unit tests #97791

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 22 commits into from
Jul 14, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
88aa30a
[libc][math] adding scaffolding for solving #96322
akielaries Jul 5, 2024
f3c51ab
[libc][math] adding scaffolding for solving #96322
akielaries Jul 5, 2024
06eb1e2
[libc][math] adding additional scaffolding while compiling source
akielaries Jul 5, 2024
da15670
[libc][math] adding generic math macros header and test to CMake buil…
akielaries Jul 5, 2024
665d0df
[libc][math] adding valuable test cases. working on cleanup
akielaries Jul 5, 2024
aa9bdff
[libc][math] editing test cases
akielaries Jul 6, 2024
c955ec1
[libc][math] adding cases for `signbit` for `float`, `double`, and `l…
akielaries Jul 6, 2024
724633d
[libc][math] fixing typo
akielaries Jul 6, 2024
118feda
[libc][math] clarity around inf and nan definitions in `generic-math-…
akielaries Jul 6, 2024
e358223
Merge branch 'main' into users/akielaries/signbit
akielaries Jul 6, 2024
3d83dc3
[libc][math] formatting
akielaries Jul 6, 2024
e3259e6
[libc][math] addressing @lntue's comments. edit naming conventions an…
akielaries Jul 8, 2024
d9ed1d4
[libc][math] updating top level file with math function macros header
akielaries Jul 8, 2024
8e3613b
[libc][math] adding working test cases in a new format for
akielaries Jul 8, 2024
637bd65
[libc][math] separating tests for float, double, long double
akielaries Jul 8, 2024
b5ee920
[libc][math] adding separate tests for float, double, and long double…
akielaries Jul 8, 2024
67164db
[libc][math] formatting changes
akielaries Jul 8, 2024
31d2eef
[libc][math] restructuring and simplifying math macro unit tests
akielaries Jul 13, 2024
3835eee
[libc][math] adding C math macro tests
akielaries Jul 13, 2024
0244403
Merge branch 'main' into users/akielaries/signbit
akielaries Jul 13, 2024
e63b895
[libc][math] cleanup
akielaries Jul 13, 2024
c25ae90
[libc][math] removing `FPTest` from CMake build and fixing 1st line c…
akielaries Jul 13, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions libc/include/llvm-libc-macros/math-function-macros.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,6 @@
#define isfinite(x) __builtin_isfinite(x)
#define isinf(x) __builtin_isinf(x)
#define isnan(x) __builtin_isnan(x)
#define signbit(x) __builtin_signbit(x)

#endif // LLVM_LIBC_MACROS_MATH_FUNCTION_MACROS_H
180 changes: 180 additions & 0 deletions libc/test/include/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -79,3 +79,183 @@ add_libc_test(
DEPENDS
libc.include.llvm-libc-macros.stdckdint_macros
)

add_libc_test(
signbit_test
SUITE
libc_include_tests
SRCS
signbit_test.cpp
DEPENDS
libc.include.llvm-libc-macros.math_function_macros
)

add_libc_test(
signbitf_test
SUITE
libc_include_tests
SRCS
signbitf_test.cpp
DEPENDS
libc.include.llvm-libc-macros.math_function_macros
)

add_libc_test(
signbitl_test
SUITE
libc_include_tests
SRCS
signbitl_test.cpp
DEPENDS
libc.include.llvm-libc-macros.math_function_macros
)

add_libc_test(
isnan_test
SUITE
libc_include_tests
SRCS
isnan_test.cpp
DEPENDS
libc.include.llvm-libc-macros.math_function_macros
)

add_libc_test(
isnanf_test
SUITE
libc_include_tests
SRCS
isnanf_test.cpp
DEPENDS
libc.include.llvm-libc-macros.math_function_macros
)

add_libc_test(
isnanl_test
SUITE
libc_include_tests
SRCS
isnanl_test.cpp
DEPENDS
libc.include.llvm-libc-macros.math_function_macros
)

add_libc_test(
isinf_test
SUITE
libc_include_tests
SRCS
isinf_test.cpp
DEPENDS
libc.include.llvm-libc-macros.math_function_macros
)

add_libc_test(
isinff_test
SUITE
libc_include_tests
SRCS
isinff_test.cpp
DEPENDS
libc.include.llvm-libc-macros.math_function_macros
)

add_libc_test(
isinfl_test
SUITE
libc_include_tests
SRCS
isinfl_test.cpp
DEPENDS
libc.include.llvm-libc-macros.math_function_macros
)

add_libc_test(
isfinite_test
SUITE
libc_include_tests
SRCS
isfinite_test.cpp
DEPENDS
libc.include.llvm-libc-macros.math_function_macros
)

add_libc_test(
isfinitef_test
SUITE
libc_include_tests
SRCS
isfinitef_test.cpp
DEPENDS
libc.include.llvm-libc-macros.math_function_macros
)

add_libc_test(
isfinitel_test
SUITE
libc_include_tests
SRCS
isfinitel_test.cpp
DEPENDS
libc.include.llvm-libc-macros.math_function_macros
)

add_libc_test(
signbit_c_test
C_TEST
UNIT_TEST_ONLY
SUITE
libc_include_tests
SRCS
signbit_test.c
COMPILE_OPTIONS
-Wall
-Werror
DEPENDS
libc.include.llvm-libc-macros.math_function_macros
)

add_libc_test(
isnan_c_test
C_TEST
UNIT_TEST_ONLY
SUITE
libc_include_tests
SRCS
isnan_test.c
COMPILE_OPTIONS
-Wall
-Werror
DEPENDS
libc.include.llvm-libc-macros.math_function_macros
)

add_libc_test(
isinf_c_test
C_TEST
UNIT_TEST_ONLY
SUITE
libc_include_tests
SRCS
isinf_test.c
COMPILE_OPTIONS
-Wall
-Werror
DEPENDS
libc.include.llvm-libc-macros.math_function_macros
)

add_libc_test(
isfinite_c_test
C_TEST
UNIT_TEST_ONLY
SUITE
libc_include_tests
SRCS
isfinite_test.c
COMPILE_OPTIONS
-Wall
-Werror
DEPENDS
libc.include.llvm-libc-macros.math_function_macros
)
39 changes: 39 additions & 0 deletions libc/test/include/IsFiniteTest.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
//===-- Utility class to test the isfinite macro [f|l] ----------*- C++ -*-===//
//
// 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
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_LIBC_TEST_INCLUDE_MATH_ISFINITE_H
#define LLVM_LIBC_TEST_INCLUDE_MATH_ISFINITE_H

#include "test/UnitTest/FPMatcher.h"
#include "test/UnitTest/Test.h"

#include "include/llvm-libc-macros/math-function-macros.h"

template <typename T>
class IsFiniteTest : public LIBC_NAMESPACE::testing::Test {
DECLARE_SPECIAL_CONSTANTS(T)

public:
typedef int (*IsFiniteFunc)(T);

void testSpecialNumbers(IsFiniteFunc func) {
EXPECT_EQ(func(inf), 0);
EXPECT_EQ(func(neg_inf), 0);
EXPECT_EQ(func(zero), 1);
EXPECT_EQ(func(neg_zero), 1);
}
};

#define LIST_ISFINITE_TESTS(T, func) \
using LlvmLibcIsFiniteTest = IsFiniteTest<T>; \
TEST_F(LlvmLibcIsFiniteTest, SpecialNumbers) { \
auto isfinite_func = [](T x) { return func(x); }; \
testSpecialNumbers(isfinite_func); \
}

#endif // LLVM_LIBC_TEST_INCLUDE_MATH_ISFINITE_H
39 changes: 39 additions & 0 deletions libc/test/include/IsInfTest.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
//===-- Utility class to test the isinf macro [f|l] -------------*- C++ -*-===//
//
// 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
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_LIBC_TEST_INCLUDE_MATH_ISINF_H
#define LLVM_LIBC_TEST_INCLUDE_MATH_ISINF_H

#include "test/UnitTest/FPMatcher.h"
#include "test/UnitTest/Test.h"

#include "include/llvm-libc-macros/math-function-macros.h"

template <typename T> class IsInfTest : public LIBC_NAMESPACE::testing::Test {

DECLARE_SPECIAL_CONSTANTS(T)

public:
typedef int (*IsInfFunc)(T);

void testSpecialNumbers(IsInfFunc func) {
EXPECT_EQ(func(zero), 0);
EXPECT_EQ(func(neg_zero), 0);
EXPECT_EQ(func(inf), 1);
EXPECT_EQ(func(neg_inf), 1);
}
};

#define LIST_ISINF_TESTS(T, func) \
using LlvmLibcIsInfTest = IsInfTest<T>; \
TEST_F(LlvmLibcIsInfTest, SpecialNumbers) { \
auto isinf_func = [](T x) { return func(x); }; \
testSpecialNumbers(isinf_func); \
}

#endif // LLVM_LIBC_TEST_INCLUDE_MATH_ISINF_H
39 changes: 39 additions & 0 deletions libc/test/include/IsNanTest.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
//===-- Utility class to test the isnan macro [f|l] -------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license nanormation.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I just noticed that this file has wrong copyright header.

// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_LIBC_TEST_INCLUDE_MATH_ISNAN_H
#define LLVM_LIBC_TEST_INCLUDE_MATH_ISNAN_H

#include "test/UnitTest/FPMatcher.h"
#include "test/UnitTest/Test.h"

#include "include/llvm-libc-macros/math-function-macros.h"

template <typename T> class IsNanTest : public LIBC_NAMESPACE::testing::Test {

DECLARE_SPECIAL_CONSTANTS(T)

public:
typedef int (*IsNanFunc)(T);

void testSpecialNumbers(IsNanFunc func) {
EXPECT_EQ(func(zero), 0);
EXPECT_EQ(func(neg_zero), 0);
EXPECT_EQ(func(aNaN), 1);
EXPECT_EQ(func(sNaN), 1);
}
};

#define LIST_ISNAN_TESTS(T, func) \
using LlvmLibcIsNanTest = IsNanTest<T>; \
TEST_F(LlvmLibcIsNanTest, SpecialNumbers) { \
auto isnan_func = [](T x) { return func(x); }; \
testSpecialNumbers(isnan_func); \
}

#endif // LLVM_LIBC_TEST_INCLUDE_MATH_ISNAN_H
37 changes: 37 additions & 0 deletions libc/test/include/SignbitTest.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
//===-- Utility class to test the signbit macro [f|l] -----------*- C++ -*-===//
//
// 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
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_LIBC_TEST_INCLUDE_MATH_SIGNBIT_H
#define LLVM_LIBC_TEST_INCLUDE_MATH_SIGNBIT_H

#include "test/UnitTest/FPMatcher.h"
#include "test/UnitTest/Test.h"

#include "include/llvm-libc-macros/math-function-macros.h"

template <typename T> class SignbitTest : public LIBC_NAMESPACE::testing::Test {

DECLARE_SPECIAL_CONSTANTS(T)

public:
typedef int (*SignbitFunc)(T);

void testSpecialNumbers(SignbitFunc func) {
EXPECT_EQ(func(1), 0);
EXPECT_EQ(func(-1), 1);
}
};

#define LIST_SIGNBIT_TESTS(T, func) \
using LlvmLibcSignbitTest = SignbitTest<T>; \
TEST_F(LlvmLibcSignbitTest, SpecialNumbers) { \
auto signbit_func = [](T x) { return func(x); }; \
testSpecialNumbers(signbit_func); \
}

#endif // LLVM_LIBC_TEST_INCLUDE_MATH_SIGNBIT_H
22 changes: 22 additions & 0 deletions libc/test/include/isfinite_test.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
//===-- Unittests for isfinite macro --------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDSList-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#include "include/llvm-libc-macros/math-function-macros.h"

#include <assert.h>

// check if macro is defined
#ifndef isfinite
#error "isfinite macro is not defined"
#else
int main(void) {
assert(isfinite(1.0f));
assert(isfinite(1.0));
assert(isfinite(1.0L));
return 0;
}
#endif
12 changes: 12 additions & 0 deletions libc/test/include/isfinite_test.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
//===-- Unittest for isfinite[d] macro ------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDSList-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#include "IsFiniteTest.h"
#include "include/llvm-libc-macros/math-function-macros.h"

LIST_ISFINITE_TESTS(double, isfinite)
12 changes: 12 additions & 0 deletions libc/test/include/isfinitef_test.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
//===-- Unittest for isfinite[f] macro ------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDSList-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#include "IsFiniteTest.h"
#include "include/llvm-libc-macros/math-function-macros.h"

LIST_ISFINITE_TESTS(float, isfinite)
Loading