| """ | |
| Test floating point expressions with zero, NaN, dernormalized and infinite | |
| numbers. | |
| """ | |
| import lldb | |
| from lldbsuite.test.lldbtest import * | |
| from lldbsuite.test import lldbutil | |
| class FPNaNTestCase(TestBase): | |
| def setUp(self): | |
| # Call super's setUp(). | |
| TestBase.setUp(self) | |
| # Find the line number to break inside main(). | |
| self.line = line_number("main.cpp", "// Set break point at this line.") | |
| def test(self): | |
| self.build() | |
| exe = self.getBuildArtifact("a.out") | |
| self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET) | |
| # Break inside the main. | |
| lldbutil.run_break_set_by_file_and_line( | |
| self, "main.cpp", self.line, num_expected_locations=1 | |
| ) | |
| self.runCmd("run", RUN_SUCCEEDED) | |
| # Zero and denorm | |
| self.expect( | |
| "expr +0.0", | |
| VARIABLES_DISPLAYED_CORRECTLY, | |
| substrs=["double", "0"], | |
| ) | |
| self.expect( | |
| "expr -0.0", | |
| VARIABLES_DISPLAYED_CORRECTLY, | |
| substrs=["double", "0"], | |
| ) | |
| self.expect( | |
| "expr 0.0 / 0", | |
| VARIABLES_DISPLAYED_CORRECTLY, | |
| substrs=["double", "NaN"], | |
| ) | |
| self.expect( | |
| "expr 0 / 0.0", | |
| VARIABLES_DISPLAYED_CORRECTLY, | |
| substrs=["double", "NaN"], | |
| ) | |
| self.expect( | |
| "expr 1 / +0.0", | |
| VARIABLES_DISPLAYED_CORRECTLY, | |
| substrs=["double", "+Inf"], | |
| ) | |
| self.expect( | |
| "expr 1 / -0.0", | |
| VARIABLES_DISPLAYED_CORRECTLY, | |
| substrs=["double", "-Inf"], | |
| ) | |
| self.expect( | |
| "expr +0.0 / +0.0 != +0.0 / +0.0", | |
| VARIABLES_DISPLAYED_CORRECTLY, | |
| substrs=["bool", "true"], | |
| ) | |
| self.expect( | |
| "expr -1.f * 0", | |
| VARIABLES_DISPLAYED_CORRECTLY, | |
| substrs=["float", "-0"], | |
| ) | |
| self.expect( | |
| "expr 0x0.123p-1", | |
| VARIABLES_DISPLAYED_CORRECTLY, | |
| substrs=["double", "0.0355224609375"], | |
| ) | |
| # NaN | |
| self.expect( | |
| "expr fnan < fnan", | |
| VARIABLES_DISPLAYED_CORRECTLY, | |
| substrs=["bool", "false"], | |
| ) | |
| self.expect( | |
| "expr fnan <= fnan", | |
| VARIABLES_DISPLAYED_CORRECTLY, | |
| substrs=["bool", "false"], | |
| ) | |
| self.expect( | |
| "expr fnan > fnan", | |
| VARIABLES_DISPLAYED_CORRECTLY, | |
| substrs=["bool", "false"], | |
| ) | |
| self.expect( | |
| "expr fnan >= fnan", | |
| VARIABLES_DISPLAYED_CORRECTLY, | |
| substrs=["bool", "false"], | |
| ) | |
| self.expect( | |
| "expr fnan == fnan", | |
| VARIABLES_DISPLAYED_CORRECTLY, | |
| substrs=["bool", "false"], | |
| ) | |
| self.expect( | |
| "expr fnan != fnan", | |
| VARIABLES_DISPLAYED_CORRECTLY, | |
| substrs=["bool", "true"], | |
| ) | |
| self.expect( | |
| "expr 1.0 <= fnan", | |
| VARIABLES_DISPLAYED_CORRECTLY, | |
| substrs=["bool", "false"], | |
| ) | |
| self.expect( | |
| "expr 1.0f < fnan", | |
| VARIABLES_DISPLAYED_CORRECTLY, | |
| substrs=["bool", "false"], | |
| ) | |
| self.expect( | |
| "expr 1.0f != fnan", | |
| VARIABLES_DISPLAYED_CORRECTLY, | |
| substrs=["bool", "true"], | |
| ) | |
| self.expect( | |
| "expr (unsigned int) fdenorm", | |
| VARIABLES_DISPLAYED_CORRECTLY, | |
| substrs=["int", "0"], | |
| ) | |
| self.expect( | |
| "expr (unsigned int) (1.0f + fdenorm)", | |
| VARIABLES_DISPLAYED_CORRECTLY, | |
| substrs=["int", "1"], | |
| ) |