@@ -3387,6 +3387,57 @@ TEST(ValueTest, StringToDouble)
33873387 ASSERT_EQ (value_stringToDouble (string_pool_new_assign (" 0b-1" )), 0.0 );
33883388}
33893389
3390+ TEST (ValueTest, StringToDoubleWithCheck)
3391+ {
3392+ bool ok;
3393+
3394+ ASSERT_EQ (value_stringToDoubleWithCheck (string_pool_new_assign (" 2147483647" ), &ok), 2147483647.0 );
3395+ ASSERT_TRUE (ok);
3396+
3397+ ASSERT_EQ (value_stringToDoubleWithCheck (string_pool_new_assign (" -255.625" ), &ok), -255.625 );
3398+ ASSERT_TRUE (ok);
3399+
3400+ ASSERT_EQ (value_stringToDoubleWithCheck (string_pool_new_assign (" 0" ), &ok), 0.0 );
3401+ ASSERT_TRUE (ok);
3402+
3403+ ASSERT_EQ (value_stringToDoubleWithCheck (string_pool_new_assign (" -0" ), &ok), -0.0 );
3404+ ASSERT_TRUE (ok);
3405+
3406+ ASSERT_EQ (value_stringToDoubleWithCheck (string_pool_new_assign (" +.15" ), &ok), 0.15 );
3407+ ASSERT_TRUE (ok);
3408+
3409+ ASSERT_EQ (value_stringToDoubleWithCheck (string_pool_new_assign (" 0+5" ), &ok), 0.0 );
3410+ ASSERT_FALSE (ok);
3411+
3412+ ASSERT_EQ (value_stringToDoubleWithCheck (string_pool_new_assign (" 0-5" ), &ok), 0.0 );
3413+ ASSERT_FALSE (ok);
3414+
3415+ ASSERT_EQ (value_stringToDoubleWithCheck (string_pool_new_assign (" 1 2 3" ), &ok), 0.0 );
3416+ ASSERT_FALSE (ok);
3417+
3418+ ASSERT_EQ (value_stringToDoubleWithCheck (string_pool_new_assign (" false" ), &ok), 0.0 );
3419+ ASSERT_FALSE (ok);
3420+
3421+ ASSERT_EQ (value_stringToDoubleWithCheck (string_pool_new_assign (" true" ), &ok), 0.0 );
3422+ ASSERT_FALSE (ok);
3423+
3424+ double result = value_stringToDoubleWithCheck (string_pool_new_assign (" Infinity" ), &ok);
3425+ ASSERT_GT (result, 0 );
3426+ ASSERT_TRUE (std::isinf (result));
3427+ ASSERT_TRUE (ok);
3428+
3429+ result = value_stringToDoubleWithCheck (string_pool_new_assign (" -Infinity" ), &ok);
3430+ ASSERT_LT (result, 0 );
3431+ ASSERT_TRUE (std::isinf (result));
3432+ ASSERT_TRUE (ok);
3433+
3434+ ASSERT_EQ (value_stringToDoubleWithCheck (string_pool_new_assign (" NaN" ), &ok), 0.0 );
3435+ ASSERT_FALSE (ok);
3436+
3437+ ASSERT_EQ (value_stringToDoubleWithCheck (string_pool_new_assign (" something" ), &ok), 0.0 );
3438+ ASSERT_FALSE (ok);
3439+ }
3440+
33903441TEST (ValueTest, StringToBool)
33913442{
33923443 ASSERT_TRUE (value_stringToBool (string_pool_new_assign (" 2147483647" )));
0 commit comments