688 lines · c
1//===-- Utility class to test different flavors of fromfpx ------*- C++ -*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#ifndef LIBC_TEST_SRC_MATH_SMOKE_FROMFPXTEST_H10#define LIBC_TEST_SRC_MATH_SMOKE_FROMFPXTEST_H11 12#include "test/UnitTest/FEnvSafeTest.h"13#include "test/UnitTest/FPMatcher.h"14#include "test/UnitTest/Test.h"15 16template <typename T>17class FromfpxTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest {18 19 DECLARE_SPECIAL_CONSTANTS(T)20 21public:22 typedef T (*FromfpxFunc)(T, int, unsigned int);23 24 void testSpecialNumbersNonzeroWidth(FromfpxFunc func) {25 for (int rnd : MATH_ROUNDING_DIRECTIONS_INCLUDING_UNKNOWN) {26 EXPECT_FP_EQ(zero, func(zero, rnd, 32U));27 EXPECT_FP_EQ(neg_zero, func(neg_zero, rnd, 32U));28 29 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(inf, rnd, 32U), FE_INVALID);30 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(neg_inf, rnd, 32U), FE_INVALID);31 32 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(aNaN, rnd, 32U), FE_INVALID);33 }34 }35 36 void testSpecialNumbersZeroWidth(FromfpxFunc func) {37 for (int rnd : MATH_ROUNDING_DIRECTIONS_INCLUDING_UNKNOWN) {38 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(zero, rnd, 0U), FE_INVALID);39 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(neg_zero, rnd, 0U), FE_INVALID);40 41 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(inf, rnd, 0U), FE_INVALID);42 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(neg_inf, rnd, 0U), FE_INVALID);43 44 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(aNaN, rnd, 0U), FE_INVALID);45 }46 }47 48 void testRoundedNumbersWithinRange(FromfpxFunc func) {49 for (int rnd : MATH_ROUNDING_DIRECTIONS_INCLUDING_UNKNOWN) {50 EXPECT_FP_EQ(T(1.0), func(T(1.0), rnd, 2U));51 EXPECT_FP_EQ(T(-1.0), func(T(-1.0), rnd, 1U));52 EXPECT_FP_EQ(T(10.0), func(T(10.0), rnd, 5U));53 EXPECT_FP_EQ(T(-10.0), func(T(-10.0), rnd, 5U));54 EXPECT_FP_EQ(T(1234.0), func(T(1234.0), rnd, 12U));55 EXPECT_FP_EQ(T(-1234.0), func(T(-1234.0), rnd, 12U));56 EXPECT_FP_EQ(T(1234.0), func(T(1234.0), rnd, 65U));57 EXPECT_FP_EQ(T(-1234.0), func(T(-1234.0), rnd, 65U));58 }59 }60 61 void testRoundedNumbersOutsideRange(FromfpxFunc func) {62 for (int rnd : MATH_ROUNDING_DIRECTIONS_INCLUDING_UNKNOWN) {63 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.0), rnd, 1U), FE_INVALID);64 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.0), rnd, 4U), FE_INVALID);65 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.0), rnd, 4U), FE_INVALID);66 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1234.0), rnd, 11U), FE_INVALID);67 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1234.0), rnd, 11U), FE_INVALID);68 }69 }70 71 void testFractionsUpwardWithinRange(FromfpxFunc func) {72 EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(0.5), FP_INT_UPWARD, 2U),73 FE_INEXACT);74 EXPECT_FP_EQ_WITH_EXCEPTION(T(-0.0), func(T(-0.5), FP_INT_UPWARD, 1U),75 FE_INEXACT);76 EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(0.115), FP_INT_UPWARD, 2U),77 FE_INEXACT);78 EXPECT_FP_EQ_WITH_EXCEPTION(T(-0.0), func(T(-0.115), FP_INT_UPWARD, 1U),79 FE_INEXACT);80 EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(0.715), FP_INT_UPWARD, 2U),81 FE_INEXACT);82 EXPECT_FP_EQ_WITH_EXCEPTION(T(-0.0), func(T(-0.715), FP_INT_UPWARD, 1U),83 FE_INEXACT);84 EXPECT_FP_EQ_WITH_EXCEPTION(T(2.0), func(T(1.3), FP_INT_UPWARD, 3U),85 FE_INEXACT);86 EXPECT_FP_EQ_WITH_EXCEPTION(T(-1.0), func(T(-1.3), FP_INT_UPWARD, 1U),87 FE_INEXACT);88 EXPECT_FP_EQ_WITH_EXCEPTION(T(2.0), func(T(1.5), FP_INT_UPWARD, 3U),89 FE_INEXACT);90 EXPECT_FP_EQ_WITH_EXCEPTION(T(-1.0), func(T(-1.5), FP_INT_UPWARD, 1U),91 FE_INEXACT);92 EXPECT_FP_EQ_WITH_EXCEPTION(T(2.0), func(T(1.75), FP_INT_UPWARD, 3U),93 FE_INEXACT);94 EXPECT_FP_EQ_WITH_EXCEPTION(T(-1.0), func(T(-1.75), FP_INT_UPWARD, 1U),95 FE_INEXACT);96 EXPECT_FP_EQ_WITH_EXCEPTION(T(11.0), func(T(10.32), FP_INT_UPWARD, 5U),97 FE_INEXACT);98 EXPECT_FP_EQ_WITH_EXCEPTION(T(-10.0), func(T(-10.32), FP_INT_UPWARD, 5U),99 FE_INEXACT);100 EXPECT_FP_EQ_WITH_EXCEPTION(T(11.0), func(T(10.65), FP_INT_UPWARD, 5U),101 FE_INEXACT);102 EXPECT_FP_EQ_WITH_EXCEPTION(T(-10.0), func(T(-10.65), FP_INT_UPWARD, 5U),103 FE_INEXACT);104 EXPECT_FP_EQ_WITH_EXCEPTION(T(64.0), func(T(63.25), FP_INT_UPWARD, 8U),105 FE_INEXACT);106 EXPECT_FP_EQ_WITH_EXCEPTION(T(-63.0), func(T(-63.25), FP_INT_UPWARD, 8U),107 FE_INEXACT);108 EXPECT_FP_EQ_WITH_EXCEPTION(T(64.0), func(T(63.75), FP_INT_UPWARD, 8U),109 FE_INEXACT);110 EXPECT_FP_EQ_WITH_EXCEPTION(T(-63.0), func(T(-63.75), FP_INT_UPWARD, 8U),111 FE_INEXACT);112 }113 114 void testFractionsUpwardOutsideRange(FromfpxFunc func) {115 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(0.5), FP_INT_UPWARD, 1U),116 FE_INVALID);117 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(0.115), FP_INT_UPWARD, 1U),118 FE_INVALID);119 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(0.715), FP_INT_UPWARD, 1U),120 FE_INVALID);121 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.3), FP_INT_UPWARD, 2U),122 FE_INVALID);123 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.5), FP_INT_UPWARD, 2U),124 FE_INVALID);125 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.75), FP_INT_UPWARD, 2U),126 FE_INVALID);127 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.32), FP_INT_UPWARD, 4U),128 FE_INVALID);129 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.32), FP_INT_UPWARD, 4U),130 FE_INVALID);131 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.65), FP_INT_UPWARD, 4U),132 FE_INVALID);133 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.65), FP_INT_UPWARD, 4U),134 FE_INVALID);135 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.38), FP_INT_UPWARD, 7U),136 FE_INVALID);137 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.38), FP_INT_UPWARD, 7U),138 FE_INVALID);139 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.96), FP_INT_UPWARD, 7U),140 FE_INVALID);141 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.96), FP_INT_UPWARD, 7U),142 FE_INVALID);143 }144 145 void testFractionsDownwardWithinRange(FromfpxFunc func) {146 EXPECT_FP_EQ_WITH_EXCEPTION(T(0.0), func(T(0.5), FP_INT_DOWNWARD, 1U),147 FE_INEXACT);148 EXPECT_FP_EQ_WITH_EXCEPTION(T(-1.0), func(T(-0.5), FP_INT_DOWNWARD, 1U),149 FE_INEXACT);150 EXPECT_FP_EQ_WITH_EXCEPTION(T(0.0), func(T(0.115), FP_INT_DOWNWARD, 1U),151 FE_INEXACT);152 EXPECT_FP_EQ_WITH_EXCEPTION(T(-1.0), func(T(-0.115), FP_INT_DOWNWARD, 1U),153 FE_INEXACT);154 EXPECT_FP_EQ_WITH_EXCEPTION(T(0.0), func(T(0.715), FP_INT_DOWNWARD, 1U),155 FE_INEXACT);156 EXPECT_FP_EQ_WITH_EXCEPTION(T(-1.0), func(T(-0.715), FP_INT_DOWNWARD, 1U),157 FE_INEXACT);158 EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(1.3), FP_INT_DOWNWARD, 2U),159 FE_INEXACT);160 EXPECT_FP_EQ_WITH_EXCEPTION(T(-2.0), func(T(-1.3), FP_INT_DOWNWARD, 2U),161 FE_INEXACT);162 EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(1.5), FP_INT_DOWNWARD, 2U),163 FE_INEXACT);164 EXPECT_FP_EQ_WITH_EXCEPTION(T(-2.0), func(T(-1.5), FP_INT_DOWNWARD, 2U),165 FE_INEXACT);166 EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(1.75), FP_INT_DOWNWARD, 2U),167 FE_INEXACT);168 EXPECT_FP_EQ_WITH_EXCEPTION(T(-2.0), func(T(-1.75), FP_INT_DOWNWARD, 2U),169 FE_INEXACT);170 EXPECT_FP_EQ_WITH_EXCEPTION(T(10.0), func(T(10.32), FP_INT_DOWNWARD, 5U),171 FE_INEXACT);172 EXPECT_FP_EQ_WITH_EXCEPTION(T(-11.0), func(T(-10.32), FP_INT_DOWNWARD, 5U),173 FE_INEXACT);174 EXPECT_FP_EQ_WITH_EXCEPTION(T(10.0), func(T(10.65), FP_INT_DOWNWARD, 5U),175 FE_INEXACT);176 EXPECT_FP_EQ_WITH_EXCEPTION(T(-11.0), func(T(-10.65), FP_INT_DOWNWARD, 5U),177 FE_INEXACT);178 EXPECT_FP_EQ_WITH_EXCEPTION(T(63.0), func(T(63.25), FP_INT_DOWNWARD, 8U),179 FE_INEXACT);180 EXPECT_FP_EQ_WITH_EXCEPTION(T(-64.0), func(T(-63.25), FP_INT_DOWNWARD, 8U),181 FE_INEXACT);182 EXPECT_FP_EQ_WITH_EXCEPTION(T(63.0), func(T(63.75), FP_INT_DOWNWARD, 8U),183 FE_INEXACT);184 EXPECT_FP_EQ_WITH_EXCEPTION(T(-64.0), func(T(-63.75), FP_INT_DOWNWARD, 8U),185 FE_INEXACT);186 }187 188 void testFractionsDownwardOutsideRange(FromfpxFunc func) {189 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.3), FP_INT_DOWNWARD, 1U),190 FE_INVALID);191 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.3), FP_INT_DOWNWARD, 1U),192 FE_INVALID);193 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.5), FP_INT_DOWNWARD, 1U),194 FE_INVALID);195 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.5), FP_INT_DOWNWARD, 1U),196 FE_INVALID);197 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.75), FP_INT_DOWNWARD, 1U),198 FE_INVALID);199 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.75), FP_INT_DOWNWARD, 1U),200 FE_INVALID);201 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.32), FP_INT_DOWNWARD, 4U),202 FE_INVALID);203 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.32), FP_INT_DOWNWARD, 4U),204 FE_INVALID);205 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.65), FP_INT_DOWNWARD, 4U),206 FE_INVALID);207 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.65), FP_INT_DOWNWARD, 4U),208 FE_INVALID);209 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.38), FP_INT_DOWNWARD, 7U),210 FE_INVALID);211 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.38), FP_INT_DOWNWARD, 7U),212 FE_INVALID);213 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.96), FP_INT_DOWNWARD, 7U),214 FE_INVALID);215 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.96), FP_INT_DOWNWARD, 7U),216 FE_INVALID);217 }218 219 void testFractionsTowardZeroWithinRange(FromfpxFunc func) {220 EXPECT_FP_EQ_WITH_EXCEPTION(T(0.0), func(T(0.5), FP_INT_TOWARDZERO, 1U),221 FE_INEXACT);222 EXPECT_FP_EQ_WITH_EXCEPTION(T(-0.0), func(T(-0.5), FP_INT_TOWARDZERO, 1U),223 FE_INEXACT);224 EXPECT_FP_EQ_WITH_EXCEPTION(T(0.0), func(T(0.115), FP_INT_TOWARDZERO, 1U),225 FE_INEXACT);226 EXPECT_FP_EQ_WITH_EXCEPTION(T(-0.0), func(T(-0.115), FP_INT_TOWARDZERO, 1U),227 FE_INEXACT);228 EXPECT_FP_EQ_WITH_EXCEPTION(T(0.0), func(T(0.715), FP_INT_TOWARDZERO, 1U),229 FE_INEXACT);230 EXPECT_FP_EQ_WITH_EXCEPTION(T(-0.0), func(T(-0.715), FP_INT_TOWARDZERO, 1U),231 FE_INEXACT);232 EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(1.3), FP_INT_TOWARDZERO, 2U),233 FE_INEXACT);234 EXPECT_FP_EQ_WITH_EXCEPTION(T(-1.0), func(T(-1.3), FP_INT_TOWARDZERO, 1U),235 FE_INEXACT);236 EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(1.5), FP_INT_TOWARDZERO, 2U),237 FE_INEXACT);238 EXPECT_FP_EQ_WITH_EXCEPTION(T(-1.0), func(T(-1.5), FP_INT_TOWARDZERO, 1U),239 FE_INEXACT);240 EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(1.75), FP_INT_TOWARDZERO, 2U),241 FE_INEXACT);242 EXPECT_FP_EQ_WITH_EXCEPTION(T(-1.0), func(T(-1.75), FP_INT_TOWARDZERO, 1U),243 FE_INEXACT);244 EXPECT_FP_EQ_WITH_EXCEPTION(T(10.0), func(T(10.32), FP_INT_TOWARDZERO, 5U),245 FE_INEXACT);246 EXPECT_FP_EQ_WITH_EXCEPTION(247 T(-10.0), func(T(-10.32), FP_INT_TOWARDZERO, 5U), FE_INEXACT);248 EXPECT_FP_EQ_WITH_EXCEPTION(T(10.0), func(T(10.65), FP_INT_TOWARDZERO, 5U),249 FE_INEXACT);250 EXPECT_FP_EQ_WITH_EXCEPTION(251 T(-10.0), func(T(-10.65), FP_INT_TOWARDZERO, 5U), FE_INEXACT);252 EXPECT_FP_EQ_WITH_EXCEPTION(T(63.0), func(T(63.25), FP_INT_TOWARDZERO, 8U),253 FE_INEXACT);254 EXPECT_FP_EQ_WITH_EXCEPTION(255 T(-63.0), func(T(-63.25), FP_INT_TOWARDZERO, 8U), FE_INEXACT);256 EXPECT_FP_EQ_WITH_EXCEPTION(T(63.0), func(T(63.75), FP_INT_TOWARDZERO, 8U),257 FE_INEXACT);258 EXPECT_FP_EQ_WITH_EXCEPTION(259 T(-63.0), func(T(-63.75), FP_INT_TOWARDZERO, 8U), FE_INEXACT);260 }261 262 void testFractionsTowardZeroOutsideRange(FromfpxFunc func) {263 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.3), FP_INT_TOWARDZERO, 1U),264 FE_INVALID);265 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.5), FP_INT_TOWARDZERO, 1U),266 FE_INVALID);267 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.75), FP_INT_TOWARDZERO, 1U),268 FE_INVALID);269 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.32), FP_INT_TOWARDZERO, 4U),270 FE_INVALID);271 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.32), FP_INT_TOWARDZERO, 4U),272 FE_INVALID);273 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.65), FP_INT_TOWARDZERO, 4U),274 FE_INVALID);275 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.65), FP_INT_TOWARDZERO, 4U),276 FE_INVALID);277 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.38), FP_INT_TOWARDZERO, 7U),278 FE_INVALID);279 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.38), FP_INT_TOWARDZERO, 7U),280 FE_INVALID);281 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.96), FP_INT_TOWARDZERO, 7U),282 FE_INVALID);283 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.96), FP_INT_TOWARDZERO, 7U),284 FE_INVALID);285 }286 287 void testFractionsToNearestFromZeroWithinRange(FromfpxFunc func) {288 EXPECT_FP_EQ_WITH_EXCEPTION(289 T(1.0), func(T(0.5), FP_INT_TONEARESTFROMZERO, 2U), FE_INEXACT);290 EXPECT_FP_EQ_WITH_EXCEPTION(291 T(-1.0), func(T(-0.5), FP_INT_TONEARESTFROMZERO, 1U), FE_INEXACT);292 EXPECT_FP_EQ_WITH_EXCEPTION(293 T(0.0), func(T(0.115), FP_INT_TONEARESTFROMZERO, 1U), FE_INEXACT);294 EXPECT_FP_EQ_WITH_EXCEPTION(295 T(-0.0), func(T(-0.115), FP_INT_TONEARESTFROMZERO, 1U), FE_INEXACT);296 EXPECT_FP_EQ_WITH_EXCEPTION(297 T(1.0), func(T(0.715), FP_INT_TONEARESTFROMZERO, 2U), FE_INEXACT);298 EXPECT_FP_EQ_WITH_EXCEPTION(299 T(-1.0), func(T(-0.715), FP_INT_TONEARESTFROMZERO, 1U), FE_INEXACT);300 EXPECT_FP_EQ_WITH_EXCEPTION(301 T(1.0), func(T(1.3), FP_INT_TONEARESTFROMZERO, 2U), FE_INEXACT);302 EXPECT_FP_EQ_WITH_EXCEPTION(303 T(-1.0), func(T(-1.3), FP_INT_TONEARESTFROMZERO, 1U), FE_INEXACT);304 EXPECT_FP_EQ_WITH_EXCEPTION(305 T(2.0), func(T(1.5), FP_INT_TONEARESTFROMZERO, 3U), FE_INEXACT);306 EXPECT_FP_EQ_WITH_EXCEPTION(307 T(-2.0), func(T(-1.5), FP_INT_TONEARESTFROMZERO, 2U), FE_INEXACT);308 EXPECT_FP_EQ_WITH_EXCEPTION(309 T(2.0), func(T(1.75), FP_INT_TONEARESTFROMZERO, 3U), FE_INEXACT);310 EXPECT_FP_EQ_WITH_EXCEPTION(311 T(-2.0), func(T(-1.75), FP_INT_TONEARESTFROMZERO, 2U), FE_INEXACT);312 EXPECT_FP_EQ_WITH_EXCEPTION(313 T(10.0), func(T(10.32), FP_INT_TONEARESTFROMZERO, 5U), FE_INEXACT);314 EXPECT_FP_EQ_WITH_EXCEPTION(315 T(-10.0), func(T(-10.32), FP_INT_TONEARESTFROMZERO, 5U), FE_INEXACT);316 EXPECT_FP_EQ_WITH_EXCEPTION(317 T(11.0), func(T(10.65), FP_INT_TONEARESTFROMZERO, 5U), FE_INEXACT);318 EXPECT_FP_EQ_WITH_EXCEPTION(319 T(-11.0), func(T(-10.65), FP_INT_TONEARESTFROMZERO, 5U), FE_INEXACT);320 EXPECT_FP_EQ_WITH_EXCEPTION(321 T(63.0), func(T(63.25), FP_INT_TONEARESTFROMZERO, 8U), FE_INEXACT);322 EXPECT_FP_EQ_WITH_EXCEPTION(323 T(-63.0), func(T(-63.25), FP_INT_TONEARESTFROMZERO, 8U), FE_INEXACT);324 EXPECT_FP_EQ_WITH_EXCEPTION(325 T(64.0), func(T(63.75), FP_INT_TONEARESTFROMZERO, 8U), FE_INEXACT);326 EXPECT_FP_EQ_WITH_EXCEPTION(327 T(-64.0), func(T(-63.75), FP_INT_TONEARESTFROMZERO, 8U), FE_INEXACT);328 }329 330 void testFractionsToNearestFromZeroOutsideRange(FromfpxFunc func) {331 EXPECT_FP_EQ_WITH_EXCEPTION(332 aNaN, func(T(0.5), FP_INT_TONEARESTFROMZERO, 1U), FE_INVALID);333 EXPECT_FP_EQ_WITH_EXCEPTION(334 aNaN, func(T(0.715), FP_INT_TONEARESTFROMZERO, 1U), FE_INVALID);335 EXPECT_FP_EQ_WITH_EXCEPTION(336 aNaN, func(T(1.3), FP_INT_TONEARESTFROMZERO, 1U), FE_INVALID);337 EXPECT_FP_EQ_WITH_EXCEPTION(338 aNaN, func(T(1.5), FP_INT_TONEARESTFROMZERO, 2U), FE_INVALID);339 EXPECT_FP_EQ_WITH_EXCEPTION(340 aNaN, func(T(-1.5), FP_INT_TONEARESTFROMZERO, 1U), FE_INVALID);341 EXPECT_FP_EQ_WITH_EXCEPTION(342 aNaN, func(T(1.75), FP_INT_TONEARESTFROMZERO, 2U), FE_INVALID);343 EXPECT_FP_EQ_WITH_EXCEPTION(344 aNaN, func(T(-1.75), FP_INT_TONEARESTFROMZERO, 1U), FE_INVALID);345 EXPECT_FP_EQ_WITH_EXCEPTION(346 aNaN, func(T(10.32), FP_INT_TONEARESTFROMZERO, 4U), FE_INVALID);347 EXPECT_FP_EQ_WITH_EXCEPTION(348 aNaN, func(T(-10.32), FP_INT_TONEARESTFROMZERO, 4U), FE_INVALID);349 EXPECT_FP_EQ_WITH_EXCEPTION(350 aNaN, func(T(10.65), FP_INT_TONEARESTFROMZERO, 4U), FE_INVALID);351 EXPECT_FP_EQ_WITH_EXCEPTION(352 aNaN, func(T(-10.65), FP_INT_TONEARESTFROMZERO, 4U), FE_INVALID);353 EXPECT_FP_EQ_WITH_EXCEPTION(354 aNaN, func(T(123.38), FP_INT_TONEARESTFROMZERO, 7U), FE_INVALID);355 EXPECT_FP_EQ_WITH_EXCEPTION(356 aNaN, func(T(-123.38), FP_INT_TONEARESTFROMZERO, 7U), FE_INVALID);357 EXPECT_FP_EQ_WITH_EXCEPTION(358 aNaN, func(T(123.96), FP_INT_TONEARESTFROMZERO, 7U), FE_INVALID);359 EXPECT_FP_EQ_WITH_EXCEPTION(360 aNaN, func(T(-123.96), FP_INT_TONEARESTFROMZERO, 7U), FE_INVALID);361 }362 363 void testFractionsToNearestWithinRange(FromfpxFunc func) {364 EXPECT_FP_EQ_WITH_EXCEPTION(T(0.0), func(T(0.5), FP_INT_TONEAREST, 1U),365 FE_INEXACT);366 EXPECT_FP_EQ_WITH_EXCEPTION(T(-0.0), func(T(-0.5), FP_INT_TONEAREST, 1U),367 FE_INEXACT);368 EXPECT_FP_EQ_WITH_EXCEPTION(T(0.0), func(T(0.115), FP_INT_TONEAREST, 1U),369 FE_INEXACT);370 EXPECT_FP_EQ_WITH_EXCEPTION(T(-0.0), func(T(-0.115), FP_INT_TONEAREST, 1U),371 FE_INEXACT);372 EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(0.715), FP_INT_TONEAREST, 2U),373 FE_INEXACT);374 EXPECT_FP_EQ_WITH_EXCEPTION(T(-1.0), func(T(-0.715), FP_INT_TONEAREST, 1U),375 FE_INEXACT);376 EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(1.3), FP_INT_TONEAREST, 2U),377 FE_INEXACT);378 EXPECT_FP_EQ_WITH_EXCEPTION(T(-1.0), func(T(-1.3), FP_INT_TONEAREST, 1U),379 FE_INEXACT);380 EXPECT_FP_EQ_WITH_EXCEPTION(T(2.0), func(T(1.5), FP_INT_TONEAREST, 3U),381 FE_INEXACT);382 EXPECT_FP_EQ_WITH_EXCEPTION(T(-2.0), func(T(-1.5), FP_INT_TONEAREST, 2U),383 FE_INEXACT);384 EXPECT_FP_EQ_WITH_EXCEPTION(T(2.0), func(T(1.75), FP_INT_TONEAREST, 3U),385 FE_INEXACT);386 EXPECT_FP_EQ_WITH_EXCEPTION(T(-2.0), func(T(-1.75), FP_INT_TONEAREST, 2U),387 FE_INEXACT);388 EXPECT_FP_EQ_WITH_EXCEPTION(T(10.0), func(T(10.32), FP_INT_TONEAREST, 5U),389 FE_INEXACT);390 EXPECT_FP_EQ_WITH_EXCEPTION(T(-10.0), func(T(-10.32), FP_INT_TONEAREST, 5U),391 FE_INEXACT);392 EXPECT_FP_EQ_WITH_EXCEPTION(T(11.0), func(T(10.65), FP_INT_TONEAREST, 5U),393 FE_INEXACT);394 EXPECT_FP_EQ_WITH_EXCEPTION(T(-11.0), func(T(-10.65), FP_INT_TONEAREST, 5U),395 FE_INEXACT);396 EXPECT_FP_EQ_WITH_EXCEPTION(T(63.0), func(T(63.25), FP_INT_TONEAREST, 8U),397 FE_INEXACT);398 EXPECT_FP_EQ_WITH_EXCEPTION(T(-63.0), func(T(-63.25), FP_INT_TONEAREST, 8U),399 FE_INEXACT);400 EXPECT_FP_EQ_WITH_EXCEPTION(T(64.0), func(T(63.75), FP_INT_TONEAREST, 8U),401 FE_INEXACT);402 EXPECT_FP_EQ_WITH_EXCEPTION(T(-64.0), func(T(-63.75), FP_INT_TONEAREST, 8U),403 FE_INEXACT);404 405 EXPECT_FP_EQ_WITH_EXCEPTION(T(2.0), func(T(2.3), FP_INT_TONEAREST, 3U),406 FE_INEXACT);407 EXPECT_FP_EQ_WITH_EXCEPTION(T(-2.0), func(T(-2.3), FP_INT_TONEAREST, 2U),408 FE_INEXACT);409 EXPECT_FP_EQ_WITH_EXCEPTION(T(2.0), func(T(2.5), FP_INT_TONEAREST, 3U),410 FE_INEXACT);411 EXPECT_FP_EQ_WITH_EXCEPTION(T(-2.0), func(T(-2.5), FP_INT_TONEAREST, 2U),412 FE_INEXACT);413 EXPECT_FP_EQ_WITH_EXCEPTION(T(3.0), func(T(2.75), FP_INT_TONEAREST, 3U),414 FE_INEXACT);415 EXPECT_FP_EQ_WITH_EXCEPTION(T(-3.0), func(T(-2.75), FP_INT_TONEAREST, 3U),416 FE_INEXACT);417 EXPECT_FP_EQ_WITH_EXCEPTION(T(5.0), func(T(5.3), FP_INT_TONEAREST, 4U),418 FE_INEXACT);419 EXPECT_FP_EQ_WITH_EXCEPTION(T(-5.0), func(T(-5.3), FP_INT_TONEAREST, 4U),420 FE_INEXACT);421 EXPECT_FP_EQ_WITH_EXCEPTION(T(6.0), func(T(5.5), FP_INT_TONEAREST, 4U),422 FE_INEXACT);423 EXPECT_FP_EQ_WITH_EXCEPTION(T(-6.0), func(T(-5.5), FP_INT_TONEAREST, 4U),424 FE_INEXACT);425 EXPECT_FP_EQ_WITH_EXCEPTION(T(6.0), func(T(5.75), FP_INT_TONEAREST, 4U),426 FE_INEXACT);427 EXPECT_FP_EQ_WITH_EXCEPTION(T(-6.0), func(T(-5.75), FP_INT_TONEAREST, 4U),428 FE_INEXACT);429 }430 431 void testFractionsToNearestOutsideRange(FromfpxFunc func) {432 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(0.715), FP_INT_TONEAREST, 1U),433 FE_INVALID);434 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.3), FP_INT_TONEAREST, 1U),435 FE_INVALID);436 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.5), FP_INT_TONEAREST, 2U),437 FE_INVALID);438 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.5), FP_INT_TONEAREST, 1U),439 FE_INVALID);440 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.75), FP_INT_TONEAREST, 2U),441 FE_INVALID);442 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.75), FP_INT_TONEAREST, 1U),443 FE_INVALID);444 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.32), FP_INT_TONEAREST, 4U),445 FE_INVALID);446 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.32), FP_INT_TONEAREST, 4U),447 FE_INVALID);448 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.65), FP_INT_TONEAREST, 4U),449 FE_INVALID);450 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.65), FP_INT_TONEAREST, 4U),451 FE_INVALID);452 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.38), FP_INT_TONEAREST, 7U),453 FE_INVALID);454 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.38), FP_INT_TONEAREST, 7U),455 FE_INVALID);456 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.96), FP_INT_TONEAREST, 7U),457 FE_INVALID);458 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.96), FP_INT_TONEAREST, 7U),459 FE_INVALID);460 461 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(2.3), FP_INT_TONEAREST, 2U),462 FE_INVALID);463 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-2.3), FP_INT_TONEAREST, 1U),464 FE_INVALID);465 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(2.5), FP_INT_TONEAREST, 2U),466 FE_INVALID);467 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-2.5), FP_INT_TONEAREST, 1U),468 FE_INVALID);469 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(2.75), FP_INT_TONEAREST, 2U),470 FE_INVALID);471 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-2.75), FP_INT_TONEAREST, 2U),472 FE_INVALID);473 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(5.3), FP_INT_TONEAREST, 3U),474 FE_INVALID);475 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-5.3), FP_INT_TONEAREST, 3U),476 FE_INVALID);477 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(5.5), FP_INT_TONEAREST, 3U),478 FE_INVALID);479 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-5.5), FP_INT_TONEAREST, 3U),480 FE_INVALID);481 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(5.75), FP_INT_TONEAREST, 3U),482 FE_INVALID);483 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-5.75), FP_INT_TONEAREST, 3U),484 FE_INVALID);485 }486 487 void testFractionsToNearestFallbackWithinRange(FromfpxFunc func) {488 EXPECT_FP_EQ_WITH_EXCEPTION(489 T(0.0), func(T(0.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), FE_INEXACT);490 EXPECT_FP_EQ_WITH_EXCEPTION(491 T(-0.0), func(T(-0.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U),492 FE_INEXACT);493 EXPECT_FP_EQ_WITH_EXCEPTION(494 T(0.0), func(T(0.115), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U),495 FE_INEXACT);496 EXPECT_FP_EQ_WITH_EXCEPTION(497 T(-0.0), func(T(-0.115), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U),498 FE_INEXACT);499 EXPECT_FP_EQ_WITH_EXCEPTION(500 T(1.0), func(T(0.715), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U),501 FE_INEXACT);502 EXPECT_FP_EQ_WITH_EXCEPTION(503 T(-1.0), func(T(-0.715), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U),504 FE_INEXACT);505 EXPECT_FP_EQ_WITH_EXCEPTION(506 T(1.0), func(T(1.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U), FE_INEXACT);507 EXPECT_FP_EQ_WITH_EXCEPTION(508 T(-1.0), func(T(-1.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U),509 FE_INEXACT);510 EXPECT_FP_EQ_WITH_EXCEPTION(511 T(2.0), func(T(1.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), FE_INEXACT);512 EXPECT_FP_EQ_WITH_EXCEPTION(513 T(-2.0), func(T(-1.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U),514 FE_INEXACT);515 EXPECT_FP_EQ_WITH_EXCEPTION(516 T(2.0), func(T(1.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), FE_INEXACT);517 EXPECT_FP_EQ_WITH_EXCEPTION(518 T(-2.0), func(T(-1.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U),519 FE_INEXACT);520 EXPECT_FP_EQ_WITH_EXCEPTION(521 T(10.0), func(T(10.32), UNKNOWN_MATH_ROUNDING_DIRECTION, 5U),522 FE_INEXACT);523 EXPECT_FP_EQ_WITH_EXCEPTION(524 T(-10.0), func(T(-10.32), UNKNOWN_MATH_ROUNDING_DIRECTION, 5U),525 FE_INEXACT);526 EXPECT_FP_EQ_WITH_EXCEPTION(527 T(11.0), func(T(10.65), UNKNOWN_MATH_ROUNDING_DIRECTION, 5U),528 FE_INEXACT);529 EXPECT_FP_EQ_WITH_EXCEPTION(530 T(-11.0), func(T(-10.65), UNKNOWN_MATH_ROUNDING_DIRECTION, 5U),531 FE_INEXACT);532 EXPECT_FP_EQ_WITH_EXCEPTION(533 T(63.0), func(T(63.25), UNKNOWN_MATH_ROUNDING_DIRECTION, 8U),534 FE_INEXACT);535 EXPECT_FP_EQ_WITH_EXCEPTION(536 T(-63.0), func(T(-63.25), UNKNOWN_MATH_ROUNDING_DIRECTION, 8U),537 FE_INEXACT);538 EXPECT_FP_EQ_WITH_EXCEPTION(539 T(64.0), func(T(63.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 8U),540 FE_INEXACT);541 EXPECT_FP_EQ_WITH_EXCEPTION(542 T(-64.0), func(T(-63.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 8U),543 FE_INEXACT);544 545 EXPECT_FP_EQ_WITH_EXCEPTION(546 T(2.0), func(T(2.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), FE_INEXACT);547 EXPECT_FP_EQ_WITH_EXCEPTION(548 T(-2.0), func(T(-2.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U),549 FE_INEXACT);550 EXPECT_FP_EQ_WITH_EXCEPTION(551 T(2.0), func(T(2.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), FE_INEXACT);552 EXPECT_FP_EQ_WITH_EXCEPTION(553 T(-2.0), func(T(-2.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U),554 FE_INEXACT);555 EXPECT_FP_EQ_WITH_EXCEPTION(556 T(3.0), func(T(2.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), FE_INEXACT);557 EXPECT_FP_EQ_WITH_EXCEPTION(558 T(-3.0), func(T(-2.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U),559 FE_INEXACT);560 EXPECT_FP_EQ_WITH_EXCEPTION(561 T(5.0), func(T(5.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U), FE_INEXACT);562 EXPECT_FP_EQ_WITH_EXCEPTION(563 T(-5.0), func(T(-5.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U),564 FE_INEXACT);565 EXPECT_FP_EQ_WITH_EXCEPTION(566 T(6.0), func(T(5.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U), FE_INEXACT);567 EXPECT_FP_EQ_WITH_EXCEPTION(568 T(-6.0), func(T(-5.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U),569 FE_INEXACT);570 EXPECT_FP_EQ_WITH_EXCEPTION(571 T(6.0), func(T(5.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U), FE_INEXACT);572 EXPECT_FP_EQ_WITH_EXCEPTION(573 T(-6.0), func(T(-5.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U),574 FE_INEXACT);575 }576 577 void testFractionsToNearestFallbackOutsideRange(FromfpxFunc func) {578 EXPECT_FP_EQ_WITH_EXCEPTION(579 aNaN, func(T(0.715), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), FE_INVALID);580 EXPECT_FP_EQ_WITH_EXCEPTION(581 aNaN, func(T(1.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), FE_INVALID);582 EXPECT_FP_EQ_WITH_EXCEPTION(583 aNaN, func(T(1.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U), FE_INVALID);584 EXPECT_FP_EQ_WITH_EXCEPTION(585 aNaN, func(T(-1.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), FE_INVALID);586 EXPECT_FP_EQ_WITH_EXCEPTION(587 aNaN, func(T(1.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U), FE_INVALID);588 EXPECT_FP_EQ_WITH_EXCEPTION(589 aNaN, func(T(-1.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), FE_INVALID);590 EXPECT_FP_EQ_WITH_EXCEPTION(591 aNaN, func(T(10.32), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U), FE_INVALID);592 EXPECT_FP_EQ_WITH_EXCEPTION(593 aNaN, func(T(-10.32), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U), FE_INVALID);594 EXPECT_FP_EQ_WITH_EXCEPTION(595 aNaN, func(T(10.65), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U), FE_INVALID);596 EXPECT_FP_EQ_WITH_EXCEPTION(597 aNaN, func(T(-10.65), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U), FE_INVALID);598 EXPECT_FP_EQ_WITH_EXCEPTION(599 aNaN, func(T(123.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 7U), FE_INVALID);600 EXPECT_FP_EQ_WITH_EXCEPTION(601 aNaN, func(T(-123.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 7U),602 FE_INVALID);603 EXPECT_FP_EQ_WITH_EXCEPTION(604 aNaN, func(T(123.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 7U), FE_INVALID);605 EXPECT_FP_EQ_WITH_EXCEPTION(606 aNaN, func(T(-123.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 7U),607 FE_INVALID);608 609 EXPECT_FP_EQ_WITH_EXCEPTION(610 aNaN, func(T(2.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U), FE_INVALID);611 EXPECT_FP_EQ_WITH_EXCEPTION(612 aNaN, func(T(-2.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), FE_INVALID);613 EXPECT_FP_EQ_WITH_EXCEPTION(614 aNaN, func(T(2.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U), FE_INVALID);615 EXPECT_FP_EQ_WITH_EXCEPTION(616 aNaN, func(T(-2.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), FE_INVALID);617 EXPECT_FP_EQ_WITH_EXCEPTION(618 aNaN, func(T(2.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U), FE_INVALID);619 EXPECT_FP_EQ_WITH_EXCEPTION(620 aNaN, func(T(-2.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U), FE_INVALID);621 EXPECT_FP_EQ_WITH_EXCEPTION(622 aNaN, func(T(5.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), FE_INVALID);623 EXPECT_FP_EQ_WITH_EXCEPTION(624 aNaN, func(T(-5.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), FE_INVALID);625 EXPECT_FP_EQ_WITH_EXCEPTION(626 aNaN, func(T(5.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), FE_INVALID);627 EXPECT_FP_EQ_WITH_EXCEPTION(628 aNaN, func(T(-5.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), FE_INVALID);629 EXPECT_FP_EQ_WITH_EXCEPTION(630 aNaN, func(T(5.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), FE_INVALID);631 EXPECT_FP_EQ_WITH_EXCEPTION(632 aNaN, func(T(-5.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), FE_INVALID);633 }634};635 636#define LIST_FROMFPX_TESTS(T, func) \637 using LlvmLibcFromfpxTest = FromfpxTestTemplate<T>; \638 TEST_F(LlvmLibcFromfpxTest, SpecialNumbersNonzeroWidth) { \639 testSpecialNumbersNonzeroWidth(&func); \640 } \641 TEST_F(LlvmLibcFromfpxTest, SpecialNumbersZeroWidth) { \642 testSpecialNumbersZeroWidth(&func); \643 } \644 TEST_F(LlvmLibcFromfpxTest, RoundedNumbersWithinRange) { \645 testRoundedNumbersWithinRange(&func); \646 } \647 TEST_F(LlvmLibcFromfpxTest, RoundedNumbersOutsideRange) { \648 testRoundedNumbersOutsideRange(&func); \649 } \650 TEST_F(LlvmLibcFromfpxTest, FractionsUpwardWithinRange) { \651 testFractionsUpwardWithinRange(&func); \652 } \653 TEST_F(LlvmLibcFromfpxTest, FractionsUpwardOutsideRange) { \654 testFractionsUpwardOutsideRange(&func); \655 } \656 TEST_F(LlvmLibcFromfpxTest, FractionsDownwardWithinRange) { \657 testFractionsDownwardWithinRange(&func); \658 } \659 TEST_F(LlvmLibcFromfpxTest, FractionsDownwardOutsideRange) { \660 testFractionsDownwardOutsideRange(&func); \661 } \662 TEST_F(LlvmLibcFromfpxTest, FractionsTowardZeroWithinRange) { \663 testFractionsTowardZeroWithinRange(&func); \664 } \665 TEST_F(LlvmLibcFromfpxTest, FractionsTowardZeroOutsideRange) { \666 testFractionsTowardZeroOutsideRange(&func); \667 } \668 TEST_F(LlvmLibcFromfpxTest, FractionsToNearestFromZeroWithinRange) { \669 testFractionsToNearestFromZeroWithinRange(&func); \670 } \671 TEST_F(LlvmLibcFromfpxTest, FractionsToNearestFromZeroOutsideRange) { \672 testFractionsToNearestFromZeroOutsideRange(&func); \673 } \674 TEST_F(LlvmLibcFromfpxTest, FractionsToNearestWithinRange) { \675 testFractionsToNearestWithinRange(&func); \676 } \677 TEST_F(LlvmLibcFromfpxTest, FractionsToNearestOutsideRange) { \678 testFractionsToNearestOutsideRange(&func); \679 } \680 TEST_F(LlvmLibcFromfpxTest, FractionsToNearestFallbackWithinRange) { \681 testFractionsToNearestFallbackWithinRange(&func); \682 } \683 TEST_F(LlvmLibcFromfpxTest, FractionsToNearestFallbackOutsideRange) { \684 testFractionsToNearestFallbackOutsideRange(&func); \685 }686 687#endif // LIBC_TEST_SRC_MATH_SMOKE_FROMFPXTEST_H688