xref: /llvm-project/lldb/test/API/lang/cpp/fpnan/TestFPNaN.py (revision 9690b30ba9acc3deb1068deb37f3b507826b27fe)
1*9690b30bSIlia Kuklin"""
2*9690b30bSIlia KuklinTest floating point expressions with zero, NaN, dernormalized and infinite
3*9690b30bSIlia Kuklinnumbers.
4*9690b30bSIlia Kuklin"""
5*9690b30bSIlia Kuklin
6*9690b30bSIlia Kuklinimport lldb
7*9690b30bSIlia Kuklinfrom lldbsuite.test.lldbtest import *
8*9690b30bSIlia Kuklinfrom lldbsuite.test import lldbutil
9*9690b30bSIlia Kuklin
10*9690b30bSIlia Kuklin
11*9690b30bSIlia Kuklinclass FPNaNTestCase(TestBase):
12*9690b30bSIlia Kuklin    def setUp(self):
13*9690b30bSIlia Kuklin        # Call super's setUp().
14*9690b30bSIlia Kuklin        TestBase.setUp(self)
15*9690b30bSIlia Kuklin        # Find the line number to break inside main().
16*9690b30bSIlia Kuklin        self.line = line_number("main.cpp", "// Set break point at this line.")
17*9690b30bSIlia Kuklin
18*9690b30bSIlia Kuklin    def test(self):
19*9690b30bSIlia Kuklin        self.build()
20*9690b30bSIlia Kuklin        exe = self.getBuildArtifact("a.out")
21*9690b30bSIlia Kuklin        self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET)
22*9690b30bSIlia Kuklin
23*9690b30bSIlia Kuklin        # Break inside the main.
24*9690b30bSIlia Kuklin        lldbutil.run_break_set_by_file_and_line(
25*9690b30bSIlia Kuklin            self, "main.cpp", self.line, num_expected_locations=1
26*9690b30bSIlia Kuklin        )
27*9690b30bSIlia Kuklin
28*9690b30bSIlia Kuklin        self.runCmd("run", RUN_SUCCEEDED)
29*9690b30bSIlia Kuklin        # Zero and denorm
30*9690b30bSIlia Kuklin        self.expect(
31*9690b30bSIlia Kuklin            "expr +0.0",
32*9690b30bSIlia Kuklin            VARIABLES_DISPLAYED_CORRECTLY,
33*9690b30bSIlia Kuklin            substrs=["double", "0"],
34*9690b30bSIlia Kuklin        )
35*9690b30bSIlia Kuklin        self.expect(
36*9690b30bSIlia Kuklin            "expr -0.0",
37*9690b30bSIlia Kuklin            VARIABLES_DISPLAYED_CORRECTLY,
38*9690b30bSIlia Kuklin            substrs=["double", "0"],
39*9690b30bSIlia Kuklin        )
40*9690b30bSIlia Kuklin        self.expect(
41*9690b30bSIlia Kuklin            "expr 0.0 / 0",
42*9690b30bSIlia Kuklin            VARIABLES_DISPLAYED_CORRECTLY,
43*9690b30bSIlia Kuklin            substrs=["double", "NaN"],
44*9690b30bSIlia Kuklin        )
45*9690b30bSIlia Kuklin        self.expect(
46*9690b30bSIlia Kuklin            "expr 0 / 0.0",
47*9690b30bSIlia Kuklin            VARIABLES_DISPLAYED_CORRECTLY,
48*9690b30bSIlia Kuklin            substrs=["double", "NaN"],
49*9690b30bSIlia Kuklin        )
50*9690b30bSIlia Kuklin        self.expect(
51*9690b30bSIlia Kuklin            "expr 1 / +0.0",
52*9690b30bSIlia Kuklin            VARIABLES_DISPLAYED_CORRECTLY,
53*9690b30bSIlia Kuklin            substrs=["double", "+Inf"],
54*9690b30bSIlia Kuklin        )
55*9690b30bSIlia Kuklin        self.expect(
56*9690b30bSIlia Kuklin            "expr 1 / -0.0",
57*9690b30bSIlia Kuklin            VARIABLES_DISPLAYED_CORRECTLY,
58*9690b30bSIlia Kuklin            substrs=["double", "-Inf"],
59*9690b30bSIlia Kuklin        )
60*9690b30bSIlia Kuklin        self.expect(
61*9690b30bSIlia Kuklin            "expr +0.0 / +0.0 != +0.0 / +0.0",
62*9690b30bSIlia Kuklin            VARIABLES_DISPLAYED_CORRECTLY,
63*9690b30bSIlia Kuklin            substrs=["bool", "true"],
64*9690b30bSIlia Kuklin        )
65*9690b30bSIlia Kuklin        self.expect(
66*9690b30bSIlia Kuklin            "expr -1.f * 0",
67*9690b30bSIlia Kuklin            VARIABLES_DISPLAYED_CORRECTLY,
68*9690b30bSIlia Kuklin            substrs=["float", "-0"],
69*9690b30bSIlia Kuklin        )
70*9690b30bSIlia Kuklin        self.expect(
71*9690b30bSIlia Kuklin            "expr 0x0.123p-1",
72*9690b30bSIlia Kuklin            VARIABLES_DISPLAYED_CORRECTLY,
73*9690b30bSIlia Kuklin            substrs=["double", "0.0355224609375"],
74*9690b30bSIlia Kuklin        )
75*9690b30bSIlia Kuklin        # NaN
76*9690b30bSIlia Kuklin        self.expect(
77*9690b30bSIlia Kuklin            "expr fnan < fnan",
78*9690b30bSIlia Kuklin            VARIABLES_DISPLAYED_CORRECTLY,
79*9690b30bSIlia Kuklin            substrs=["bool", "false"],
80*9690b30bSIlia Kuklin        )
81*9690b30bSIlia Kuklin        self.expect(
82*9690b30bSIlia Kuklin            "expr fnan <= fnan",
83*9690b30bSIlia Kuklin            VARIABLES_DISPLAYED_CORRECTLY,
84*9690b30bSIlia Kuklin            substrs=["bool", "false"],
85*9690b30bSIlia Kuklin        )
86*9690b30bSIlia Kuklin        self.expect(
87*9690b30bSIlia Kuklin            "expr fnan > fnan",
88*9690b30bSIlia Kuklin            VARIABLES_DISPLAYED_CORRECTLY,
89*9690b30bSIlia Kuklin            substrs=["bool", "false"],
90*9690b30bSIlia Kuklin        )
91*9690b30bSIlia Kuklin        self.expect(
92*9690b30bSIlia Kuklin            "expr fnan >= fnan",
93*9690b30bSIlia Kuklin            VARIABLES_DISPLAYED_CORRECTLY,
94*9690b30bSIlia Kuklin            substrs=["bool", "false"],
95*9690b30bSIlia Kuklin        )
96*9690b30bSIlia Kuklin        self.expect(
97*9690b30bSIlia Kuklin            "expr fnan == fnan",
98*9690b30bSIlia Kuklin            VARIABLES_DISPLAYED_CORRECTLY,
99*9690b30bSIlia Kuklin            substrs=["bool", "false"],
100*9690b30bSIlia Kuklin        )
101*9690b30bSIlia Kuklin        self.expect(
102*9690b30bSIlia Kuklin            "expr fnan != fnan",
103*9690b30bSIlia Kuklin            VARIABLES_DISPLAYED_CORRECTLY,
104*9690b30bSIlia Kuklin            substrs=["bool", "true"],
105*9690b30bSIlia Kuklin        )
106*9690b30bSIlia Kuklin        self.expect(
107*9690b30bSIlia Kuklin            "expr 1.0 <= fnan",
108*9690b30bSIlia Kuklin            VARIABLES_DISPLAYED_CORRECTLY,
109*9690b30bSIlia Kuklin            substrs=["bool", "false"],
110*9690b30bSIlia Kuklin        )
111*9690b30bSIlia Kuklin        self.expect(
112*9690b30bSIlia Kuklin            "expr 1.0f < fnan",
113*9690b30bSIlia Kuklin            VARIABLES_DISPLAYED_CORRECTLY,
114*9690b30bSIlia Kuklin            substrs=["bool", "false"],
115*9690b30bSIlia Kuklin        )
116*9690b30bSIlia Kuklin        self.expect(
117*9690b30bSIlia Kuklin            "expr 1.0f != fnan",
118*9690b30bSIlia Kuklin            VARIABLES_DISPLAYED_CORRECTLY,
119*9690b30bSIlia Kuklin            substrs=["bool", "true"],
120*9690b30bSIlia Kuklin        )
121*9690b30bSIlia Kuklin        self.expect(
122*9690b30bSIlia Kuklin            "expr (unsigned int) fdenorm",
123*9690b30bSIlia Kuklin            VARIABLES_DISPLAYED_CORRECTLY,
124*9690b30bSIlia Kuklin            substrs=["int", "0"],
125*9690b30bSIlia Kuklin        )
126*9690b30bSIlia Kuklin        self.expect(
127*9690b30bSIlia Kuklin            "expr (unsigned int) (1.0f + fdenorm)",
128*9690b30bSIlia Kuklin            VARIABLES_DISPLAYED_CORRECTLY,
129*9690b30bSIlia Kuklin            substrs=["int", "1"],
130*9690b30bSIlia Kuklin        )
131