[libc] Run all unit tests, irrespective of whether they belong to a test suite.
authorSiva Chandra Reddy <sivachandra@google.com>
Thu, 20 Apr 2023 07:18:43 +0000 (07:18 +0000)
committerSiva Chandra Reddy <sivachandra@google.com>
Mon, 24 Apr 2023 22:37:58 +0000 (22:37 +0000)
Previously, only those unit tests which belonged to a suite were run as
part of libc-unit-tests. It meant that unit tests not part of any suite
were not being tested. This change makes all unit tests run as part of
libc-unit-tests. The convenience function to add a libc unit test suite
has been removed and add_custom_target is used in its place. One of the
bit-rotting test has along been fixed. Math exhaustive and differential
tests are skipped under full build.

Reviewed By: michaelrj

Differential Revision: https://reviews.llvm.org/D148784

36 files changed:
libc/cmake/modules/LLVMLibCTestRules.cmake
libc/test/src/__support/CMakeLists.txt
libc/test/src/__support/CPP/CMakeLists.txt
libc/test/src/__support/FPUtil/CMakeLists.txt
libc/test/src/__support/OSUtil/CMakeLists.txt
libc/test/src/assert/CMakeLists.txt
libc/test/src/ctype/CMakeLists.txt
libc/test/src/dirent/CMakeLists.txt
libc/test/src/errno/CMakeLists.txt
libc/test/src/fcntl/CMakeLists.txt
libc/test/src/fenv/CMakeLists.txt
libc/test/src/inttypes/CMakeLists.txt
libc/test/src/math/CMakeLists.txt
libc/test/src/network/CMakeLists.txt
libc/test/src/pthread/CMakeLists.txt
libc/test/src/sched/CMakeLists.txt
libc/test/src/setjmp/CMakeLists.txt
libc/test/src/signal/CMakeLists.txt
libc/test/src/spawn/CMakeLists.txt
libc/test/src/stdio/CMakeLists.txt
libc/test/src/stdlib/CMakeLists.txt
libc/test/src/string/CMakeLists.txt
libc/test/src/sys/mman/linux/CMakeLists.txt
libc/test/src/sys/random/linux/CMakeLists.txt
libc/test/src/sys/resource/CMakeLists.txt
libc/test/src/sys/select/CMakeLists.txt
libc/test/src/sys/sendfile/CMakeLists.txt
libc/test/src/sys/stat/CMakeLists.txt
libc/test/src/sys/utsname/CMakeLists.txt
libc/test/src/sys/wait/CMakeLists.txt
libc/test/src/termios/CMakeLists.txt
libc/test/src/time/CMakeLists.txt
libc/test/src/unistd/CMakeLists.txt
libc/test/src/wchar/CMakeLists.txt
libc/test/utils/FPUtil/x86_long_double_test.cpp
libc/test/utils/UnitTest/CMakeLists.txt

index 0757bd2..c768974 100644 (file)
@@ -201,6 +201,7 @@ function(create_libc_unittest fq_target_name)
       ${fq_target_name}
     )
   endif()
+  add_dependencies(libc-unit-tests ${fq_target_name})
 endfunction(create_libc_unittest)
 
 # Internal function, used by `add_libc_unittest`.
@@ -298,11 +299,6 @@ function(add_libc_unittest target_name)
   )
 endfunction(add_libc_unittest)
 
-function(add_libc_testsuite suite_name)
-  add_custom_target(${suite_name})
-  add_dependencies(libc-unit-tests ${suite_name})
-endfunction(add_libc_testsuite)
-
 function(add_libc_exhaustive_testsuite suite_name)
   add_custom_target(${suite_name})
   add_dependencies(exhaustive-check-libc ${suite_name})
