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