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