[decompiler] Print floats as neatly as possible (#307)

* [decompiler] Print floats as neatly as possible

* style fixes

* more

* Update test.bat

* Add and fix tests

* Jesus christ fine
This commit is contained in:
ManDude
2021-03-04 05:47:46 +00:00
committed by GitHub
parent d9aa535dd0
commit e77478e2e6
8 changed files with 115 additions and 87 deletions
+22 -12
View File
@@ -155,11 +155,11 @@ TEST(GoosBuiltins, Addition) {
// two element adding
EXPECT_EQ(e(i, "(+ 1 2)"), "3");
EXPECT_EQ(e(i, "(+ 1.1 2.2)"), "3.300000");
EXPECT_EQ(e(i, "(+ 1.1 2.2)"), "3.3");
// mixed
EXPECT_EQ(e(i, "(+ 1 1.1)"), "2");
EXPECT_EQ(e(i, "(+ 1.1 1)"), "2.100000");
EXPECT_EQ(e(i, "(+ 1.1 1)"), "2.1");
// many, and check rounding happens at the right time
EXPECT_EQ(e(i, "(+ 1 1.4 1.4 1.4 1.4)"), "5");
@@ -178,11 +178,11 @@ TEST(GoosBuiltins, Multiplication) {
// two element adding
EXPECT_EQ(e(i, "(* 3 2)"), "6");
EXPECT_EQ(e(i, "(* 1.1 2.2)"), "2.420000");
EXPECT_EQ(e(i, "(* 1.1 2.2)"), "2.42");
// mixed
EXPECT_EQ(e(i, "(* 1 1.1)"), "1");
EXPECT_EQ(e(i, "(* 1.1 1)"), "1.100000");
EXPECT_EQ(e(i, "(* 1.1 1)"), "1.1");
// many, and check rounding happens at the right time
EXPECT_EQ(e(i, "(* 3 1.4 1.4 1.4 1.4)"), "3");
@@ -201,11 +201,11 @@ TEST(GoosBuiltins, Subtraction) {
// two element adding
EXPECT_EQ(e(i, "(- 3 2)"), "1");
EXPECT_EQ(e(i, "(- 1.1 2.2)"), "-1.100000");
EXPECT_EQ(e(i, "(- 1.1 2.2)"), "-1.1");
// mixed
EXPECT_EQ(e(i, "(- 1 1.1)"), "0");
EXPECT_EQ(e(i, "(- 1.1 1)"), "0.100000");
EXPECT_EQ(e(i, "(- 1.1 1)"), "0.1");
// many, and check rounding happens at the right time
EXPECT_EQ(e(i, "(- 3 1.4 1.4 1.4 1.4)"), "-1");
@@ -221,11 +221,11 @@ TEST(GoosBuiltins, Division) {
// two element adding
EXPECT_EQ(e(i, "(/ 16 2)"), "8");
EXPECT_EQ(e(i, "(/ 9. 2.)"), "4.500000");
EXPECT_EQ(e(i, "(/ 9. 2.)"), "4.5");
// mixed
EXPECT_EQ(e(i, "(/ 3 2.)"), "1");
EXPECT_EQ(e(i, "(/ 3. 2)"), "1.500000");
EXPECT_EQ(e(i, "(/ 3. 2)"), "1.5");
i.disable_printfs();
for (auto x : {"(/ 1)", "(/ 1.0)", "(/)", "(/ 'a)", "(/ #\\a)", "(/ 1 :test 2)",
@@ -494,7 +494,7 @@ TEST(GoosEval, EvalSelfEvaluating) {
EXPECT_EQ(e(i, "010"), "10");
EXPECT_EQ(e(i, "-010"), "-10");
EXPECT_EQ(e(i, "\"test\""), "\"test\"");
EXPECT_EQ(e(i, "1.2"), "1.200000"); // this depends on how we decide to print floats
EXPECT_EQ(e(i, "1.2"), "1.2"); // this depends on how we decide to print floats
EXPECT_EQ(e(i, "#\\a"), "#\\a");
EXPECT_EQ(e(i, "#\\\\n"), "#\\\\n");
@@ -502,6 +502,16 @@ TEST(GoosEval, EvalSelfEvaluating) {
EXPECT_ANY_THROW(e(i, "#\\\\a"));
}
TEST(GoosEval, FloatEvalAndPrinting) {
Interpreter i;
EXPECT_EQ(e(i, "0.9999979734420776"), "0.999998");
EXPECT_EQ(e(i, "0.999998"), e(i, "0.9999979734420776"));
EXPECT_EQ(e(i, "1."), "1.0");
EXPECT_EQ(e(i, ".03"), "0.03");
EXPECT_EQ(e(i, "0.02999999932944774627685546875"), e(i, "0.03"));
EXPECT_EQ(e(i, "0.5883"), e(i, "0.5882999897"));
}
/*!
* Check named "keyword" arguments
*/
@@ -1020,8 +1030,8 @@ TEST(GoosObject, Float) {
EXPECT_TRUE(different == same);
// check print and inspect
EXPECT_EQ(different.print(), "-12.340000");
EXPECT_EQ(different.inspect(), "[float] -12.340000\n");
EXPECT_EQ(different.print(), "-12.34");
EXPECT_EQ(different.inspect(), "[float] -12.34\n");
}
/*!
@@ -1300,4 +1310,4 @@ TEST(GoosBuiltins, Format) {
TEST(GoosBuiltins, Error) {
Interpreter i;
EXPECT_ANY_THROW(e(i, "(error \"hi\")"));
}
}