| //===- 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::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("", 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::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::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()); |
| } |
| |
| 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()); |
| } |
| |
| 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(DenormalMode::PreserveSign, DenormalMode::PreserveSign), |
| DenormalMode::getPreserveSign()); |
| EXPECT_EQ(DenormalMode(DenormalMode::PositiveZero, DenormalMode::PositiveZero), |
| DenormalMode::getPositiveZero()); |
| } |
| |
| } |