//===- 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 {

static constexpr FPClassTest OrderedLessThanZeroMask =
    fcNegSubnormal | fcNegNormal | fcNegInf;
static constexpr FPClassTest OrderedGreaterThanZeroMask =
    fcPosSubnormal | fcPosNormal | fcPosInf;

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::PreserveSign,
            parseDenormalFPAttributeComponent("preservesign"));
  EXPECT_EQ(DenormalMode::PositiveZero,
            parseDenormalFPAttributeComponent("positivezero"));
  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("preserve-sign,preserve-sign",
            DenormalMode(DenormalMode::PreserveSign, DenormalMode::PreserveSign)
                .str());

  EXPECT_EQ(
    "positive-zero,positive-zero",
    DenormalMode(DenormalMode::PositiveZero, DenormalMode::PositiveZero).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()));
}

TEST(FloatingPointModeTest, DenormalModePredicates) {
  EXPECT_TRUE(DenormalMode::getPreserveSign().inputsAreZero());
  EXPECT_TRUE(DenormalMode::getPositiveZero().inputsAreZero());
  EXPECT_FALSE(DenormalMode::getIEEE().inputsAreZero());
  EXPECT_FALSE(DenormalMode::getDynamic().inputsAreZero());
}

#define TEST_ORDERED_LT(a, b)                                                  \
  EXPECT_TRUE(cannotOrderStrictlyGreater(a, b));                               \
  EXPECT_FALSE(cannotOrderStrictlyGreater(b, a));

