blob: 3f9e71a16f52399f42d23d04cb60d58e264998d0 [file] [edit]
//===- 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));
}
}