index a8c5517..dddb0a8 100644 (file)
@@ -1,4 +1,4 @@
-add_libc_testsuite(libc_support_unittests)
+add_custom_target(libc_support_unittests)
 
 add_libc_unittest(
   blockstore_test
index 9a95195..a6b80fc 100644 (file)
@@ -1,4 +1,4 @@
-add_libc_testsuite(libc_cpp_utils_unittests)
+add_custom_target(libc_cpp_utils_unittests)
 
 add_libc_unittest(
   bitset_test
index 47d88b1..0f57c44 100644 (file)
@@ -1,4 +1,4 @@
-add_libc_testsuite(libc_fputil_unittests)
+add_custom_target(libc_fputil_unittests)
 
 add_fp_unittest(
   dyadic_float_test
index c70fedf..9adac7e 100644 (file)
@@ -1,4 +1,4 @@
-add_libc_testsuite(libc_osutil_tests)
+add_custom_target(libc_osutil_tests)
 
 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${LIBC_TARGET_OS})
   add_subdirectory(${LIBC_TARGET_OS})
index f672230..e66aca8 100644 (file)
@@ -1,4 +1,4 @@
-add_libc_testsuite(libc_assert_unittests)
+add_custom_target(libc_assert_unittests)
 
 add_libc_unittest(
   assert_test
index eadec22..34377ae 100644 (file)
@@ -1,4 +1,4 @@
-add_libc_testsuite(libc_ctype_unittests)
+add_custom_target(libc_ctype_unittests)
 
 add_libc_unittest(
   isalnum_test
index 014fe37..b8ae813 100644 (file)
@@ -1,5 +1,5 @@
 add_subdirectory(testdata)
-add_libc_testsuite(libc_dirent_unittests)
+add_custom_target(libc_dirent_unittests)
 
 add_libc_unittest(
   dirent_test
index 7052073..00d381c 100644 (file)
@@ -2,7 +2,7 @@ if(NOT LLVM_LIBC_FULL_BUILD)
   return()
 endif()
 
-add_libc_testsuite(libc_errno_unittests)
+add_custom_target(libc_errno_unittests)
 
 add_libc_unittest(
   errno_test
index d90b2fa..f3d265e 100644 (file)
@@ -1,4 +1,4 @@
-add_libc_testsuite(libc_fcntl_unittests)
+add_custom_target(libc_fcntl_unittests)
 
 add_subdirectory(testdata)
 
index cf27fa5..325ec5b 100644 (file)
@@ -1,4 +1,4 @@
-add_libc_testsuite(libc_fenv_unittests)
+add_custom_target(libc_fenv_unittests)
 
 add_libc_unittest(
   rounding_mode_test
index 7fee729..cbcd846 100644 (file)
@@ -1,4 +1,4 @@
-add_libc_testsuite(libc_inttypes_unittests)
+add_custom_target(libc_inttypes_unittests)
 
 add_libc_unittest(
   strtoimax_test
index 0cececd..c710907 100644 (file)
@@ -1,4 +1,4 @@
-add_libc_testsuite(libc_math_unittests)
+add_custom_target(libc_math_unittests)
 
 add_library(
   libc_math_test_utils
@@ -1571,5 +1571,8 @@ add_fp_unittest(
 )
 
 add_subdirectory(generic)
-add_subdirectory(exhaustive)
-add_subdirectory(differential_testing)
+
+if(NOT LLVM_LIBC_FULL_BUILD)
+  add_subdirectory(exhaustive)
+  add_subdirectory(differential_testing)
+endif()
index 7bff6da..222205d 100644 (file)
@@ -1,4 +1,4 @@
-add_libc_testsuite(libc_network_unittests)
+add_custom_target(libc_network_unittests)
 
 add_libc_unittest(
   htonl
index db0516c..fb0d22a 100644 (file)
@@ -1,4 +1,4 @@
-add_libc_testsuite(libc_pthread_unittests)
+add_custom_target(libc_pthread_unittests)
 
 add_libc_unittest(
   pthread_attr_test
index 15a6257..ef6cdf3 100644 (file)
@@ -1,4 +1,4 @@
-add_libc_testsuite(libc_sched_unittests)
+add_custom_target(libc_sched_unittests)
 
 add_libc_unittest(
   affinity_test
index cfa3508..f637842 100644 (file)
@@ -1,4 +1,4 @@
-add_libc_testsuite(libc_setjmp_unittests)
+add_custom_target(libc_setjmp_unittests)
 
 # Skip setjmp tests under sanitizers
 if(LLVM_USE_SANITIZER)
index fe49328..3016f2a 100644 (file)
@@ -1,4 +1,4 @@
-add_libc_testsuite(libc_signal_unittests)
+add_custom_target(libc_signal_unittests)
 
 add_libc_unittest(
   raise_test
index c7e7bc2..39b63df 100644 (file)
@@ -1,4 +1,4 @@
-add_libc_testsuite(libc_spawn_unittests)
+add_custom_target(libc_spawn_unittests)
 
 add_libc_unittest(
   posix_spawn_file_actions_test
index 4261238..57400d8 100644 (file)
@@ -1,4 +1,4 @@
-add_libc_testsuite(libc_stdio_unittests)
+add_custom_target(libc_stdio_unittests)
 
 add_libc_unittest(
   fileop_test
index 55bc286..4664a58 100644 (file)
@@ -1,4 +1,4 @@
-add_libc_testsuite(libc_stdlib_unittests)
+add_custom_target(libc_stdlib_unittests)
 
 add_libc_unittest(
   atof_test
index af5ddfe..4614cd8 100644 (file)
@@ -1,4 +1,4 @@
-add_libc_testsuite(libc_string_unittests)
+add_custom_target(libc_string_unittests)
 
 add_subdirectory(memory_utils)
 
index 8b35842..e493c8c 100644 (file)
@@ -1,4 +1,4 @@
-add_libc_testsuite(libc_sys_mman_unittests)
+add_custom_target(libc_sys_mman_unittests)
 
 add_libc_unittest(
   mmap_test
index 6277749..32c1b61 100644 (file)
@@ -1,4 +1,4 @@
-add_libc_testsuite(libc_sys_random_unittests)
+add_custom_target(libc_sys_random_unittests)
 
 add_libc_unittest(
   getrandom_test
index 574a4dc..90dc0e8 100644 (file)
@@ -1,4 +1,4 @@
-add_libc_testsuite(libc_sys_resource_unittests)
+add_custom_target(libc_sys_resource_unittests)
 
 add_subdirectory(testdata)
 
index 9d45a44..3ad73d3 100644 (file)
@@ -1,4 +1,4 @@
-add_libc_testsuite(libc_sys_select_unittests)
+add_custom_target(libc_sys_select_unittests)
 
 add_libc_unittest(
   select_ui_test
index d2aa830..57dac4a 100644 (file)
@@ -1,4 +1,4 @@
-add_libc_testsuite(libc_sys_sendfile_unittests)
+add_custom_target(libc_sys_sendfile_unittests)
 
 add_subdirectory(testdata)
 
index f21b7a0..877a129 100644 (file)
@@ -1,4 +1,4 @@
-add_libc_testsuite(libc_sys_stat_unittests)
+add_custom_target(libc_sys_stat_unittests)
 
 add_subdirectory(testdata)
 
index a459820..d1c0ba2 100644 (file)
@@ -1,4 +1,4 @@
-add_libc_testsuite(libc_sys_utsname_unittests)
+add_custom_target(libc_sys_utsname_unittests)
 
 add_libc_unittest(
   uname_test
index 59176b8..4ba1a93 100644 (file)
@@ -1,4 +1,4 @@
-add_libc_testsuite(libc_sys_wait_unittests)
+add_custom_target(libc_sys_wait_unittests)
 
 add_libc_unittest(
   waitpid_test
index 991d8d6..9f770da 100644 (file)
@@ -1,4 +1,4 @@
-add_libc_testsuite(libc_termios_unittests)
+add_custom_target(libc_termios_unittests)
 
 add_libc_unittest(
   termios_test
index 378d754..85ddd42 100644 (file)
@@ -1,4 +1,4 @@
-add_libc_testsuite(libc_time_unittests)
+add_custom_target(libc_time_unittests)
 
 add_libc_unittest(
   asctime
index 1ec29d3..ceee888 100644 (file)
@@ -1,4 +1,4 @@
-add_libc_testsuite(libc_unistd_unittests)
+add_custom_target(libc_unistd_unittests)
 
 add_subdirectory(testdata)
 
index 8b03002..cabf42b 100644 (file)
@@ -1,4 +1,4 @@
-add_libc_testsuite(libc_wchar_unittests)
+add_custom_target(libc_wchar_unittests)
 
 add_libc_unittest(
   btowc_test
index 16248ae..c2435b4 100644 (file)
@@ -13,7 +13,7 @@
 
 using FPBits = __llvm_libc::fputil::FPBits<long double>;
 
-TEST(X86LongDoubleTest, is_nan) {
+TEST(LlvmLibcX86LongDoubleTest, is_nan) {
   // In the nan checks below, we use the macro isnan from math.h to ensure that
   // a number is actually a NaN. The isnan macro resolves to the compiler
   // builtin function. Hence, matching LLVM-libc's notion of NaN with the
@@ -21,66 +21,66 @@ TEST(X86LongDoubleTest, is_nan) {
   // behavior.
 
   FPBits bits(0.0l);
-  bits.exponent = FPBits::MAX_EXPONENT;
+  bits.set_unbiased_exponent(FPBits::MAX_EXPONENT);
   for (unsigned int i = 0; i < 1000000; ++i) {
     // If exponent has the max value and the implicit bit is 0,
     // then the number is a NaN for all values of mantissa.
-    bits.mantissa = i;
+    bits.set_mantissa(i);
     long double nan = bits;
-    ASSERT_NE(isnan(nan), 0);
+    ASSERT_NE(static_cast<int>(isnan(nan)), 0);
     ASSERT_TRUE(bits.is_nan());
   }
 
-  bits.implicitBit = 1;
+  bits.set_implicit_bit(1);
   for (unsigned int i = 1; i < 1000000; ++i) {
     // If exponent has the max value and the implicit bit is 1,
     // then the number is a NaN for all non-zero values of mantissa.
     // Note the initial value of |i| of 1 to avoid a zero mantissa.
-    bits.mantissa = i;
+    bits.set_mantissa(i);
     long double nan = bits;
-    ASSERT_NE(isnan(nan), 0);
+    ASSERT_NE(static_cast<int>(isnan(nan)), 0);
     ASSERT_TRUE(bits.is_nan());
   }
 
-  bits.exponent = 1;
-  bits.implicitBit = 0;
+  bits.set_unbiased_exponent(1);
+  bits.set_implicit_bit(0);
   for (unsigned int i = 0; i < 1000000; ++i) {
     // If exponent is non-zero and also not max, and the implicit bit is 0,
     // then the number is a NaN for all values of mantissa.
-    bits.mantissa = i;
+    bits.set_mantissa(i);
     long double nan = bits;
-    ASSERT_NE(isnan(nan), 0);
+    ASSERT_NE(static_cast<int>(isnan(nan)), 0);
     ASSERT_TRUE(bits.is_nan());
   }
 
-  bits.exponent = 1;
-  bits.implicitBit = 1;
+  bits.set_unbiased_exponent(1);
+  bits.set_implicit_bit(1);
   for (unsigned int i = 0; i < 1000000; ++i) {
     // If exponent is non-zero and also not max, and the implicit bit is 1,
     // then the number is normal value for all values of mantissa.
-    bits.mantissa = i;
+    bits.set_mantissa(i);
     long double valid = bits;
-    ASSERT_EQ(isnan(valid), 0);
+    ASSERT_EQ(static_cast<int>(isnan(valid)), 0);
     ASSERT_FALSE(bits.is_nan());
   }
 
-  bits.exponent = 0;
-  bits.implicitBit = 1;
+  bits.set_unbiased_exponent(0);
+  bits.set_implicit_bit(1);
   for (unsigned int i = 0; i < 1000000; ++i) {
     // If exponent is zero, then the number is a valid but denormal value.
-    bits.mantissa = i;
+    bits.set_mantissa(i);
     long double valid = bits;
-    ASSERT_EQ(isnan(valid), 0);
+    ASSERT_EQ(static_cast<int>(isnan(valid)), 0);
     ASSERT_FALSE(bits.is_nan());
   }
 
-  bits.exponent = 0;
-  bits.implicitBit = 0;
+  bits.set_unbiased_exponent(0);
+  bits.set_implicit_bit(0);
   for (unsigned int i = 0; i < 1000000; ++i) {
     // If exponent is zero, then the number is a valid but denormal value.
-    bits.mantissa = i;
+    bits.set_mantissa(i);
     long double valid = bits;
-    ASSERT_EQ(isnan(valid), 0);
+    ASSERT_EQ(static_cast<int>(isnan(valid)), 0);
     ASSERT_FALSE(bits.is_nan());
   }
 }
index d603189..ea9bd6c 100644 (file)
@@ -1,4 +1,4 @@
-add_libc_testsuite(libc_unittest_tests)
+add_custom_target(libc_unittest_tests)
 
 add_libc_unittest(
   testfilter_test