TEST(FloatingPointModeTest, cannotOrderStrictlyGreater) {
  EXPECT_TRUE(cannotOrderStrictlyGreater(fcNone, fcNone));
  EXPECT_FALSE(cannotOrderStrictlyGreater(fcAllFlags, fcAllFlags));

  EXPECT_TRUE(cannotOrderStrictlyGreater(fcNan, fcNan));
  EXPECT_TRUE(cannotOrderStrictlyGreater(fcQNan, fcQNan));
  EXPECT_TRUE(cannotOrderStrictlyGreater(fcSNan, fcSNan));
  EXPECT_TRUE(cannotOrderStrictlyGreater(fcSNan, fcQNan));
  EXPECT_TRUE(cannotOrderStrictlyGreater(fcQNan, fcSNan));
  EXPECT_TRUE(cannotOrderStrictlyGreater(fcQNan, fcNan));
  EXPECT_TRUE(cannotOrderStrictlyGreater(fcSNan, fcNan));

  EXPECT_TRUE(cannotOrderStrictlyGreater(fcNegInf, fcSNan));
  EXPECT_TRUE(cannotOrderStrictlyGreater(fcNegInf, fcQNan));
  EXPECT_TRUE(cannotOrderStrictlyGreater(fcNegInf, fcNan));
  EXPECT_TRUE(cannotOrderStrictlyGreater(fcSNan, fcNegInf));
  EXPECT_TRUE(cannotOrderStrictlyGreater(fcQNan, fcNegInf));
  EXPECT_TRUE(cannotOrderStrictlyGreater(fcNan, fcNegInf));
  EXPECT_TRUE(cannotOrderStrictlyGreater(fcNegInf, fcNegInf));
  EXPECT_TRUE(cannotOrderStrictlyGreater(fcNegZero, fcPosZero));
  EXPECT_TRUE(cannotOrderStrictlyGreater(fcNegZero, fcPosZero, true));
  EXPECT_TRUE(cannotOrderStrictlyGreater(fcPosZero, fcNegZero));
  EXPECT_FALSE(cannotOrderStrictlyGreater(fcPosZero, fcNegZero, true));

  EXPECT_TRUE(cannotOrderStrictlyGreater(fcPosZero, fcPosZero));
  EXPECT_TRUE(cannotOrderStrictlyGreater(fcPosZero, fcPosZero, true));

  EXPECT_TRUE(cannotOrderStrictlyGreater(fcNegZero, fcNegZero));
  EXPECT_TRUE(cannotOrderStrictlyGreater(fcNegZero, fcNegZero, true));

  EXPECT_TRUE(cannotOrderStrictlyGreater(fcNegSubnormal, fcNegZero));
  EXPECT_FALSE(cannotOrderStrictlyGreater(fcNegZero, fcNegSubnormal));

  EXPECT_TRUE(cannotOrderStrictlyGreater(fcNegZero, fcPosSubnormal));
  EXPECT_FALSE(cannotOrderStrictlyGreater(fcPosSubnormal, fcNegZero));

  EXPECT_FALSE(cannotOrderStrictlyGreater(fcNegZero, fcSubnormal));
  EXPECT_FALSE(cannotOrderStrictlyGreater(fcSubnormal, fcNegZero));

  EXPECT_TRUE(cannotOrderStrictlyGreater(fcPosZero, fcPosSubnormal));
  EXPECT_FALSE(cannotOrderStrictlyGreater(fcPosSubnormal, fcPosZero));

  EXPECT_FALSE(cannotOrderStrictlyGreater(fcPosZero, fcNegSubnormal));
  EXPECT_FALSE(cannotOrderStrictlyGreater(fcPosZero, fcNegSubnormal, true));
  EXPECT_FALSE(cannotOrderStrictlyGreater(fcZero, fcSubnormal));
  EXPECT_FALSE(cannotOrderStrictlyGreater(fcZero, fcSubnormal, true));
  EXPECT_FALSE(cannotOrderStrictlyGreater(fcZero, fcNegSubnormal));

  EXPECT_TRUE(cannotOrderStrictlyGreater(fcZero, fcPosSubnormal));
  EXPECT_FALSE(cannotOrderStrictlyGreater(fcPosSubnormal, fcZero));

  TEST_ORDERED_LT(fcNegInf, fcNegNormal);
  TEST_ORDERED_LT(fcNegInf, fcNegSubnormal);
  TEST_ORDERED_LT(fcNegInf, fcNegZero);
  TEST_ORDERED_LT(fcNegInf, fcPosZero);
  TEST_ORDERED_LT(fcNegInf, fcPosSubnormal);
  TEST_ORDERED_LT(fcNegInf, fcPosNormal);
  TEST_ORDERED_LT(fcNegInf, fcPosInf);

  TEST_ORDERED_LT(fcNegNormal, fcPosNormal);
  TEST_ORDERED_LT(fcNegNormal, fcPositive);
  TEST_ORDERED_LT(fcNegNormal, fcPositive | fcNan);
  TEST_ORDERED_LT(fcNegNormal | fcNan, fcPositive | fcNan);

  EXPECT_TRUE(cannotOrderStrictlyGreater(fcNegNormal, fcPosNormal | fcNan));
  EXPECT_FALSE(cannotOrderStrictlyGreater(fcPosNormal | fcNan, fcNegNormal));
  EXPECT_FALSE(
      cannotOrderStrictlyGreater(fcPosNormal | fcNan, fcNegNormal | fcNan));
  EXPECT_FALSE(cannotOrderStrictlyGreater(fcNegNormal | fcNan, fcNegNormal));
  EXPECT_FALSE(
      cannotOrderStrictlyGreater(fcNegNormal | fcNan, fcNegNormal | fcNan));

  EXPECT_TRUE(cannotOrderStrictlyGreater(fcNegInf, ~fcNegInf));
  EXPECT_FALSE(cannotOrderStrictlyGreater(~fcNegInf, fcNegInf));

  TEST_ORDERED_LT(fcNegInf, ~(fcNegInf | fcNan));
  TEST_ORDERED_LT(fcNegative, fcPositive);
  TEST_ORDERED_LT(fcNegFinite, fcPosFinite);
  TEST_ORDERED_LT(fcNegZero, fcPosInf);
  TEST_ORDERED_LT(fcPosZero, fcPosInf);
  TEST_ORDERED_LT(fcZero, fcPosInf);

  EXPECT_FALSE(cannotOrderStrictlyGreater(fcNegZero, fcNegInf));
  EXPECT_TRUE(cannotOrderStrictlyGreater(fcNegInf, fcNegZero));

  EXPECT_FALSE(cannotOrderStrictlyGreater(fcZero, fcInf));
  EXPECT_FALSE(cannotOrderStrictlyGreater(fcInf, fcZero));

  EXPECT_FALSE(cannotOrderStrictlyGreater(fcZero, fcInf | fcNan));
  EXPECT_FALSE(cannotOrderStrictlyGreater(fcInf | fcNan, fcZero));

  EXPECT_TRUE(cannotOrderStrictlyGreater(fcNegInf | fcNan, fcZero));
  EXPECT_FALSE(cannotOrderStrictlyGreater(fcPosInf | fcNan, fcZero));

  EXPECT_FALSE(cannotOrderStrictlyGreater(fcZero | fcNan, fcInf));
  EXPECT_FALSE(cannotOrderStrictlyGreater(fcInf, fcZero | fcNan));

  TEST_ORDERED_LT(OrderedLessThanZeroMask, OrderedGreaterThanZeroMask);
  TEST_ORDERED_LT(OrderedLessThanZeroMask, OrderedGreaterThanZeroMask | fcNan);

  TEST_ORDERED_LT(OrderedLessThanZeroMask | fcNegZero,
                  OrderedGreaterThanZeroMask);
  TEST_ORDERED_LT(OrderedLessThanZeroMask | fcPosZero,
                  OrderedGreaterThanZeroMask);
  TEST_ORDERED_LT(OrderedLessThanZeroMask | fcZero, OrderedGreaterThanZeroMask);

  EXPECT_TRUE(cannotOrderStrictlyGreater(fcNegZero, fcPosZero));
  EXPECT_TRUE(cannotOrderStrictlyGreater(fcNegZero, fcPosZero, true));
  EXPECT_TRUE(cannotOrderStrictlyGreater(fcPosZero, fcNegZero));
  EXPECT_FALSE(cannotOrderStrictlyGreater(fcPosZero, fcNegZero, true));

  TEST_ORDERED_LT(fcNegZero, fcPosSubnormal);
  TEST_ORDERED_LT(fcNegZero, fcPosZero | fcPosSubnormal);
  TEST_ORDERED_LT(fcNegZero, OrderedGreaterThanZeroMask);

  EXPECT_FALSE(cannotOrderStrictlyGreater(OrderedLessThanZeroMask,
                                          OrderedLessThanZeroMask | fcNan));
  EXPECT_FALSE(cannotOrderStrictlyGreater(OrderedLessThanZeroMask | fcNan,
                                          OrderedLessThanZeroMask | fcNan));

  TEST_ORDERED_LT(fcZero, fcPosInf);
  TEST_ORDERED_LT(fcZero, fcPosInf | fcNan);

  EXPECT_TRUE(cannotOrderStrictlyGreater(fcZero | fcNan, fcPosInf));

  TEST_ORDERED_LT(fcPosNormal, fcPosInf);
  TEST_ORDERED_LT(fcPosNormal, fcPosInf | fcNan);

  TEST_ORDERED_LT(fcNegInf, fcPosInf);
  TEST_ORDERED_LT(fcNegInf | fcNegZero, fcPosInf);

  EXPECT_TRUE(
      cannotOrderStrictlyGreater(fcNegInf | fcNegZero, fcZero | fcPosInf));
  EXPECT_FALSE(
      cannotOrderStrictlyGreater(fcZero | fcPosInf, fcNegInf | fcNegZero));

  EXPECT_TRUE(cannotOrderStrictlyGreater(fcNegInf | fcNegZero,
                                         fcZero | fcPosInf, true));
  EXPECT_FALSE(cannotOrderStrictlyGreater(fcZero | fcPosInf,
                                          fcNegInf | fcNegZero, true));

  EXPECT_TRUE(cannotOrderStrictlyGreater(fcNegInf | fcNegZero,
                                         fcZero | fcPosInf | fcNan));
  EXPECT_TRUE(cannotOrderStrictlyGreater(fcNegInf | fcNegZero,
                                         fcPosZero | fcPosInf | fcNan));

  EXPECT_TRUE(cannotOrderStrictlyGreater(fcPosInf, fcPosInf));
  EXPECT_TRUE(cannotOrderStrictlyGreater(fcNegInf, fcNegInf));
  EXPECT_TRUE(cannotOrderStrictlyGreater(fcPosZero, fcPosZero));
  EXPECT_TRUE(cannotOrderStrictlyGreater(fcNegZero, fcNegZero));
  EXPECT_FALSE(cannotOrderStrictlyGreater(fcNegSubnormal, fcNegSubnormal));
  EXPECT_FALSE(cannotOrderStrictlyGreater(fcPosSubnormal, fcPosSubnormal));
  EXPECT_FALSE(cannotOrderStrictlyGreater(fcNegNormal, fcNegNormal));
  EXPECT_FALSE(cannotOrderStrictlyGreater(fcPosNormal, fcPosNormal));

  EXPECT_FALSE(cannotOrderStrictlyGreater(fcFinite, fcFinite));

  EXPECT_FALSE(cannotOrderStrictlyGreater(fcFinite, fcInf));
  EXPECT_FALSE(cannotOrderStrictlyGreater(fcInf, fcInf));

  EXPECT_FALSE(cannotOrderStrictlyGreater(fcPosInf, ~fcPosInf));
  EXPECT_TRUE(cannotOrderStrictlyGreater(~fcPosInf, fcPosInf));

  EXPECT_TRUE(cannotOrderStrictlyGreater(fcNegInf, ~fcNegInf));
  EXPECT_FALSE(cannotOrderStrictlyGreater(~fcNegInf, fcNegInf));
}

