brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.7 KiB · 5d62bc8 Raw
157 lines · cpp
1//===-- Unittests for the quick rounding mode checks ----------------------===//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#include "src/__support/FPUtil/rounding_mode.h"10#include "test/UnitTest/Test.h"11#include "utils/MPFRWrapper/MPFRUtils.h"12 13#include "hdr/fenv_macros.h"14 15using LIBC_NAMESPACE::testing::mpfr::ForceRoundingMode;16using LIBC_NAMESPACE::testing::mpfr::RoundingMode;17 18TEST(LlvmLibcFEnvImplTest, QuickRoundingUpTest) {19  using LIBC_NAMESPACE::fputil::fenv_is_round_up;20  {21    ForceRoundingMode __r(RoundingMode::Upward);22    if (__r.success) {23      ASSERT_TRUE(fenv_is_round_up());24    }25  }26  {27    ForceRoundingMode __r(RoundingMode::Downward);28    if (__r.success) {29      ASSERT_FALSE(fenv_is_round_up());30    }31  }32  {33    ForceRoundingMode __r(RoundingMode::Nearest);34    if (__r.success) {35      ASSERT_FALSE(fenv_is_round_up());36    }37  }38  {39    ForceRoundingMode __r(RoundingMode::TowardZero);40    if (__r.success) {41      ASSERT_FALSE(fenv_is_round_up());42    }43  }44}45 46TEST(LlvmLibcFEnvImplTest, QuickRoundingDownTest) {47  using LIBC_NAMESPACE::fputil::fenv_is_round_down;48  {49    ForceRoundingMode __r(RoundingMode::Upward);50    if (__r.success) {51      ASSERT_FALSE(fenv_is_round_down());52    }53  }54  {55    ForceRoundingMode __r(RoundingMode::Downward);56    if (__r.success) {57      ASSERT_TRUE(fenv_is_round_down());58    }59  }60  {61    ForceRoundingMode __r(RoundingMode::Nearest);62    if (__r.success) {63      ASSERT_FALSE(fenv_is_round_down());64    }65  }66  {67    ForceRoundingMode __r(RoundingMode::TowardZero);68    if (__r.success) {69      ASSERT_FALSE(fenv_is_round_down());70    }71  }72}73 74TEST(LlvmLibcFEnvImplTest, QuickRoundingNearestTest) {75  using LIBC_NAMESPACE::fputil::fenv_is_round_to_nearest;76  {77    ForceRoundingMode __r(RoundingMode::Upward);78    if (__r.success) {79      ASSERT_FALSE(fenv_is_round_to_nearest());80    }81  }82  {83    ForceRoundingMode __r(RoundingMode::Downward);84    if (__r.success) {85      ASSERT_FALSE(fenv_is_round_to_nearest());86    }87  }88  {89    ForceRoundingMode __r(RoundingMode::Nearest);90    if (__r.success) {91      ASSERT_TRUE(fenv_is_round_to_nearest());92    }93  }94  {95    ForceRoundingMode __r(RoundingMode::TowardZero);96    if (__r.success) {97      ASSERT_FALSE(fenv_is_round_to_nearest());98    }99  }100}101 102TEST(LlvmLibcFEnvImplTest, QuickRoundingTowardZeroTest) {103  using LIBC_NAMESPACE::fputil::fenv_is_round_to_zero;104  {105    ForceRoundingMode __r(RoundingMode::Upward);106    if (__r.success) {107      ASSERT_FALSE(fenv_is_round_to_zero());108    }109  }110  {111    ForceRoundingMode __r(RoundingMode::Downward);112    if (__r.success) {113      ASSERT_FALSE(fenv_is_round_to_zero());114    }115  }116  {117    ForceRoundingMode __r(RoundingMode::Nearest);118    if (__r.success) {119      ASSERT_FALSE(fenv_is_round_to_zero());120    }121  }122  {123    ForceRoundingMode __r(RoundingMode::TowardZero);124    if (__r.success) {125      ASSERT_TRUE(fenv_is_round_to_zero());126    }127  }128}129 130TEST(LlvmLibcFEnvImplTest, QuickGetRoundTest) {131  using LIBC_NAMESPACE::fputil::quick_get_round;132  {133    ForceRoundingMode __r(RoundingMode::Upward);134    if (__r.success) {135      ASSERT_EQ(quick_get_round(), FE_UPWARD);136    }137  }138  {139    ForceRoundingMode __r(RoundingMode::Downward);140    if (__r.success) {141      ASSERT_EQ(quick_get_round(), FE_DOWNWARD);142    }143  }144  {145    ForceRoundingMode __r(RoundingMode::Nearest);146    if (__r.success) {147      ASSERT_EQ(quick_get_round(), FE_TONEAREST);148    }149  }150  {151    ForceRoundingMode __r(RoundingMode::TowardZero);152    if (__r.success) {153      ASSERT_EQ(quick_get_round(), FE_TOWARDZERO);154    }155  }156}157