add_custom_target(libc_stdio_unittests)
add_libc_test(
fileop_test
SUITE
libc_stdio_unittests
SRCS
fileop_test.cpp
DEPENDS
libc.include.stdio
libc.src.errno.errno
libc.src.stdio.clearerr
libc.src.stdio.fclose
libc.src.stdio.feof
libc.src.stdio.ferror
libc.src.stdio.fflush
libc.src.stdio.fileno
libc.src.stdio.fopen
libc.src.stdio.fputs
libc.src.stdio.fread
libc.src.stdio.fseek
libc.src.stdio.fwrite
)
add_libc_test(
ungetc_test
SUITE
libc_stdio_unittests
SRCS
ungetc_test.cpp
DEPENDS
libc.include.stdio
libc.src.stdio.fclose
libc.src.stdio.fopen
libc.src.stdio.fread
libc.src.stdio.fseek
libc.src.stdio.fwrite
libc.src.stdio.ungetc
)
add_libc_test(
setbuf_test
SUITE
libc_stdio_unittests
SRCS
setbuf_test.cpp
DEPENDS
libc.include.stdio
libc.src.stdio.fclose
libc.src.stdio.fopen
libc.src.stdio.fread
libc.src.stdio.fwrite
libc.src.stdio.setbuf
libc.src.stdio.ungetc
)
add_libc_test(
setvbuf_test
SUITE
libc_stdio_unittests
SRCS
setvbuf_test.cpp
DEPENDS
libc.include.stdio
libc.src.errno.errno
libc.src.stdio.fclose
libc.src.stdio.fopen
libc.src.stdio.fread
libc.src.stdio.fwrite
libc.src.stdio.setvbuf
)
add_libc_test(
unlocked_fileop_test
SUITE
libc_stdio_unittests
SRCS
unlocked_fileop_test.cpp
DEPENDS
libc.include.stdio
libc.src.errno.errno
libc.src.stdio.clearerr_unlocked
libc.src.stdio.fclose
libc.src.stdio.feof_unlocked
libc.src.stdio.ferror_unlocked
libc.src.stdio.flockfile
libc.src.stdio.fopen
libc.src.stdio.fread_unlocked
libc.src.stdio.funlockfile
libc.src.stdio.fwrite_unlocked
)
add_libc_test(
fopencookie_test
SUITE
libc_stdio_unittests
SRCS
fopencookie_test.cpp
DEPENDS
libc.include.stdio
libc.include.stdlib
libc.src.errno.errno
libc.src.stdio.clearerr
libc.src.stdio.fclose
libc.src.stdio.feof
libc.src.stdio.ferror
libc.src.stdio.fflush
libc.src.stdio.fopencookie
libc.src.stdio.fread
libc.src.stdio.fseek
libc.src.stdio.fwrite
LINK_LIBRARIES
LibcMemoryHelpers
)
if(LIBC_CONF_PRINTF_DISABLE_FLOAT)
list(APPEND sprintf_test_copts "-DLIBC_COPT_PRINTF_DISABLE_FLOAT")
endif()
if(LIBC_CONF_PRINTF_DISABLE_INDEX_MODE)
list(APPEND sprintf_test_copts "-DLIBC_COPT_PRINTF_DISABLE_INDEX_MODE")
endif()
if(LIBC_CONF_PRINTF_DISABLE_WRITE_INT)
list(APPEND sprintf_test_copts "-DLIBC_COPT_PRINTF_DISABLE_WRITE_INT")
endif()
if(LIBC_CONF_PRINTF_DISABLE_FIXED_POINT)
list(APPEND sprintf_test_copts "-DLIBC_COPT_PRINTF_DISABLE_FIXED_POINT")
endif()
add_fp_unittest(
sprintf_test
UNIT_TEST_ONLY
SUITE
libc_stdio_unittests
SRCS
sprintf_test.cpp
DEPENDS
libc.src.stdio.sprintf
libc.src.__support.FPUtil.fp_bits
libc.include.inttypes
COMPILE_OPTIONS
${sprintf_test_copts}
)
add_libc_test(
snprintf_test
SUITE
libc_stdio_unittests
SRCS
snprintf_test.cpp
DEPENDS
libc.src.stdio.snprintf
)
if(LLVM_LIBC_FULL_BUILD)
# In fullbuild mode, fprintf's tests use the internal FILE for other functions.
list(APPEND fprintf_test_deps
libc.src.stdio.fclose
libc.src.stdio.ferror
libc.src.stdio.fopen
libc.src.stdio.fread
)
# This is to be used for tests which write to libc's platform streams
# under full build but write to system-lib's streams otherwise.
set(hermetic_test_only HERMETIC_TEST_ONLY)
else()
# Else in overlay mode they use the system's FILE.
set(use_system_file "-DLIBC_COPT_STDIO_USE_SYSTEM_FILE")
endif()
add_libc_test(
fprintf_test
SUITE
libc_stdio_unittests
SRCS
fprintf_test.cpp
DEPENDS
libc.src.stdio.fprintf
${fprintf_test_deps}
COMPILE_OPTIONS
${use_system_file}
)
add_libc_test(
printf_test
${hermetic_test_only}
SUITE
libc_stdio_unittests
SRCS
printf_test.cpp
DEPENDS
libc.src.stdio.printf
)
add_libc_test(
asprintf_test
SUITE
libc_stdio_unittests
SRCS
asprintf_test.cpp
DEPENDS
libc.src.stdio.asprintf
libc.src.string.memset
libc.include.stdlib
libc.src.stdio.sprintf
)
add_fp_unittest(
vsprintf_test
UNIT_TEST_ONLY
SUITE
libc_stdio_unittests
SRCS
vsprintf_test.cpp
DEPENDS
libc.src.stdio.vsprintf
)
add_libc_test(
vsnprintf_test
SUITE
libc_stdio_unittests
SRCS
vsnprintf_test.cpp
DEPENDS
libc.src.stdio.vsnprintf
)
add_libc_test(
vfprintf_test
SUITE
libc_stdio_unittests
SRCS
vfprintf_test.cpp
DEPENDS
libc.src.stdio.vfprintf
${fprintf_test_deps}
COMPILE_OPTIONS
${use_system_file}
)
add_libc_test(
vprintf_test
${hermetic_test_only}
SUITE
libc_stdio_unittests
SRCS
vprintf_test.cpp
DEPENDS
libc.src.stdio.vprintf
)
add_libc_test(
vasprintf_test
SUITE
libc_stdio_unittests
SRCS
vasprintf_test.cpp
DEPENDS
libc.src.stdio.vasprintf
libc.src.string.memset
libc.include.stdlib
libc.src.stdio.sprintf
)
if(LLVM_LIBC_FULL_BUILD)
# In fullbuild mode, fscanf's tests use the internal FILE for other functions.
list(APPEND fscanf_test_deps
libc.src.stdio.fclose
libc.src.stdio.ferror
libc.src.stdio.fopen
libc.src.stdio.fwrite
)
endif()
# FIXME: These tests currently fail on AMDGPU due to an optimization bug in the
# `amdgpu-attributor` pass. Disable until that's fixed.
if(NOT LIBC_TARGET_ARCHITECTURE_IS_AMDGPU)
add_libc_test(
fscanf_test
SUITE
libc_stdio_unittests
SRCS
fscanf_test.cpp
DEPENDS
libc.src.stdio.fscanf
${fscanf_test_deps}
libc.src.__support.CPP.string_view
COMPILE_OPTIONS
${use_system_file}
)
add_libc_test(
vfscanf_test
SUITE
libc_stdio_unittests
SRCS
vfscanf_test.cpp
DEPENDS
libc.src.stdio.vfscanf
${fscanf_test_deps}
libc.src.__support.CPP.string_view
COMPILE_OPTIONS
${use_system_file}
)
endif()
if(LIBC_CONF_SCANF_DISABLE_FLOAT)
list(APPEND sscanf_test_copts "-DLIBC_COPT_SCANF_DISABLE_FLOAT")
endif()
if(LIBC_CONF_SCANF_DISABLE_INDEX_MODE)
list(APPEND sscanf_test_copts "-DLIBC_COPT_SCANF_DISABLE_INDEX_MODE")
endif()
add_libc_test(
sscanf_test
SUITE
libc_stdio_unittests
SRCS
sscanf_test.cpp
DEPENDS
libc.src.stdio.sscanf
LINK_LIBRARIES
LibcFPTestHelpers
COMPILE_OPTIONS
${sscanf_test_copts}
)
add_libc_test(
vsscanf_test
SUITE
libc_stdio_unittests
SRCS
vsscanf_test.cpp
DEPENDS
libc.src.stdio.vsscanf
LINK_LIBRARIES
LibcFPTestHelpers
COMPILE_OPTIONS
${sscanf_test_copts}
)
add_libc_test(
puts_test
HERMETIC_TEST_ONLY # writes to libc's stdout
SUITE
libc_stdio_unittests
SRCS
puts_test.cpp
DEPENDS
libc.src.stdio.puts
)
add_libc_test(
fputs_test
HERMETIC_TEST_ONLY # writes to libc's stdout and stderr
SUITE
libc_stdio_unittests
SRCS
fputs_test.cpp
DEPENDS
libc.src.stdio.fputs
libc.src.stdio.stdout
libc.src.stdio.stderr
)
add_libc_test(
fputc_test
HERMETIC_TEST_ONLY # writes to libc's stdout and stderr
SUITE
libc_stdio_unittests
SRCS
fputc_test.cpp
DEPENDS
libc.src.stdio.fputc
libc.src.stdio.putchar
libc.src.stdio.stdout
libc.src.stdio.stderr
)
add_libc_test(
fopen_test
SUITE
libc_stdio_unittests
SRCS
fopen_test.cpp
DEPENDS
libc.src.stdio.fread
libc.src.stdio.fwrite
libc.src.stdio.fclose
libc.src.stdio.fopen
)
add_libc_test(
putc_test
SUITE
libc_stdio_unittests
SRCS
putc_test.cpp
DEPENDS
libc.src.stdio.putc
libc.src.stdio.fclose
libc.src.stdio.ferror
libc.src.stdio.fopen
libc.src.stdio.fread
)
if(${LIBC_TARGET_OS} STREQUAL "linux")
add_libc_test(
remove_test
SUITE
libc_stdio_unittests
SRCS
remove_test.cpp
DEPENDS
libc.include.unistd
libc.src.errno.errno
libc.src.fcntl.open
libc.src.stdio.remove
libc.src.sys.stat.mkdirat
libc.src.unistd.access
libc.src.unistd.close
)
add_libc_test(
rename_test
SUITE
libc_stdio_unittests
SRCS
rename_test.cpp
DEPENDS
libc.src.errno.errno
libc.src.fcntl.open
libc.src.stdio.rename
libc.src.unistd.access
libc.src.unistd.close
libc.test.UnitTest.ErrnoSetterMatcher
)
add_libc_test(
fdopen_test
SUITE
libc_stdio_unittests
SRCS
fdopen_test.cpp
DEPENDS
libc.src.fcntl.open
libc.src.stdio.fclose
libc.src.stdio.fdopen
libc.src.stdio.fgets
libc.src.stdio.fputs
libc.src.unistd.close
libc.test.UnitTest.ErrnoSetterMatcher
)
endif()
add_libc_test(
fgetc_test
SUITE
libc_stdio_unittests
SRCS
fgetc_test.cpp
DEPENDS
libc.include.stdio
libc.src.errno.errno
libc.src.stdio.fclose
libc.src.stdio.feof
libc.src.stdio.ferror
libc.src.stdio.fgetc
libc.src.stdio.fopen
libc.src.stdio.fwrite
libc.src.stdio.getc
)
add_libc_test(
fgetc_unlocked_test
SUITE
libc_stdio_unittests
SRCS
fgetc_unlocked_test.cpp
DEPENDS
libc.include.stdio
libc.src.errno.errno
libc.src.stdio.fclose
libc.src.stdio.ferror
libc.src.stdio.ferror_unlocked
libc.src.stdio.feof
libc.src.stdio.feof_unlocked
libc.src.stdio.fgetc_unlocked
libc.src.stdio.flockfile
libc.src.stdio.fopen
libc.src.stdio.funlockfile
libc.src.stdio.fwrite
libc.src.stdio.getc_unlocked
)
add_libc_test(
fgets_test
SUITE
libc_stdio_unittests
SRCS
fgets_test.cpp
DEPENDS
libc.include.stdio
libc.src.errno.errno
libc.src.stdio.fclose
libc.src.stdio.feof
libc.src.stdio.ferror
libc.src.stdio.fgets
libc.src.stdio.fopen
libc.src.stdio.fwrite
)
add_libc_test(
ftell_test
SUITE
libc_stdio_unittests
SRCS
ftell_test.cpp
DEPENDS
libc.include.stdio
libc.src.stdio.fclose
libc.src.stdio.fflush
libc.src.stdio.fopen
libc.src.stdio.fread
libc.src.stdio.fseek
libc.src.stdio.ftell
libc.src.stdio.fseeko
libc.src.stdio.ftello
libc.src.stdio.fwrite
libc.src.stdio.setvbuf
)
# Create an output directory for any temporary test files.
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/testdata)
if(LIBC_TARGET_OS_IS_GPU)
return()
endif()
add_subdirectory(printf_core)
add_subdirectory(scanf_core)
add_subdirectory(testdata)