TEST(FloatingPointModeTest, cannotOrderStrictlyGreaterEq) {
  EXPECT_TRUE(cannotOrderStrictlyGreaterEq(fcNone, fcNone));
  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcAllFlags, fcAllFlags));

  EXPECT_TRUE(cannotOrderStrictlyGreaterEq(fcNan, fcNan));
  EXPECT_TRUE(cannotOrderStrictlyGreaterEq(fcQNan, fcQNan));
  EXPECT_TRUE(cannotOrderStrictlyGreaterEq(fcSNan, fcSNan));
  EXPECT_TRUE(cannotOrderStrictlyGreaterEq(fcSNan, fcQNan));
  EXPECT_TRUE(cannotOrderStrictlyGreaterEq(fcQNan, fcSNan));
  EXPECT_TRUE(cannotOrderStrictlyGreaterEq(fcQNan, fcNan));
  EXPECT_TRUE(cannotOrderStrictlyGreaterEq(fcSNan, fcNan));

  EXPECT_TRUE(cannotOrderStrictlyGreaterEq(fcNegInf, fcSNan));
  EXPECT_TRUE(cannotOrderStrictlyGreaterEq(fcNegInf, fcQNan));
  EXPECT_TRUE(cannotOrderStrictlyGreaterEq(fcNegInf, fcNan));
  EXPECT_TRUE(cannotOrderStrictlyGreaterEq(fcSNan, fcNegInf));
  EXPECT_TRUE(cannotOrderStrictlyGreaterEq(fcQNan, fcNegInf));
  EXPECT_TRUE(cannotOrderStrictlyGreaterEq(fcNan, fcNegInf));
  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcNegInf, fcNegInf));
  EXPECT_TRUE(cannotOrderStrictlyGreaterEq(fcNegZero, fcPosZero,
                                           /*OrderedZeroSign=*/true));
  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcNegZero, fcPosZero));
  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcPosZero, fcNegZero));
  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcPosZero, fcNegZero,
                                            /*OrderedZeroSign=*/true));

  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcPosZero, fcPosZero));
  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcPosZero, fcPosZero,
                                            /*OrderedZeroSign=*/true));
  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcNegZero, fcNegZero));
  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcNegZero, fcNegZero,
                                            /*OrderedZeroSign=*/true));

  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(OrderedLessThanZeroMask,
                                            OrderedLessThanZeroMask));
  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(OrderedLessThanZeroMask,
                                            OrderedLessThanZeroMask | fcNan));

  EXPECT_TRUE(cannotOrderStrictlyGreaterEq(OrderedLessThanZeroMask,
                                           OrderedGreaterThanZeroMask));
  EXPECT_TRUE(cannotOrderStrictlyGreaterEq(OrderedLessThanZeroMask,
                                           OrderedGreaterThanZeroMask | fcNan));

  EXPECT_TRUE(cannotOrderStrictlyGreaterEq(OrderedLessThanZeroMask | fcNan,
                                           OrderedGreaterThanZeroMask));

  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcNegZero, fcNegZero | fcNan));
  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcNegZero | fcNan, fcNegZero));

  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcNegZero, fcPosZero));
  EXPECT_TRUE(cannotOrderStrictlyGreaterEq(fcNegZero, fcPosZero,
                                           /*OrderedZeroSign=*/true));
  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcPosZero, fcNegZero));
  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcNegZero | fcNan, fcPosZero));
  EXPECT_TRUE(cannotOrderStrictlyGreaterEq(fcNegZero | fcNan, fcPosZero,
                                           /*OrderedZeroSign=*/true));

  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcPosZero | fcNan, fcNegZero));
  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcNegZero, fcPosZero | fcNan));
  EXPECT_TRUE(cannotOrderStrictlyGreaterEq(fcNegZero, fcPosZero | fcNan,
                                           /*OrderedZeroSign=*/true));
  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcPosZero, fcNegZero | fcNan));

  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcNegZero, fcZero));
  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcZero, fcNegZero,
                                            /*OrderedZeroSign=*/true));

  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcZero, fcPosZero));
  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcZero, fcPosZero,
                                            /*OrderedZeroSign=*/true));

  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcPosInf, fcPosInf));
  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcPosInf, fcPosInf | fcNan));
  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcPosInf | fcNan, fcPosInf));
  EXPECT_FALSE(
      cannotOrderStrictlyGreaterEq(fcPosInf | fcNan, fcPosInf | fcNan));

  EXPECT_TRUE(cannotOrderStrictlyGreaterEq(fcNegSubnormal, fcPosZero));
  EXPECT_TRUE(cannotOrderStrictlyGreaterEq(fcNegSubnormal, fcNegZero));
  EXPECT_FALSE(
      cannotOrderStrictlyGreaterEq(fcNegSubnormal | fcNegZero, fcNegZero));

  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcPosSubnormal, fcZero));
  EXPECT_TRUE(cannotOrderStrictlyGreaterEq(fcNegSubnormal, fcZero));
  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcSubnormal, fcZero));

  EXPECT_TRUE(cannotOrderStrictlyGreaterEq(fcZero, fcPosInf));
  EXPECT_TRUE(cannotOrderStrictlyGreaterEq(fcZero, fcPosInf | fcNan));
  EXPECT_TRUE(cannotOrderStrictlyGreaterEq(fcZero | fcNan, fcPosInf));

  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcPosNormal, fcPosNormal));
  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcPosSubnormal, fcPosSubnormal));
  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcNegNormal, fcNegNormal));
  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcNegSubnormal, fcNegSubnormal));

  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcPosNormal | fcPosSubnormal,
                                            fcPosNormal | fcPosSubnormal));
  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcNegNormal | fcNegSubnormal,
                                            fcNegNormal | fcNegSubnormal));
  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcNormal, fcNormal));
  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcSubnormal, fcSubnormal));
  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcSubnormal | fcNormal,
                                            fcSubnormal | fcNormal));

  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcNegInf, fcNegInf | fcNan));
  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcNegInf | fcNan, fcNegInf));

  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcNegSubnormal, fcNegNormal));
  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcPosSubnormal, fcNegNormal));

  EXPECT_TRUE(cannotOrderStrictlyGreaterEq(fcPosSubnormal, fcPosNormal));
  EXPECT_TRUE(cannotOrderStrictlyGreaterEq(fcNegSubnormal, fcPosNormal));

  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcNegSubnormal, fcNegInf));

  EXPECT_FALSE(
      cannotOrderStrictlyGreaterEq(fcNegInf | fcNegZero, fcZero | fcPosInf));
  EXPECT_FALSE(
      cannotOrderStrictlyGreaterEq(fcZero | fcPosInf, fcNegInf | fcNegZero));

  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcNegInf | fcNegZero,
                                            fcZero | fcPosInf | fcNan));
  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcNegInf | fcNegZero,
                                            fcPosZero | fcPosInf | fcNan));
  EXPECT_TRUE(cannotOrderStrictlyGreaterEq(fcNegInf | fcNegZero,
                                           fcPosZero | fcPosInf | fcNan,
                                           /*OrderedZeroSign=*/true));

  EXPECT_FALSE(
      cannotOrderStrictlyGreaterEq(fcPosInf | fcPosNormal, fcPosNormal));
  EXPECT_FALSE(
      cannotOrderStrictlyGreaterEq(fcPosNormal, fcPosInf | fcPosNormal));
  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(
      fcPosInf | fcPosNormal | fcSubnormal, fcPosNormal));
  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(
      fcPosNormal, fcPosInf | fcPosNormal | fcSubnormal));

  EXPECT_FALSE(
      cannotOrderStrictlyGreaterEq(fcPosSubnormal | fcPosZero, fcPosZero));
  EXPECT_FALSE(
      cannotOrderStrictlyGreaterEq(fcPosZero, fcPosSubnormal | fcPosZero));

  EXPECT_FALSE(
      cannotOrderStrictlyGreaterEq(fcSubnormal | fcPosZero, fcPosZero));
  EXPECT_FALSE(
      cannotOrderStrictlyGreaterEq(fcPosZero, fcSubnormal | fcPosZero));

  EXPECT_FALSE(
      cannotOrderStrictlyGreaterEq(fcSubnormal | fcPosZero, fcNegZero));
  EXPECT_FALSE(
      cannotOrderStrictlyGreaterEq(fcNegZero, fcSubnormal | fcPosZero));

  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcNegative, fcPositive));
  EXPECT_TRUE(cannotOrderStrictlyGreaterEq(fcNegative, fcPositive,
                                           /*OrderedZeroSign=*/true));
  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcPositive, fcNegative));

  EXPECT_FALSE(
      cannotOrderStrictlyGreaterEq(fcNegative | fcNan, fcPositive | fcNan));
  EXPECT_TRUE(cannotOrderStrictlyGreaterEq(
      fcNegative | fcNan, fcPositive | fcNan, /*OrderedZeroSign=*/true));
  EXPECT_FALSE(
      cannotOrderStrictlyGreaterEq(fcPositive | fcNan, fcNegative | fcNan));

  EXPECT_TRUE(cannotOrderStrictlyGreaterEq(fcZero, fcNan));
  EXPECT_TRUE(cannotOrderStrictlyGreaterEq(fcNan, fcZero));

  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcZero, fcSubnormal));
  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcSubnormal, fcZero));

  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcFinite, fcFinite));

  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcFinite, fcInf));
  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcInf, fcInf));

  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcNegFinite, fcPosFinite));
  EXPECT_TRUE(cannotOrderStrictlyGreaterEq(fcNegFinite, fcPosFinite,
                                           /*OrderedZeroSign=*/true));
  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcPosFinite, fcNegFinite));

  EXPECT_FALSE(
      cannotOrderStrictlyGreaterEq(fcNegFinite, fcPosFinite | fcNegZero));
  EXPECT_FALSE(
      cannotOrderStrictlyGreaterEq(fcPosFinite | fcNegZero, fcNegFinite));

  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcZero | fcInf, fcZero | fcInf));
  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcZero, fcZero | fcInf));
  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcZero | fcInf, fcZero));
  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcZero | fcInf | fcNormal, fcZero));

  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(fcPosInf, ~fcPosInf));
  EXPECT_TRUE(cannotOrderStrictlyGreaterEq(~fcPosInf, fcPosInf));

  EXPECT_TRUE(cannotOrderStrictlyGreaterEq(fcNegInf, ~fcNegInf));
  EXPECT_FALSE(cannotOrderStrictlyGreaterEq(~fcNegInf, fcNegInf));
}

