Skip to content

Commit 9ec931a

Browse files
authored
Merge pull request #532 from scratchcpp/fix_value_tobool
Fix #517: Rewrite Value::toBool()
2 parents d4ca5cb + a69b720 commit 9ec931a

File tree

2 files changed

+42
-35
lines changed

2 files changed

+42
-35
lines changed

include/scratchcpp/value.h

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -320,23 +320,22 @@ class LIBSCRATCHCPP_EXPORT Value
320320
/*! Returns the boolean representation of the value. */
321321
bool toBool() const
322322
{
323-
if (static_cast<int>(m_type) < 0) {
324-
return false;
325-
} else {
326-
switch (m_type) {
327-
case Type::Bool:
328-
return m_boolValue;
329-
case Type::Integer:
330-
return m_intValue == 1 ? true : false;
331-
case Type::Double:
332-
return m_doubleValue == 1 ? true : false;
333-
case Type::String: {
334-
const std::string &str = m_stringValue;
335-
return (stringsEqual(str, "true") || str == "1");
336-
}
337-
default:
338-
return false;
339-
}
323+
switch (m_type) {
324+
case Type::Bool:
325+
return m_boolValue;
326+
case Type::Integer:
327+
return m_intValue != 0;
328+
case Type::Double:
329+
return m_doubleValue != 0;
330+
case Type::String:
331+
return !m_stringValue.empty() && !stringsEqual(m_stringValue, "false") && m_stringValue != "0";
332+
case Type::Infinity:
333+
case Type::NegativeInfinity:
334+
return true;
335+
case Type::NaN:
336+
return false;
337+
default:
338+
return false;
340339
}
341340
};
342341

test/scratch_classes/value_test.cpp

Lines changed: 26 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1274,19 +1274,19 @@ TEST(ValueTest, ToDouble)
12741274
TEST(ValueTest, ToBool)
12751275
{
12761276
Value v = 2147483647;
1277-
ASSERT_EQ(v.toBool(), false);
1277+
ASSERT_EQ(v.toBool(), true);
12781278
v = -2147483647;
1279-
ASSERT_EQ(v.toBool(), false);
1279+
ASSERT_EQ(v.toBool(), true);
12801280

12811281
v = 2.54;
1282-
ASSERT_EQ(v.toBool(), false);
1282+
ASSERT_EQ(v.toBool(), true);
12831283
v = 2.54f;
1284-
ASSERT_EQ(v.toBool(), false);
1284+
ASSERT_EQ(v.toBool(), true);
12851285

12861286
v = -2.54;
1287-
ASSERT_EQ(v.toBool(), false);
1287+
ASSERT_EQ(v.toBool(), true);
12881288
v = -2.54f;
1289-
ASSERT_EQ(v.toBool(), false);
1289+
ASSERT_EQ(v.toBool(), true);
12901290

12911291
v = false;
12921292
ASSERT_EQ(v.toBool(), false);
@@ -1298,36 +1298,44 @@ TEST(ValueTest, ToBool)
12981298
v = 1;
12991299
ASSERT_EQ(v.toBool(), true);
13001300
v = -1;
1301-
ASSERT_EQ(v.toBool(), false);
1301+
ASSERT_EQ(v.toBool(), true);
13021302

13031303
v = "2147483647";
1304-
ASSERT_EQ(v.toBool(), false);
1304+
ASSERT_EQ(v.toBool(), true);
13051305
v = "-2147483647";
1306-
ASSERT_EQ(v.toBool(), false);
1306+
ASSERT_EQ(v.toBool(), true);
13071307

13081308
v = "255.625";
1309-
ASSERT_EQ(v.toBool(), false);
1309+
ASSERT_EQ(v.toBool(), true);
13101310
v = "-255.625";
1311+
ASSERT_EQ(v.toBool(), true);
1312+
1313+
v = "0";
13111314
ASSERT_EQ(v.toBool(), false);
13121315

13131316
v = "false";
13141317
ASSERT_EQ(v.toBool(), false);
13151318
v = "true";
13161319
ASSERT_EQ(v.toBool(), true);
1320+
v = "FaLsE";
1321+
ASSERT_EQ(v.toBool(), false);
1322+
v = "TrUe";
1323+
ASSERT_EQ(v.toBool(), true);
13171324

13181325
v = "Infinity";
1319-
ASSERT_EQ(v.toBool(), false);
1326+
ASSERT_EQ(v.toBool(), true);
13201327
v = "-Infinity";
1321-
ASSERT_EQ(v.toBool(), false);
1328+
ASSERT_EQ(v.toBool(), true);
13221329
v = "NaN";
13231330
ASSERT_EQ(v.toBool(), false);
13241331

13251332
v = "something";
1333+
ASSERT_EQ(v.toBool(), true);
1334+
v = "";
13261335
ASSERT_EQ(v.toBool(), false);
13271336

1328-
// TODO: Uncomment this (#517)
13291337
// Hex
1330-
/*v = "0xafe";
1338+
v = "0xafe";
13311339
ASSERT_TRUE(v.isString());
13321340
ASSERT_TRUE(v.toBool());
13331341

@@ -1341,15 +1349,15 @@ TEST(ValueTest, ToBool)
13411349

13421350
v = "0x0";
13431351
ASSERT_TRUE(v.isString());
1344-
ASSERT_FALSE(v.toBool());
1352+
ASSERT_TRUE(v.toBool());
13451353

13461354
v = "0XBaCD";
13471355
ASSERT_TRUE(v.isString());
13481356
ASSERT_TRUE(v.toBool());
13491357

13501358
v = "0xAbG";
13511359
ASSERT_TRUE(v.isString());
1352-
ASSERT_FALSE(v.toBool());
1360+
ASSERT_TRUE(v.toBool());
13531361

13541362
// Octal
13551363
v = "0o506";
@@ -1366,7 +1374,7 @@ TEST(ValueTest, ToBool)
13661374

13671375
v = "0o5783";
13681376
ASSERT_TRUE(v.isString());
1369-
ASSERT_FALSE(v.toBool());
1377+
ASSERT_TRUE(v.toBool());
13701378

13711379
// Binary
13721380
v = "0b101101";
@@ -1383,7 +1391,7 @@ TEST(ValueTest, ToBool)
13831391

13841392
v = "0b100112001";
13851393
ASSERT_TRUE(v.isString());
1386-
ASSERT_FALSE(v.toBool());*/
1394+
ASSERT_TRUE(v.toBool());
13871395
}
13881396

13891397
TEST(ValueTest, ToString)

0 commit comments

Comments
 (0)