brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.2 KiB · fdf9421 Raw
151 lines · cpp
1//===-- Unittests for feclearexcept, feraiseexcept, fetestexpect ----------===//2//===-- and fesetexcept ---------------------------------------------------===//3//4// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.5// See https://llvm.org/LICENSE.txt for license information.6// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception7//8//===----------------------------------------------------------------------===//9 10#include "src/fenv/feclearexcept.h"11#include "src/fenv/feraiseexcept.h"12#include "src/fenv/fesetexcept.h"13#include "src/fenv/fetestexcept.h"14 15#include "src/__support/FPUtil/FEnvImpl.h"16#include "test/UnitTest/FEnvSafeTest.h"17#include "test/UnitTest/Test.h"18 19#include "hdr/fenv_macros.h"20 21#include "excepts.h"22 23using LlvmLibcExceptionStatusTest = LIBC_NAMESPACE::testing::FEnvSafeTest;24 25TEST_F(LlvmLibcExceptionStatusTest, RaiseAndTest) {26  // This test raises a set of exceptions and checks that the exception27  // status flags are updated. The intention is really not to invoke the28  // exception handler. Hence, we will disable all exceptions at the29  // beginning.30  LIBC_NAMESPACE::fputil::disable_except(FE_ALL_EXCEPT);31 32  for (int e : EXCEPTS) {33    int r = LIBC_NAMESPACE::feraiseexcept(e);34    ASSERT_EQ(r, 0);35    int s = LIBC_NAMESPACE::fetestexcept(e);36    ASSERT_EQ(s, e);37 38    r = LIBC_NAMESPACE::feclearexcept(e);39    ASSERT_EQ(r, 0);40    s = LIBC_NAMESPACE::fetestexcept(e);41    ASSERT_EQ(s, 0);42 43    r = LIBC_NAMESPACE::fesetexcept(e);44    ASSERT_EQ(r, 0);45    s = LIBC_NAMESPACE::fetestexcept(e);46    ASSERT_EQ(s, e);47  }48 49  for (int e1 : EXCEPTS) {50    for (int e2 : EXCEPTS) {51      int e = e1 | e2;52      int r = LIBC_NAMESPACE::feraiseexcept(e);53      ASSERT_EQ(r, 0);54      int s = LIBC_NAMESPACE::fetestexcept(e);55      ASSERT_EQ(s, e);56 57      r = LIBC_NAMESPACE::feclearexcept(e);58      ASSERT_EQ(r, 0);59      s = LIBC_NAMESPACE::fetestexcept(e);60      ASSERT_EQ(s, 0);61 62      r = LIBC_NAMESPACE::fesetexcept(e);63      ASSERT_EQ(r, 0);64      s = LIBC_NAMESPACE::fetestexcept(e);65      ASSERT_EQ(s, e);66    }67  }68 69  for (int e1 : EXCEPTS) {70    for (int e2 : EXCEPTS) {71      for (int e3 : EXCEPTS) {72        int e = e1 | e2 | e3;73        int r = LIBC_NAMESPACE::feraiseexcept(e);74        ASSERT_EQ(r, 0);75        int s = LIBC_NAMESPACE::fetestexcept(e);76        ASSERT_EQ(s, e);77 78        r = LIBC_NAMESPACE::feclearexcept(e);79        ASSERT_EQ(r, 0);80        s = LIBC_NAMESPACE::fetestexcept(e);81        ASSERT_EQ(s, 0);82 83        r = LIBC_NAMESPACE::fesetexcept(e);84        ASSERT_EQ(r, 0);85        s = LIBC_NAMESPACE::fetestexcept(e);86        ASSERT_EQ(s, e);87      }88    }89  }90 91  for (int e1 : EXCEPTS) {92    for (int e2 : EXCEPTS) {93      for (int e3 : EXCEPTS) {94        for (int e4 : EXCEPTS) {95          int e = e1 | e2 | e3 | e4;96          int r = LIBC_NAMESPACE::feraiseexcept(e);97          ASSERT_EQ(r, 0);98          int s = LIBC_NAMESPACE::fetestexcept(e);99          ASSERT_EQ(s, e);100 101          r = LIBC_NAMESPACE::feclearexcept(e);102          ASSERT_EQ(r, 0);103          s = LIBC_NAMESPACE::fetestexcept(e);104          ASSERT_EQ(s, 0);105 106          r = LIBC_NAMESPACE::fesetexcept(e);107          ASSERT_EQ(r, 0);108          s = LIBC_NAMESPACE::fetestexcept(e);109          ASSERT_EQ(s, e);110        }111      }112    }113  }114 115  for (int e1 : EXCEPTS) {116    for (int e2 : EXCEPTS) {117      for (int e3 : EXCEPTS) {118        for (int e4 : EXCEPTS) {119          for (int e5 : EXCEPTS) {120            int e = e1 | e2 | e3 | e4 | e5;121            int r = LIBC_NAMESPACE::feraiseexcept(e);122            ASSERT_EQ(r, 0);123            int s = LIBC_NAMESPACE::fetestexcept(e);124            ASSERT_EQ(s, e);125 126            r = LIBC_NAMESPACE::feclearexcept(e);127            ASSERT_EQ(r, 0);128            s = LIBC_NAMESPACE::fetestexcept(e);129            ASSERT_EQ(s, 0);130 131            r = LIBC_NAMESPACE::fesetexcept(e);132            ASSERT_EQ(r, 0);133            s = LIBC_NAMESPACE::fetestexcept(e);134            ASSERT_EQ(s, e);135          }136        }137      }138    }139  }140 141  int r = LIBC_NAMESPACE::feraiseexcept(ALL_EXCEPTS);142  ASSERT_EQ(r, 0);143  int s = LIBC_NAMESPACE::fetestexcept(ALL_EXCEPTS);144  ASSERT_EQ(s, ALL_EXCEPTS);145 146  r = LIBC_NAMESPACE::fesetexcept(ALL_EXCEPTS);147  ASSERT_EQ(r, 0);148  s = LIBC_NAMESPACE::fetestexcept(ALL_EXCEPTS);149  ASSERT_EQ(s, ALL_EXCEPTS);150}151