add_custom_target(libc-shared-tests)

# Shared math tests include the entire math library headers into a single file
# so it might take some time to compile the tests.  We do have dedicated
# precommit CIs to build and test shared tests.  So we provide a cmake option
# LIBC_TEST_SKIP_SHARED_TESTS to reduce redundant testings and reduce test time
# for other precommit CIs.
if(LIBC_TEST_SKIP_SHARED_TESTS)
  if(LIBC_CMAKE_VERBOSE_LOGGING)
    message(STATUS "LIBC_TEST_SKIP_SHARED_MATH_TESTS is set.  Skipping libc-shared-tests.")
  endif()
else()
add_fp_unittest(
  shared_math_test
  SUITE
    libc-shared-tests
  SRCS
    shared_math_test.cpp
  DEPENDS
    libc.src.__support.FPUtil.fp_bits
    libc.src.__support.math.acos
    libc.src.__support.math.acosbf16
    libc.src.__support.math.acosf
    libc.src.__support.math.acosf16
    libc.src.__support.math.acoshf
    libc.src.__support.math.acoshf16
    libc.src.__support.math.acospif
    libc.src.__support.math.acospif16
    libc.src.__support.math.asin
    libc.src.__support.math.asinbf16
    libc.src.__support.math.asinf
    libc.src.__support.math.asinf16
    libc.src.__support.math.asinhf
    libc.src.__support.math.asinhf16
    libc.src.__support.math.asinpi
    libc.src.__support.math.asinpif
    libc.src.__support.math.asinpif16
    libc.src.__support.math.atan
    libc.src.__support.math.atan2
    libc.src.__support.math.atan2f
    libc.src.__support.math.atan2f128
    libc.src.__support.math.atan2f16
    libc.src.__support.math.atanbf16
    libc.src.__support.math.atanf
    libc.src.__support.math.atanf16
    libc.src.__support.math.atanhf
    libc.src.__support.math.atanhf16
    libc.src.__support.math.atanpif16
    libc.src.__support.math.bf16add
    libc.src.__support.math.bf16addf
    libc.src.__support.math.bf16addl
    libc.src.__support.math.bf16addf128
    libc.src.__support.math.bf16div
    libc.src.__support.math.bf16divf
    libc.src.__support.math.bf16divf128
    libc.src.__support.math.bf16divl
    libc.src.__support.math.bf16fma
    libc.src.__support.math.bf16fmaf
    libc.src.__support.math.bf16fmaf128
    libc.src.__support.math.bf16fmal
    libc.src.__support.math.bf16mul
    libc.src.__support.math.bf16mulf
    libc.src.__support.math.bf16mulf128
    libc.src.__support.math.bf16mull
    libc.src.__support.math.bf16sub
    libc.src.__support.math.bf16subf
    libc.src.__support.math.bf16subf128
    libc.src.__support.math.bf16subl
    libc.src.__support.math.canonicalize
    libc.src.__support.math.canonicalizebf16
    libc.src.__support.math.canonicalizef
    libc.src.__support.math.canonicalizef128
    libc.src.__support.math.canonicalizef16
    libc.src.__support.math.canonicalizel
    libc.src.__support.math.cbrt
    libc.src.__support.math.cbrtbf16
    libc.src.__support.math.cbrtf
    libc.src.__support.math.cbrtf16
    libc.src.__support.math.ceil
    libc.src.__support.math.ceilbf16
    libc.src.__support.math.ceilf
    libc.src.__support.math.ceilf128
    libc.src.__support.math.ceilf16
    libc.src.__support.math.ceill
    libc.src.__support.math.copysign
    libc.src.__support.math.copysignbf16
    libc.src.__support.math.copysignf
    libc.src.__support.math.copysignf128
    libc.src.__support.math.copysignf16
    libc.src.__support.math.copysignl
    libc.src.__support.math.cos
    libc.src.__support.math.cosf
    libc.src.__support.math.cosf16
    libc.src.__support.math.coshf
    libc.src.__support.math.coshf16
    libc.src.__support.math.cospif
    libc.src.__support.math.cospif16
    libc.src.__support.math.daddf128
    libc.src.__support.math.daddl
    libc.src.__support.math.ddivf128
    libc.src.__support.math.ddivl
    libc.src.__support.math.dfmaf128
    libc.src.__support.math.dfmal
    libc.src.__support.math.dmulf128
    libc.src.__support.math.dmull
    libc.src.__support.math.dsqrtf128
    libc.src.__support.math.dsqrtl
    libc.src.__support.math.dsubf128
    libc.src.__support.math.dsubl
    libc.src.__support.math.exp10m1f
    libc.src.__support.math.exp10m1f16
    libc.src.__support.math.erfcf16
    libc.src.__support.math.erff
    libc.src.__support.math.erff16
    libc.src.__support.math.exp
    libc.src.__support.math.exp2
    libc.src.__support.math.exp2f
    libc.src.__support.math.exp2f16
    libc.src.__support.math.exp2m1f
    libc.src.__support.math.exp2m1f16
    libc.src.__support.math.expm1
    libc.src.__support.math.expm1f
    libc.src.__support.math.expm1f16
    libc.src.__support.math.exp10
    libc.src.__support.math.exp10f
    libc.src.__support.math.exp10f16
    libc.src.__support.math.expf
    libc.src.__support.math.expbf16
    libc.src.__support.math.expf16
    libc.src.__support.math.f16add
    libc.src.__support.math.f16addf
    libc.src.__support.math.f16addf128
    libc.src.__support.math.f16addl
    libc.src.__support.math.f16div
    libc.src.__support.math.f16divf
    libc.src.__support.math.f16divf128
    libc.src.__support.math.f16divl
    libc.src.__support.math.f16fma
    libc.src.__support.math.f16fmaf
    libc.src.__support.math.f16fmaf128
    libc.src.__support.math.f16fmal
    libc.src.__support.math.f16mul
    libc.src.__support.math.f16mulf
    libc.src.__support.math.f16mulf128
    libc.src.__support.math.f16mull
    libc.src.__support.math.f16sqrt
    libc.src.__support.math.f16sqrtf
    libc.src.__support.math.f16sqrtf128
    libc.src.__support.math.f16sqrtl
    libc.src.__support.math.f16sub
    libc.src.__support.math.f16subf
    libc.src.__support.math.f16subf128
    libc.src.__support.math.f16subl
    libc.src.__support.math.fabs
    libc.src.__support.math.fabsbf16
    libc.src.__support.math.fabsf
    libc.src.__support.math.fabsf128
    libc.src.__support.math.fabsf16
    libc.src.__support.math.fabsl
    libc.src.__support.math.fadd
    libc.src.__support.math.faddf128
    libc.src.__support.math.faddl
    libc.src.__support.math.fdim
    libc.src.__support.math.fdimbf16
    libc.src.__support.math.fdimf
    libc.src.__support.math.fdimf128
    libc.src.__support.math.fdimf16
    libc.src.__support.math.fdiml
    libc.src.__support.math.fdiv
    libc.src.__support.math.fdivf128
    libc.src.__support.math.fdivl
    libc.src.__support.math.ffma
    libc.src.__support.math.ffmaf128
    libc.src.__support.math.ffmal
    libc.src.__support.math.floor
    libc.src.__support.math.floorbf16
    libc.src.__support.math.floorf
    libc.src.__support.math.floorf128
    libc.src.__support.math.floorf16
    libc.src.__support.math.floorl
    libc.src.__support.math.fma
    libc.src.__support.math.fmaf
    libc.src.__support.math.fmaf16
    libc.src.__support.math.fmabf16
    libc.src.__support.math.fmax
    libc.src.__support.math.fmaxbf16
    libc.src.__support.math.fmaxf
    libc.src.__support.math.fmaxf128
    libc.src.__support.math.fmaxf16
    libc.src.__support.math.fmaximum
    libc.src.__support.math.fmaximum_mag
    libc.src.__support.math.fmaximum_mag_num
    libc.src.__support.math.fmaximum_mag_numbf16
    libc.src.__support.math.fmaximum_mag_numf
    libc.src.__support.math.fmaximum_mag_numf128
    libc.src.__support.math.fmaximum_mag_numf16
    libc.src.__support.math.fmaximum_mag_numl
    libc.src.__support.math.fmaximum_magbf16
    libc.src.__support.math.fmaximum_magf
    libc.src.__support.math.fmaximum_magf128
    libc.src.__support.math.fmaximum_magf16
    libc.src.__support.math.fmaximum_magl
    libc.src.__support.math.fmaximum_num
    libc.src.__support.math.fmaximum_numbf16
    libc.src.__support.math.fmaximum_numf
    libc.src.__support.math.fmaximum_numf128
    libc.src.__support.math.fmaximum_numf16
    libc.src.__support.math.fmaximum_numl
    libc.src.__support.math.fmaximumbf16
    libc.src.__support.math.fmaximumf
    libc.src.__support.math.fmaximumf128
    libc.src.__support.math.fmaximumf16
    libc.src.__support.math.fmaximuml
    libc.src.__support.math.fmaxl
    libc.src.__support.math.fmin
    libc.src.__support.math.fminbf16
    libc.src.__support.math.fminf
    libc.src.__support.math.fminf128
    libc.src.__support.math.fminf16
    libc.src.__support.math.fminimum
    libc.src.__support.math.fminimum_mag
    libc.src.__support.math.fminimum_mag_num
    libc.src.__support.math.fminimum_mag_numbf16
    libc.src.__support.math.fminimum_mag_numf
    libc.src.__support.math.fminimum_mag_numf128
    libc.src.__support.math.fminimum_mag_numf16
    libc.src.__support.math.fminimum_mag_numl
    libc.src.__support.math.fminimum_magbf16
    libc.src.__support.math.fminimum_magf
    libc.src.__support.math.fminimum_magf128
    libc.src.__support.math.fminimum_magf16
    libc.src.__support.math.fminimum_magl
    libc.src.__support.math.fminimum_num
    libc.src.__support.math.fminimum_numbf16
    libc.src.__support.math.fminimum_numf
    libc.src.__support.math.fminimum_numf128
    libc.src.__support.math.fminimum_numf16
    libc.src.__support.math.fminimum_numl
    libc.src.__support.math.fminimumbf16
    libc.src.__support.math.fminimumf
    libc.src.__support.math.fminimumf128
    libc.src.__support.math.fminimumf16
    libc.src.__support.math.fminimuml
    libc.src.__support.math.fminl
    libc.src.__support.math.fmod
    libc.src.__support.math.fmodbf16
    libc.src.__support.math.fmodf
    libc.src.__support.math.fmodf128
    libc.src.__support.math.fmodf16
    libc.src.__support.math.fmodl
    libc.src.__support.math.fmul
    libc.src.__support.math.fmulf128
    libc.src.__support.math.fmull
    libc.src.__support.math.frexp
    libc.src.__support.math.frexpbf16
    libc.src.__support.math.frexpf
    libc.src.__support.math.frexpf128
    libc.src.__support.math.frexpf16
    libc.src.__support.math.frexpl
    libc.src.__support.math.fromfp
    libc.src.__support.math.fromfpbf16
    libc.src.__support.math.fromfpf
    libc.src.__support.math.fromfpf128
    libc.src.__support.math.fromfpf16
    libc.src.__support.math.fromfpl
    libc.src.__support.math.fromfpx
    libc.src.__support.math.fromfpxbf16
    libc.src.__support.math.fromfpxf
    libc.src.__support.math.fromfpxf128
    libc.src.__support.math.fromfpxf16
    libc.src.__support.math.fromfpxl
    libc.src.__support.math.fsqrt
    libc.src.__support.math.fsqrtf128
    libc.src.__support.math.fsqrtl
    libc.src.__support.math.fsub
    libc.src.__support.math.fsubf128
    libc.src.__support.math.fsubl
    libc.src.__support.math.getpayload
    libc.src.__support.math.getpayloadbf16
    libc.src.__support.math.getpayloadf
    libc.src.__support.math.getpayloadf128
    libc.src.__support.math.getpayloadf16
    libc.src.__support.math.getpayloadl
    libc.src.__support.math.hypot
    libc.src.__support.math.hypotf
    libc.src.__support.math.hypotbf16
    libc.src.__support.math.hypotf16
    libc.src.__support.math.ilogb
    libc.src.__support.math.ilogbbf16
    libc.src.__support.math.ilogbf
    libc.src.__support.math.ilogbf16
    libc.src.__support.math.ilogbf128
    libc.src.__support.math.ilogbl
    libc.src.__support.math.iscanonical
    libc.src.__support.math.iscanonicalbf16
    libc.src.__support.math.iscanonicalf
    libc.src.__support.math.iscanonicalf128
    libc.src.__support.math.iscanonicalf16
    libc.src.__support.math.iscanonicall
    libc.src.__support.math.isnan
    libc.src.__support.math.isnanf
    libc.src.__support.math.isnanf128
    libc.src.__support.math.isnanf16
    libc.src.__support.math.isnanl
    libc.src.__support.math.issignaling
    libc.src.__support.math.issignalingbf16
    libc.src.__support.math.issignalingf
    libc.src.__support.math.issignalingf128
    libc.src.__support.math.issignalingf16
    libc.src.__support.math.issignalingl
    libc.src.__support.math.ldexp
    libc.src.__support.math.ldexpbf16
    libc.src.__support.math.ldexpf
    libc.src.__support.math.ldexpl
    libc.src.__support.math.llogb
    libc.src.__support.math.llogbbf16
    libc.src.__support.math.llrint
    libc.src.__support.math.llrintbf16
    libc.src.__support.math.llrintf
    libc.src.__support.math.llrintf128
    libc.src.__support.math.llrintf16
    libc.src.__support.math.llrintl
    libc.src.__support.math.llround
    libc.src.__support.math.llroundbf16
    libc.src.__support.math.llroundf
    libc.src.__support.math.llroundf128
    libc.src.__support.math.llroundf16
    libc.src.__support.math.llroundl
    libc.src.__support.math.log
    libc.src.__support.math.log10
    libc.src.__support.math.log10f16
    libc.src.__support.math.log10p1f16
    libc.src.__support.math.log10f
    libc.src.__support.math.log1p
    libc.src.__support.math.log1pf
    libc.src.__support.math.log2
    libc.src.__support.math.logb
    libc.src.__support.math.log2f
    libc.src.__support.math.log2f16
    libc.src.__support.math.log2p1f16
    libc.src.__support.math.logbf
    libc.src.__support.math.logbbf16
    libc.src.__support.math.logbf128
    libc.src.__support.math.logbf16
    libc.src.__support.math.logf
    libc.src.__support.math.log_bf16
    libc.src.__support.math.ldexpf
    libc.src.__support.math.ldexpf128
    libc.src.__support.math.ldexpf16
    libc.src.__support.math.llogbf
    libc.src.__support.math.llogbf128
    libc.src.__support.math.llogbf16
    libc.src.__support.math.logbl
    libc.src.__support.math.logf16
    libc.src.__support.math.llogbl
    libc.src.__support.math.lrint
    libc.src.__support.math.lrintbf16
    libc.src.__support.math.lrintf
    libc.src.__support.math.lrintf128
    libc.src.__support.math.lrintf16
    libc.src.__support.math.lrintl
    libc.src.__support.math.lround
    libc.src.__support.math.lroundbf16
    libc.src.__support.math.lroundf
    libc.src.__support.math.lroundf128
    libc.src.__support.math.lroundf16
    libc.src.__support.math.lroundl
    libc.src.__support.math.modf
    libc.src.__support.math.modfbf16
    libc.src.__support.math.modff
    libc.src.__support.math.modff128
    libc.src.__support.math.modff16
    libc.src.__support.math.modfl
    libc.src.__support.math.nan
    libc.src.__support.math.nanbf16
    libc.src.__support.math.nanf
    libc.src.__support.math.nanf128
    libc.src.__support.math.nanf16
    libc.src.__support.math.nanl
    libc.src.__support.math.nearbyint
    libc.src.__support.math.nearbyintbf16
    libc.src.__support.math.nearbyintf
    libc.src.__support.math.nearbyintf128
    libc.src.__support.math.nearbyintf16
    libc.src.__support.math.nearbyintl
    libc.src.__support.math.nextdown
    libc.src.__support.math.nextdownbf16
    libc.src.__support.math.nextdownf
    libc.src.__support.math.nextdownf128
    libc.src.__support.math.nextdownf16
    libc.src.__support.math.nextdownl
    libc.src.__support.math.nextup
    libc.src.__support.math.nextupbf16
    libc.src.__support.math.nextupf
    libc.src.__support.math.nextupf128
    libc.src.__support.math.nextupf16
    libc.src.__support.math.nextupl
    libc.src.__support.math.nexttoward
    libc.src.__support.math.nexttowardbf16
    libc.src.__support.math.nexttowardf
    libc.src.__support.math.nexttowardf16
    libc.src.__support.math.nexttowardl
    libc.src.__support.math.nextafter
    libc.src.__support.math.nextafterbf16
    libc.src.__support.math.nextafterf
    libc.src.__support.math.nextafterf16
    libc.src.__support.math.nextafterl
    libc.src.__support.math.nextafterf128
    libc.src.__support.math.pow
    libc.src.__support.math.powf
    libc.src.__support.math.remainder
    libc.src.__support.math.remainderbf16
    libc.src.__support.math.remainderf
    libc.src.__support.math.remainderf128
    libc.src.__support.math.remainderf16
    libc.src.__support.math.remainderl
    libc.src.__support.math.remquo
    libc.src.__support.math.remquobf16
    libc.src.__support.math.remquof
    libc.src.__support.math.remquof128
    libc.src.__support.math.remquof16
    libc.src.__support.math.remquol
    libc.src.__support.math.rint
    libc.src.__support.math.rintbf16
    libc.src.__support.math.rintf
    libc.src.__support.math.rintf128
    libc.src.__support.math.rintf16
    libc.src.__support.math.rintl
    libc.src.__support.math.round
    libc.src.__support.math.roundbf16
    libc.src.__support.math.roundeven
    libc.src.__support.math.roundevenbf16
    libc.src.__support.math.roundevenf
    libc.src.__support.math.roundevenf128
    libc.src.__support.math.roundevenf16
    libc.src.__support.math.roundevenl
    libc.src.__support.math.roundf
    libc.src.__support.math.roundf128
    libc.src.__support.math.roundf16
    libc.src.__support.math.roundl
    libc.src.__support.math.rsqrtf
    libc.src.__support.math.rsqrtf16
    libc.src.__support.math.scalbln
    libc.src.__support.math.scalblnbf16
    libc.src.__support.math.scalblnf
    libc.src.__support.math.scalblnf128
    libc.src.__support.math.scalblnf16
    libc.src.__support.math.scalblnl
    libc.src.__support.math.scalbn
    libc.src.__support.math.scalbnbf16
    libc.src.__support.math.scalbnf
    libc.src.__support.math.scalbnf128
    libc.src.__support.math.scalbnf16
    libc.src.__support.math.scalbnl
    libc.src.__support.math.setpayload
    libc.src.__support.math.setpayloadbf16
    libc.src.__support.math.setpayloadf
    libc.src.__support.math.setpayloadf128
    libc.src.__support.math.setpayloadf16
    libc.src.__support.math.setpayloadl
    libc.src.__support.math.setpayloadsig
    libc.src.__support.math.setpayloadsigbf16
    libc.src.__support.math.setpayloadsigf
    libc.src.__support.math.setpayloadsigf128
    libc.src.__support.math.setpayloadsigf16
    libc.src.__support.math.setpayloadsigl
    libc.src.__support.math.sqrtf16
    libc.src.__support.math.sin
    libc.src.__support.math.sincos
    libc.src.__support.math.sincosf
    libc.src.__support.math.sinf
    libc.src.__support.math.sinf16
    libc.src.__support.math.sinhf
    libc.src.__support.math.sinhf16
    libc.src.__support.math.sqrtf128
    libc.src.__support.math.sinpif
    libc.src.__support.math.sinpif16
    libc.src.__support.math.sqrt
    libc.src.__support.math.sqrtbf16
    libc.src.__support.math.sqrtf
    libc.src.__support.math.sqrtl
    libc.src.__support.math.tan
    libc.src.__support.math.tanbf16
    libc.src.__support.math.tanf
    libc.src.__support.math.tanf16
    libc.src.__support.math.tanhf
    libc.src.__support.math.tanhf16
    libc.src.__support.math.tanpif
    libc.src.__support.math.tanpif16
    libc.src.__support.math.trunc
    libc.src.__support.math.truncbf16
    libc.src.__support.math.truncf
    libc.src.__support.math.truncf128
    libc.src.__support.math.truncf16
    libc.src.__support.math.truncl
    libc.src.__support.math.ufromfp
    libc.src.__support.math.ufromfpbf16
    libc.src.__support.math.ufromfpf
    libc.src.__support.math.ufromfpf128
    libc.src.__support.math.ufromfpf16
    libc.src.__support.math.ufromfpl
    libc.src.__support.math.ufromfpx
    libc.src.__support.math.ufromfpxbf16
    libc.src.__support.math.ufromfpxf
    libc.src.__support.math.ufromfpxf128
    libc.src.__support.math.ufromfpxf16
    libc.src.__support.math.ufromfpxl
    libc.src.__support.math.totalorder
    libc.src.__support.math.totalorderbf16
    libc.src.__support.math.totalorderf
    libc.src.__support.math.totalorderf128
    libc.src.__support.math.totalorderf16
    libc.src.__support.math.totalorderl
    libc.src.__support.math.totalordermag
    libc.src.__support.math.totalordermagbf16
    libc.src.__support.math.totalordermagf
    libc.src.__support.math.totalordermagf128
    libc.src.__support.math.totalordermagf16
    libc.src.__support.math.totalordermagl
)

