Skip to content

Commit f0d5ae5

Browse files
committed
fix #142: Compare strings before comparing numbers
1 parent 72fbeab commit f0d5ae5

File tree

2 files changed

+19
-3
lines changed

2 files changed

+19
-3
lines changed

include/scratchcpp/value.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -443,12 +443,12 @@ class LIBSCRATCHCPP_EXPORT Value : public ValueVariant
443443
}
444444
}
445445
} else {
446-
if (v1.isNumber() || v2.isNumber())
446+
if (v1.isString() || v2.isString())
447+
return stringsEqual(v1.toUtf16(), v2.toUtf16());
448+
else if (v1.isNumber() || v2.isNumber())
447449
return v1.toDouble() == v2.toDouble();
448450
else if (v1.isBool() || v2.isBool())
449451
return ((v1.m_type != Type::NaN && v2.m_type != Type::NaN) && (v1.toBool() == v2.toBool()));
450-
else if (v1.isString() || v2.isString())
451-
return stringsEqual(v1.toUtf16(), v2.toUtf16());
452452
else
453453
return false;
454454
}

test/scratch_classes/value_test.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1613,6 +1613,22 @@ TEST(ValueTest, EqualityOperators)
16131613
ASSERT_TRUE(v2 != v3);
16141614
}
16151615

1616+
{
1617+
Value v1 = 0;
1618+
Value v2 = "0";
1619+
Value v3 = "1";
1620+
Value v4 = "test";
1621+
1622+
ASSERT_TRUE(v1 == v2);
1623+
ASSERT_FALSE(v1 != v2);
1624+
1625+
ASSERT_FALSE(v1 == v3);
1626+
ASSERT_TRUE(v1 != v3);
1627+
1628+
ASSERT_FALSE(v1 == v4);
1629+
ASSERT_TRUE(v1 != v4);
1630+
}
1631+
16161632
{
16171633
Value v1 = 1;
16181634
Value v2 = true;

0 commit comments

Comments
 (0)