blob: 5b819f3495afcc545f34902e9d4b31bc4a16f0be [file] [log] [blame]
Matt Arsenault7fe94352019-10-29 16:16:05 -07001//===- llvm/unittest/ADT/FloatingPointMode.cpp ----------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#include "llvm/ADT/FloatingPointMode.h"
10#include "gtest/gtest.h"
11
12using namespace llvm;
13
14namespace {
15
Matt Arsenaulta3c814d2019-11-06 17:10:52 -080016TEST(FloatingPointModeTest, ParseDenormalFPAttributeComponent) {
17 EXPECT_EQ(DenormalMode::IEEE, parseDenormalFPAttributeComponent("ieee"));
18 EXPECT_EQ(DenormalMode::IEEE, parseDenormalFPAttributeComponent(""));
Matt Arsenault7fe94352019-10-29 16:16:05 -070019 EXPECT_EQ(DenormalMode::PreserveSign,
Matt Arsenaulta3c814d2019-11-06 17:10:52 -080020 parseDenormalFPAttributeComponent("preserve-sign"));
Matt Arsenault7fe94352019-10-29 16:16:05 -070021 EXPECT_EQ(DenormalMode::PositiveZero,
Matt Arsenaulta3c814d2019-11-06 17:10:52 -080022 parseDenormalFPAttributeComponent("positive-zero"));
23 EXPECT_EQ(DenormalMode::Invalid, parseDenormalFPAttributeComponent("foo"));
Matt Arsenault7fe94352019-10-29 16:16:05 -070024}
25
26TEST(FloatingPointModeTest, DenormalAttributeName) {
Matt Arsenaulta3c814d2019-11-06 17:10:52 -080027 EXPECT_EQ("ieee", denormalModeKindName(DenormalMode::IEEE));
28 EXPECT_EQ("preserve-sign", denormalModeKindName(DenormalMode::PreserveSign));
29 EXPECT_EQ("positive-zero", denormalModeKindName(DenormalMode::PositiveZero));
30 EXPECT_EQ("", denormalModeKindName(DenormalMode::Invalid));
31}
32
33TEST(FloatingPointModeTest, ParseDenormalFPAttribute) {
34 EXPECT_EQ(DenormalMode(DenormalMode::IEEE, DenormalMode::IEEE),
35 parseDenormalFPAttribute("ieee"));
36 EXPECT_EQ(DenormalMode(DenormalMode::IEEE, DenormalMode::IEEE),
37 parseDenormalFPAttribute("ieee,ieee"));
38 EXPECT_EQ(DenormalMode(DenormalMode::IEEE, DenormalMode::IEEE),
39 parseDenormalFPAttribute("ieee,"));
40 EXPECT_EQ(DenormalMode(DenormalMode::IEEE, DenormalMode::IEEE),
41 parseDenormalFPAttribute(""));
42 EXPECT_EQ(DenormalMode(DenormalMode::IEEE, DenormalMode::IEEE),
43 parseDenormalFPAttribute(","));
44
45 EXPECT_EQ(DenormalMode(DenormalMode::PreserveSign, DenormalMode::PreserveSign),
46 parseDenormalFPAttribute("preserve-sign"));
47 EXPECT_EQ(DenormalMode(DenormalMode::PreserveSign, DenormalMode::PreserveSign),
48 parseDenormalFPAttribute("preserve-sign,"));
49 EXPECT_EQ(DenormalMode(DenormalMode::PreserveSign, DenormalMode::PreserveSign),
50 parseDenormalFPAttribute("preserve-sign,preserve-sign"));
51
52 EXPECT_EQ(DenormalMode(DenormalMode::PositiveZero, DenormalMode::PositiveZero),
53 parseDenormalFPAttribute("positive-zero"));
54 EXPECT_EQ(DenormalMode(DenormalMode::PositiveZero, DenormalMode::PositiveZero),
55 parseDenormalFPAttribute("positive-zero,positive-zero"));
56
57
58 EXPECT_EQ(DenormalMode(DenormalMode::IEEE, DenormalMode::PositiveZero),
59 parseDenormalFPAttribute("ieee,positive-zero"));
60 EXPECT_EQ(DenormalMode(DenormalMode::PositiveZero, DenormalMode::IEEE),
61 parseDenormalFPAttribute("positive-zero,ieee"));
62
63 EXPECT_EQ(DenormalMode(DenormalMode::PreserveSign, DenormalMode::IEEE),
64 parseDenormalFPAttribute("preserve-sign,ieee"));
65 EXPECT_EQ(DenormalMode(DenormalMode::IEEE, DenormalMode::PreserveSign),
66 parseDenormalFPAttribute("ieee,preserve-sign"));
67
68
69 EXPECT_EQ(DenormalMode(DenormalMode::Invalid, DenormalMode::Invalid),
70 parseDenormalFPAttribute("foo"));
71 EXPECT_EQ(DenormalMode(DenormalMode::Invalid, DenormalMode::Invalid),
72 parseDenormalFPAttribute("foo,foo"));
73 EXPECT_EQ(DenormalMode(DenormalMode::Invalid, DenormalMode::Invalid),
74 parseDenormalFPAttribute("foo,bar"));
75}
76
77TEST(FloatingPointModeTest, RenderDenormalFPAttribute) {
78 EXPECT_EQ(DenormalMode(DenormalMode::Invalid, DenormalMode::Invalid),
79 parseDenormalFPAttribute("foo"));
80
81 EXPECT_EQ("ieee,ieee",
82 DenormalMode(DenormalMode::IEEE, DenormalMode::IEEE).str());
83 EXPECT_EQ(",",
84 DenormalMode(DenormalMode::Invalid, DenormalMode::Invalid).str());
85
86 EXPECT_EQ(
87 "preserve-sign,preserve-sign",
88 DenormalMode(DenormalMode::PreserveSign, DenormalMode::PreserveSign).str());
89
90 EXPECT_EQ(
91 "positive-zero,positive-zero",
92 DenormalMode(DenormalMode::PositiveZero, DenormalMode::PositiveZero).str());
93
94 EXPECT_EQ(
95 "ieee,preserve-sign",
96 DenormalMode(DenormalMode::IEEE, DenormalMode::PreserveSign).str());
97
98 EXPECT_EQ(
99 "preserve-sign,ieee",
100 DenormalMode(DenormalMode::PreserveSign, DenormalMode::IEEE).str());
101
102 EXPECT_EQ(
103 "preserve-sign,positive-zero",
104 DenormalMode(DenormalMode::PreserveSign, DenormalMode::PositiveZero).str());
105}
106
107TEST(FloatingPointModeTest, DenormalModeIsSimple) {
108 EXPECT_TRUE(DenormalMode(DenormalMode::IEEE, DenormalMode::IEEE).isSimple());
109 EXPECT_FALSE(DenormalMode(DenormalMode::IEEE,
110 DenormalMode::Invalid).isSimple());
111 EXPECT_FALSE(DenormalMode(DenormalMode::PreserveSign,
112 DenormalMode::PositiveZero).isSimple());
113}
114
115TEST(FloatingPointModeTest, DenormalModeIsValid) {
116 EXPECT_TRUE(DenormalMode(DenormalMode::IEEE, DenormalMode::IEEE).isValid());
117 EXPECT_FALSE(DenormalMode(DenormalMode::IEEE, DenormalMode::Invalid).isValid());
118 EXPECT_FALSE(DenormalMode(DenormalMode::Invalid, DenormalMode::IEEE).isValid());
119 EXPECT_FALSE(DenormalMode(DenormalMode::Invalid,
120 DenormalMode::Invalid).isValid());
121}
122
123TEST(FloatingPointModeTest, DenormalModeConstructor) {
124 EXPECT_EQ(DenormalMode(DenormalMode::Invalid, DenormalMode::Invalid),
125 DenormalMode::getInvalid());
126 EXPECT_EQ(DenormalMode(DenormalMode::IEEE, DenormalMode::IEEE),
127 DenormalMode::getIEEE());
128 EXPECT_EQ(DenormalMode(DenormalMode::PreserveSign, DenormalMode::PreserveSign),
129 DenormalMode::getPreserveSign());
130 EXPECT_EQ(DenormalMode(DenormalMode::PositiveZero, DenormalMode::PositiveZero),
131 DenormalMode::getPositiveZero());
Matt Arsenault7fe94352019-10-29 16:16:05 -0700132}
133
134}