diff --git a/libc/config/linux/aarch64/entrypoints.txt b/libc/config/linux/aarch64/entrypoints.txt index 23842c951c8cc..74a355407b4b9 100644 --- a/libc/config/linux/aarch64/entrypoints.txt +++ b/libc/config/linux/aarch64/entrypoints.txt @@ -502,6 +502,8 @@ if(LIBC_TYPES_HAS_FLOAT16) libc.src.math.ceilf16 libc.src.math.fabsf16 libc.src.math.floorf16 + libc.src.math.fromfpf16 + libc.src.math.fromfpxf16 libc.src.math.llrintf16 libc.src.math.llroundf16 libc.src.math.lrintf16 @@ -511,6 +513,8 @@ if(LIBC_TYPES_HAS_FLOAT16) libc.src.math.roundf16 libc.src.math.roundevenf16 libc.src.math.truncf16 + libc.src.math.ufromfpf16 + libc.src.math.ufromfpxf16 ) endif() diff --git a/libc/config/linux/x86_64/entrypoints.txt b/libc/config/linux/x86_64/entrypoints.txt index 6506ea3108169..9a87f3d6d5f00 100644 --- a/libc/config/linux/x86_64/entrypoints.txt +++ b/libc/config/linux/x86_64/entrypoints.txt @@ -535,6 +535,8 @@ if(LIBC_TYPES_HAS_FLOAT16) libc.src.math.ceilf16 libc.src.math.fabsf16 libc.src.math.floorf16 + libc.src.math.fromfpf16 + libc.src.math.fromfpxf16 libc.src.math.llrintf16 libc.src.math.llroundf16 libc.src.math.lrintf16 @@ -544,6 +546,8 @@ if(LIBC_TYPES_HAS_FLOAT16) libc.src.math.roundf16 libc.src.math.roundevenf16 libc.src.math.truncf16 + libc.src.math.ufromfpf16 + libc.src.math.ufromfpxf16 ) endif() diff --git a/libc/docs/c23.rst b/libc/docs/c23.rst index 8ccfd46271797..33896b5d2fd4d 100644 --- a/libc/docs/c23.rst +++ b/libc/docs/c23.rst @@ -55,9 +55,10 @@ Additions: * powr* * rootn* * roundeven* |check| - * fromfp* - * ufromfp* - * fromfpx* + * fromfp* |check| + * ufromfp* |check| + * fromfpx* |check| + * ufromfpx* |check| * nextup* * nextdown* * canonicalize* diff --git a/libc/docs/math/index.rst b/libc/docs/math/index.rst index b1a8aa2dd9470..1c593dc59180b 100644 --- a/libc/docs/math/index.rst +++ b/libc/docs/math/index.rst @@ -162,9 +162,9 @@ Basic Operations +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ | frexp | |check| | |check| | |check| | | |check| | 7.12.6.7 | F.10.3.7 | +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ -| fromfp | |check| | |check| | |check| | | |check| | 7.12.9.10 | F.10.6.10 | +| fromfp | |check| | |check| | |check| | |check| | |check| | 7.12.9.10 | F.10.6.10 | +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ -| fromfpx | |check| | |check| | |check| | | |check| | 7.12.9.11 | F.10.6.11 | +| fromfpx | |check| | |check| | |check| | |check| | |check| | 7.12.9.11 | F.10.6.11 | +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ | fsub | N/A | | | N/A | | 7.12.14.2 | F.10.11 | +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ @@ -212,9 +212,9 @@ Basic Operations +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ | trunc | |check| | |check| | |check| | |check| | |check| | 7.12.9.9 | F.10.6.9 | +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ -| ufromfp | |check| | |check| | |check| | | |check| | 7.12.9.10 | F.10.6.10 | +| ufromfp | |check| | |check| | |check| | |check| | |check| | 7.12.9.10 | F.10.6.10 | +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ -| ufromfpx | |check| | |check| | |check| | | |check| | 7.12.9.11 | F.10.6.11 | +| ufromfpx | |check| | |check| | |check| | |check| | |check| | 7.12.9.11 | F.10.6.11 | +------------------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+ diff --git a/libc/spec/stdc.td b/libc/spec/stdc.td index 2e64336ed4835..91626fa4e04b4 100644 --- a/libc/spec/stdc.td +++ b/libc/spec/stdc.td @@ -476,22 +476,26 @@ def StdC : StandardSpec<"stdc"> { FunctionSpec<"fromfp", RetValSpec, [ArgSpec, ArgSpec, ArgSpec]>, FunctionSpec<"fromfpf", RetValSpec, [ArgSpec, ArgSpec, ArgSpec]>, FunctionSpec<"fromfpl", RetValSpec, [ArgSpec, ArgSpec, ArgSpec]>, - GuardedFunctionSpec<"fromfpf128", RetValSpec, [ArgSpec, ArgSpec, ArgSpec], "LIBC_TYPES_HAS_FLOAT128">, + GuardedFunctionSpec<"fromfpf16", RetValSpec, [ArgSpec, ArgSpec, ArgSpec], "LIBC_TYPES_HAS_FLOAT16">, + GuardedFunctionSpec<"fromfpf128", RetValSpec, [ArgSpec, ArgSpec, ArgSpec], "LIBC_TYPES_HAS_FLOAT128">, FunctionSpec<"fromfpx", RetValSpec, [ArgSpec, ArgSpec, ArgSpec]>, FunctionSpec<"fromfpxf", RetValSpec, [ArgSpec, ArgSpec, ArgSpec]>, FunctionSpec<"fromfpxl", RetValSpec, [ArgSpec, ArgSpec, ArgSpec]>, - GuardedFunctionSpec<"fromfpxf128", RetValSpec, [ArgSpec, ArgSpec, ArgSpec], "LIBC_TYPES_HAS_FLOAT128">, + GuardedFunctionSpec<"fromfpxf16", RetValSpec, [ArgSpec, ArgSpec, ArgSpec], "LIBC_TYPES_HAS_FLOAT16">, + GuardedFunctionSpec<"fromfpxf128", RetValSpec, [ArgSpec, ArgSpec, ArgSpec], "LIBC_TYPES_HAS_FLOAT128">, FunctionSpec<"ufromfp", RetValSpec, [ArgSpec, ArgSpec, ArgSpec]>, FunctionSpec<"ufromfpf", RetValSpec, [ArgSpec, ArgSpec, ArgSpec]>, FunctionSpec<"ufromfpl", RetValSpec, [ArgSpec, ArgSpec, ArgSpec]>, - GuardedFunctionSpec<"ufromfpf128", RetValSpec, [ArgSpec, ArgSpec, ArgSpec], "LIBC_TYPES_HAS_FLOAT128">, + GuardedFunctionSpec<"ufromfpf16", RetValSpec, [ArgSpec, ArgSpec, ArgSpec], "LIBC_TYPES_HAS_FLOAT16">, + GuardedFunctionSpec<"ufromfpf128", RetValSpec, [ArgSpec, ArgSpec, ArgSpec], "LIBC_TYPES_HAS_FLOAT128">, FunctionSpec<"ufromfpx", RetValSpec, [ArgSpec, ArgSpec, ArgSpec]>, FunctionSpec<"ufromfpxf", RetValSpec, [ArgSpec, ArgSpec, ArgSpec]>, FunctionSpec<"ufromfpxl", RetValSpec, [ArgSpec, ArgSpec, ArgSpec]>, - GuardedFunctionSpec<"ufromfpxf128", RetValSpec, [ArgSpec, ArgSpec, ArgSpec], "LIBC_TYPES_HAS_FLOAT128">, + GuardedFunctionSpec<"ufromfpxf16", RetValSpec, [ArgSpec, ArgSpec, ArgSpec], "LIBC_TYPES_HAS_FLOAT16">, + GuardedFunctionSpec<"ufromfpxf128", RetValSpec, [ArgSpec, ArgSpec, ArgSpec], "LIBC_TYPES_HAS_FLOAT128">, FunctionSpec<"hypot", RetValSpec, [ArgSpec, ArgSpec]>, FunctionSpec<"hypotf", RetValSpec, [ArgSpec, ArgSpec]>, diff --git a/libc/src/__support/FPUtil/NearestIntegerOperations.h b/libc/src/__support/FPUtil/NearestIntegerOperations.h index 65fd9794dd66e..741e24aa519a7 100644 --- a/libc/src/__support/FPUtil/NearestIntegerOperations.h +++ b/libc/src/__support/FPUtil/NearestIntegerOperations.h @@ -282,7 +282,8 @@ fromfp(T x, int rnd, unsigned int width) { if (width - 1 > FPBits::EXP_BIAS) return rounded_value; - StorageType range_exp = width - 1U + FPBits::EXP_BIAS; + StorageType range_exp = + static_cast(width - 1 + FPBits::EXP_BIAS); // rounded_value < -2^(width - 1) T range_min = FPBits::create_value(Sign::NEG, range_exp, EXPLICIT_BIT).get_val(); @@ -311,7 +312,7 @@ fromfp(T x, int rnd, unsigned int width) { if (width > FPBits::EXP_BIAS) return rounded_value; - StorageType range_exp = width + FPBits::EXP_BIAS; + StorageType range_exp = static_cast(width + FPBits::EXP_BIAS); // rounded_value > 2^width - 1 T range_max = FPBits::create_value(Sign::POS, range_exp, EXPLICIT_BIT).get_val() - diff --git a/libc/src/math/CMakeLists.txt b/libc/src/math/CMakeLists.txt index 84c9beebfbea2..e2197544c0def 100644 --- a/libc/src/math/CMakeLists.txt +++ b/libc/src/math/CMakeLists.txt @@ -180,11 +180,13 @@ add_math_entrypoint_object(frexpf128) add_math_entrypoint_object(fromfp) add_math_entrypoint_object(fromfpf) add_math_entrypoint_object(fromfpl) +add_math_entrypoint_object(fromfpf16) add_math_entrypoint_object(fromfpf128) add_math_entrypoint_object(fromfpx) add_math_entrypoint_object(fromfpxf) add_math_entrypoint_object(fromfpxl) +add_math_entrypoint_object(fromfpxf16) add_math_entrypoint_object(fromfpxf128) add_math_entrypoint_object(hypot) @@ -347,9 +349,11 @@ add_math_entrypoint_object(truncf128) add_math_entrypoint_object(ufromfp) add_math_entrypoint_object(ufromfpf) add_math_entrypoint_object(ufromfpl) +add_math_entrypoint_object(ufromfpf16) add_math_entrypoint_object(ufromfpf128) add_math_entrypoint_object(ufromfpx) add_math_entrypoint_object(ufromfpxf) add_math_entrypoint_object(ufromfpxl) +add_math_entrypoint_object(ufromfpxf16) add_math_entrypoint_object(ufromfpxf128) diff --git a/libc/src/math/fromfpf16.h b/libc/src/math/fromfpf16.h new file mode 100644 index 0000000000000..6e37c2de2e016 --- /dev/null +++ b/libc/src/math/fromfpf16.h @@ -0,0 +1,20 @@ +//===-- Implementation header for fromfpf16 ---------------------*- 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_SRC_MATH_FROMFPF16_H +#define LLVM_LIBC_SRC_MATH_FROMFPF16_H + +#include "src/__support/macros/properties/types.h" + +namespace LIBC_NAMESPACE { + +float16 fromfpf16(float16 x, int rnd, unsigned int width); + +} // namespace LIBC_NAMESPACE + +#endif // LLVM_LIBC_SRC_MATH_FROMFPF16_H diff --git a/libc/src/math/fromfpxf16.h b/libc/src/math/fromfpxf16.h new file mode 100644 index 0000000000000..f53afbcf3ffdf --- /dev/null +++ b/libc/src/math/fromfpxf16.h @@ -0,0 +1,20 @@ +//===-- Implementation header for fromfpxf16 --------------------*- 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_SRC_MATH_FROMFPXF16_H +#define LLVM_LIBC_SRC_MATH_FROMFPXF16_H + +#include "src/__support/macros/properties/types.h" + +namespace LIBC_NAMESPACE { + +float16 fromfpxf16(float16 x, int rnd, unsigned int width); + +} // namespace LIBC_NAMESPACE + +#endif // LLVM_LIBC_SRC_MATH_FROMFPXF16_H diff --git a/libc/src/math/generic/CMakeLists.txt b/libc/src/math/generic/CMakeLists.txt index 4fb744254cfdc..829d5ddc42fe6 100644 --- a/libc/src/math/generic/CMakeLists.txt +++ b/libc/src/math/generic/CMakeLists.txt @@ -2686,7 +2686,7 @@ add_entrypoint_object( HDRS ../fromfp.h DEPENDS - libc.src.__support.FPUtil.nearest_integer + libc.src.__support.FPUtil.nearest_integer_operations COMPILE_OPTIONS -O3 ) @@ -2698,7 +2698,7 @@ add_entrypoint_object( HDRS ../fromfpf.h DEPENDS - libc.src.__support.FPUtil.nearest_integer + libc.src.__support.FPUtil.nearest_integer_operations COMPILE_OPTIONS -O3 ) @@ -2710,7 +2710,20 @@ add_entrypoint_object( HDRS ../fromfpl.h DEPENDS - libc.src.__support.FPUtil.nearest_integer + libc.src.__support.FPUtil.nearest_integer_operations + COMPILE_OPTIONS + -O3 +) + +add_entrypoint_object( + fromfpf16 + SRCS + fromfpf16.cpp + HDRS + ../fromfpf16.h + DEPENDS + libc.src.__support.macros.properties.types + libc.src.__support.FPUtil.nearest_integer_operations COMPILE_OPTIONS -O3 ) @@ -2723,7 +2736,7 @@ add_entrypoint_object( ../fromfpf128.h DEPENDS libc.src.__support.macros.properties.types - libc.src.__support.FPUtil.nearest_integer + libc.src.__support.FPUtil.nearest_integer_operations COMPILE_OPTIONS -O3 ) @@ -2735,7 +2748,7 @@ add_entrypoint_object( HDRS ../fromfpx.h DEPENDS - libc.src.__support.FPUtil.nearest_integer + libc.src.__support.FPUtil.nearest_integer_operations COMPILE_OPTIONS -O3 ) @@ -2747,7 +2760,7 @@ add_entrypoint_object( HDRS ../fromfpxf.h DEPENDS - libc.src.__support.FPUtil.nearest_integer + libc.src.__support.FPUtil.nearest_integer_operations COMPILE_OPTIONS -O3 ) @@ -2759,7 +2772,20 @@ add_entrypoint_object( HDRS ../fromfpxl.h DEPENDS - libc.src.__support.FPUtil.nearest_integer + libc.src.__support.FPUtil.nearest_integer_operations + COMPILE_OPTIONS + -O3 +) + +add_entrypoint_object( + fromfpxf16 + SRCS + fromfpxf16.cpp + HDRS + ../fromfpxf16.h + DEPENDS + libc.src.__support.macros.properties.types + libc.src.__support.FPUtil.nearest_integer_operations COMPILE_OPTIONS -O3 ) @@ -2772,7 +2798,7 @@ add_entrypoint_object( ../fromfpxf128.h DEPENDS libc.src.__support.macros.properties.types - libc.src.__support.FPUtil.nearest_integer + libc.src.__support.FPUtil.nearest_integer_operations COMPILE_OPTIONS -O3 ) @@ -2784,7 +2810,7 @@ add_entrypoint_object( HDRS ../ufromfp.h DEPENDS - libc.src.__support.FPUtil.nearest_integer + libc.src.__support.FPUtil.nearest_integer_operations COMPILE_OPTIONS -O3 ) @@ -2796,7 +2822,7 @@ add_entrypoint_object( HDRS ../ufromfpf.h DEPENDS - libc.src.__support.FPUtil.nearest_integer + libc.src.__support.FPUtil.nearest_integer_operations COMPILE_OPTIONS -O3 ) @@ -2808,7 +2834,20 @@ add_entrypoint_object( HDRS ../ufromfpl.h DEPENDS - libc.src.__support.FPUtil.nearest_integer + libc.src.__support.FPUtil.nearest_integer_operations + COMPILE_OPTIONS + -O3 +) + +add_entrypoint_object( + ufromfpf16 + SRCS + ufromfpf16.cpp + HDRS + ../ufromfpf16.h + DEPENDS + libc.src.__support.macros.properties.types + libc.src.__support.FPUtil.nearest_integer_operations COMPILE_OPTIONS -O3 ) @@ -2821,7 +2860,7 @@ add_entrypoint_object( ../ufromfpf128.h DEPENDS libc.src.__support.macros.properties.types - libc.src.__support.FPUtil.nearest_integer + libc.src.__support.FPUtil.nearest_integer_operations COMPILE_OPTIONS -O3 ) @@ -2833,7 +2872,7 @@ add_entrypoint_object( HDRS ../ufromfpx.h DEPENDS - libc.src.__support.FPUtil.nearest_integer + libc.src.__support.FPUtil.nearest_integer_operations COMPILE_OPTIONS -O3 ) @@ -2845,7 +2884,7 @@ add_entrypoint_object( HDRS ../ufromfpxf.h DEPENDS - libc.src.__support.FPUtil.nearest_integer + libc.src.__support.FPUtil.nearest_integer_operations COMPILE_OPTIONS -O3 ) @@ -2857,7 +2896,20 @@ add_entrypoint_object( HDRS ../ufromfpxl.h DEPENDS - libc.src.__support.FPUtil.nearest_integer + libc.src.__support.FPUtil.nearest_integer_operations + COMPILE_OPTIONS + -O3 +) + +add_entrypoint_object( + ufromfpxf16 + SRCS + ufromfpxf16.cpp + HDRS + ../ufromfpxf16.h + DEPENDS + libc.src.__support.macros.properties.types + libc.src.__support.FPUtil.nearest_integer_operations COMPILE_OPTIONS -O3 ) @@ -2870,7 +2922,7 @@ add_entrypoint_object( ../ufromfpxf128.h DEPENDS libc.src.__support.macros.properties.types - libc.src.__support.FPUtil.nearest_integer + libc.src.__support.FPUtil.nearest_integer_operations COMPILE_OPTIONS -O3 ) diff --git a/libc/src/math/generic/fromfpf16.cpp b/libc/src/math/generic/fromfpf16.cpp new file mode 100644 index 0000000000000..36040049fe3aa --- /dev/null +++ b/libc/src/math/generic/fromfpf16.cpp @@ -0,0 +1,20 @@ +//===-- Implementation of fromfpf16 function ------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +#include "src/math/fromfpf16.h" +#include "src/__support/FPUtil/NearestIntegerOperations.h" +#include "src/__support/common.h" + +namespace LIBC_NAMESPACE { + +LLVM_LIBC_FUNCTION(float16, fromfpf16, + (float16 x, int rnd, unsigned int width)) { + return fputil::fromfp(x, rnd, width); +} + +} // namespace LIBC_NAMESPACE diff --git a/libc/src/math/generic/fromfpxf16.cpp b/libc/src/math/generic/fromfpxf16.cpp new file mode 100644 index 0000000000000..0854cb6613513 --- /dev/null +++ b/libc/src/math/generic/fromfpxf16.cpp @@ -0,0 +1,20 @@ +//===-- Implementation of fromfpxf16 function -----------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +#include "src/math/fromfpxf16.h" +#include "src/__support/FPUtil/NearestIntegerOperations.h" +#include "src/__support/common.h" + +namespace LIBC_NAMESPACE { + +LLVM_LIBC_FUNCTION(float16, fromfpxf16, + (float16 x, int rnd, unsigned int width)) { + return fputil::fromfpx(x, rnd, width); +} + +} // namespace LIBC_NAMESPACE diff --git a/libc/src/math/generic/ufromfpf16.cpp b/libc/src/math/generic/ufromfpf16.cpp new file mode 100644 index 0000000000000..bf041f463115a --- /dev/null +++ b/libc/src/math/generic/ufromfpf16.cpp @@ -0,0 +1,20 @@ +//===-- Implementation of ufromfpf16 function -----------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +#include "src/math/ufromfpf16.h" +#include "src/__support/FPUtil/NearestIntegerOperations.h" +#include "src/__support/common.h" + +namespace LIBC_NAMESPACE { + +LLVM_LIBC_FUNCTION(float16, ufromfpf16, + (float16 x, int rnd, unsigned int width)) { + return fputil::fromfp(x, rnd, width); +} + +} // namespace LIBC_NAMESPACE diff --git a/libc/src/math/generic/ufromfpxf16.cpp b/libc/src/math/generic/ufromfpxf16.cpp new file mode 100644 index 0000000000000..aeb7aa8d76b63 --- /dev/null +++ b/libc/src/math/generic/ufromfpxf16.cpp @@ -0,0 +1,20 @@ +//===-- Implementation of ufromfpxf16 function ----------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +#include "src/math/ufromfpxf16.h" +#include "src/__support/FPUtil/NearestIntegerOperations.h" +#include "src/__support/common.h" + +namespace LIBC_NAMESPACE { + +LLVM_LIBC_FUNCTION(float16, ufromfpxf16, + (float16 x, int rnd, unsigned int width)) { + return fputil::fromfpx(x, rnd, width); +} + +} // namespace LIBC_NAMESPACE diff --git a/libc/src/math/ufromfpf16.h b/libc/src/math/ufromfpf16.h new file mode 100644 index 0000000000000..07a38bd232fc7 --- /dev/null +++ b/libc/src/math/ufromfpf16.h @@ -0,0 +1,20 @@ +//===-- Implementation header for ufromfpf16 --------------------*- 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_SRC_MATH_UFROMFPF16_H +#define LLVM_LIBC_SRC_MATH_UFROMFPF16_H + +#include "src/__support/macros/properties/types.h" + +namespace LIBC_NAMESPACE { + +float16 ufromfpf16(float16 x, int rnd, unsigned int width); + +} // namespace LIBC_NAMESPACE + +#endif // LLVM_LIBC_SRC_MATH_UFROMFPF16_H diff --git a/libc/src/math/ufromfpxf16.h b/libc/src/math/ufromfpxf16.h new file mode 100644 index 0000000000000..988092bde319c --- /dev/null +++ b/libc/src/math/ufromfpxf16.h @@ -0,0 +1,20 @@ +//===-- Implementation header for ufromfpxf16 -------------------*- 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_SRC_MATH_UFROMFPXF16_H +#define LLVM_LIBC_SRC_MATH_UFROMFPXF16_H + +#include "src/__support/macros/properties/types.h" + +namespace LIBC_NAMESPACE { + +float16 ufromfpxf16(float16 x, int rnd, unsigned int width); + +} // namespace LIBC_NAMESPACE + +#endif // LLVM_LIBC_SRC_MATH_UFROMFPXF16_H diff --git a/libc/test/src/math/smoke/CMakeLists.txt b/libc/test/src/math/smoke/CMakeLists.txt index 8f4eb37e665cb..28255d59f39c2 100644 --- a/libc/test/src/math/smoke/CMakeLists.txt +++ b/libc/test/src/math/smoke/CMakeLists.txt @@ -1106,6 +1106,18 @@ add_fp_unittest( libc.src.math.fromfpl ) +add_fp_unittest( + fromfpf16_test + SUITE + libc-math-smoke-tests + SRCS + fromfpf16_test.cpp + HDRS + FromfpTest.h + DEPENDS + libc.src.math.fromfpf16 +) + add_fp_unittest( fromfpf128_test SUITE @@ -1154,6 +1166,18 @@ add_fp_unittest( libc.src.math.fromfpxl ) +add_fp_unittest( + fromfpxf16_test + SUITE + libc-math-smoke-tests + SRCS + fromfpxf16_test.cpp + HDRS + FromfpxTest.h + DEPENDS + libc.src.math.fromfpxf16 +) + add_fp_unittest( fromfpxf128_test SUITE @@ -1202,6 +1226,18 @@ add_fp_unittest( libc.src.math.ufromfpl ) +add_fp_unittest( + ufromfpf16_test + SUITE + libc-math-smoke-tests + SRCS + ufromfpf16_test.cpp + HDRS + UfromfpTest.h + DEPENDS + libc.src.math.ufromfpf16 +) + add_fp_unittest( ufromfpf128_test SUITE @@ -1250,6 +1286,18 @@ add_fp_unittest( libc.src.math.ufromfpxl ) +add_fp_unittest( + ufromfpxf16_test + SUITE + libc-math-smoke-tests + SRCS + ufromfpxf16_test.cpp + HDRS + UfromfpxTest.h + DEPENDS + libc.src.math.ufromfpxf16 +) + add_fp_unittest( ufromfpxf128_test SUITE diff --git a/libc/test/src/math/smoke/FromfpTest.h b/libc/test/src/math/smoke/FromfpTest.h index f19f21ce47e7f..56205187d731c 100644 --- a/libc/test/src/math/smoke/FromfpTest.h +++ b/libc/test/src/math/smoke/FromfpTest.h @@ -85,10 +85,10 @@ class FromfpTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { EXPECT_FP_EQ(T(-10.0), func(T(-10.32), FP_INT_UPWARD, 5U)); EXPECT_FP_EQ(T(11.0), func(T(10.65), FP_INT_UPWARD, 5U)); EXPECT_FP_EQ(T(-10.0), func(T(-10.65), FP_INT_UPWARD, 5U)); - EXPECT_FP_EQ(T(1235.0), func(T(1234.38), FP_INT_UPWARD, 12U)); - EXPECT_FP_EQ(T(-1234.0), func(T(-1234.38), FP_INT_UPWARD, 12U)); - EXPECT_FP_EQ(T(1235.0), func(T(1234.96), FP_INT_UPWARD, 12U)); - EXPECT_FP_EQ(T(-1234.0), func(T(-1234.96), FP_INT_UPWARD, 12U)); + EXPECT_FP_EQ(T(124.0), func(T(123.38), FP_INT_UPWARD, 8U)); + EXPECT_FP_EQ(T(-123.0), func(T(-123.38), FP_INT_UPWARD, 8U)); + EXPECT_FP_EQ(T(124.0), func(T(123.96), FP_INT_UPWARD, 8U)); + EXPECT_FP_EQ(T(-123.0), func(T(-123.96), FP_INT_UPWARD, 8U)); } void testFractionsUpwardOutsideRange(FromfpFunc func) { @@ -112,13 +112,13 @@ class FromfpTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.65), FP_INT_UPWARD, 4U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1234.38), FP_INT_UPWARD, 11U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.38), FP_INT_UPWARD, 7U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1234.38), FP_INT_UPWARD, 11U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.38), FP_INT_UPWARD, 7U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1234.96), FP_INT_UPWARD, 11U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.96), FP_INT_UPWARD, 7U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1234.96), FP_INT_UPWARD, 11U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.96), FP_INT_UPWARD, 7U), FE_INVALID); } @@ -139,10 +139,10 @@ class FromfpTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { EXPECT_FP_EQ(T(-11.0), func(T(-10.32), FP_INT_DOWNWARD, 5U)); EXPECT_FP_EQ(T(10.0), func(T(10.65), FP_INT_DOWNWARD, 5U)); EXPECT_FP_EQ(T(-11.0), func(T(-10.65), FP_INT_DOWNWARD, 5U)); - EXPECT_FP_EQ(T(1234.0), func(T(1234.38), FP_INT_DOWNWARD, 12U)); - EXPECT_FP_EQ(T(-1235.0), func(T(-1234.38), FP_INT_DOWNWARD, 12U)); - EXPECT_FP_EQ(T(1234.0), func(T(1234.96), FP_INT_DOWNWARD, 12U)); - EXPECT_FP_EQ(T(-1235.0), func(T(-1234.96), FP_INT_DOWNWARD, 12U)); + EXPECT_FP_EQ(T(123.0), func(T(123.38), FP_INT_DOWNWARD, 8U)); + EXPECT_FP_EQ(T(-124.0), func(T(-123.38), FP_INT_DOWNWARD, 8U)); + EXPECT_FP_EQ(T(123.0), func(T(123.96), FP_INT_DOWNWARD, 8U)); + EXPECT_FP_EQ(T(-124.0), func(T(-123.96), FP_INT_DOWNWARD, 8U)); } void testFractionsDownwardOutsideRange(FromfpFunc func) { @@ -166,13 +166,13 @@ class FromfpTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.65), FP_INT_DOWNWARD, 4U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1234.38), FP_INT_DOWNWARD, 11U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.38), FP_INT_DOWNWARD, 7U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1234.38), FP_INT_DOWNWARD, 11U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.38), FP_INT_DOWNWARD, 7U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1234.96), FP_INT_DOWNWARD, 11U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.96), FP_INT_DOWNWARD, 7U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1234.96), FP_INT_DOWNWARD, 11U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.96), FP_INT_DOWNWARD, 7U), FE_INVALID); } @@ -193,10 +193,10 @@ class FromfpTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { EXPECT_FP_EQ(T(-10.0), func(T(-10.32), FP_INT_TOWARDZERO, 5U)); EXPECT_FP_EQ(T(10.0), func(T(10.65), FP_INT_TOWARDZERO, 5U)); EXPECT_FP_EQ(T(-10.0), func(T(-10.65), FP_INT_TOWARDZERO, 5U)); - EXPECT_FP_EQ(T(1234.0), func(T(1234.38), FP_INT_TOWARDZERO, 12U)); - EXPECT_FP_EQ(T(-1234.0), func(T(-1234.38), FP_INT_TOWARDZERO, 12U)); - EXPECT_FP_EQ(T(1234.0), func(T(1234.96), FP_INT_TOWARDZERO, 12U)); - EXPECT_FP_EQ(T(-1234.0), func(T(-1234.96), FP_INT_TOWARDZERO, 12U)); + EXPECT_FP_EQ(T(123.0), func(T(123.38), FP_INT_TOWARDZERO, 8U)); + EXPECT_FP_EQ(T(-123.0), func(T(-123.38), FP_INT_TOWARDZERO, 8U)); + EXPECT_FP_EQ(T(123.0), func(T(123.96), FP_INT_TOWARDZERO, 8U)); + EXPECT_FP_EQ(T(-123.0), func(T(-123.96), FP_INT_TOWARDZERO, 8U)); } void testFractionsTowardZeroOutsideRange(FromfpFunc func) { @@ -214,13 +214,13 @@ class FromfpTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.65), FP_INT_TOWARDZERO, 4U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1234.38), FP_INT_TOWARDZERO, 11U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.38), FP_INT_TOWARDZERO, 7U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1234.38), FP_INT_TOWARDZERO, 11U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.38), FP_INT_TOWARDZERO, 7U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1234.96), FP_INT_TOWARDZERO, 11U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.96), FP_INT_TOWARDZERO, 7U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1234.96), FP_INT_TOWARDZERO, 11U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.96), FP_INT_TOWARDZERO, 7U), FE_INVALID); } @@ -241,10 +241,10 @@ class FromfpTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { EXPECT_FP_EQ(T(-10.0), func(T(-10.32), FP_INT_TONEARESTFROMZERO, 5U)); EXPECT_FP_EQ(T(11.0), func(T(10.65), FP_INT_TONEARESTFROMZERO, 5U)); EXPECT_FP_EQ(T(-11.0), func(T(-10.65), FP_INT_TONEARESTFROMZERO, 5U)); - EXPECT_FP_EQ(T(1234.0), func(T(1234.38), FP_INT_TONEARESTFROMZERO, 12U)); - EXPECT_FP_EQ(T(-1234.0), func(T(-1234.38), FP_INT_TONEARESTFROMZERO, 12U)); - EXPECT_FP_EQ(T(1235.0), func(T(1234.96), FP_INT_TONEARESTFROMZERO, 12U)); - EXPECT_FP_EQ(T(-1235.0), func(T(-1234.96), FP_INT_TONEARESTFROMZERO, 12U)); + EXPECT_FP_EQ(T(123.0), func(T(123.38), FP_INT_TONEARESTFROMZERO, 8U)); + EXPECT_FP_EQ(T(-123.0), func(T(-123.38), FP_INT_TONEARESTFROMZERO, 8U)); + EXPECT_FP_EQ(T(124.0), func(T(123.96), FP_INT_TONEARESTFROMZERO, 8U)); + EXPECT_FP_EQ(T(-124.0), func(T(-123.96), FP_INT_TONEARESTFROMZERO, 8U)); } void testFractionsToNearestFromZeroOutsideRange(FromfpFunc func) { @@ -271,13 +271,13 @@ class FromfpTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { EXPECT_FP_EQ_WITH_EXCEPTION( aNaN, func(T(-10.65), FP_INT_TONEARESTFROMZERO, 4U), FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION( - aNaN, func(T(1234.38), FP_INT_TONEARESTFROMZERO, 11U), FE_INVALID); + aNaN, func(T(123.38), FP_INT_TONEARESTFROMZERO, 7U), FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION( - aNaN, func(T(-1234.38), FP_INT_TONEARESTFROMZERO, 11U), FE_INVALID); + aNaN, func(T(-123.38), FP_INT_TONEARESTFROMZERO, 7U), FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION( - aNaN, func(T(1234.96), FP_INT_TONEARESTFROMZERO, 11U), FE_INVALID); + aNaN, func(T(123.96), FP_INT_TONEARESTFROMZERO, 7U), FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION( - aNaN, func(T(-1234.96), FP_INT_TONEARESTFROMZERO, 11U), FE_INVALID); + aNaN, func(T(-123.96), FP_INT_TONEARESTFROMZERO, 7U), FE_INVALID); } void testFractionsToNearestWithinRange(FromfpFunc func) { @@ -297,10 +297,10 @@ class FromfpTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { EXPECT_FP_EQ(T(-10.0), func(T(-10.32), FP_INT_TONEAREST, 5U)); EXPECT_FP_EQ(T(11.0), func(T(10.65), FP_INT_TONEAREST, 5U)); EXPECT_FP_EQ(T(-11.0), func(T(-10.65), FP_INT_TONEAREST, 5U)); - EXPECT_FP_EQ(T(1234.0), func(T(1234.38), FP_INT_TONEAREST, 12U)); - EXPECT_FP_EQ(T(-1234.0), func(T(-1234.38), FP_INT_TONEAREST, 12U)); - EXPECT_FP_EQ(T(1235.0), func(T(1234.96), FP_INT_TONEAREST, 12U)); - EXPECT_FP_EQ(T(-1235.0), func(T(-1234.96), FP_INT_TONEAREST, 12U)); + EXPECT_FP_EQ(T(123.0), func(T(123.38), FP_INT_TONEAREST, 8U)); + EXPECT_FP_EQ(T(-123.0), func(T(-123.38), FP_INT_TONEAREST, 8U)); + EXPECT_FP_EQ(T(124.0), func(T(123.96), FP_INT_TONEAREST, 8U)); + EXPECT_FP_EQ(T(-124.0), func(T(-123.96), FP_INT_TONEAREST, 8U)); EXPECT_FP_EQ(T(2.0), func(T(2.3), FP_INT_TONEAREST, 3U)); EXPECT_FP_EQ(T(-2.0), func(T(-2.3), FP_INT_TONEAREST, 2U)); @@ -337,13 +337,13 @@ class FromfpTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.65), FP_INT_TONEAREST, 4U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1234.38), FP_INT_TONEAREST, 11U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.38), FP_INT_TONEAREST, 7U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1234.38), FP_INT_TONEAREST, 11U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.38), FP_INT_TONEAREST, 7U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1234.96), FP_INT_TONEAREST, 11U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.96), FP_INT_TONEAREST, 7U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1234.96), FP_INT_TONEAREST, 11U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.96), FP_INT_TONEAREST, 7U), FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(2.3), FP_INT_TONEAREST, 2U), @@ -391,14 +391,14 @@ class FromfpTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { EXPECT_FP_EQ(T(11.0), func(T(10.65), UNKNOWN_MATH_ROUNDING_DIRECTION, 5U)); EXPECT_FP_EQ(T(-11.0), func(T(-10.65), UNKNOWN_MATH_ROUNDING_DIRECTION, 5U)); - EXPECT_FP_EQ(T(1234.0), - func(T(1234.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 12U)); - EXPECT_FP_EQ(T(-1234.0), - func(T(-1234.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 12U)); - EXPECT_FP_EQ(T(1235.0), - func(T(1234.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 12U)); - EXPECT_FP_EQ(T(-1235.0), - func(T(-1234.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 12U)); + EXPECT_FP_EQ(T(123.0), + func(T(123.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 8U)); + EXPECT_FP_EQ(T(-123.0), + func(T(-123.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 8U)); + EXPECT_FP_EQ(T(124.0), + func(T(123.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 8U)); + EXPECT_FP_EQ(T(-124.0), + func(T(-123.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 8U)); EXPECT_FP_EQ(T(2.0), func(T(2.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U)); EXPECT_FP_EQ(T(-2.0), func(T(-2.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U)); @@ -436,16 +436,14 @@ class FromfpTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { EXPECT_FP_EQ_WITH_EXCEPTION( aNaN, func(T(-10.65), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U), FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION( - aNaN, func(T(1234.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 11U), - FE_INVALID); + aNaN, func(T(123.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 7U), FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION( - aNaN, func(T(-1234.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 11U), + aNaN, func(T(-123.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 7U), FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION( - aNaN, func(T(1234.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 11U), - FE_INVALID); + aNaN, func(T(123.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 7U), FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION( - aNaN, func(T(-1234.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 11U), + aNaN, func(T(-123.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 7U), FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION( diff --git a/libc/test/src/math/smoke/FromfpxTest.h b/libc/test/src/math/smoke/FromfpxTest.h index 4aa47a68bb178..a175a66e21b64 100644 --- a/libc/test/src/math/smoke/FromfpxTest.h +++ b/libc/test/src/math/smoke/FromfpxTest.h @@ -101,14 +101,14 @@ class FromfpxTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { FE_INEXACT); EXPECT_FP_EQ_WITH_EXCEPTION(T(-10.0), func(T(-10.65), FP_INT_UPWARD, 5U), FE_INEXACT); - EXPECT_FP_EQ_WITH_EXCEPTION(T(1235.0), func(T(1234.38), FP_INT_UPWARD, 12U), + EXPECT_FP_EQ_WITH_EXCEPTION(T(124.0), func(T(123.38), FP_INT_UPWARD, 8U), FE_INEXACT); - EXPECT_FP_EQ_WITH_EXCEPTION( - T(-1234.0), func(T(-1234.38), FP_INT_UPWARD, 12U), FE_INEXACT); - EXPECT_FP_EQ_WITH_EXCEPTION(T(1235.0), func(T(1234.96), FP_INT_UPWARD, 12U), + EXPECT_FP_EQ_WITH_EXCEPTION(T(-123.0), func(T(-123.38), FP_INT_UPWARD, 8U), + FE_INEXACT); + EXPECT_FP_EQ_WITH_EXCEPTION(T(124.0), func(T(123.96), FP_INT_UPWARD, 8U), + FE_INEXACT); + EXPECT_FP_EQ_WITH_EXCEPTION(T(-123.0), func(T(-123.96), FP_INT_UPWARD, 8U), FE_INEXACT); - EXPECT_FP_EQ_WITH_EXCEPTION( - T(-1234.0), func(T(-1234.96), FP_INT_UPWARD, 12U), FE_INEXACT); } void testFractionsUpwardOutsideRange(FromfpxFunc func) { @@ -132,13 +132,13 @@ class FromfpxTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.65), FP_INT_UPWARD, 4U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1234.38), FP_INT_UPWARD, 11U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.38), FP_INT_UPWARD, 7U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1234.38), FP_INT_UPWARD, 11U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.38), FP_INT_UPWARD, 7U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1234.96), FP_INT_UPWARD, 11U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.96), FP_INT_UPWARD, 7U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1234.96), FP_INT_UPWARD, 11U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.96), FP_INT_UPWARD, 7U), FE_INVALID); } @@ -175,14 +175,14 @@ class FromfpxTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { FE_INEXACT); EXPECT_FP_EQ_WITH_EXCEPTION(T(-11.0), func(T(-10.65), FP_INT_DOWNWARD, 5U), FE_INEXACT); + EXPECT_FP_EQ_WITH_EXCEPTION(T(123.0), func(T(123.38), FP_INT_DOWNWARD, 8U), + FE_INEXACT); EXPECT_FP_EQ_WITH_EXCEPTION( - T(1234.0), func(T(1234.38), FP_INT_DOWNWARD, 12U), FE_INEXACT); - EXPECT_FP_EQ_WITH_EXCEPTION( - T(-1235.0), func(T(-1234.38), FP_INT_DOWNWARD, 12U), FE_INEXACT); - EXPECT_FP_EQ_WITH_EXCEPTION( - T(1234.0), func(T(1234.96), FP_INT_DOWNWARD, 12U), FE_INEXACT); + T(-124.0), func(T(-123.38), FP_INT_DOWNWARD, 8U), FE_INEXACT); + EXPECT_FP_EQ_WITH_EXCEPTION(T(123.0), func(T(123.96), FP_INT_DOWNWARD, 8U), + FE_INEXACT); EXPECT_FP_EQ_WITH_EXCEPTION( - T(-1235.0), func(T(-1234.96), FP_INT_DOWNWARD, 12U), FE_INEXACT); + T(-124.0), func(T(-123.96), FP_INT_DOWNWARD, 8U), FE_INEXACT); } void testFractionsDownwardOutsideRange(FromfpxFunc func) { @@ -206,13 +206,13 @@ class FromfpxTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.65), FP_INT_DOWNWARD, 4U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1234.38), FP_INT_DOWNWARD, 11U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.38), FP_INT_DOWNWARD, 7U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1234.38), FP_INT_DOWNWARD, 11U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.38), FP_INT_DOWNWARD, 7U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1234.96), FP_INT_DOWNWARD, 11U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.96), FP_INT_DOWNWARD, 7U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1234.96), FP_INT_DOWNWARD, 11U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.96), FP_INT_DOWNWARD, 7U), FE_INVALID); } @@ -250,13 +250,13 @@ class FromfpxTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { EXPECT_FP_EQ_WITH_EXCEPTION( T(-10.0), func(T(-10.65), FP_INT_TOWARDZERO, 5U), FE_INEXACT); EXPECT_FP_EQ_WITH_EXCEPTION( - T(1234.0), func(T(1234.38), FP_INT_TOWARDZERO, 12U), FE_INEXACT); + T(123.0), func(T(123.38), FP_INT_TOWARDZERO, 8U), FE_INEXACT); EXPECT_FP_EQ_WITH_EXCEPTION( - T(-1234.0), func(T(-1234.38), FP_INT_TOWARDZERO, 12U), FE_INEXACT); + T(-123.0), func(T(-123.38), FP_INT_TOWARDZERO, 8U), FE_INEXACT); EXPECT_FP_EQ_WITH_EXCEPTION( - T(1234.0), func(T(1234.96), FP_INT_TOWARDZERO, 12U), FE_INEXACT); + T(123.0), func(T(123.96), FP_INT_TOWARDZERO, 8U), FE_INEXACT); EXPECT_FP_EQ_WITH_EXCEPTION( - T(-1234.0), func(T(-1234.96), FP_INT_TOWARDZERO, 12U), FE_INEXACT); + T(-123.0), func(T(-123.96), FP_INT_TOWARDZERO, 8U), FE_INEXACT); } void testFractionsTowardZeroOutsideRange(FromfpxFunc func) { @@ -274,13 +274,13 @@ class FromfpxTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.65), FP_INT_TOWARDZERO, 4U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1234.38), FP_INT_TOWARDZERO, 11U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.38), FP_INT_TOWARDZERO, 7U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1234.38), FP_INT_TOWARDZERO, 11U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.38), FP_INT_TOWARDZERO, 7U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1234.96), FP_INT_TOWARDZERO, 11U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.96), FP_INT_TOWARDZERO, 7U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1234.96), FP_INT_TOWARDZERO, 11U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.96), FP_INT_TOWARDZERO, 7U), FE_INVALID); } @@ -318,15 +318,13 @@ class FromfpxTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { EXPECT_FP_EQ_WITH_EXCEPTION( T(-11.0), func(T(-10.65), FP_INT_TONEARESTFROMZERO, 5U), FE_INEXACT); EXPECT_FP_EQ_WITH_EXCEPTION( - T(1234.0), func(T(1234.38), FP_INT_TONEARESTFROMZERO, 12U), FE_INEXACT); + T(123.0), func(T(123.38), FP_INT_TONEARESTFROMZERO, 8U), FE_INEXACT); EXPECT_FP_EQ_WITH_EXCEPTION( - T(-1234.0), func(T(-1234.38), FP_INT_TONEARESTFROMZERO, 12U), - FE_INEXACT); + T(-123.0), func(T(-123.38), FP_INT_TONEARESTFROMZERO, 8U), FE_INEXACT); EXPECT_FP_EQ_WITH_EXCEPTION( - T(1235.0), func(T(1234.96), FP_INT_TONEARESTFROMZERO, 12U), FE_INEXACT); + T(124.0), func(T(123.96), FP_INT_TONEARESTFROMZERO, 8U), FE_INEXACT); EXPECT_FP_EQ_WITH_EXCEPTION( - T(-1235.0), func(T(-1234.96), FP_INT_TONEARESTFROMZERO, 12U), - FE_INEXACT); + T(-124.0), func(T(-123.96), FP_INT_TONEARESTFROMZERO, 8U), FE_INEXACT); } void testFractionsToNearestFromZeroOutsideRange(FromfpxFunc func) { @@ -353,13 +351,13 @@ class FromfpxTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { EXPECT_FP_EQ_WITH_EXCEPTION( aNaN, func(T(-10.65), FP_INT_TONEARESTFROMZERO, 4U), FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION( - aNaN, func(T(1234.38), FP_INT_TONEARESTFROMZERO, 11U), FE_INVALID); + aNaN, func(T(123.38), FP_INT_TONEARESTFROMZERO, 7U), FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION( - aNaN, func(T(-1234.38), FP_INT_TONEARESTFROMZERO, 11U), FE_INVALID); + aNaN, func(T(-123.38), FP_INT_TONEARESTFROMZERO, 7U), FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION( - aNaN, func(T(1234.96), FP_INT_TONEARESTFROMZERO, 11U), FE_INVALID); + aNaN, func(T(123.96), FP_INT_TONEARESTFROMZERO, 7U), FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION( - aNaN, func(T(-1234.96), FP_INT_TONEARESTFROMZERO, 11U), FE_INVALID); + aNaN, func(T(-123.96), FP_INT_TONEARESTFROMZERO, 7U), FE_INVALID); } void testFractionsToNearestWithinRange(FromfpxFunc func) { @@ -395,14 +393,14 @@ class FromfpxTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { FE_INEXACT); EXPECT_FP_EQ_WITH_EXCEPTION(T(-11.0), func(T(-10.65), FP_INT_TONEAREST, 5U), FE_INEXACT); + EXPECT_FP_EQ_WITH_EXCEPTION(T(123.0), func(T(123.38), FP_INT_TONEAREST, 8U), + FE_INEXACT); EXPECT_FP_EQ_WITH_EXCEPTION( - T(1234.0), func(T(1234.38), FP_INT_TONEAREST, 12U), FE_INEXACT); - EXPECT_FP_EQ_WITH_EXCEPTION( - T(-1234.0), func(T(-1234.38), FP_INT_TONEAREST, 12U), FE_INEXACT); - EXPECT_FP_EQ_WITH_EXCEPTION( - T(1235.0), func(T(1234.96), FP_INT_TONEAREST, 12U), FE_INEXACT); + T(-123.0), func(T(-123.38), FP_INT_TONEAREST, 8U), FE_INEXACT); + EXPECT_FP_EQ_WITH_EXCEPTION(T(124.0), func(T(123.96), FP_INT_TONEAREST, 8U), + FE_INEXACT); EXPECT_FP_EQ_WITH_EXCEPTION( - T(-1235.0), func(T(-1234.96), FP_INT_TONEAREST, 12U), FE_INEXACT); + T(-124.0), func(T(-123.96), FP_INT_TONEAREST, 8U), FE_INEXACT); EXPECT_FP_EQ_WITH_EXCEPTION(T(2.0), func(T(2.3), FP_INT_TONEAREST, 3U), FE_INEXACT); @@ -451,13 +449,13 @@ class FromfpxTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.65), FP_INT_TONEAREST, 4U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1234.38), FP_INT_TONEAREST, 11U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.38), FP_INT_TONEAREST, 7U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1234.38), FP_INT_TONEAREST, 11U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.38), FP_INT_TONEAREST, 7U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1234.96), FP_INT_TONEAREST, 11U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.96), FP_INT_TONEAREST, 7U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1234.96), FP_INT_TONEAREST, 11U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.96), FP_INT_TONEAREST, 7U), FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(2.3), FP_INT_TONEAREST, 2U), @@ -532,16 +530,16 @@ class FromfpxTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { T(-11.0), func(T(-10.65), UNKNOWN_MATH_ROUNDING_DIRECTION, 5U), FE_INEXACT); EXPECT_FP_EQ_WITH_EXCEPTION( - T(1234.0), func(T(1234.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 12U), + T(123.0), func(T(123.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 8U), FE_INEXACT); EXPECT_FP_EQ_WITH_EXCEPTION( - T(-1234.0), func(T(-1234.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 12U), + T(-123.0), func(T(-123.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 8U), FE_INEXACT); EXPECT_FP_EQ_WITH_EXCEPTION( - T(1235.0), func(T(1234.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 12U), + T(124.0), func(T(123.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 8U), FE_INEXACT); EXPECT_FP_EQ_WITH_EXCEPTION( - T(-1235.0), func(T(-1234.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 12U), + T(-124.0), func(T(-123.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 8U), FE_INEXACT); EXPECT_FP_EQ_WITH_EXCEPTION( @@ -598,16 +596,14 @@ class FromfpxTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { EXPECT_FP_EQ_WITH_EXCEPTION( aNaN, func(T(-10.65), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U), FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION( - aNaN, func(T(1234.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 11U), - FE_INVALID); + aNaN, func(T(123.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 7U), FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION( - aNaN, func(T(-1234.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 11U), + aNaN, func(T(-123.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 7U), FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION( - aNaN, func(T(1234.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 11U), - FE_INVALID); + aNaN, func(T(123.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 7U), FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION( - aNaN, func(T(-1234.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 11U), + aNaN, func(T(-123.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 7U), FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION( diff --git a/libc/test/src/math/smoke/UfromfpTest.h b/libc/test/src/math/smoke/UfromfpTest.h index 1c04049ebb4fa..84c9f805193ed 100644 --- a/libc/test/src/math/smoke/UfromfpTest.h +++ b/libc/test/src/math/smoke/UfromfpTest.h @@ -76,8 +76,8 @@ class UfromfpTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { EXPECT_FP_EQ(T(2.0), func(T(1.75), FP_INT_UPWARD, 2U)); EXPECT_FP_EQ(T(11.0), func(T(10.32), FP_INT_UPWARD, 4U)); EXPECT_FP_EQ(T(11.0), func(T(10.65), FP_INT_UPWARD, 4U)); - EXPECT_FP_EQ(T(1235.0), func(T(1234.38), FP_INT_UPWARD, 11U)); - EXPECT_FP_EQ(T(1235.0), func(T(1234.96), FP_INT_UPWARD, 11U)); + EXPECT_FP_EQ(T(124.0), func(T(123.38), FP_INT_UPWARD, 7U)); + EXPECT_FP_EQ(T(124.0), func(T(123.96), FP_INT_UPWARD, 7U)); } void testFractionsUpwardOutsideRange(UfromfpFunc func) { @@ -101,13 +101,13 @@ class UfromfpTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.65), FP_INT_UPWARD, 3U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1234.38), FP_INT_UPWARD, 10U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.38), FP_INT_UPWARD, 6U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1234.38), FP_INT_UPWARD, 32U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.38), FP_INT_UPWARD, 32U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1234.96), FP_INT_UPWARD, 10U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.96), FP_INT_UPWARD, 6U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1234.96), FP_INT_UPWARD, 32U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.96), FP_INT_UPWARD, 32U), FE_INVALID); } @@ -120,8 +120,8 @@ class UfromfpTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { EXPECT_FP_EQ(T(1.0), func(T(1.75), FP_INT_DOWNWARD, 1U)); EXPECT_FP_EQ(T(10.0), func(T(10.32), FP_INT_DOWNWARD, 4U)); EXPECT_FP_EQ(T(10.0), func(T(10.65), FP_INT_DOWNWARD, 4U)); - EXPECT_FP_EQ(T(1234.0), func(T(1234.38), FP_INT_DOWNWARD, 11U)); - EXPECT_FP_EQ(T(1234.0), func(T(1234.96), FP_INT_DOWNWARD, 11U)); + EXPECT_FP_EQ(T(123.0), func(T(123.38), FP_INT_DOWNWARD, 7U)); + EXPECT_FP_EQ(T(123.0), func(T(123.96), FP_INT_DOWNWARD, 7U)); } void testFractionsDownwardOutsideRange(UfromfpFunc func) { @@ -145,13 +145,13 @@ class UfromfpTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.65), FP_INT_DOWNWARD, 32U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1234.38), FP_INT_DOWNWARD, 10U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.38), FP_INT_DOWNWARD, 6U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1234.38), FP_INT_DOWNWARD, 32U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.38), FP_INT_DOWNWARD, 32U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1234.96), FP_INT_DOWNWARD, 10U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.96), FP_INT_DOWNWARD, 6U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1234.96), FP_INT_DOWNWARD, 32U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.96), FP_INT_DOWNWARD, 32U), FE_INVALID); } @@ -167,8 +167,8 @@ class UfromfpTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { EXPECT_FP_EQ(T(1.0), func(T(1.75), FP_INT_TOWARDZERO, 1U)); EXPECT_FP_EQ(T(10.0), func(T(10.32), FP_INT_TOWARDZERO, 4U)); EXPECT_FP_EQ(T(10.0), func(T(10.65), FP_INT_TOWARDZERO, 4U)); - EXPECT_FP_EQ(T(1234.0), func(T(1234.38), FP_INT_TOWARDZERO, 11U)); - EXPECT_FP_EQ(T(1234.0), func(T(1234.96), FP_INT_TOWARDZERO, 11U)); + EXPECT_FP_EQ(T(123.0), func(T(123.38), FP_INT_TOWARDZERO, 7U)); + EXPECT_FP_EQ(T(123.0), func(T(123.96), FP_INT_TOWARDZERO, 7U)); } void testFractionsTowardZeroOutsideRange(UfromfpFunc func) { @@ -186,13 +186,13 @@ class UfromfpTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.65), FP_INT_TOWARDZERO, 32U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1234.38), FP_INT_TOWARDZERO, 10U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.38), FP_INT_TOWARDZERO, 6U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1234.38), FP_INT_TOWARDZERO, 32U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.38), FP_INT_TOWARDZERO, 32U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1234.96), FP_INT_TOWARDZERO, 10U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.96), FP_INT_TOWARDZERO, 6U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1234.96), FP_INT_TOWARDZERO, 32U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.96), FP_INT_TOWARDZERO, 32U), FE_INVALID); } @@ -206,8 +206,8 @@ class UfromfpTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { EXPECT_FP_EQ(T(2.0), func(T(1.75), FP_INT_TONEARESTFROMZERO, 2U)); EXPECT_FP_EQ(T(10.0), func(T(10.32), FP_INT_TONEARESTFROMZERO, 4U)); EXPECT_FP_EQ(T(11.0), func(T(10.65), FP_INT_TONEARESTFROMZERO, 4U)); - EXPECT_FP_EQ(T(1234.0), func(T(1234.38), FP_INT_TONEARESTFROMZERO, 11U)); - EXPECT_FP_EQ(T(1235.0), func(T(1234.96), FP_INT_TONEARESTFROMZERO, 11U)); + EXPECT_FP_EQ(T(123.0), func(T(123.38), FP_INT_TONEARESTFROMZERO, 7U)); + EXPECT_FP_EQ(T(124.0), func(T(123.96), FP_INT_TONEARESTFROMZERO, 7U)); } void testFractionsToNearestFromZeroOutsideRange(UfromfpFunc func) { @@ -234,13 +234,13 @@ class UfromfpTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { EXPECT_FP_EQ_WITH_EXCEPTION( aNaN, func(T(-10.65), FP_INT_TONEARESTFROMZERO, 32U), FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION( - aNaN, func(T(1234.38), FP_INT_TONEARESTFROMZERO, 10U), FE_INVALID); + aNaN, func(T(123.38), FP_INT_TONEARESTFROMZERO, 6U), FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION( - aNaN, func(T(-1234.38), FP_INT_TONEARESTFROMZERO, 32U), FE_INVALID); + aNaN, func(T(-123.38), FP_INT_TONEARESTFROMZERO, 32U), FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION( - aNaN, func(T(1234.96), FP_INT_TONEARESTFROMZERO, 10U), FE_INVALID); + aNaN, func(T(123.96), FP_INT_TONEARESTFROMZERO, 6U), FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION( - aNaN, func(T(-1234.96), FP_INT_TONEARESTFROMZERO, 32U), FE_INVALID); + aNaN, func(T(-123.96), FP_INT_TONEARESTFROMZERO, 32U), FE_INVALID); } void testFractionsToNearestWithinRange(UfromfpFunc func) { @@ -254,8 +254,8 @@ class UfromfpTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { EXPECT_FP_EQ(T(2.0), func(T(1.75), FP_INT_TONEAREST, 2U)); EXPECT_FP_EQ(T(10.0), func(T(10.32), FP_INT_TONEAREST, 4U)); EXPECT_FP_EQ(T(11.0), func(T(10.65), FP_INT_TONEAREST, 4U)); - EXPECT_FP_EQ(T(1234.0), func(T(1234.38), FP_INT_TONEAREST, 11U)); - EXPECT_FP_EQ(T(1235.0), func(T(1234.96), FP_INT_TONEAREST, 11U)); + EXPECT_FP_EQ(T(123.0), func(T(123.38), FP_INT_TONEAREST, 7U)); + EXPECT_FP_EQ(T(124.0), func(T(123.96), FP_INT_TONEAREST, 7U)); EXPECT_FP_EQ(T(2.0), func(T(2.3), FP_INT_TONEAREST, 2U)); EXPECT_FP_EQ(T(2.0), func(T(2.5), FP_INT_TONEAREST, 2U)); @@ -286,13 +286,13 @@ class UfromfpTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.65), FP_INT_TONEAREST, 32U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1234.38), FP_INT_TONEAREST, 10U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.38), FP_INT_TONEAREST, 6U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1234.38), FP_INT_TONEAREST, 32U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.38), FP_INT_TONEAREST, 32U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1234.96), FP_INT_TONEAREST, 10U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.96), FP_INT_TONEAREST, 6U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1234.96), FP_INT_TONEAREST, 32U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.96), FP_INT_TONEAREST, 32U), FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(2.3), FP_INT_TONEAREST, 1U), @@ -332,10 +332,10 @@ class UfromfpTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { EXPECT_FP_EQ(T(2.0), func(T(1.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U)); EXPECT_FP_EQ(T(10.0), func(T(10.32), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U)); EXPECT_FP_EQ(T(11.0), func(T(10.65), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U)); - EXPECT_FP_EQ(T(1234.0), - func(T(1234.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 11U)); - EXPECT_FP_EQ(T(1235.0), - func(T(1234.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 11U)); + EXPECT_FP_EQ(T(123.0), + func(T(123.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 7U)); + EXPECT_FP_EQ(T(124.0), + func(T(123.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 7U)); EXPECT_FP_EQ(T(2.0), func(T(2.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U)); EXPECT_FP_EQ(T(2.0), func(T(2.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U)); @@ -370,16 +370,14 @@ class UfromfpTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { aNaN, func(T(-10.65), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U), FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION( - aNaN, func(T(1234.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 10U), - FE_INVALID); + aNaN, func(T(123.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 6U), FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION( - aNaN, func(T(-1234.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U), + aNaN, func(T(-123.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U), FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION( - aNaN, func(T(1234.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 10U), - FE_INVALID); + aNaN, func(T(123.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 6U), FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION( - aNaN, func(T(-1234.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U), + aNaN, func(T(-123.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U), FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION( diff --git a/libc/test/src/math/smoke/UfromfpxTest.h b/libc/test/src/math/smoke/UfromfpxTest.h index 973bc8a4d1be7..5916492d79187 100644 --- a/libc/test/src/math/smoke/UfromfpxTest.h +++ b/libc/test/src/math/smoke/UfromfpxTest.h @@ -87,9 +87,9 @@ class UfromfpxTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { FE_INEXACT); EXPECT_FP_EQ_WITH_EXCEPTION(T(11.0), func(T(10.65), FP_INT_UPWARD, 4U), FE_INEXACT); - EXPECT_FP_EQ_WITH_EXCEPTION(T(1235.0), func(T(1234.38), FP_INT_UPWARD, 11U), + EXPECT_FP_EQ_WITH_EXCEPTION(T(124.0), func(T(123.38), FP_INT_UPWARD, 7U), FE_INEXACT); - EXPECT_FP_EQ_WITH_EXCEPTION(T(1235.0), func(T(1234.96), FP_INT_UPWARD, 11U), + EXPECT_FP_EQ_WITH_EXCEPTION(T(124.0), func(T(123.96), FP_INT_UPWARD, 7U), FE_INEXACT); } @@ -114,13 +114,13 @@ class UfromfpxTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.65), FP_INT_UPWARD, 3U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1234.38), FP_INT_UPWARD, 10U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.38), FP_INT_UPWARD, 6U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1234.38), FP_INT_UPWARD, 32U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.38), FP_INT_UPWARD, 32U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1234.96), FP_INT_UPWARD, 10U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.96), FP_INT_UPWARD, 6U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1234.96), FP_INT_UPWARD, 32U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.96), FP_INT_UPWARD, 32U), FE_INVALID); } @@ -141,10 +141,10 @@ class UfromfpxTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { FE_INEXACT); EXPECT_FP_EQ_WITH_EXCEPTION(T(10.0), func(T(10.65), FP_INT_DOWNWARD, 4U), FE_INEXACT); - EXPECT_FP_EQ_WITH_EXCEPTION( - T(1234.0), func(T(1234.38), FP_INT_DOWNWARD, 11U), FE_INEXACT); - EXPECT_FP_EQ_WITH_EXCEPTION( - T(1234.0), func(T(1234.96), FP_INT_DOWNWARD, 11U), FE_INEXACT); + EXPECT_FP_EQ_WITH_EXCEPTION(T(123.0), func(T(123.38), FP_INT_DOWNWARD, 7U), + FE_INEXACT); + EXPECT_FP_EQ_WITH_EXCEPTION(T(123.0), func(T(123.96), FP_INT_DOWNWARD, 7U), + FE_INEXACT); } void testFractionsDownwardOutsideRange(UfromfpxFunc func) { @@ -168,13 +168,13 @@ class UfromfpxTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.65), FP_INT_DOWNWARD, 32U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1234.38), FP_INT_DOWNWARD, 10U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.38), FP_INT_DOWNWARD, 6U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1234.38), FP_INT_DOWNWARD, 32U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.38), FP_INT_DOWNWARD, 32U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1234.96), FP_INT_DOWNWARD, 10U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.96), FP_INT_DOWNWARD, 6U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1234.96), FP_INT_DOWNWARD, 32U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.96), FP_INT_DOWNWARD, 32U), FE_INVALID); } @@ -202,9 +202,9 @@ class UfromfpxTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { EXPECT_FP_EQ_WITH_EXCEPTION(T(10.0), func(T(10.65), FP_INT_TOWARDZERO, 4U), FE_INEXACT); EXPECT_FP_EQ_WITH_EXCEPTION( - T(1234.0), func(T(1234.38), FP_INT_TOWARDZERO, 11U), FE_INEXACT); + T(123.0), func(T(123.38), FP_INT_TOWARDZERO, 7U), FE_INEXACT); EXPECT_FP_EQ_WITH_EXCEPTION( - T(1234.0), func(T(1234.96), FP_INT_TOWARDZERO, 11U), FE_INEXACT); + T(123.0), func(T(123.96), FP_INT_TOWARDZERO, 7U), FE_INEXACT); } void testFractionsTowardZeroOutsideRange(UfromfpxFunc func) { @@ -222,13 +222,13 @@ class UfromfpxTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.65), FP_INT_TOWARDZERO, 32U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1234.38), FP_INT_TOWARDZERO, 10U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.38), FP_INT_TOWARDZERO, 6U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1234.38), FP_INT_TOWARDZERO, 32U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.38), FP_INT_TOWARDZERO, 32U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1234.96), FP_INT_TOWARDZERO, 10U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.96), FP_INT_TOWARDZERO, 6U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1234.96), FP_INT_TOWARDZERO, 32U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.96), FP_INT_TOWARDZERO, 32U), FE_INVALID); } @@ -252,9 +252,9 @@ class UfromfpxTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { EXPECT_FP_EQ_WITH_EXCEPTION( T(11.0), func(T(10.65), FP_INT_TONEARESTFROMZERO, 4U), FE_INEXACT); EXPECT_FP_EQ_WITH_EXCEPTION( - T(1234.0), func(T(1234.38), FP_INT_TONEARESTFROMZERO, 11U), FE_INEXACT); + T(123.0), func(T(123.38), FP_INT_TONEARESTFROMZERO, 7U), FE_INEXACT); EXPECT_FP_EQ_WITH_EXCEPTION( - T(1235.0), func(T(1234.96), FP_INT_TONEARESTFROMZERO, 11U), FE_INEXACT); + T(124.0), func(T(123.96), FP_INT_TONEARESTFROMZERO, 7U), FE_INEXACT); } void testFractionsToNearestFromZeroOutsideRange(UfromfpxFunc func) { @@ -281,13 +281,13 @@ class UfromfpxTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { EXPECT_FP_EQ_WITH_EXCEPTION( aNaN, func(T(-10.65), FP_INT_TONEARESTFROMZERO, 32U), FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION( - aNaN, func(T(1234.38), FP_INT_TONEARESTFROMZERO, 10U), FE_INVALID); + aNaN, func(T(123.38), FP_INT_TONEARESTFROMZERO, 6U), FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION( - aNaN, func(T(-1234.38), FP_INT_TONEARESTFROMZERO, 32U), FE_INVALID); + aNaN, func(T(-123.38), FP_INT_TONEARESTFROMZERO, 32U), FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION( - aNaN, func(T(1234.96), FP_INT_TONEARESTFROMZERO, 10U), FE_INVALID); + aNaN, func(T(123.96), FP_INT_TONEARESTFROMZERO, 6U), FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION( - aNaN, func(T(-1234.96), FP_INT_TONEARESTFROMZERO, 32U), FE_INVALID); + aNaN, func(T(-123.96), FP_INT_TONEARESTFROMZERO, 32U), FE_INVALID); } void testFractionsToNearestWithinRange(UfromfpxFunc func) { @@ -311,10 +311,10 @@ class UfromfpxTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { FE_INEXACT); EXPECT_FP_EQ_WITH_EXCEPTION(T(11.0), func(T(10.65), FP_INT_TONEAREST, 4U), FE_INEXACT); - EXPECT_FP_EQ_WITH_EXCEPTION( - T(1234.0), func(T(1234.38), FP_INT_TONEAREST, 11U), FE_INEXACT); - EXPECT_FP_EQ_WITH_EXCEPTION( - T(1235.0), func(T(1234.96), FP_INT_TONEAREST, 11U), FE_INEXACT); + EXPECT_FP_EQ_WITH_EXCEPTION(T(123.0), func(T(123.38), FP_INT_TONEAREST, 7U), + FE_INEXACT); + EXPECT_FP_EQ_WITH_EXCEPTION(T(124.0), func(T(123.96), FP_INT_TONEAREST, 7U), + FE_INEXACT); EXPECT_FP_EQ_WITH_EXCEPTION(T(2.0), func(T(2.3), FP_INT_TONEAREST, 2U), FE_INEXACT); @@ -351,13 +351,13 @@ class UfromfpxTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.65), FP_INT_TONEAREST, 32U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1234.38), FP_INT_TONEAREST, 10U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.38), FP_INT_TONEAREST, 6U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1234.38), FP_INT_TONEAREST, 32U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.38), FP_INT_TONEAREST, 32U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1234.96), FP_INT_TONEAREST, 10U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.96), FP_INT_TONEAREST, 6U), FE_INVALID); - EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1234.96), FP_INT_TONEAREST, 32U), + EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.96), FP_INT_TONEAREST, 32U), FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(2.3), FP_INT_TONEAREST, 1U), @@ -414,10 +414,10 @@ class UfromfpxTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { T(11.0), func(T(10.65), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U), FE_INEXACT); EXPECT_FP_EQ_WITH_EXCEPTION( - T(1234.0), func(T(1234.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 11U), + T(123.0), func(T(123.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 7U), FE_INEXACT); EXPECT_FP_EQ_WITH_EXCEPTION( - T(1235.0), func(T(1234.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 11U), + T(124.0), func(T(123.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 7U), FE_INEXACT); EXPECT_FP_EQ_WITH_EXCEPTION( @@ -459,16 +459,14 @@ class UfromfpxTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { aNaN, func(T(-10.65), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U), FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION( - aNaN, func(T(1234.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 10U), - FE_INVALID); + aNaN, func(T(123.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 6U), FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION( - aNaN, func(T(-1234.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U), + aNaN, func(T(-123.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U), FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION( - aNaN, func(T(1234.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 10U), - FE_INVALID); + aNaN, func(T(123.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 6U), FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION( - aNaN, func(T(-1234.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U), + aNaN, func(T(-123.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U), FE_INVALID); EXPECT_FP_EQ_WITH_EXCEPTION( diff --git a/libc/test/src/math/smoke/fromfpf16_test.cpp b/libc/test/src/math/smoke/fromfpf16_test.cpp new file mode 100644 index 0000000000000..6c3ae94944670 --- /dev/null +++ b/libc/test/src/math/smoke/fromfpf16_test.cpp @@ -0,0 +1,13 @@ +//===-- Unittests for fromfpf16 -------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +#include "FromfpTest.h" + +#include "src/math/fromfpf16.h" + +LIST_FROMFP_TESTS(float16, LIBC_NAMESPACE::fromfpf16) diff --git a/libc/test/src/math/smoke/fromfpxf16_test.cpp b/libc/test/src/math/smoke/fromfpxf16_test.cpp new file mode 100644 index 0000000000000..04ab9e6615b3a --- /dev/null +++ b/libc/test/src/math/smoke/fromfpxf16_test.cpp @@ -0,0 +1,13 @@ +//===-- Unittests for fromfpxf16 ------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +#include "FromfpxTest.h" + +#include "src/math/fromfpxf16.h" + +LIST_FROMFPX_TESTS(float16, LIBC_NAMESPACE::fromfpxf16) diff --git a/libc/test/src/math/smoke/ufromfpf16_test.cpp b/libc/test/src/math/smoke/ufromfpf16_test.cpp new file mode 100644 index 0000000000000..641ba823cd03f --- /dev/null +++ b/libc/test/src/math/smoke/ufromfpf16_test.cpp @@ -0,0 +1,13 @@ +//===-- Unittests for ufromfpf16 ------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +#include "UfromfpTest.h" + +#include "src/math/ufromfpf16.h" + +LIST_UFROMFP_TESTS(float16, LIBC_NAMESPACE::ufromfpf16) diff --git a/libc/test/src/math/smoke/ufromfpxf16_test.cpp b/libc/test/src/math/smoke/ufromfpxf16_test.cpp new file mode 100644 index 0000000000000..50d93b2545c47 --- /dev/null +++ b/libc/test/src/math/smoke/ufromfpxf16_test.cpp @@ -0,0 +1,13 @@ +//===-- Unittests for ufromfpxf16 -----------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +#include "UfromfpxTest.h" + +#include "src/math/ufromfpxf16.h" + +LIST_UFROMFPX_TESTS(float16, LIBC_NAMESPACE::ufromfpxf16)