TEST(FloatingPointModeTest, cannotOrderStrictlyLess) {
  EXPECT_TRUE(cannotOrderStrictlyLess(fcNone, fcNone));
  EXPECT_FALSE(cannotOrderStrictlyLess(fcAllFlags, fcAllFlags));

  EXPECT_FALSE(cannotOrderStrictlyLess(OrderedLessThanZeroMask,
                                       OrderedLessThanZeroMask));
  EXPECT_FALSE(cannotOrderStrictlyLess(OrderedLessThanZeroMask,
                                       OrderedGreaterThanZeroMask));

  EXPECT_TRUE(cannotOrderStrictlyLess(OrderedGreaterThanZeroMask,
                                      OrderedLessThanZeroMask));

  EXPECT_TRUE(cannotOrderStrictlyLess(fcPositive, fcNegative));
  EXPECT_TRUE(cannotOrderStrictlyLess(fcPositive, fcNegative,
                                      /*OrderedZeroSign=*/true));

  EXPECT_FALSE(cannotOrderStrictlyLess(fcNegative, fcPositive));
  EXPECT_FALSE(cannotOrderStrictlyLess(fcNegative, fcPositive,
                                       /*OrderedZeroSign=*/true));

  EXPECT_TRUE(cannotOrderStrictlyLess(fcPositive | fcNan, fcNegative));
  EXPECT_TRUE(cannotOrderStrictlyLess(fcPositive | fcNan, fcNegative,
                                      /*OrderedZeroSign=*/true));

  EXPECT_TRUE(cannotOrderStrictlyLess(fcPositive, fcNegative | fcNan));
  EXPECT_TRUE(cannotOrderStrictlyLess(fcPositive, fcNegative | fcNan,
                                      /*OrderedZeroSign=*/true));

  EXPECT_TRUE(cannotOrderStrictlyLess(OrderedGreaterThanZeroMask | fcNan,
                                      OrderedLessThanZeroMask));
  EXPECT_TRUE(cannotOrderStrictlyLess(OrderedGreaterThanZeroMask,
                                      OrderedLessThanZeroMask | fcNan));
  EXPECT_TRUE(cannotOrderStrictlyLess(OrderedGreaterThanZeroMask | fcNan,
                                      OrderedLessThanZeroMask | fcNan));

  EXPECT_TRUE(cannotOrderStrictlyLess(fcNan, fcNan));
  EXPECT_TRUE(cannotOrderStrictlyLess(fcQNan, fcQNan));
  EXPECT_TRUE(cannotOrderStrictlyLess(fcSNan, fcSNan));
  EXPECT_TRUE(cannotOrderStrictlyLess(fcSNan, fcQNan));
  EXPECT_TRUE(cannotOrderStrictlyLess(fcQNan, fcSNan));
  EXPECT_TRUE(cannotOrderStrictlyLess(fcQNan, fcNan));
  EXPECT_TRUE(cannotOrderStrictlyLess(fcSNan, fcNan));

  EXPECT_TRUE(cannotOrderStrictlyLess(fcNegInf, fcSNan));
  EXPECT_TRUE(cannotOrderStrictlyLess(fcNegInf, fcQNan));
  EXPECT_TRUE(cannotOrderStrictlyLess(fcNegInf, fcNan));
  EXPECT_TRUE(cannotOrderStrictlyLess(fcSNan, fcNegInf));
  EXPECT_TRUE(cannotOrderStrictlyLess(fcQNan, fcNegInf));
  EXPECT_TRUE(cannotOrderStrictlyLess(fcNan, fcNegInf));
  EXPECT_TRUE(cannotOrderStrictlyLess(fcNegInf, fcNegInf));
  EXPECT_TRUE(cannotOrderStrictlyLess(fcNegZero, fcPosZero));
  EXPECT_TRUE(cannotOrderStrictlyLess(fcPosZero, fcNegZero));
  EXPECT_TRUE(cannotOrderStrictlyLess(fcPosZero, fcPosZero));
  EXPECT_FALSE(cannotOrderStrictlyLessEq(fcPosZero, fcPosZero));

  EXPECT_TRUE(
      cannotOrderStrictlyLess(fcPosZero, fcNegZero, /*OrderedZeroSign=*/true));

  EXPECT_TRUE(cannotOrderStrictlyLess(fcZero, fcPosZero));
  EXPECT_FALSE(cannotOrderStrictlyLess(fcZero, fcPosZero, true));
  EXPECT_TRUE(cannotOrderStrictlyLess(fcPosZero, fcZero));
  EXPECT_TRUE(cannotOrderStrictlyLess(fcPosZero, fcZero, true));
  EXPECT_TRUE(cannotOrderStrictlyLess(fcZero, fcNegZero));
  EXPECT_TRUE(cannotOrderStrictlyLess(fcZero, fcNegZero, true));
  EXPECT_TRUE(cannotOrderStrictlyLess(fcNegZero, fcZero));
  EXPECT_FALSE(cannotOrderStrictlyLess(fcNegZero, fcZero, true));
  EXPECT_TRUE(cannotOrderStrictlyLess(fcZero, fcZero));
  EXPECT_FALSE(cannotOrderStrictlyLess(fcZero, fcZero, true));

  EXPECT_TRUE(cannotOrderStrictlyLess(fcInf, fcNan));
  EXPECT_TRUE(cannotOrderStrictlyLess(fcNan, fcInf));

  EXPECT_TRUE(
      cannotOrderStrictlyLess(fcPosInf | fcPosZero, fcNegZero | fcNegInf));
  EXPECT_TRUE(cannotOrderStrictlyLess(
      fcPosInf | fcPosZero, fcNegZero | fcNegInf, /*OrderedZeroSign=*/true));

  EXPECT_TRUE(cannotOrderStrictlyLess(fcPosInf | fcPosZero, fcZero | fcNegInf));
  EXPECT_TRUE(cannotOrderStrictlyLess(fcPosInf | fcPosZero, fcZero | fcNegInf,
                                      /*OrderedZeroSign=*/true));

  EXPECT_FALSE(
      cannotOrderStrictlyLess(fcZero | fcNegInf, fcPosInf | fcPosZero));

  EXPECT_FALSE(
      cannotOrderStrictlyLess(fcNegInf | fcNegZero, fcZero | fcPosInf));
  EXPECT_FALSE(
      cannotOrderStrictlyLess(fcNegInf | fcNegZero, fcZero | fcPosInf, true));

  EXPECT_TRUE(cannotOrderStrictlyLess(fcZero | fcPosInf, fcNegInf | fcNegZero));
  EXPECT_TRUE(
      cannotOrderStrictlyLess(fcZero | fcPosInf, fcNegInf | fcNegZero, true));

  EXPECT_TRUE(cannotOrderStrictlyLess(fcPosInf, ~fcPosInf));
  EXPECT_FALSE(cannotOrderStrictlyLess(~fcPosInf, fcPosInf));

  EXPECT_FALSE(cannotOrderStrictlyLess(fcNegInf, ~fcNegInf));
  EXPECT_TRUE(cannotOrderStrictlyLess(~fcNegInf, fcNegInf));
}

