Skip to content

Commit 31a4e36

Browse files
committed
Fix conversion of -0.0 to string
1 parent e75947e commit 31a4e36

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

src/scratch/value_functions_p.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -409,7 +409,10 @@ extern "C"
409409

410410
inline void value_doubleToString(double v, std::string *dst)
411411
{
412-
if (std::isinf(v)) {
412+
if (v == 0) {
413+
dst->assign("0");
414+
return;
415+
} else if (std::isinf(v)) {
413416
if (v > 0)
414417
dst->assign("Infinity");
415418
else

test/scratch_classes/value_test.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1331,6 +1331,18 @@ TEST(ValueTest, ToString)
13311331
ASSERT_EQ(utf8::utf16to8(v.toUtf16()), v.toString());
13321332
ASSERT_EQ(std::string(cStrings.back()), v.toString());
13331333

1334+
v = 0.0;
1335+
cStrings.push_back(value_toCString(&v.data()));
1336+
ASSERT_EQ(v.toString(), "0");
1337+
ASSERT_EQ(utf8::utf16to8(v.toUtf16()), v.toString());
1338+
ASSERT_EQ(std::string(cStrings.back()), v.toString());
1339+
1340+
v = -0.0;
1341+
cStrings.push_back(value_toCString(&v.data()));
1342+
ASSERT_EQ(v.toString(), "0");
1343+
ASSERT_EQ(utf8::utf16to8(v.toUtf16()), v.toString());
1344+
ASSERT_EQ(std::string(cStrings.back()), v.toString());
1345+
13341346
v = 2.0;
13351347
cStrings.push_back(value_toCString(&v.data()));
13361348
ASSERT_EQ(v.toString(), "2");
@@ -2658,6 +2670,14 @@ TEST(ValueTest, EqualityOperators)
26582670
TEST(ValueTest, DoubleToCString)
26592671
{
26602672
char *ret;
2673+
ret = value_doubleToCString(0.0);
2674+
ASSERT_EQ(strcmp(ret, "0"), 0);
2675+
free(ret);
2676+
2677+
ret = value_doubleToCString(-0.0);
2678+
ASSERT_EQ(strcmp(ret, "0"), 0);
2679+
free(ret);
2680+
26612681
ret = value_doubleToCString(2.0);
26622682
ASSERT_EQ(strcmp(ret, "2"), 0);
26632683
free(ret);

0 commit comments

Comments
 (0)