//===-- Unittests for feclearexcept with exceptions enabled ---------------===//
//
// 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/fenv/feclearexcept.h"

#include "utils/FPUtil/FEnvUtils.h"
#include "utils/UnitTest/Test.h"

#include <fenv.h>
#include <stdint.h>

TEST(LlvmLibcFEnvTest, ClearTest) {
  uint16_t excepts[] = {FE_DIVBYZERO, FE_INVALID, FE_INEXACT, FE_OVERFLOW,
                        FE_UNDERFLOW};
  __llvm_libc::fputil::disableExcept(FE_ALL_EXCEPT);
  __llvm_libc::fputil::clearExcept(FE_ALL_EXCEPT);

  for (uint16_t e : excepts)
    ASSERT_EQ(__llvm_libc::fputil::testExcept(e), 0);

  __llvm_libc::fputil::raiseExcept(FE_ALL_EXCEPT);
  for (uint16_t e : excepts) {
    // We clear one exception and test to verify that it was cleared.
    __llvm_libc::feclearexcept(e);
    ASSERT_EQ(uint16_t(__llvm_libc::fputil::testExcept(FE_ALL_EXCEPT)),
              uint16_t(FE_ALL_EXCEPT & ~e));
    // After clearing, we raise the exception again.
    __llvm_libc::fputil::raiseExcept(e);
  }

  for (uint16_t e1 : excepts) {
    for (uint16_t e2 : excepts) {
      __llvm_libc::feclearexcept(e1 | e2);
      ASSERT_EQ(uint16_t(__llvm_libc::fputil::testExcept(FE_ALL_EXCEPT)),
                uint16_t(FE_ALL_EXCEPT & ~(e1 | e2)));
      __llvm_libc::fputil::raiseExcept(e1 | e2);
    }
  }

  for (uint16_t e1 : excepts) {
    for (uint16_t e2 : excepts) {
      for (uint16_t e3 : excepts) {
        __llvm_libc::feclearexcept(e1 | e2 | e3);
        ASSERT_EQ(uint16_t(__llvm_libc::fputil::testExcept(FE_ALL_EXCEPT)),
                  uint16_t(FE_ALL_EXCEPT & ~(e1 | e2 | e3)));
        __llvm_libc::fputil::raiseExcept(e1 | e2 | e3);
      }
    }
  }

  for (uint16_t e1 : excepts) {
    for (uint16_t e2 : excepts) {
      for (uint16_t e3 : excepts) {
        for (uint16_t e4 : excepts) {
          __llvm_libc::feclearexcept(e1 | e2 | e3 | e4);
          ASSERT_EQ(uint16_t(__llvm_libc::fputil::testExcept(FE_ALL_EXCEPT)),
                    uint16_t(FE_ALL_EXCEPT & ~(e1 | e2 | e3 | e4)));
          __llvm_libc::fputil::raiseExcept(e1 | e2 | e3 | e4);
        }
      }
    }
  }

  for (uint16_t e1 : excepts) {
    for (uint16_t e2 : excepts) {
      for (uint16_t e3 : excepts) {
        for (uint16_t e4 : excepts) {
          for (uint16_t e5 : excepts) {
            __llvm_libc::feclearexcept(e1 | e2 | e3 | e4 | e5);
            ASSERT_EQ(uint16_t(__llvm_libc::fputil::testExcept(FE_ALL_EXCEPT)),
                      uint16_t(FE_ALL_EXCEPT & ~(e1 | e2 | e3 | e4 | e5)));
            __llvm_libc::fputil::raiseExcept(e1 | e2 | e3 | e4 | e5);
          }
        }
      }
    }
  }
}