add_fp_unittest(
  shared_math_constexpr_test
  SUITE
    libc-shared-tests
  SRCS
    shared_math_constexpr_test.cpp
  DEPENDS
    libc.src.__support.math.asinbf16
    libc.src.__support.math.bf16subl
    libc.src.__support.math.canonicalize
    libc.src.__support.math.canonicalizebf16
    libc.src.__support.math.canonicalizef
    libc.src.__support.math.canonicalizef128
    libc.src.__support.math.canonicalizef16
    libc.src.__support.math.canonicalizel
    libc.src.__support.math.ceil
    libc.src.__support.math.ceilbf16
    libc.src.__support.math.ceilf
    libc.src.__support.math.ceilf128
    libc.src.__support.math.ceilf16
    libc.src.__support.math.ceill
    libc.src.__support.math.copysign
    libc.src.__support.math.copysignbf16
    libc.src.__support.math.copysignf
    libc.src.__support.math.copysignf128
    libc.src.__support.math.copysignf16
    libc.src.__support.math.copysignl
    libc.src.__support.math.ddivf128
    libc.src.__support.math.ddivl
    libc.src.__support.math.dmulf128
    libc.src.__support.math.dmull
    libc.src.__support.math.dsqrtf128
    libc.src.__support.math.f16add
    libc.src.__support.math.f16addf
    libc.src.__support.math.f16addf128
    libc.src.__support.math.f16addl
    libc.src.__support.math.fadd
    libc.src.__support.math.faddf128
    libc.src.__support.math.faddl
    libc.src.__support.math.fdim
    libc.src.__support.math.fdimbf16
    libc.src.__support.math.fdimf
    libc.src.__support.math.fdimf128
    libc.src.__support.math.fdimf16
    libc.src.__support.math.fdiml
    libc.src.__support.math.fdiv
    libc.src.__support.math.fdivf128
    libc.src.__support.math.fdivl
    libc.src.__support.math.floor
    libc.src.__support.math.floorbf16
    libc.src.__support.math.floorf
    libc.src.__support.math.floorf128
    libc.src.__support.math.floorf16
    libc.src.__support.math.floorl
    libc.src.__support.math.fabs
    libc.src.__support.math.fabsbf16
    libc.src.__support.math.fabsf
    libc.src.__support.math.fabsf128
    libc.src.__support.math.fabsf16
    libc.src.__support.math.fabsl
    libc.src.__support.math.fmaximum
    libc.src.__support.math.fmaximum_mag
    libc.src.__support.math.fmaximum_mag_num
    libc.src.__support.math.fmaximum_mag_numbf16
    libc.src.__support.math.fmaximum_mag_numf
    libc.src.__support.math.fmaximum_mag_numf128
    libc.src.__support.math.fmaximum_mag_numf16
    libc.src.__support.math.fmaximum_mag_numl
    libc.src.__support.math.fmaximum_magbf16
    libc.src.__support.math.fmaximum_magf
    libc.src.__support.math.fmaximum_magf128
    libc.src.__support.math.fmaximum_magf16
    libc.src.__support.math.fmaximum_magl
    libc.src.__support.math.fmaximum_num
    libc.src.__support.math.fmaximum_numbf16
    libc.src.__support.math.fmaximum_numf
    libc.src.__support.math.fmaximum_numf128
    libc.src.__support.math.fmaximum_numf16
    libc.src.__support.math.fmaximum_numl
    libc.src.__support.math.fmaximumbf16
    libc.src.__support.math.fmaximumf
    libc.src.__support.math.fmaximumf128
    libc.src.__support.math.fmaximumf16
    libc.src.__support.math.fmaximuml
    libc.src.__support.math.fmin
    libc.src.__support.math.fminbf16
    libc.src.__support.math.fminf
    libc.src.__support.math.fminf128
    libc.src.__support.math.fminf16
    libc.src.__support.math.fminimum
    libc.src.__support.math.fminimum_mag
    libc.src.__support.math.fminimum_mag_num
    libc.src.__support.math.fminimum_mag_numbf16
    libc.src.__support.math.fminimum_mag_numf
    libc.src.__support.math.fminimum_mag_numf128
    libc.src.__support.math.fminimum_mag_numf16
    libc.src.__support.math.fminimum_mag_numl
    libc.src.__support.math.fminimum_magbf16
    libc.src.__support.math.fminimum_magf
    libc.src.__support.math.fminimum_magf128
    libc.src.__support.math.fminimum_magf16
    libc.src.__support.math.fminimum_magl
    libc.src.__support.math.fminimum_num
    libc.src.__support.math.fminimum_numbf16
    libc.src.__support.math.fminimum_numf
    libc.src.__support.math.fminimum_numf128
    libc.src.__support.math.fminimum_numf16
    libc.src.__support.math.fminimum_numl
    libc.src.__support.math.fminimumbf16
    libc.src.__support.math.fminimumf
    libc.src.__support.math.fminimumf128
    libc.src.__support.math.fminimumf16
    libc.src.__support.math.fminimuml
    libc.src.__support.math.fminl
    libc.src.__support.math.fmod
    libc.src.__support.math.fmodbf16
    libc.src.__support.math.fmodf
    libc.src.__support.math.fmodf128
    libc.src.__support.math.fmodf16
    libc.src.__support.math.fmodl
    libc.src.__support.math.fmul
    libc.src.__support.math.fmulf128
    libc.src.__support.math.fmull
    libc.src.__support.math.frexp
    libc.src.__support.math.frexpbf16
    libc.src.__support.math.frexpl
    libc.src.__support.math.fromfp
    libc.src.__support.math.fromfpbf16
    libc.src.__support.math.fromfpf
    libc.src.__support.math.fromfpf128
    libc.src.__support.math.fromfpf16
    libc.src.__support.math.fromfpl
    libc.src.__support.math.fromfpx
    libc.src.__support.math.fromfpxbf16
    libc.src.__support.math.fromfpxf
    libc.src.__support.math.fromfpxf128
    libc.src.__support.math.fromfpxf16
    libc.src.__support.math.fromfpxl
    libc.src.__support.math.fsub
    libc.src.__support.math.fsubf128
    libc.src.__support.math.fsubl
    libc.src.__support.math.getpayload
    libc.src.__support.math.getpayloadbf16
    libc.src.__support.math.getpayloadf
    libc.src.__support.math.getpayloadf128
    libc.src.__support.math.getpayloadf16
    libc.src.__support.math.getpayloadl
    libc.src.__support.math.iscanonical
    libc.src.__support.math.iscanonicalbf16
    libc.src.__support.math.iscanonicalf
    libc.src.__support.math.iscanonicalf128
    libc.src.__support.math.iscanonicalf16
    libc.src.__support.math.iscanonicall
    libc.src.__support.math.isnan
    libc.src.__support.math.isnanf
    libc.src.__support.math.isnanf128
    libc.src.__support.math.isnanf16
    libc.src.__support.math.isnanl
    libc.src.__support.math.issignaling
    libc.src.__support.math.issignalingbf16
    libc.src.__support.math.issignalingf
    libc.src.__support.math.issignalingf128
    libc.src.__support.math.issignalingf16
    libc.src.__support.math.issignalingl
    libc.src.__support.math.ldexp
    libc.src.__support.math.ldexpbf16
    libc.src.__support.math.ldexpl
    libc.src.__support.math.llogbbf16
    libc.src.__support.math.llrint
    libc.src.__support.math.llrintbf16
    libc.src.__support.math.llrintf
    libc.src.__support.math.llrintf128
    libc.src.__support.math.llrintf16
    libc.src.__support.math.llrintl
    libc.src.__support.math.llround
    libc.src.__support.math.llroundbf16
    libc.src.__support.math.llroundf
    libc.src.__support.math.llroundf128
    libc.src.__support.math.llroundf16
    libc.src.__support.math.llroundl
    libc.src.__support.math.log
    libc.src.__support.math.logbbf16
    libc.src.__support.math.ilogbbf16
    libc.src.__support.math.lrint
    libc.src.__support.math.lrintbf16
    libc.src.__support.math.lrintf
    libc.src.__support.math.lrintf128
    libc.src.__support.math.lrintf16
    libc.src.__support.math.lrintl
    libc.src.__support.math.lround
    libc.src.__support.math.lroundbf16
    libc.src.__support.math.lroundf
    libc.src.__support.math.lroundf128
    libc.src.__support.math.lroundf16
    libc.src.__support.math.lroundl
    libc.src.__support.math.modf
    libc.src.__support.math.modfbf16
    libc.src.__support.math.modff
    libc.src.__support.math.modff128
    libc.src.__support.math.modff16
    libc.src.__support.math.modfl
    libc.src.__support.math.nan
    libc.src.__support.math.nanbf16
    libc.src.__support.math.nanf
    libc.src.__support.math.nanf128
    libc.src.__support.math.nanf16
    libc.src.__support.math.nanl
    libc.src.__support.math.nearbyint
    libc.src.__support.math.nearbyintbf16
    libc.src.__support.math.nearbyintf
    libc.src.__support.math.nearbyintf128
    libc.src.__support.math.nearbyintf16
    libc.src.__support.math.nearbyintl
    libc.src.__support.math.nextafter
    libc.src.__support.math.nextafterbf16
    libc.src.__support.math.nextafterf
    libc.src.__support.math.nextafterf16
    libc.src.__support.math.nextafterl
    libc.src.__support.math.nextafterf128
    libc.src.__support.math.remainder
    libc.src.__support.math.remainderbf16
    libc.src.__support.math.remainderf
    libc.src.__support.math.remainderf128
    libc.src.__support.math.remainderf16
    libc.src.__support.math.remainderl
    libc.src.__support.math.remquo
    libc.src.__support.math.remquobf16
    libc.src.__support.math.remquof
    libc.src.__support.math.remquof128
    libc.src.__support.math.remquof16
    libc.src.__support.math.remquol
    libc.src.__support.math.rint
    libc.src.__support.math.rintbf16
    libc.src.__support.math.rintf
    libc.src.__support.math.rintf128
    libc.src.__support.math.rintf16
    libc.src.__support.math.rintl
    libc.src.__support.math.round
    libc.src.__support.math.roundbf16
    libc.src.__support.math.roundeven
    libc.src.__support.math.roundevenbf16
    libc.src.__support.math.roundevenf
    libc.src.__support.math.roundevenf128
    libc.src.__support.math.roundevenf16
    libc.src.__support.math.roundevenl
    libc.src.__support.math.roundf
    libc.src.__support.math.roundf128
    libc.src.__support.math.roundf16
    libc.src.__support.math.roundl
    libc.src.__support.math.scalbln
    libc.src.__support.math.scalblnbf16
    libc.src.__support.math.scalblnf
    libc.src.__support.math.scalblnf128
    libc.src.__support.math.scalblnf16
    libc.src.__support.math.scalblnl
    libc.src.__support.math.scalbn
    libc.src.__support.math.scalbnbf16
    libc.src.__support.math.scalbnf
    libc.src.__support.math.scalbnf128
    libc.src.__support.math.scalbnf16
    libc.src.__support.math.scalbnl
    libc.src.__support.math.setpayload
    libc.src.__support.math.setpayloadbf16
    libc.src.__support.math.setpayloadf
    libc.src.__support.math.setpayloadf128
    libc.src.__support.math.setpayloadf16
    libc.src.__support.math.setpayloadl
    libc.src.__support.math.sqrtl
    libc.src.__support.math.trunc
    libc.src.__support.math.truncbf16
    libc.src.__support.math.truncf
    libc.src.__support.math.truncf128
    libc.src.__support.math.truncf16
    libc.src.__support.math.truncl
    libc.src.__support.math.ufromfp
    libc.src.__support.math.ufromfpbf16
    libc.src.__support.math.ufromfpf
    libc.src.__support.math.ufromfpf128
    libc.src.__support.math.ufromfpf16
    libc.src.__support.math.ufromfpl
    libc.src.__support.math.ufromfpx
    libc.src.__support.math.ufromfpxbf16
    libc.src.__support.math.ufromfpxf
    libc.src.__support.math.ufromfpxf128
    libc.src.__support.math.ufromfpxf16
    libc.src.__support.math.ufromfpxl
    libc.src.__support.math.totalorder
    libc.src.__support.math.totalorderbf16
    libc.src.__support.math.totalorderf
    libc.src.__support.math.totalorderf128
    libc.src.__support.math.totalorderf16
    libc.src.__support.math.totalorderl
    libc.src.__support.math.totalordermag
    libc.src.__support.math.totalordermagbf16
    libc.src.__support.math.totalordermagf
    libc.src.__support.math.totalordermagf128
    libc.src.__support.math.totalordermagf16
    libc.src.__support.math.totalordermagl
)
endif() # LIBC_TEST_SKIP_SHARED_MATH_TESTS

