//===- llvm/unittest/ADT/FloatingPointMode.cpp ----------------------------===//
//
// 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 "llvm/ADT/FloatingPointMode.h"
#include "gtest/gtest.h"

using namespace llvm;

namespace {

TEST(FloatingPointModeTest, ParseDenormalFPAttributeComponent) {
  EXPECT_EQ(DenormalMode::IEEE, parseDenormalFPAttributeComponent("ieee"));
  EXPECT_EQ(DenormalMode::IEEE, parseDenormalFPAttributeComponent(""));
  EXPECT_EQ(DenormalMode::PreserveSign,
            parseDenormalFPAttributeComponent("preserve-sign"));
  EXPECT_EQ(DenormalMode::PositiveZero,
            parseDenormalFPAttributeComponent("positive-zero"));
  EXPECT_EQ(DenormalMode::Dynamic,
            parseDenormalFPAttributeComponent("dynamic"));
  EXPECT_EQ(DenormalMode::Invalid, parseDenormalFPAttributeComponent("foo"));
}

TEST(FloatingPointModeTest, DenormalAttributeName) {
  EXPECT_EQ("ieee", denormalModeKindName(DenormalMode::IEEE));
  EXPECT_EQ("preserve-sign", denormalModeKindName(DenormalMode::PreserveSign));
  EXPECT_EQ("positive-zero", denormalModeKindName(DenormalMode::PositiveZero));
  EXPECT_EQ("dynamic", denormalModeKindName(DenormalMode::Dynamic));
  EXPECT_EQ("", denormalModeKindName(DenormalMode::Invalid));
}

TEST(FloatingPointModeTest, ParseDenormalFPAttribute) {
  EXPECT_EQ(DenormalMode(DenormalMode::IEEE, DenormalMode::IEEE),
            parseDenormalFPAttribute("ieee"));
  EXPECT_EQ(DenormalMode(DenormalMode::IEEE, DenormalMode::IEEE),
            parseDenormalFPAttribute("ieee,ieee"));
  EXPECT_EQ(DenormalMode(DenormalMode::IEEE, DenormalMode::IEEE),
            parseDenormalFPAttribute("ieee,"));
  EXPECT_EQ(DenormalMode(DenormalMode::IEEE, DenormalMode::IEEE),
            parseDenormalFPAttribute(""));
  EXPECT_EQ(DenormalMode(DenormalMode::IEEE, DenormalMode::IEEE),
            parseDenormalFPAttribute(","));

  EXPECT_EQ(DenormalMode(DenormalMode::PreserveSign, DenormalMode::PreserveSign),
            parseDenormalFPAttribute("preserve-sign"));
  EXPECT_EQ(DenormalMode(DenormalMode::PreserveSign, DenormalMode::PreserveSign),
            parseDenormalFPAttribute("preserve-sign,"));
  EXPECT_EQ(DenormalMode(DenormalMode::PreserveSign, DenormalMode::PreserveSign),
            parseDenormalFPAttribute("preserve-sign,preserve-sign"));

  EXPECT_EQ(DenormalMode(DenormalMode::PositiveZero, DenormalMode::PositiveZero),
            parseDenormalFPAttribute("positive-zero"));
  EXPECT_EQ(DenormalMode(DenormalMode::PositiveZero, DenormalMode::PositiveZero),
            parseDenormalFPAttribute("positive-zero,positive-zero"));

  EXPECT_EQ(DenormalMode(DenormalMode::Dynamic, DenormalMode::Dynamic),
            parseDenormalFPAttribute("dynamic"));
  EXPECT_EQ(DenormalMode(DenormalMode::Dynamic, DenormalMode::Dynamic),
            parseDenormalFPAttribute("dynamic,dynamic"));

  EXPECT_EQ(DenormalMode(DenormalMode::IEEE, DenormalMode::PositiveZero),
            parseDenormalFPAttribute("ieee,positive-zero"));
  EXPECT_EQ(DenormalMode(DenormalMode::PositiveZero, DenormalMode::IEEE),
            parseDenormalFPAttribute("positive-zero,ieee"));

  EXPECT_EQ(DenormalMode(DenormalMode::PreserveSign, DenormalMode::IEEE),
            parseDenormalFPAttribute("preserve-sign,ieee"));
  EXPECT_EQ(DenormalMode(DenormalMode::IEEE, DenormalMode::PreserveSign),
            parseDenormalFPAttribute("ieee,preserve-sign"));

  EXPECT_EQ(DenormalMode(DenormalMode::Dynamic, DenormalMode::PreserveSign),
            parseDenormalFPAttribute("dynamic,preserve-sign"));
  EXPECT_EQ(DenormalMode(DenormalMode::PreserveSign, DenormalMode::Dynamic),
            parseDenormalFPAttribute("preserve-sign,dynamic"));

  EXPECT_EQ(DenormalMode(DenormalMode::Invalid, DenormalMode::Invalid),
            parseDenormalFPAttribute("foo"));
  EXPECT_EQ(DenormalMode(DenormalMode::Invalid, DenormalMode::Invalid),
            parseDenormalFPAttribute("foo,foo"));
  EXPECT_EQ(DenormalMode(DenormalMode::Invalid, DenormalMode::Invalid),
            parseDenormalFPAttribute("foo,bar"));
}

TEST(FloatingPointModeTest, RenderDenormalFPAttribute) {
  EXPECT_EQ(DenormalMode(DenormalMode::Invalid, DenormalMode::Invalid),
            parseDenormalFPAttribute("foo"));

  EXPECT_EQ("ieee,ieee",
            DenormalMode(DenormalMode::IEEE, DenormalMode::IEEE).str());
  EXPECT_EQ(",",
            DenormalMode(DenormalMode::Invalid, DenormalMode::Invalid).str());

  EXPECT_EQ(
    "preserve-sign,preserve-sign",
    DenormalMode(DenormalMode::PreserveSign, DenormalMode::PreserveSign).str());

  EXPECT_EQ(
    "positive-zero,positive-zero",
    DenormalMode(DenormalMode::PositiveZero, DenormalMode::PositiveZero).str());

  EXPECT_EQ(
    "ieee,preserve-sign",
    DenormalMode(DenormalMode::IEEE, DenormalMode::PreserveSign).str());

  EXPECT_EQ(
    "preserve-sign,ieee",
    DenormalMode(DenormalMode::PreserveSign, DenormalMode::IEEE).str());

  EXPECT_EQ(
    "preserve-sign,positive-zero",
    DenormalMode(DenormalMode::PreserveSign, DenormalMode::PositiveZero).str());

  EXPECT_EQ("dynamic,dynamic",
            DenormalMode(DenormalMode::Dynamic, DenormalMode::Dynamic).str());
  EXPECT_EQ("ieee,dynamic",
            DenormalMode(DenormalMode::IEEE, DenormalMode::Dynamic).str());
  EXPECT_EQ("dynamic,ieee",
            DenormalMode(DenormalMode::Dynamic, DenormalMode::IEEE).str());
}

TEST(FloatingPointModeTest, DenormalModeIsSimple) {
  EXPECT_TRUE(DenormalMode(DenormalMode::IEEE, DenormalMode::IEEE).isSimple());
  EXPECT_FALSE(DenormalMode(DenormalMode::IEEE,
                            DenormalMode::Invalid).isSimple());
  EXPECT_FALSE(DenormalMode(DenormalMode::PreserveSign,
                            DenormalMode::PositiveZero).isSimple());
  EXPECT_FALSE(DenormalMode(DenormalMode::PreserveSign, DenormalMode::Dynamic)
                   .isSimple());
  EXPECT_FALSE(DenormalMode(DenormalMode::Dynamic, DenormalMode::PreserveSign)
                   .isSimple());
}

TEST(FloatingPointModeTest, DenormalModeIsValid) {
  EXPECT_TRUE(DenormalMode(DenormalMode::IEEE, DenormalMode::IEEE).isValid());
  EXPECT_FALSE(DenormalMode(DenormalMode::IEEE, DenormalMode::Invalid).isValid());
  EXPECT_FALSE(DenormalMode(DenormalMode::Invalid, DenormalMode::IEEE).isValid());
  EXPECT_FALSE(DenormalMode(DenormalMode::Invalid,
                            DenormalMode::Invalid).isValid());
}

TEST(FloatingPointModeTest, DenormalModeConstructor) {
  EXPECT_EQ(DenormalMode(DenormalMode::Invalid, DenormalMode::Invalid),
            DenormalMode::getInvalid());
  EXPECT_EQ(DenormalMode(DenormalMode::IEEE, DenormalMode::IEEE),
            DenormalMode::getIEEE());
  EXPECT_EQ(DenormalMode::getIEEE(), DenormalMode::getDefault());
  EXPECT_EQ(DenormalMode(DenormalMode::Dynamic, DenormalMode::Dynamic),
            DenormalMode::getDynamic());
  EXPECT_EQ(DenormalMode(DenormalMode::PreserveSign, DenormalMode::PreserveSign),
            DenormalMode::getPreserveSign());
  EXPECT_EQ(DenormalMode(DenormalMode::PositiveZero, DenormalMode::PositiveZero),
            DenormalMode::getPositiveZero());
}

TEST(FloatingPointModeTest, DenormalModeMerge) {
  EXPECT_EQ(
      DenormalMode::getInvalid(),
      DenormalMode::getInvalid().mergeCalleeMode(DenormalMode::getInvalid()));
  EXPECT_EQ(DenormalMode::getIEEE(), DenormalMode::getInvalid().mergeCalleeMode(
                                         DenormalMode::getIEEE()));
  EXPECT_EQ(DenormalMode::getInvalid(), DenormalMode::getIEEE().mergeCalleeMode(
                                            DenormalMode::getInvalid()));

  EXPECT_EQ(DenormalMode::getIEEE(), DenormalMode::getIEEE().mergeCalleeMode(
                                         DenormalMode::getDynamic()));
  EXPECT_EQ(DenormalMode::getPreserveSign(),
            DenormalMode::getPreserveSign().mergeCalleeMode(
                DenormalMode::getDynamic()));
  EXPECT_EQ(DenormalMode::getPositiveZero(),
            DenormalMode::getPositiveZero().mergeCalleeMode(
                DenormalMode::getDynamic()));
  EXPECT_EQ(
      DenormalMode::getDynamic(),
      DenormalMode::getDynamic().mergeCalleeMode(DenormalMode::getDynamic()));

  EXPECT_EQ(DenormalMode(DenormalMode::IEEE, DenormalMode::PreserveSign),
            DenormalMode(DenormalMode::IEEE, DenormalMode::PreserveSign)
                .mergeCalleeMode(
                    DenormalMode(DenormalMode::IEEE, DenormalMode::Dynamic)));

  EXPECT_EQ(DenormalMode(DenormalMode::PreserveSign, DenormalMode::IEEE),
            DenormalMode(DenormalMode::PreserveSign, DenormalMode::IEEE)
                .mergeCalleeMode(
                    DenormalMode(DenormalMode::Dynamic, DenormalMode::IEEE)));

  EXPECT_EQ(
      DenormalMode(DenormalMode::PositiveZero, DenormalMode::PreserveSign),
      DenormalMode(DenormalMode::PositiveZero, DenormalMode::PreserveSign)
          .mergeCalleeMode(
              DenormalMode(DenormalMode::Dynamic, DenormalMode::Dynamic)));

  EXPECT_EQ(
      DenormalMode(DenormalMode::PositiveZero, DenormalMode::PreserveSign),
      DenormalMode(DenormalMode::PositiveZero, DenormalMode::PreserveSign)
          .mergeCalleeMode(
              DenormalMode(DenormalMode::PositiveZero, DenormalMode::Dynamic)));

  EXPECT_EQ(
      DenormalMode(DenormalMode::PositiveZero, DenormalMode::PreserveSign),
      DenormalMode(DenormalMode::PositiveZero, DenormalMode::PreserveSign)
          .mergeCalleeMode(
              DenormalMode(DenormalMode::Dynamic, DenormalMode::PreserveSign)));

  // Test some invalid / undefined behavior cases
  EXPECT_EQ(
      DenormalMode::getPreserveSign(),
      DenormalMode::getIEEE().mergeCalleeMode(DenormalMode::getPreserveSign()));
  EXPECT_EQ(
      DenormalMode::getPreserveSign(),
      DenormalMode::getIEEE().mergeCalleeMode(DenormalMode::getPreserveSign()));
  EXPECT_EQ(
      DenormalMode::getIEEE(),
      DenormalMode::getPreserveSign().mergeCalleeMode(DenormalMode::getIEEE()));
  EXPECT_EQ(
      DenormalMode::getIEEE(),
      DenormalMode::getPreserveSign().mergeCalleeMode(DenormalMode::getIEEE()));
}
}
