diff --git a/include/scratchcpp/value.h b/include/scratchcpp/value.h index b1292afc..601b39fc 100644 --- a/include/scratchcpp/value.h +++ b/include/scratchcpp/value.h @@ -553,9 +553,12 @@ class LIBSCRATCHCPP_EXPORT Value return doubleToString(d1) == v2.toString(); else return stringsEqual(v1.toUtf16(), v2.toUtf16()); - } else if (v1.isNumber() || v2.isNumber()) - return v1.toDouble() == v2.toDouble(); - else if (v1.isBool() || v2.isBool()) + } else if (v1.isNumber() || v2.isNumber()) { + if (static_cast(v1.m_type) < 0 || static_cast(v2.m_type) < 0) + return false; + else + return v1.toDouble() == v2.toDouble(); + } else if (v1.isBool() || v2.isBool()) return ((v1.m_type != Type::NaN && v2.m_type != Type::NaN) && (v1.toBool() == v2.toBool())); else return false; diff --git a/src/blocks/operatorblocks.cpp b/src/blocks/operatorblocks.cpp index 9c4adb83..58851344 100644 --- a/src/blocks/operatorblocks.cpp +++ b/src/blocks/operatorblocks.cpp @@ -257,7 +257,7 @@ unsigned int OperatorBlocks::op_ln(VirtualMachine *vm) const Value &v = *vm->getInput(0, 1); if (v < 0) vm->replaceReturnValue(Value(Value::SpecialValue::NaN), 1); - else if (v == 0) + else if (v == 0 || v.isNaN()) vm->replaceReturnValue(Value(Value::SpecialValue::NegativeInfinity), 1); else if (!v.isInfinity()) vm->replaceReturnValue(std::log(v.toDouble()), 1); @@ -269,7 +269,7 @@ unsigned int OperatorBlocks::op_log(VirtualMachine *vm) const Value &v = *vm->getInput(0, 1); if (v < 0) vm->replaceReturnValue(Value(Value::SpecialValue::NaN), 1); - else if (v == 0) + else if (v == 0 || v.isNaN()) vm->replaceReturnValue(Value(Value::SpecialValue::NegativeInfinity), 1); else if (!v.isInfinity()) vm->replaceReturnValue(std::log10(v.toDouble()), 1); diff --git a/test/scratch_classes/value_test.cpp b/test/scratch_classes/value_test.cpp index 06e18f89..65f0e9e8 100644 --- a/test/scratch_classes/value_test.cpp +++ b/test/scratch_classes/value_test.cpp @@ -1873,9 +1873,8 @@ TEST(ValueTest, EqualityOperators) ASSERT_FALSE(v1 == v5); ASSERT_TRUE(v1 != v5); - // TODO: Enable this after #198 is fixed - /*ASSERT_FALSE(v2 == v5); - ASSERT_TRUE(v2 != v5);*/ + ASSERT_FALSE(v2 == v5); + ASSERT_TRUE(v2 != v5); } { @@ -2042,8 +2041,7 @@ TEST(ValueTest, EqualityOperators) ASSERT_FALSE(v3 == v7); ASSERT_TRUE(v3 != v7); - // TODO: Enable this after #198 is fixed - /*ASSERT_FALSE(v4 == v7); - ASSERT_TRUE(v4 != v7);*/ + ASSERT_FALSE(v4 == v7); + ASSERT_TRUE(v4 != v7); } }