add_fp_unittest(
  shared_builtins_test
  SUITE
    libc-shared-tests
  SRCS
    shared_builtins_test.cpp
  DEPENDS
    libc.src.__support.builtins.adddf3
    libc.src.__support.builtins.addsf3
    libc.src.__support.builtins.addtf3
    libc.src.__support.builtins.divdf3
    libc.src.__support.builtins.divsf3
    libc.src.__support.builtins.divtf3
    libc.src.__support.builtins.muldf3
    libc.src.__support.builtins.mulsf3
    libc.src.__support.builtins.multf3
    libc.src.__support.builtins.subdf3
    libc.src.__support.builtins.subsf3
    libc.src.__support.builtins.subtf3
)

add_fp_unittest(
  shared_str_to_num_test
  SUITE
    libc-shared-tests
  SRCS
    shared_str_to_num_test.cpp
  DEPENDS
    libc.src.__support.str_to_float
    libc.src.__support.str_to_integer
)

# FIXME: The LLVM libc full build does not support 'system' yet.
if(NOT LLVM_LIBC_FULL_BUILD)
add_libc_test(
  shared_rpc_test
  UNIT_TEST_ONLY
  SUITE
    libc-shared-tests
  SRCS
    shared_rpc_test.cpp
  DEPENDS
    libc.src.stdio.printf_core.converter
    libc.src.stdio.printf_core.parser
    libc.src.stdio.printf_core.writer
    libc.src.__support.arg_list
)
endif()

add_fp_unittest(
  shared_math_check_exp_test
  SUITE
    libc-shared-tests
  SRCS
    shared_math_check_exp_test.cpp
  DEPENDS
    libc.hdr.fenv_macros
    libc.src.__support.CPP.array
    libc.src.__support.FPUtil.fp_bits
)
