brintos

brintos / llvm-project-archived public Read only

0
0
Text · 36.4 KiB · 1930b22 Raw
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