TEST(FloatingPointModeTest, cannotOrderStrictlyLessEq) {
  EXPECT_TRUE(cannotOrderStrictlyLessEq(fcNone, fcNone));
  EXPECT_FALSE(cannotOrderStrictlyLessEq(fcAllFlags, fcAllFlags));

  EXPECT_FALSE(cannotOrderStrictlyLessEq(OrderedLessThanZeroMask,
                                         OrderedLessThanZeroMask));
  EXPECT_FALSE(cannotOrderStrictlyLessEq(OrderedLessThanZeroMask,
                                         OrderedGreaterThanZeroMask));

  EXPECT_TRUE(cannotOrderStrictlyLessEq(OrderedGreaterThanZeroMask,
                                        OrderedLessThanZeroMask));

  EXPECT_FALSE(cannotOrderStrictlyLessEq(fcPositive, fcNegative));
  EXPECT_TRUE(cannotOrderStrictlyLessEq(fcPositive, fcNegative,
                                        /*OrderedZeroSign=*/true));

  EXPECT_FALSE(cannotOrderStrictlyLessEq(fcNegative, fcPositive));
  EXPECT_FALSE(cannotOrderStrictlyLessEq(fcNegative, fcPositive,
                                         /*OrderedZeroSign=*/true));

  EXPECT_FALSE(cannotOrderStrictlyLessEq(fcPositive | fcNan, fcNegative));
  EXPECT_TRUE(cannotOrderStrictlyLessEq(fcPositive | fcNan, fcNegative,
                                        /*OrderedZeroSign=*/true));

  EXPECT_FALSE(cannotOrderStrictlyLessEq(fcPositive, fcNegative | fcNan));
  EXPECT_TRUE(cannotOrderStrictlyLessEq(fcPositive, fcNegative | fcNan,
                                        /*OrderedZeroSign=*/true));

  EXPECT_TRUE(cannotOrderStrictlyLessEq(OrderedGreaterThanZeroMask | fcNan,
                                        OrderedLessThanZeroMask));
  EXPECT_TRUE(cannotOrderStrictlyLessEq(OrderedGreaterThanZeroMask,
                                        OrderedLessThanZeroMask | fcNan));
  EXPECT_TRUE(cannotOrderStrictlyLessEq(OrderedGreaterThanZeroMask | fcNan,
                                        OrderedLessThanZeroMask | fcNan));

  EXPECT_TRUE(cannotOrderStrictlyLessEq(fcNan, fcNan));
  EXPECT_TRUE(cannotOrderStrictlyLessEq(fcQNan, fcQNan));
  EXPECT_TRUE(cannotOrderStrictlyLessEq(fcSNan, fcSNan));
  EXPECT_TRUE(cannotOrderStrictlyLessEq(fcSNan, fcQNan));
  EXPECT_TRUE(cannotOrderStrictlyLessEq(fcQNan, fcSNan));
  EXPECT_TRUE(cannotOrderStrictlyLessEq(fcQNan, fcNan));
  EXPECT_TRUE(cannotOrderStrictlyLessEq(fcSNan, fcNan));

  EXPECT_TRUE(cannotOrderStrictlyLessEq(fcNegInf, fcSNan));
  EXPECT_TRUE(cannotOrderStrictlyLessEq(fcNegInf, fcQNan));
  EXPECT_TRUE(cannotOrderStrictlyLessEq(fcNegInf, fcNan));
  EXPECT_TRUE(cannotOrderStrictlyLessEq(fcSNan, fcNegInf));
  EXPECT_TRUE(cannotOrderStrictlyLessEq(fcQNan, fcNegInf));
  EXPECT_TRUE(cannotOrderStrictlyLessEq(fcNan, fcNegInf));
  EXPECT_FALSE(cannotOrderStrictlyLessEq(fcNegInf, fcNegInf));
  EXPECT_FALSE(cannotOrderStrictlyLessEq(fcNegZero, fcPosZero));
  EXPECT_FALSE(cannotOrderStrictlyLessEq(fcPosZero, fcNegZero));
  EXPECT_TRUE(cannotOrderStrictlyLessEq(fcPosZero, fcNegZero,
                                        /*OrderedZeroSign=*/true));

  EXPECT_FALSE(cannotOrderStrictlyLessEq(fcZero, fcPosZero));
  EXPECT_FALSE(cannotOrderStrictlyLessEq(fcPosZero, fcZero));
  EXPECT_FALSE(cannotOrderStrictlyLessEq(fcZero, fcNegZero));
  EXPECT_FALSE(cannotOrderStrictlyLessEq(fcNegZero, fcZero));
  EXPECT_FALSE(cannotOrderStrictlyLessEq(fcZero, fcZero));

  EXPECT_TRUE(cannotOrderStrictlyLessEq(fcInf, fcNan));
  EXPECT_TRUE(cannotOrderStrictlyLessEq(fcNan, fcInf));

  EXPECT_FALSE(
      cannotOrderStrictlyLessEq(fcPosInf | fcPosZero, fcNegZero | fcNegInf));
  EXPECT_TRUE(cannotOrderStrictlyLessEq(
      fcPosInf | fcPosZero, fcNegZero | fcNegInf, /*OrderedZeroSign=*/true));

  EXPECT_FALSE(
      cannotOrderStrictlyLessEq(fcPosInf | fcPosZero, fcZero | fcNegInf));

  EXPECT_FALSE(
      cannotOrderStrictlyLessEq(fcZero | fcNegInf, fcPosInf | fcPosZero));

  EXPECT_FALSE(
      cannotOrderStrictlyLessEq(fcNegInf | fcNegZero, fcZero | fcPosInf));
  EXPECT_FALSE(
      cannotOrderStrictlyLessEq(fcZero | fcPosInf, fcNegInf | fcNegZero));

  EXPECT_TRUE(cannotOrderStrictlyLessEq(fcPosInf, ~fcPosInf));
  EXPECT_FALSE(cannotOrderStrictlyLessEq(~fcPosInf, fcPosInf));

  EXPECT_FALSE(cannotOrderStrictlyLessEq(fcNegInf, ~fcNegInf));
  EXPECT_TRUE(cannotOrderStrictlyLessEq(~fcNegInf, fcNegInf));
}
}
