1 // Copyright 2007-2010 Baptiste Lepilleur 2 // Distributed under MIT license, or public domain if desired and 3 // recognized in your jurisdiction. 4 // See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE 5 6 #include <json/config.h> 7 #include <json/json.h> 8 #include "jsontest.h" 9 10 // Make numeric limits more convenient to talk about. 11 // Assumes int type in 32 bits. 12 #define kint32max Json::Value::maxInt 13 #define kint32min Json::Value::minInt 14 #define kuint32max Json::Value::maxUInt 15 #define kint64max Json::Value::maxInt64 16 #define kint64min Json::Value::minInt64 17 #define kuint64max Json::Value::maxUInt64 18 19 static const double kdint64max = double(kint64max); 20 static const float kfint64max = float(kint64max); 21 static const float kfint32max = float(kint32max); 22 static const float kfuint32max = float(kuint32max); 23 24 25 // ////////////////////////////////////////////////////////////////// 26 // ////////////////////////////////////////////////////////////////// 27 // Json Library test cases 28 // ////////////////////////////////////////////////////////////////// 29 // ////////////////////////////////////////////////////////////////// 30 31 #if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) 32 static inline double uint64ToDouble( Json::UInt64 value ) 33 { 34 return static_cast<double>( value ); 35 } 36 #else // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) 37 static inline double uint64ToDouble( Json::UInt64 value ) 38 { 39 return static_cast<double>( Json::Int64(value/2) ) * 2.0 + Json::Int64(value & 1); 40 } 41 #endif // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) 42 43 struct ValueTest : JsonTest::TestCase 44 { 45 Json::Value null_; 46 Json::Value emptyArray_; 47 Json::Value emptyObject_; 48 Json::Value integer_; 49 Json::Value unsignedInteger_; 50 Json::Value smallUnsignedInteger_; 51 Json::Value real_; 52 Json::Value float_; 53 Json::Value array1_; 54 Json::Value object1_; 55 Json::Value emptyString_; 56 Json::Value string1_; 57 Json::Value string_; 58 Json::Value true_; 59 Json::Value false_; 60 61 62 ValueTest() 63 : emptyArray_( Json::arrayValue ) 64 , emptyObject_( Json::objectValue ) 65 , integer_( 123456789 ) 66 , smallUnsignedInteger_( Json::Value::UInt( Json::Value::maxInt ) ) 67 , unsignedInteger_( 34567890u ) 68 , real_( 1234.56789 ) 69 , float_( 0.00390625f ) 70 , emptyString_( "" ) 71 , string1_( "a" ) 72 , string_( "sometext with space" ) 73 , true_( true ) 74 , false_( false ) 75 { 76 array1_.append( 1234 ); 77 object1_["id"] = 1234; 78 } 79 80 struct IsCheck 81 { 82 /// Initialize all checks to \c false by default. 83 IsCheck(); 84 85 bool isObject_; 86 bool isArray_; 87 bool isBool_; 88 bool isString_; 89 bool isNull_; 90 91 bool isInt_; 92 bool isInt64_; 93 bool isUInt_; 94 bool isUInt64_; 95 bool isIntegral_; 96 bool isDouble_; 97 bool isNumeric_; 98 }; 99 100 void checkConstMemberCount( const Json::Value &value, unsigned int expectedCount ); 101 102 void checkMemberCount( Json::Value &value, unsigned int expectedCount ); 103 104 void checkIs( const Json::Value &value, const IsCheck &check ); 105 106 void checkIsLess( const Json::Value &x, const Json::Value &y ); 107 108 void checkIsEqual( const Json::Value &x, const Json::Value &y ); 109 110 /// Normalize the representation of floating-point number by stripped leading 0 in exponent. 111 static std::string normalizeFloatingPointStr( const std::string &s ); 112 }; 113 114 115 std::string 116 ValueTest::normalizeFloatingPointStr( const std::string &s ) 117 { 118 std::string::size_type index = s.find_last_of( "eE" ); 119 if ( index != std::string::npos ) 120 { 121 std::string::size_type hasSign = (s[index+1] == '+' || s[index+1] == '-') ? 1 : 0; 122 std::string::size_type exponentStartIndex = index + 1 + hasSign; 123 std::string normalized = s.substr( 0, exponentStartIndex ); 124 std::string::size_type indexDigit = s.find_first_not_of( '0', exponentStartIndex ); 125 std::string exponent = "0"; 126 if ( indexDigit != std::string::npos ) // There is an exponent different from 0 127 { 128 exponent = s.substr( indexDigit ); 129 } 130 return normalized + exponent; 131 } 132 return s; 133 } 134 135 136 JSONTEST_FIXTURE( ValueTest, checkNormalizeFloatingPointStr ) 137 { 138 JSONTEST_ASSERT_STRING_EQUAL( "0.0", normalizeFloatingPointStr("0.0") ); 139 JSONTEST_ASSERT_STRING_EQUAL( "0e0", normalizeFloatingPointStr("0e0") ); 140 JSONTEST_ASSERT_STRING_EQUAL( "1234.0", normalizeFloatingPointStr("1234.0") ); 141 JSONTEST_ASSERT_STRING_EQUAL( "1234.0e0", normalizeFloatingPointStr("1234.0e0") ); 142 JSONTEST_ASSERT_STRING_EQUAL( "1234.0e+0", normalizeFloatingPointStr("1234.0e+0") ); 143 JSONTEST_ASSERT_STRING_EQUAL( "1234e-1", normalizeFloatingPointStr("1234e-1") ); 144 JSONTEST_ASSERT_STRING_EQUAL( "1234e10", normalizeFloatingPointStr("1234e10") ); 145 JSONTEST_ASSERT_STRING_EQUAL( "1234e10", normalizeFloatingPointStr("1234e010") ); 146 JSONTEST_ASSERT_STRING_EQUAL( "1234e+10", normalizeFloatingPointStr("1234e+010") ); 147 JSONTEST_ASSERT_STRING_EQUAL( "1234e-10", normalizeFloatingPointStr("1234e-010") ); 148 JSONTEST_ASSERT_STRING_EQUAL( "1234e+100", normalizeFloatingPointStr("1234e+100") ); 149 JSONTEST_ASSERT_STRING_EQUAL( "1234e-100", normalizeFloatingPointStr("1234e-100") ); 150 JSONTEST_ASSERT_STRING_EQUAL( "1234e+1", normalizeFloatingPointStr("1234e+001") ); 151 } 152 153 154 JSONTEST_FIXTURE( ValueTest, memberCount ) 155 { 156 JSONTEST_ASSERT_PRED( checkMemberCount(emptyArray_, 0) ); 157 JSONTEST_ASSERT_PRED( checkMemberCount(emptyObject_, 0) ); 158 JSONTEST_ASSERT_PRED( checkMemberCount(array1_, 1) ); 159 JSONTEST_ASSERT_PRED( checkMemberCount(object1_, 1) ); 160 JSONTEST_ASSERT_PRED( checkMemberCount(null_, 0) ); 161 JSONTEST_ASSERT_PRED( checkMemberCount(integer_, 0) ); 162 JSONTEST_ASSERT_PRED( checkMemberCount(unsignedInteger_, 0) ); 163 JSONTEST_ASSERT_PRED( checkMemberCount(smallUnsignedInteger_, 0) ); 164 JSONTEST_ASSERT_PRED( checkMemberCount(real_, 0) ); 165 JSONTEST_ASSERT_PRED( checkMemberCount(emptyString_, 0) ); 166 JSONTEST_ASSERT_PRED( checkMemberCount(string_, 0) ); 167 JSONTEST_ASSERT_PRED( checkMemberCount(true_, 0) ); 168 } 169 170 171 JSONTEST_FIXTURE( ValueTest, objects ) 172 { 173 // Types 174 IsCheck checks; 175 checks.isObject_ = true; 176 JSONTEST_ASSERT_PRED( checkIs( emptyObject_, checks ) ); 177 JSONTEST_ASSERT_PRED( checkIs( object1_, checks ) ); 178 179 JSONTEST_ASSERT_EQUAL(Json::objectValue, emptyObject_.type()); 180 181 // Empty object okay 182 JSONTEST_ASSERT(emptyObject_.isConvertibleTo(Json::nullValue)); 183 184 // Non-empty object not okay 185 JSONTEST_ASSERT(!object1_.isConvertibleTo(Json::nullValue)); 186 187 // Always okay 188 JSONTEST_ASSERT(emptyObject_.isConvertibleTo(Json::objectValue)); 189 190 // Never okay 191 JSONTEST_ASSERT(!emptyObject_.isConvertibleTo(Json::arrayValue)); 192 JSONTEST_ASSERT(!emptyObject_.isConvertibleTo(Json::intValue)); 193 JSONTEST_ASSERT(!emptyObject_.isConvertibleTo(Json::uintValue)); 194 JSONTEST_ASSERT(!emptyObject_.isConvertibleTo(Json::realValue)); 195 JSONTEST_ASSERT(!emptyObject_.isConvertibleTo(Json::booleanValue)); 196 JSONTEST_ASSERT(!emptyObject_.isConvertibleTo(Json::stringValue)); 197 198 // Access through const reference 199 const Json::Value &constObject = object1_; 200 201 JSONTEST_ASSERT_EQUAL(Json::Value(1234), constObject["id"]); 202 JSONTEST_ASSERT_EQUAL(Json::Value(), constObject["unknown id"]); 203 204 // Access through non-const reference 205 JSONTEST_ASSERT_EQUAL(Json::Value(1234), object1_["id"]); 206 JSONTEST_ASSERT_EQUAL(Json::Value(), object1_["unknown id"]); 207 208 object1_["some other id"] = "foo"; 209 JSONTEST_ASSERT_EQUAL(Json::Value("foo"), object1_["some other id"]); 210 } 211 212 213 JSONTEST_FIXTURE( ValueTest, arrays ) 214 { 215 const unsigned int index0 = 0; 216 217 // Types 218 IsCheck checks; 219 checks.isArray_ = true; 220 JSONTEST_ASSERT_PRED( checkIs( emptyArray_, checks ) ); 221 JSONTEST_ASSERT_PRED( checkIs( array1_, checks ) ); 222 223 JSONTEST_ASSERT_EQUAL(Json::arrayValue, array1_.type()); 224 225 // Empty array okay 226 JSONTEST_ASSERT(emptyArray_.isConvertibleTo(Json::nullValue)); 227 228 // Non-empty array not okay 229 JSONTEST_ASSERT(!array1_.isConvertibleTo(Json::nullValue)); 230 231 // Always okay 232 JSONTEST_ASSERT(emptyArray_.isConvertibleTo(Json::arrayValue)); 233 234 // Never okay 235 JSONTEST_ASSERT(!emptyArray_.isConvertibleTo(Json::objectValue)); 236 JSONTEST_ASSERT(!emptyArray_.isConvertibleTo(Json::intValue)); 237 JSONTEST_ASSERT(!emptyArray_.isConvertibleTo(Json::uintValue)); 238 JSONTEST_ASSERT(!emptyArray_.isConvertibleTo(Json::realValue)); 239 JSONTEST_ASSERT(!emptyArray_.isConvertibleTo(Json::booleanValue)); 240 JSONTEST_ASSERT(!emptyArray_.isConvertibleTo(Json::stringValue)); 241 242 // Access through const reference 243 const Json::Value &constArray = array1_; 244 JSONTEST_ASSERT_EQUAL(Json::Value(1234), constArray[index0]); 245 JSONTEST_ASSERT_EQUAL(Json::Value(1234), constArray[0]); 246 247 // Access through non-const reference 248 JSONTEST_ASSERT_EQUAL(Json::Value(1234), array1_[index0]); 249 JSONTEST_ASSERT_EQUAL(Json::Value(1234), array1_[0]); 250 251 array1_[2] = Json::Value(17); 252 JSONTEST_ASSERT_EQUAL(Json::Value(), array1_[1]); 253 JSONTEST_ASSERT_EQUAL(Json::Value(17), array1_[2]); 254 } 255 256 257 JSONTEST_FIXTURE( ValueTest, null ) 258 { 259 JSONTEST_ASSERT_EQUAL(Json::nullValue, null_.type()); 260 261 IsCheck checks; 262 checks.isNull_ = true; 263 JSONTEST_ASSERT_PRED( checkIs( null_, checks ) ); 264 265 JSONTEST_ASSERT(null_.isConvertibleTo(Json::nullValue)); 266 JSONTEST_ASSERT(null_.isConvertibleTo(Json::intValue)); 267 JSONTEST_ASSERT(null_.isConvertibleTo(Json::uintValue)); 268 JSONTEST_ASSERT(null_.isConvertibleTo(Json::realValue)); 269 JSONTEST_ASSERT(null_.isConvertibleTo(Json::booleanValue)); 270 JSONTEST_ASSERT(null_.isConvertibleTo(Json::stringValue)); 271 JSONTEST_ASSERT(null_.isConvertibleTo(Json::arrayValue)); 272 JSONTEST_ASSERT(null_.isConvertibleTo(Json::objectValue)); 273 274 JSONTEST_ASSERT_EQUAL(Json::Int(0), null_.asInt()); 275 JSONTEST_ASSERT_EQUAL(Json::LargestInt(0), null_.asLargestInt()); 276 JSONTEST_ASSERT_EQUAL(Json::UInt(0), null_.asUInt()); 277 JSONTEST_ASSERT_EQUAL(Json::LargestUInt(0), null_.asLargestUInt()); 278 JSONTEST_ASSERT_EQUAL(0.0, null_.asDouble()); 279 JSONTEST_ASSERT_EQUAL(0.0, null_.asFloat()); 280 JSONTEST_ASSERT_STRING_EQUAL("", null_.asString()); 281 } 282 283 284 JSONTEST_FIXTURE( ValueTest, strings ) 285 { 286 JSONTEST_ASSERT_EQUAL(Json::stringValue, string1_.type()); 287 288 IsCheck checks; 289 checks.isString_ = true; 290 JSONTEST_ASSERT_PRED( checkIs( emptyString_, checks ) ); 291 JSONTEST_ASSERT_PRED( checkIs( string_, checks ) ); 292 JSONTEST_ASSERT_PRED( checkIs( string1_, checks ) ); 293 294 // Empty string okay 295 JSONTEST_ASSERT(emptyString_.isConvertibleTo(Json::nullValue)); 296 297 // Non-empty string not okay 298 JSONTEST_ASSERT(!string1_.isConvertibleTo(Json::nullValue)); 299 300 // Always okay 301 JSONTEST_ASSERT(string1_.isConvertibleTo(Json::stringValue)); 302 303 // Never okay 304 JSONTEST_ASSERT(!string1_.isConvertibleTo(Json::objectValue)); 305 JSONTEST_ASSERT(!string1_.isConvertibleTo(Json::arrayValue)); 306 JSONTEST_ASSERT(!string1_.isConvertibleTo(Json::intValue)); 307 JSONTEST_ASSERT(!string1_.isConvertibleTo(Json::uintValue)); 308 JSONTEST_ASSERT(!string1_.isConvertibleTo(Json::realValue)); 309 310 JSONTEST_ASSERT_STRING_EQUAL("a", string1_.asString()); 311 JSONTEST_ASSERT_STRING_EQUAL("a", string1_.asCString()); 312 } 313 314 315 JSONTEST_FIXTURE( ValueTest, bools ) 316 { 317 JSONTEST_ASSERT_EQUAL(Json::booleanValue, false_.type()); 318 319 IsCheck checks; 320 checks.isBool_ = true; 321 JSONTEST_ASSERT_PRED( checkIs( false_, checks ) ); 322 JSONTEST_ASSERT_PRED( checkIs( true_, checks ) ); 323 324 // False okay 325 JSONTEST_ASSERT(false_.isConvertibleTo(Json::nullValue)); 326 327 // True not okay 328 JSONTEST_ASSERT(!true_.isConvertibleTo(Json::nullValue)); 329 330 // Always okay 331 JSONTEST_ASSERT(true_.isConvertibleTo(Json::intValue)); 332 JSONTEST_ASSERT(true_.isConvertibleTo(Json::uintValue)); 333 JSONTEST_ASSERT(true_.isConvertibleTo(Json::realValue)); 334 JSONTEST_ASSERT(true_.isConvertibleTo(Json::booleanValue)); 335 JSONTEST_ASSERT(true_.isConvertibleTo(Json::stringValue)); 336 337 // Never okay 338 JSONTEST_ASSERT(!true_.isConvertibleTo(Json::arrayValue)); 339 JSONTEST_ASSERT(!true_.isConvertibleTo(Json::objectValue)); 340 341 JSONTEST_ASSERT_EQUAL(true, true_.asBool()); 342 JSONTEST_ASSERT_EQUAL(1, true_.asInt()); 343 JSONTEST_ASSERT_EQUAL(1, true_.asLargestInt()); 344 JSONTEST_ASSERT_EQUAL(1, true_.asUInt()); 345 JSONTEST_ASSERT_EQUAL(1, true_.asLargestUInt()); 346 JSONTEST_ASSERT_EQUAL(1.0, true_.asDouble()); 347 JSONTEST_ASSERT_EQUAL(1.0, true_.asFloat()); 348 349 JSONTEST_ASSERT_EQUAL(false, false_.asBool()); 350 JSONTEST_ASSERT_EQUAL(0, false_.asInt()); 351 JSONTEST_ASSERT_EQUAL(0, false_.asLargestInt()); 352 JSONTEST_ASSERT_EQUAL(0, false_.asUInt()); 353 JSONTEST_ASSERT_EQUAL(0, false_.asLargestUInt()); 354 JSONTEST_ASSERT_EQUAL(0.0, false_.asDouble()); 355 JSONTEST_ASSERT_EQUAL(0.0, false_.asFloat()); 356 } 357 358 359 JSONTEST_FIXTURE( ValueTest, integers ) 360 { 361 IsCheck checks; 362 Json::Value val; 363 364 // Conversions that don't depend on the value. 365 JSONTEST_ASSERT(Json::Value(17).isConvertibleTo(Json::realValue)); 366 JSONTEST_ASSERT(Json::Value(17).isConvertibleTo(Json::stringValue)); 367 JSONTEST_ASSERT(Json::Value(17).isConvertibleTo(Json::booleanValue)); 368 JSONTEST_ASSERT(!Json::Value(17).isConvertibleTo(Json::arrayValue)); 369 JSONTEST_ASSERT(!Json::Value(17).isConvertibleTo(Json::objectValue)); 370 371 JSONTEST_ASSERT(Json::Value(17U).isConvertibleTo(Json::realValue)); 372 JSONTEST_ASSERT(Json::Value(17U).isConvertibleTo(Json::stringValue)); 373 JSONTEST_ASSERT(Json::Value(17U).isConvertibleTo(Json::booleanValue)); 374 JSONTEST_ASSERT(!Json::Value(17U).isConvertibleTo(Json::arrayValue)); 375 JSONTEST_ASSERT(!Json::Value(17U).isConvertibleTo(Json::objectValue)); 376 377 JSONTEST_ASSERT(Json::Value(17.0).isConvertibleTo(Json::realValue)); 378 JSONTEST_ASSERT(Json::Value(17.0).isConvertibleTo(Json::stringValue)); 379 JSONTEST_ASSERT(Json::Value(17.0).isConvertibleTo(Json::booleanValue)); 380 JSONTEST_ASSERT(!Json::Value(17.0).isConvertibleTo(Json::arrayValue)); 381 JSONTEST_ASSERT(!Json::Value(17.0).isConvertibleTo(Json::objectValue)); 382 383 // Default int 384 val = Json::Value(Json::intValue); 385 386 JSONTEST_ASSERT_EQUAL(Json::intValue, val.type()); 387 388 checks = IsCheck(); 389 checks.isInt_ = true; 390 checks.isInt64_ = true; 391 checks.isUInt_ = true; 392 checks.isUInt64_ = true; 393 checks.isIntegral_ = true; 394 checks.isDouble_ = true; 395 checks.isNumeric_ = true; 396 JSONTEST_ASSERT_PRED( checkIs( val, checks ) ); 397 398 JSONTEST_ASSERT(val.isConvertibleTo(Json::nullValue)); 399 JSONTEST_ASSERT(val.isConvertibleTo(Json::intValue)); 400 JSONTEST_ASSERT(val.isConvertibleTo(Json::uintValue)); 401 402 JSONTEST_ASSERT_EQUAL(0, val.asInt()); 403 JSONTEST_ASSERT_EQUAL(0, val.asLargestInt()); 404 JSONTEST_ASSERT_EQUAL(0, val.asUInt()); 405 JSONTEST_ASSERT_EQUAL(0, val.asLargestUInt()); 406 JSONTEST_ASSERT_EQUAL(0.0, val.asDouble()); 407 JSONTEST_ASSERT_EQUAL(0.0, val.asFloat()); 408 JSONTEST_ASSERT_EQUAL(false, val.asBool()); 409 JSONTEST_ASSERT_STRING_EQUAL("0", val.asString()); 410 411 // Default uint 412 val = Json::Value(Json::uintValue); 413 414 JSONTEST_ASSERT_EQUAL(Json::uintValue, val.type()); 415 416 checks = IsCheck(); 417 checks.isInt_ = true; 418 checks.isInt64_ = true; 419 checks.isUInt_ = true; 420 checks.isUInt64_ = true; 421 checks.isIntegral_ = true; 422 checks.isDouble_ = true; 423 checks.isNumeric_ = true; 424 JSONTEST_ASSERT_PRED( checkIs( val, checks ) ); 425 426 JSONTEST_ASSERT(val.isConvertibleTo(Json::nullValue)); 427 JSONTEST_ASSERT(val.isConvertibleTo(Json::intValue)); 428 JSONTEST_ASSERT(val.isConvertibleTo(Json::uintValue)); 429 430 JSONTEST_ASSERT_EQUAL(0, val.asInt()); 431 JSONTEST_ASSERT_EQUAL(0, val.asLargestInt()); 432 JSONTEST_ASSERT_EQUAL(0, val.asUInt()); 433 JSONTEST_ASSERT_EQUAL(0, val.asLargestUInt()); 434 JSONTEST_ASSERT_EQUAL(0.0, val.asDouble()); 435 JSONTEST_ASSERT_EQUAL(0.0, val.asFloat()); 436 JSONTEST_ASSERT_EQUAL(false, val.asBool()); 437 JSONTEST_ASSERT_STRING_EQUAL("0", val.asString()); 438 439 // Default real 440 val = Json::Value(Json::realValue); 441 442 JSONTEST_ASSERT_EQUAL(Json::realValue, val.type()); 443 444 JSONTEST_ASSERT(val.isConvertibleTo(Json::nullValue)); 445 JSONTEST_ASSERT(val.isConvertibleTo(Json::intValue)); 446 JSONTEST_ASSERT(val.isConvertibleTo(Json::uintValue)); 447 448 checks = IsCheck(); 449 checks.isInt_ = true; 450 checks.isInt64_ = true; 451 checks.isUInt_ = true; 452 checks.isUInt64_ = true; 453 checks.isIntegral_ = true; 454 checks.isDouble_ = true; 455 checks.isNumeric_ = true; 456 JSONTEST_ASSERT_PRED( checkIs( val, checks ) ); 457 458 JSONTEST_ASSERT_EQUAL(0, val.asInt()); 459 JSONTEST_ASSERT_EQUAL(0, val.asLargestInt()); 460 JSONTEST_ASSERT_EQUAL(0, val.asUInt()); 461 JSONTEST_ASSERT_EQUAL(0, val.asLargestUInt()); 462 JSONTEST_ASSERT_EQUAL(0.0, val.asDouble()); 463 JSONTEST_ASSERT_EQUAL(0.0, val.asFloat()); 464 JSONTEST_ASSERT_EQUAL(false, val.asBool()); 465 JSONTEST_ASSERT_STRING_EQUAL("0.0", val.asString()); 466 467 // Zero (signed constructor arg) 468 val = Json::Value(0); 469 470 JSONTEST_ASSERT_EQUAL(Json::intValue, val.type()); 471 472 checks = IsCheck(); 473 checks.isInt_ = true; 474 checks.isInt64_ = true; 475 checks.isUInt_ = true; 476 checks.isUInt64_ = true; 477 checks.isIntegral_ = true; 478 checks.isDouble_ = true; 479 checks.isNumeric_ = true; 480 JSONTEST_ASSERT_PRED( checkIs( val, checks ) ); 481 482 JSONTEST_ASSERT(val.isConvertibleTo(Json::nullValue)); 483 JSONTEST_ASSERT(val.isConvertibleTo(Json::intValue)); 484 JSONTEST_ASSERT(val.isConvertibleTo(Json::uintValue)); 485 486 JSONTEST_ASSERT_EQUAL(0, val.asInt()); 487 JSONTEST_ASSERT_EQUAL(0, val.asLargestInt()); 488 JSONTEST_ASSERT_EQUAL(0, val.asUInt()); 489 JSONTEST_ASSERT_EQUAL(0, val.asLargestUInt()); 490 JSONTEST_ASSERT_EQUAL(0.0, val.asDouble()); 491 JSONTEST_ASSERT_EQUAL(0.0, val.asFloat()); 492 JSONTEST_ASSERT_EQUAL(false, val.asBool()); 493 JSONTEST_ASSERT_STRING_EQUAL("0", val.asString()); 494 495 // Zero (unsigned constructor arg) 496 val = Json::Value(0u); 497 498 JSONTEST_ASSERT_EQUAL(Json::uintValue, val.type()); 499 500 checks = IsCheck(); 501 checks.isInt_ = true; 502 checks.isInt64_ = true; 503 checks.isUInt_ = true; 504 checks.isUInt64_ = true; 505 checks.isIntegral_ = true; 506 checks.isDouble_ = true; 507 checks.isNumeric_ = true; 508 JSONTEST_ASSERT_PRED( checkIs( val, checks ) ); 509 510 JSONTEST_ASSERT(val.isConvertibleTo(Json::nullValue)); 511 JSONTEST_ASSERT(val.isConvertibleTo(Json::intValue)); 512 JSONTEST_ASSERT(val.isConvertibleTo(Json::uintValue)); 513 514 JSONTEST_ASSERT_EQUAL(0, val.asInt()); 515 JSONTEST_ASSERT_EQUAL(0, val.asLargestInt()); 516 JSONTEST_ASSERT_EQUAL(0, val.asUInt()); 517 JSONTEST_ASSERT_EQUAL(0, val.asLargestUInt()); 518 JSONTEST_ASSERT_EQUAL(0.0, val.asDouble()); 519 JSONTEST_ASSERT_EQUAL(0.0, val.asFloat()); 520 JSONTEST_ASSERT_EQUAL(false, val.asBool()); 521 JSONTEST_ASSERT_STRING_EQUAL("0", val.asString()); 522 523 // Zero (floating-point constructor arg) 524 val = Json::Value(0.0); 525 526 JSONTEST_ASSERT_EQUAL(Json::realValue, val.type()); 527 528 checks = IsCheck(); 529 checks.isInt_ = true; 530 checks.isInt64_ = true; 531 checks.isUInt_ = true; 532 checks.isUInt64_ = true; 533 checks.isIntegral_ = true; 534 checks.isDouble_ = true; 535 checks.isNumeric_ = true; 536 JSONTEST_ASSERT_PRED( checkIs( val, checks ) ); 537 538 JSONTEST_ASSERT(val.isConvertibleTo(Json::nullValue)); 539 JSONTEST_ASSERT(val.isConvertibleTo(Json::intValue)); 540 JSONTEST_ASSERT(val.isConvertibleTo(Json::uintValue)); 541 542 JSONTEST_ASSERT_EQUAL(0, val.asInt()); 543 JSONTEST_ASSERT_EQUAL(0, val.asLargestInt()); 544 JSONTEST_ASSERT_EQUAL(0, val.asUInt()); 545 JSONTEST_ASSERT_EQUAL(0, val.asLargestUInt()); 546 JSONTEST_ASSERT_EQUAL(0.0, val.asDouble()); 547 JSONTEST_ASSERT_EQUAL(0.0, val.asFloat()); 548 JSONTEST_ASSERT_EQUAL(false, val.asBool()); 549 JSONTEST_ASSERT_STRING_EQUAL("0.0", val.asString()); 550 551 // 2^20 (signed constructor arg) 552 val = Json::Value(1 << 20); 553 554 JSONTEST_ASSERT_EQUAL(Json::intValue, val.type()); 555 checks = IsCheck(); 556 checks.isInt_ = true; 557 checks.isInt64_ = true; 558 checks.isUInt_ = true; 559 checks.isUInt64_ = true; 560 checks.isIntegral_ = true; 561 checks.isDouble_ = true; 562 checks.isNumeric_ = true; 563 JSONTEST_ASSERT_PRED( checkIs( val, checks ) ); 564 565 JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue)); 566 JSONTEST_ASSERT(val.isConvertibleTo(Json::intValue)); 567 JSONTEST_ASSERT(val.isConvertibleTo(Json::uintValue)); 568 569 JSONTEST_ASSERT_EQUAL((1 << 20), val.asInt()); 570 JSONTEST_ASSERT_EQUAL((1 << 20), val.asLargestInt()); 571 JSONTEST_ASSERT_EQUAL((1 << 20), val.asUInt()); 572 JSONTEST_ASSERT_EQUAL((1 << 20), val.asLargestUInt()); 573 JSONTEST_ASSERT_EQUAL((1 << 20), val.asDouble()); 574 JSONTEST_ASSERT_EQUAL((1 << 20), val.asFloat()); 575 JSONTEST_ASSERT_EQUAL(true, val.asBool()); 576 JSONTEST_ASSERT_STRING_EQUAL("1048576", val.asString()); 577 578 // 2^20 (unsigned constructor arg) 579 val = Json::Value(Json::UInt(1 << 20)); 580 581 JSONTEST_ASSERT_EQUAL(Json::uintValue, val.type()); 582 583 checks = IsCheck(); 584 checks.isInt_ = true; 585 checks.isInt64_ = true; 586 checks.isUInt_ = true; 587 checks.isUInt64_ = true; 588 checks.isIntegral_ = true; 589 checks.isDouble_ = true; 590 checks.isNumeric_ = true; 591 JSONTEST_ASSERT_PRED( checkIs( val, checks ) ); 592 593 JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue)); 594 JSONTEST_ASSERT(val.isConvertibleTo(Json::intValue)); 595 JSONTEST_ASSERT(val.isConvertibleTo(Json::uintValue)); 596 597 JSONTEST_ASSERT_EQUAL((1 << 20), val.asInt()); 598 JSONTEST_ASSERT_EQUAL((1 << 20), val.asLargestInt()); 599 JSONTEST_ASSERT_EQUAL((1 << 20), val.asUInt()); 600 JSONTEST_ASSERT_EQUAL((1 << 20), val.asLargestUInt()); 601 JSONTEST_ASSERT_EQUAL((1 << 20), val.asDouble()); 602 JSONTEST_ASSERT_EQUAL((1 << 20), val.asFloat()); 603 JSONTEST_ASSERT_EQUAL(true, val.asBool()); 604 JSONTEST_ASSERT_STRING_EQUAL("1048576", val.asString()); 605 606 // 2^20 (floating-point constructor arg) 607 val = Json::Value((1 << 20) / 1.0); 608 609 JSONTEST_ASSERT_EQUAL(Json::realValue, val.type()); 610 611 checks = IsCheck(); 612 checks.isInt_ = true; 613 checks.isInt64_ = true; 614 checks.isUInt_ = true; 615 checks.isUInt64_ = true; 616 checks.isIntegral_ = true; 617 checks.isDouble_ = true; 618 checks.isNumeric_ = true; 619 JSONTEST_ASSERT_PRED( checkIs( val, checks ) ); 620 621 JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue)); 622 JSONTEST_ASSERT(val.isConvertibleTo(Json::intValue)); 623 JSONTEST_ASSERT(val.isConvertibleTo(Json::uintValue)); 624 625 JSONTEST_ASSERT_EQUAL((1 << 20), val.asInt()); 626 JSONTEST_ASSERT_EQUAL((1 << 20), val.asLargestInt()); 627 JSONTEST_ASSERT_EQUAL((1 << 20), val.asUInt()); 628 JSONTEST_ASSERT_EQUAL((1 << 20), val.asLargestUInt()); 629 JSONTEST_ASSERT_EQUAL((1 << 20), val.asDouble()); 630 JSONTEST_ASSERT_EQUAL((1 << 20), val.asFloat()); 631 JSONTEST_ASSERT_EQUAL(true, val.asBool()); 632 JSONTEST_ASSERT_STRING_EQUAL("1048576.0", normalizeFloatingPointStr(val.asString())); 633 634 // -2^20 635 val = Json::Value(-(1 << 20)); 636 637 JSONTEST_ASSERT_EQUAL(Json::intValue, val.type()); 638 639 checks = IsCheck(); 640 checks.isInt_ = true; 641 checks.isInt64_ = true; 642 checks.isIntegral_ = true; 643 checks.isDouble_ = true; 644 checks.isNumeric_ = true; 645 JSONTEST_ASSERT_PRED( checkIs( val, checks ) ); 646 647 JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue)); 648 JSONTEST_ASSERT(val.isConvertibleTo(Json::intValue)); 649 JSONTEST_ASSERT(!val.isConvertibleTo(Json::uintValue)); 650 651 JSONTEST_ASSERT_EQUAL(-(1 << 20), val.asInt()); 652 JSONTEST_ASSERT_EQUAL(-(1 << 20), val.asLargestInt()); 653 JSONTEST_ASSERT_EQUAL(-(1 << 20), val.asDouble()); 654 JSONTEST_ASSERT_EQUAL(-(1 << 20), val.asFloat()); 655 JSONTEST_ASSERT_EQUAL(true, val.asBool()); 656 JSONTEST_ASSERT_STRING_EQUAL("-1048576", val.asString()); 657 658 // int32 max 659 val = Json::Value(kint32max); 660 661 JSONTEST_ASSERT_EQUAL(Json::intValue, val.type()); 662 663 checks = IsCheck(); 664 checks.isInt_ = true; 665 checks.isInt64_ = true; 666 checks.isUInt_ = true; 667 checks.isUInt64_ = true; 668 checks.isIntegral_ = true; 669 checks.isDouble_ = true; 670 checks.isNumeric_ = true; 671 JSONTEST_ASSERT_PRED( checkIs( val, checks ) ); 672 673 JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue)); 674 JSONTEST_ASSERT(val.isConvertibleTo(Json::intValue)); 675 JSONTEST_ASSERT(val.isConvertibleTo(Json::uintValue)); 676 677 JSONTEST_ASSERT_EQUAL(kint32max, val.asInt()); 678 JSONTEST_ASSERT_EQUAL(kint32max, val.asLargestInt()); 679 JSONTEST_ASSERT_EQUAL(kint32max, val.asUInt()); 680 JSONTEST_ASSERT_EQUAL(kint32max, val.asLargestUInt()); 681 JSONTEST_ASSERT_EQUAL(kint32max, val.asDouble()); 682 JSONTEST_ASSERT_EQUAL(kfint32max, val.asFloat()); 683 JSONTEST_ASSERT_EQUAL(true, val.asBool()); 684 JSONTEST_ASSERT_STRING_EQUAL("2147483647", val.asString()); 685 686 // int32 min 687 val = Json::Value(kint32min); 688 689 JSONTEST_ASSERT_EQUAL(Json::intValue, val.type()); 690 691 checks = IsCheck(); 692 checks.isInt_ = true; 693 checks.isInt64_ = true; 694 checks.isIntegral_ = true; 695 checks.isDouble_ = true; 696 checks.isNumeric_ = true; 697 JSONTEST_ASSERT_PRED( checkIs( val, checks ) ); 698 699 JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue)); 700 JSONTEST_ASSERT(val.isConvertibleTo(Json::intValue)); 701 JSONTEST_ASSERT(!val.isConvertibleTo(Json::uintValue)); 702 703 JSONTEST_ASSERT_EQUAL(kint32min, val.asInt()); 704 JSONTEST_ASSERT_EQUAL(kint32min, val.asLargestInt()); 705 JSONTEST_ASSERT_EQUAL(kint32min, val.asDouble()); 706 JSONTEST_ASSERT_EQUAL(kint32min, val.asFloat()); 707 JSONTEST_ASSERT_EQUAL(true, val.asBool()); 708 JSONTEST_ASSERT_STRING_EQUAL("-2147483648", val.asString()); 709 710 // uint32 max 711 val = Json::Value(kuint32max); 712 713 JSONTEST_ASSERT_EQUAL(Json::uintValue, val.type()); 714 715 checks = IsCheck(); 716 checks.isInt64_ = true; 717 checks.isUInt_ = true; 718 checks.isUInt64_ = true; 719 checks.isIntegral_ = true; 720 checks.isDouble_ = true; 721 checks.isNumeric_ = true; 722 JSONTEST_ASSERT_PRED( checkIs( val, checks ) ); 723 724 JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue)); 725 JSONTEST_ASSERT(!val.isConvertibleTo(Json::intValue)); 726 JSONTEST_ASSERT(val.isConvertibleTo(Json::uintValue)); 727 728 #ifndef JSON_NO_INT64 729 JSONTEST_ASSERT_EQUAL(kuint32max, val.asLargestInt()); 730 #endif 731 JSONTEST_ASSERT_EQUAL(kuint32max, val.asUInt()); 732 JSONTEST_ASSERT_EQUAL(kuint32max, val.asLargestUInt()); 733 JSONTEST_ASSERT_EQUAL(kuint32max, val.asDouble()); 734 JSONTEST_ASSERT_EQUAL(kfuint32max, val.asFloat()); 735 JSONTEST_ASSERT_EQUAL(true, val.asBool()); 736 JSONTEST_ASSERT_STRING_EQUAL("4294967295", val.asString()); 737 738 #ifdef JSON_NO_INT64 739 // int64 max 740 val = Json::Value(double(kint64max)); 741 742 JSONTEST_ASSERT_EQUAL(Json::realValue, val.type()); 743 744 checks = IsCheck(); 745 checks.isDouble_ = true; 746 checks.isNumeric_ = true; 747 JSONTEST_ASSERT_PRED( checkIs( val, checks ) ); 748 749 JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue)); 750 JSONTEST_ASSERT(!val.isConvertibleTo(Json::intValue)); 751 JSONTEST_ASSERT(!val.isConvertibleTo(Json::uintValue)); 752 753 JSONTEST_ASSERT_EQUAL(double(kint64max), val.asDouble()); 754 JSONTEST_ASSERT_EQUAL(float(kint64max), val.asFloat()); 755 JSONTEST_ASSERT_EQUAL(true, val.asBool()); 756 JSONTEST_ASSERT_STRING_EQUAL("9.22337e+18", val.asString()); 757 758 // int64 min 759 val = Json::Value(double(kint64min)); 760 761 JSONTEST_ASSERT_EQUAL(Json::realValue, val.type()); 762 763 checks = IsCheck(); 764 checks.isDouble_ = true; 765 checks.isNumeric_ = true; 766 JSONTEST_ASSERT_PRED( checkIs( val, checks ) ); 767 768 JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue)); 769 JSONTEST_ASSERT(!val.isConvertibleTo(Json::intValue)); 770 JSONTEST_ASSERT(!val.isConvertibleTo(Json::uintValue)); 771 772 JSONTEST_ASSERT_EQUAL(double(kint64min), val.asDouble()); 773 JSONTEST_ASSERT_EQUAL(float(kint64min), val.asFloat()); 774 JSONTEST_ASSERT_EQUAL(true, val.asBool()); 775 JSONTEST_ASSERT_STRING_EQUAL("-9.22337e+18", val.asString()); 776 777 // uint64 max 778 val = Json::Value(double(kuint64max)); 779 780 JSONTEST_ASSERT_EQUAL(Json::realValue, val.type()); 781 782 checks = IsCheck(); 783 checks.isDouble_ = true; 784 checks.isNumeric_ = true; 785 JSONTEST_ASSERT_PRED( checkIs( val, checks ) ); 786 787 JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue)); 788 JSONTEST_ASSERT(!val.isConvertibleTo(Json::intValue)); 789 JSONTEST_ASSERT(!val.isConvertibleTo(Json::uintValue)); 790 791 JSONTEST_ASSERT_EQUAL(double(kuint64max), val.asDouble()); 792 JSONTEST_ASSERT_EQUAL(float(kuint64max), val.asFloat()); 793 JSONTEST_ASSERT_EQUAL(true, val.asBool()); 794 JSONTEST_ASSERT_STRING_EQUAL("1.84467e+19", val.asString()); 795 #else // ifdef JSON_NO_INT64 796 // 2^40 (signed constructor arg) 797 val = Json::Value(Json::Int64(1) << 40); 798 799 JSONTEST_ASSERT_EQUAL(Json::intValue, val.type()); 800 801 checks = IsCheck(); 802 checks.isInt64_ = true; 803 checks.isUInt64_ = true; 804 checks.isIntegral_ = true; 805 checks.isDouble_ = true; 806 checks.isNumeric_ = true; 807 JSONTEST_ASSERT_PRED( checkIs( val, checks ) ); 808 809 JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue)); 810 JSONTEST_ASSERT(!val.isConvertibleTo(Json::intValue)); 811 JSONTEST_ASSERT(!val.isConvertibleTo(Json::uintValue)); 812 813 JSONTEST_ASSERT_EQUAL((Json::Int64(1) << 40), val.asInt64()); 814 JSONTEST_ASSERT_EQUAL((Json::Int64(1) << 40), val.asLargestInt()); 815 JSONTEST_ASSERT_EQUAL((Json::Int64(1) << 40), val.asUInt64()); 816 JSONTEST_ASSERT_EQUAL((Json::Int64(1) << 40), val.asLargestUInt()); 817 JSONTEST_ASSERT_EQUAL((Json::Int64(1) << 40), val.asDouble()); 818 JSONTEST_ASSERT_EQUAL((Json::Int64(1) << 40), val.asFloat()); 819 JSONTEST_ASSERT_EQUAL(true, val.asBool()); 820 JSONTEST_ASSERT_STRING_EQUAL("1099511627776", val.asString()); 821 822 // 2^40 (unsigned constructor arg) 823 val = Json::Value(Json::UInt64(1) << 40); 824 825 JSONTEST_ASSERT_EQUAL(Json::uintValue, val.type()); 826 827 checks = IsCheck(); 828 checks.isInt64_ = true; 829 checks.isUInt64_ = true; 830 checks.isIntegral_ = true; 831 checks.isDouble_ = true; 832 checks.isNumeric_ = true; 833 JSONTEST_ASSERT_PRED( checkIs( val, checks ) ); 834 835 JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue)); 836 JSONTEST_ASSERT(!val.isConvertibleTo(Json::intValue)); 837 JSONTEST_ASSERT(!val.isConvertibleTo(Json::uintValue)); 838 839 JSONTEST_ASSERT_EQUAL((Json::Int64(1) << 40), val.asInt64()); 840 JSONTEST_ASSERT_EQUAL((Json::Int64(1) << 40), val.asLargestInt()); 841 JSONTEST_ASSERT_EQUAL((Json::Int64(1) << 40), val.asUInt64()); 842 JSONTEST_ASSERT_EQUAL((Json::Int64(1) << 40), val.asLargestUInt()); 843 JSONTEST_ASSERT_EQUAL((Json::Int64(1) << 40), val.asDouble()); 844 JSONTEST_ASSERT_EQUAL((Json::Int64(1) << 40), val.asFloat()); 845 JSONTEST_ASSERT_EQUAL(true, val.asBool()); 846 JSONTEST_ASSERT_STRING_EQUAL("1099511627776", val.asString()); 847 848 // 2^40 (floating-point constructor arg) 849 val = Json::Value((Json::Int64(1) << 40) / 1.0); 850 851 JSONTEST_ASSERT_EQUAL(Json::realValue, val.type()); 852 853 checks = IsCheck(); 854 checks.isInt64_ = true; 855 checks.isUInt64_ = true; 856 checks.isIntegral_ = true; 857 checks.isDouble_ = true; 858 checks.isNumeric_ = true; 859 JSONTEST_ASSERT_PRED( checkIs( val, checks ) ); 860 861 JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue)); 862 JSONTEST_ASSERT(!val.isConvertibleTo(Json::intValue)); 863 JSONTEST_ASSERT(!val.isConvertibleTo(Json::uintValue)); 864 865 JSONTEST_ASSERT_EQUAL((Json::Int64(1) << 40), val.asInt64()); 866 JSONTEST_ASSERT_EQUAL((Json::Int64(1) << 40), val.asLargestInt()); 867 JSONTEST_ASSERT_EQUAL((Json::Int64(1) << 40), val.asUInt64()); 868 JSONTEST_ASSERT_EQUAL((Json::Int64(1) << 40), val.asLargestUInt()); 869 JSONTEST_ASSERT_EQUAL((Json::Int64(1) << 40), val.asDouble()); 870 JSONTEST_ASSERT_EQUAL((Json::Int64(1) << 40), val.asFloat()); 871 JSONTEST_ASSERT_EQUAL(true, val.asBool()); 872 JSONTEST_ASSERT_STRING_EQUAL("1099511627776.0", normalizeFloatingPointStr(val.asString())); 873 874 // -2^40 875 val = Json::Value(-(Json::Int64(1) << 40)); 876 877 JSONTEST_ASSERT_EQUAL(Json::intValue, val.type()); 878 879 checks = IsCheck(); 880 checks.isInt64_ = true; 881 checks.isIntegral_ = true; 882 checks.isDouble_ = true; 883 checks.isNumeric_ = true; 884 JSONTEST_ASSERT_PRED( checkIs( val, checks ) ); 885 886 JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue)); 887 JSONTEST_ASSERT(!val.isConvertibleTo(Json::intValue)); 888 JSONTEST_ASSERT(!val.isConvertibleTo(Json::uintValue)); 889 890 JSONTEST_ASSERT_EQUAL(-(Json::Int64(1) << 40), val.asInt64()); 891 JSONTEST_ASSERT_EQUAL(-(Json::Int64(1) << 40), val.asLargestInt()); 892 JSONTEST_ASSERT_EQUAL(-(Json::Int64(1) << 40), val.asDouble()); 893 JSONTEST_ASSERT_EQUAL(-(Json::Int64(1) << 40), val.asFloat()); 894 JSONTEST_ASSERT_EQUAL(true, val.asBool()); 895 JSONTEST_ASSERT_STRING_EQUAL("-1099511627776", val.asString()); 896 897 // int64 max 898 val = Json::Value(Json::Int64(kint64max)); 899 900 JSONTEST_ASSERT_EQUAL(Json::intValue, val.type()); 901 902 checks = IsCheck(); 903 checks.isInt64_ = true; 904 checks.isUInt64_ = true; 905 checks.isIntegral_ = true; 906 checks.isDouble_ = true; 907 checks.isNumeric_ = true; 908 JSONTEST_ASSERT_PRED( checkIs( val, checks ) ); 909 910 JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue)); 911 JSONTEST_ASSERT(!val.isConvertibleTo(Json::intValue)); 912 JSONTEST_ASSERT(!val.isConvertibleTo(Json::uintValue)); 913 914 JSONTEST_ASSERT_EQUAL(kint64max, val.asInt64()); 915 JSONTEST_ASSERT_EQUAL(kint64max, val.asLargestInt()); 916 JSONTEST_ASSERT_EQUAL(kint64max, val.asUInt64()); 917 JSONTEST_ASSERT_EQUAL(kint64max, val.asLargestUInt()); 918 JSONTEST_ASSERT_EQUAL(double(kint64max), val.asDouble()); 919 JSONTEST_ASSERT_EQUAL(float(kint64max), val.asFloat()); 920 JSONTEST_ASSERT_EQUAL(true, val.asBool()); 921 JSONTEST_ASSERT_STRING_EQUAL("9223372036854775807", val.asString()); 922 923 // int64 max (floating point constructor). Note that kint64max is not exactly 924 // representable as a double, and will be rounded up to be higher. 925 val = Json::Value(double(kint64max)); 926 927 JSONTEST_ASSERT_EQUAL(Json::realValue, val.type()); 928 929 checks = IsCheck(); 930 checks.isUInt64_ = true; 931 checks.isIntegral_ = true; 932 checks.isDouble_ = true; 933 checks.isNumeric_ = true; 934 JSONTEST_ASSERT_PRED( checkIs( val, checks ) ); 935 936 JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue)); 937 JSONTEST_ASSERT(!val.isConvertibleTo(Json::intValue)); 938 JSONTEST_ASSERT(!val.isConvertibleTo(Json::uintValue)); 939 940 JSONTEST_ASSERT_EQUAL(Json::UInt64(1) << 63, val.asUInt64()); 941 JSONTEST_ASSERT_EQUAL(Json::UInt64(1) << 63, val.asLargestUInt()); 942 JSONTEST_ASSERT_EQUAL(uint64ToDouble(Json::UInt64(1) << 63), val.asDouble()); 943 JSONTEST_ASSERT_EQUAL(float(uint64ToDouble(Json::UInt64(1) << 63)), val.asFloat()); 944 JSONTEST_ASSERT_EQUAL(true, val.asBool()); 945 JSONTEST_ASSERT_STRING_EQUAL("9.223372036854776e+18", normalizeFloatingPointStr(val.asString())); 946 947 // int64 min 948 val = Json::Value(Json::Int64(kint64min)); 949 950 JSONTEST_ASSERT_EQUAL(Json::intValue, val.type()); 951 952 checks = IsCheck(); 953 checks.isInt64_ = true; 954 checks.isIntegral_ = true; 955 checks.isDouble_ = true; 956 checks.isNumeric_ = true; 957 JSONTEST_ASSERT_PRED( checkIs( val, checks ) ); 958 959 JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue)); 960 JSONTEST_ASSERT(!val.isConvertibleTo(Json::intValue)); 961 JSONTEST_ASSERT(!val.isConvertibleTo(Json::uintValue)); 962 963 JSONTEST_ASSERT_EQUAL(kint64min, val.asInt64()); 964 JSONTEST_ASSERT_EQUAL(kint64min, val.asLargestInt()); 965 JSONTEST_ASSERT_EQUAL(double(kint64min), val.asDouble()); 966 JSONTEST_ASSERT_EQUAL(float(kint64min), val.asFloat()); 967 JSONTEST_ASSERT_EQUAL(true, val.asBool()); 968 JSONTEST_ASSERT_STRING_EQUAL("-9223372036854775808", val.asString()); 969 970 // int64 min (floating point constructor). Note that kint64min *is* exactly 971 // representable as a double. 972 val = Json::Value(double(kint64min)); 973 974 JSONTEST_ASSERT_EQUAL(Json::realValue, val.type()); 975 976 checks = IsCheck(); 977 checks.isInt64_ = true; 978 checks.isIntegral_ = true; 979 checks.isDouble_ = true; 980 checks.isNumeric_ = true; 981 JSONTEST_ASSERT_PRED( checkIs( val, checks ) ); 982 983 JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue)); 984 JSONTEST_ASSERT(!val.isConvertibleTo(Json::intValue)); 985 JSONTEST_ASSERT(!val.isConvertibleTo(Json::uintValue)); 986 987 JSONTEST_ASSERT_EQUAL(kint64min, val.asInt64()); 988 JSONTEST_ASSERT_EQUAL(kint64min, val.asLargestInt()); 989 JSONTEST_ASSERT_EQUAL(-9223372036854775808.0, val.asDouble()); 990 JSONTEST_ASSERT_EQUAL(-9223372036854775808.0, val.asFloat()); 991 JSONTEST_ASSERT_EQUAL(true, val.asBool()); 992 JSONTEST_ASSERT_STRING_EQUAL("-9.223372036854776e+18", normalizeFloatingPointStr(val.asString())); 993 994 // uint64 max 995 val = Json::Value(Json::UInt64(kuint64max)); 996 997 JSONTEST_ASSERT_EQUAL(Json::uintValue, val.type()); 998 999 checks = IsCheck(); 1000 checks.isUInt64_ = true; 1001 checks.isIntegral_ = true; 1002 checks.isDouble_ = true; 1003 checks.isNumeric_ = true; 1004 JSONTEST_ASSERT_PRED( checkIs( val, checks ) ); 1005 1006 JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue)); 1007 JSONTEST_ASSERT(!val.isConvertibleTo(Json::intValue)); 1008 JSONTEST_ASSERT(!val.isConvertibleTo(Json::uintValue)); 1009 1010 JSONTEST_ASSERT_EQUAL(kuint64max, val.asUInt64()); 1011 JSONTEST_ASSERT_EQUAL(kuint64max, val.asLargestUInt()); 1012 JSONTEST_ASSERT_EQUAL(uint64ToDouble(kuint64max), val.asDouble()); 1013 JSONTEST_ASSERT_EQUAL(float(uint64ToDouble(kuint64max)), val.asFloat()); 1014 JSONTEST_ASSERT_EQUAL(true, val.asBool()); 1015 JSONTEST_ASSERT_STRING_EQUAL("18446744073709551615", val.asString()); 1016 1017 // uint64 max (floating point constructor). Note that kuint64max is not 1018 // exactly representable as a double, and will be rounded up to be higher. 1019 val = Json::Value(uint64ToDouble(kuint64max)); 1020 1021 JSONTEST_ASSERT_EQUAL(Json::realValue, val.type()); 1022 1023 checks = IsCheck(); 1024 checks.isDouble_ = true; 1025 checks.isNumeric_ = true; 1026 JSONTEST_ASSERT_PRED( checkIs( val, checks ) ); 1027 1028 JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue)); 1029 JSONTEST_ASSERT(!val.isConvertibleTo(Json::intValue)); 1030 JSONTEST_ASSERT(!val.isConvertibleTo(Json::uintValue)); 1031 1032 JSONTEST_ASSERT_EQUAL(18446744073709551616.0, val.asDouble()); 1033 JSONTEST_ASSERT_EQUAL(18446744073709551616.0, val.asFloat()); 1034 JSONTEST_ASSERT_EQUAL(true, val.asBool()); 1035 JSONTEST_ASSERT_STRING_EQUAL("1.844674407370955e+19", normalizeFloatingPointStr(val.asString())); 1036 #endif 1037 } 1038 1039 1040 JSONTEST_FIXTURE( ValueTest, nonIntegers ) 1041 { 1042 IsCheck checks; 1043 Json::Value val; 1044 1045 // Small positive number 1046 val = Json::Value(1.5); 1047 1048 JSONTEST_ASSERT_EQUAL(Json::realValue, val.type()); 1049 1050 checks = IsCheck(); 1051 checks.isDouble_ = true; 1052 checks.isNumeric_ = true; 1053 JSONTEST_ASSERT_PRED( checkIs( val, checks ) ); 1054 1055 JSONTEST_ASSERT(val.isConvertibleTo(Json::intValue)); 1056 JSONTEST_ASSERT(val.isConvertibleTo(Json::uintValue)); 1057 JSONTEST_ASSERT(val.isConvertibleTo(Json::realValue)); 1058 JSONTEST_ASSERT(val.isConvertibleTo(Json::booleanValue)); 1059 JSONTEST_ASSERT(val.isConvertibleTo(Json::stringValue)); 1060 JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue)); 1061 JSONTEST_ASSERT(!val.isConvertibleTo(Json::arrayValue)); 1062 JSONTEST_ASSERT(!val.isConvertibleTo(Json::objectValue)); 1063 1064 JSONTEST_ASSERT_EQUAL(1.5, val.asDouble()); 1065 JSONTEST_ASSERT_EQUAL(1.5, val.asFloat()); 1066 JSONTEST_ASSERT_EQUAL(1, val.asInt()); 1067 JSONTEST_ASSERT_EQUAL(1, val.asLargestInt()); 1068 JSONTEST_ASSERT_EQUAL(1, val.asUInt()); 1069 JSONTEST_ASSERT_EQUAL(1, val.asLargestUInt()); 1070 JSONTEST_ASSERT_EQUAL(true, val.asBool()); 1071 JSONTEST_ASSERT_EQUAL("1.50", val.asString()); 1072 1073 // Small negative number 1074 val = Json::Value(-1.5); 1075 1076 JSONTEST_ASSERT_EQUAL(Json::realValue, val.type()); 1077 1078 checks = IsCheck(); 1079 checks.isDouble_ = true; 1080 checks.isNumeric_ = true; 1081 JSONTEST_ASSERT_PRED( checkIs( val, checks ) ); 1082 1083 JSONTEST_ASSERT(val.isConvertibleTo(Json::intValue)); 1084 JSONTEST_ASSERT(val.isConvertibleTo(Json::realValue)); 1085 JSONTEST_ASSERT(val.isConvertibleTo(Json::booleanValue)); 1086 JSONTEST_ASSERT(val.isConvertibleTo(Json::stringValue)); 1087 JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue)); 1088 JSONTEST_ASSERT(!val.isConvertibleTo(Json::uintValue)); 1089 JSONTEST_ASSERT(!val.isConvertibleTo(Json::arrayValue)); 1090 JSONTEST_ASSERT(!val.isConvertibleTo(Json::objectValue)); 1091 1092 JSONTEST_ASSERT_EQUAL(-1.5, val.asDouble()); 1093 JSONTEST_ASSERT_EQUAL(-1.5, val.asFloat()); 1094 JSONTEST_ASSERT_EQUAL(-1, val.asInt()); 1095 JSONTEST_ASSERT_EQUAL(-1, val.asLargestInt()); 1096 JSONTEST_ASSERT_EQUAL(true, val.asBool()); 1097 JSONTEST_ASSERT_EQUAL("-1.50", val.asString()); 1098 1099 // A bit over int32 max 1100 val = Json::Value(kint32max + 0.5); 1101 1102 JSONTEST_ASSERT_EQUAL(Json::realValue, val.type()); 1103 1104 checks = IsCheck(); 1105 checks.isDouble_ = true; 1106 checks.isNumeric_ = true; 1107 JSONTEST_ASSERT_PRED( checkIs( val, checks ) ); 1108 1109 JSONTEST_ASSERT(val.isConvertibleTo(Json::uintValue)); 1110 JSONTEST_ASSERT(val.isConvertibleTo(Json::realValue)); 1111 JSONTEST_ASSERT(val.isConvertibleTo(Json::booleanValue)); 1112 JSONTEST_ASSERT(val.isConvertibleTo(Json::stringValue)); 1113 JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue)); 1114 JSONTEST_ASSERT(!val.isConvertibleTo(Json::intValue)); 1115 JSONTEST_ASSERT(!val.isConvertibleTo(Json::arrayValue)); 1116 JSONTEST_ASSERT(!val.isConvertibleTo(Json::objectValue)); 1117 1118 JSONTEST_ASSERT_EQUAL(2147483647.5, val.asDouble()); 1119 JSONTEST_ASSERT_EQUAL(float(2147483647.5), val.asFloat()); 1120 JSONTEST_ASSERT_EQUAL(2147483647U, val.asUInt()); 1121 #ifdef JSON_HAS_INT64 1122 JSONTEST_ASSERT_EQUAL(2147483647L, val.asLargestInt()); 1123 JSONTEST_ASSERT_EQUAL(2147483647U, val.asLargestUInt()); 1124 #endif 1125 JSONTEST_ASSERT_EQUAL(true, val.asBool()); 1126 JSONTEST_ASSERT_EQUAL("2147483647.50", normalizeFloatingPointStr(val.asString())); 1127 1128 // A bit under int32 min 1129 val = Json::Value(kint32min - 0.5); 1130 1131 JSONTEST_ASSERT_EQUAL(Json::realValue, val.type()); 1132 1133 checks = IsCheck(); 1134 checks.isDouble_ = true; 1135 checks.isNumeric_ = true; 1136 JSONTEST_ASSERT_PRED( checkIs( val, checks ) ); 1137 1138 JSONTEST_ASSERT(val.isConvertibleTo(Json::realValue)); 1139 JSONTEST_ASSERT(val.isConvertibleTo(Json::booleanValue)); 1140 JSONTEST_ASSERT(val.isConvertibleTo(Json::stringValue)); 1141 JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue)); 1142 JSONTEST_ASSERT(!val.isConvertibleTo(Json::intValue)); 1143 JSONTEST_ASSERT(!val.isConvertibleTo(Json::uintValue)); 1144 JSONTEST_ASSERT(!val.isConvertibleTo(Json::arrayValue)); 1145 JSONTEST_ASSERT(!val.isConvertibleTo(Json::objectValue)); 1146 1147 JSONTEST_ASSERT_EQUAL(-2147483648.5, val.asDouble()); 1148 JSONTEST_ASSERT_EQUAL(float(-2147483648.5), val.asFloat()); 1149 #ifdef JSON_HAS_INT64 1150 JSONTEST_ASSERT_EQUAL(-Json::Int64(1)<< 31, val.asLargestInt()); 1151 #endif 1152 JSONTEST_ASSERT_EQUAL(true, val.asBool()); 1153 JSONTEST_ASSERT_EQUAL("-2147483648.50", normalizeFloatingPointStr(val.asString())); 1154 1155 // A bit over uint32 max 1156 val = Json::Value(kuint32max + 0.5); 1157 1158 JSONTEST_ASSERT_EQUAL(Json::realValue, val.type()); 1159 1160 checks = IsCheck(); 1161 checks.isDouble_ = true; 1162 checks.isNumeric_ = true; 1163 JSONTEST_ASSERT_PRED( checkIs( val, checks ) ); 1164 1165 JSONTEST_ASSERT(val.isConvertibleTo(Json::realValue)); 1166 JSONTEST_ASSERT(val.isConvertibleTo(Json::booleanValue)); 1167 JSONTEST_ASSERT(val.isConvertibleTo(Json::stringValue)); 1168 JSONTEST_ASSERT(!val.isConvertibleTo(Json::nullValue)); 1169 JSONTEST_ASSERT(!val.isConvertibleTo(Json::intValue)); 1170 JSONTEST_ASSERT(!val.isConvertibleTo(Json::uintValue)); 1171 JSONTEST_ASSERT(!val.isConvertibleTo(Json::arrayValue)); 1172 JSONTEST_ASSERT(!val.isConvertibleTo(Json::objectValue)); 1173 1174 JSONTEST_ASSERT_EQUAL(4294967295.5, val.asDouble()); 1175 JSONTEST_ASSERT_EQUAL(float(4294967295.5), val.asFloat()); 1176 #ifdef JSON_HAS_INT64 1177 JSONTEST_ASSERT_EQUAL((Json::Int64(1) << 32)-1, val.asLargestInt()); 1178 JSONTEST_ASSERT_EQUAL((Json::UInt64(1) << 32)-Json::UInt64(1), val.asLargestUInt()); 1179 #endif 1180 JSONTEST_ASSERT_EQUAL(true, val.asBool()); 1181 JSONTEST_ASSERT_EQUAL("4294967295.50", normalizeFloatingPointStr(val.asString())); 1182 1183 val = Json::Value(1.2345678901234); 1184 JSONTEST_ASSERT_STRING_EQUAL( "1.23456789012340", normalizeFloatingPointStr(val.asString())); 1185 } 1186 1187 1188 void 1189 ValueTest::checkConstMemberCount( const Json::Value &value, unsigned int expectedCount ) 1190 { 1191 unsigned int count = 0; 1192 Json::Value::const_iterator itEnd = value.end(); 1193 for ( Json::Value::const_iterator it = value.begin(); it != itEnd; ++it ) 1194 { 1195 ++count; 1196 } 1197 JSONTEST_ASSERT_EQUAL( expectedCount, count ) << "Json::Value::const_iterator"; 1198 } 1199 1200 void 1201 ValueTest::checkMemberCount( Json::Value &value, unsigned int expectedCount ) 1202 { 1203 JSONTEST_ASSERT_EQUAL(expectedCount, value.size() ); 1204 1205 unsigned int count = 0; 1206 Json::Value::iterator itEnd = value.end(); 1207 for ( Json::Value::iterator it = value.begin(); it != itEnd; ++it ) 1208 { 1209 ++count; 1210 } 1211 JSONTEST_ASSERT_EQUAL( expectedCount, count ) << "Json::Value::iterator"; 1212 1213 JSONTEST_ASSERT_PRED( checkConstMemberCount(value, expectedCount) ); 1214 } 1215 1216 1217 ValueTest::IsCheck::IsCheck() 1218 : isObject_( false ) 1219 , isArray_( false ) 1220 , isBool_( false ) 1221 , isString_( false ) 1222 , isNull_( false ) 1223 , isInt_( false ) 1224 , isInt64_( false ) 1225 , isUInt_( false ) 1226 , isUInt64_( false ) 1227 , isIntegral_( false ) 1228 , isDouble_( false ) 1229 , isNumeric_( false ) 1230 { 1231 } 1232 1233 1234 void 1235 ValueTest::checkIs( const Json::Value &value, const IsCheck &check ) 1236 { 1237 JSONTEST_ASSERT_EQUAL(check.isObject_, value.isObject() ); 1238 JSONTEST_ASSERT_EQUAL(check.isArray_, value.isArray() ); 1239 JSONTEST_ASSERT_EQUAL(check.isBool_, value.isBool() ); 1240 JSONTEST_ASSERT_EQUAL(check.isDouble_, value.isDouble() ); 1241 JSONTEST_ASSERT_EQUAL(check.isInt_, value.isInt() ); 1242 JSONTEST_ASSERT_EQUAL(check.isUInt_, value.isUInt() ); 1243 JSONTEST_ASSERT_EQUAL(check.isIntegral_, value.isIntegral() ); 1244 JSONTEST_ASSERT_EQUAL(check.isNumeric_, value.isNumeric() ); 1245 JSONTEST_ASSERT_EQUAL(check.isString_, value.isString() ); 1246 JSONTEST_ASSERT_EQUAL(check.isNull_, value.isNull() ); 1247 1248 #ifdef JSON_HAS_INT64 1249 JSONTEST_ASSERT_EQUAL(check.isInt64_, value.isInt64() ); 1250 JSONTEST_ASSERT_EQUAL(check.isUInt64_, value.isUInt64() ); 1251 #else 1252 JSONTEST_ASSERT_EQUAL(false, value.isInt64() ); 1253 JSONTEST_ASSERT_EQUAL(false, value.isUInt64() ); 1254 #endif 1255 } 1256 1257 JSONTEST_FIXTURE( ValueTest, compareNull ) 1258 { 1259 JSONTEST_ASSERT_PRED( checkIsEqual( Json::Value(), Json::Value() ) ); 1260 } 1261 1262 1263 JSONTEST_FIXTURE( ValueTest, compareInt ) 1264 { 1265 JSONTEST_ASSERT_PRED( checkIsLess( 0, 10 ) ); 1266 JSONTEST_ASSERT_PRED( checkIsEqual( 10, 10 ) ); 1267 JSONTEST_ASSERT_PRED( checkIsEqual( -10, -10 ) ); 1268 JSONTEST_ASSERT_PRED( checkIsLess( -10, 0 ) ); 1269 } 1270 1271 1272 JSONTEST_FIXTURE( ValueTest, compareUInt ) 1273 { 1274 JSONTEST_ASSERT_PRED( checkIsLess( 0u, 10u ) ); 1275 JSONTEST_ASSERT_PRED( checkIsLess( 0u, Json::Value::maxUInt ) ); 1276 JSONTEST_ASSERT_PRED( checkIsEqual( 10u, 10u ) ); 1277 } 1278 1279 1280 JSONTEST_FIXTURE( ValueTest, compareDouble ) 1281 { 1282 JSONTEST_ASSERT_PRED( checkIsLess( 0.0, 10.0 ) ); 1283 JSONTEST_ASSERT_PRED( checkIsEqual( 10.0, 10.0 ) ); 1284 JSONTEST_ASSERT_PRED( checkIsEqual( -10.0, -10.0 ) ); 1285 JSONTEST_ASSERT_PRED( checkIsLess( -10.0, 0.0 ) ); 1286 } 1287 1288 1289 JSONTEST_FIXTURE( ValueTest, compareString ) 1290 { 1291 JSONTEST_ASSERT_PRED( checkIsLess( "", " " ) ); 1292 JSONTEST_ASSERT_PRED( checkIsLess( "", "a" ) ); 1293 JSONTEST_ASSERT_PRED( checkIsLess( "abcd", "zyui" ) ); 1294 JSONTEST_ASSERT_PRED( checkIsLess( "abc", "abcd" ) ); 1295 JSONTEST_ASSERT_PRED( checkIsEqual( "abcd", "abcd" ) ); 1296 JSONTEST_ASSERT_PRED( checkIsEqual( " ", " " ) ); 1297 JSONTEST_ASSERT_PRED( checkIsLess( "ABCD", "abcd" ) ); 1298 JSONTEST_ASSERT_PRED( checkIsEqual( "ABCD", "ABCD" ) ); 1299 } 1300 1301 1302 JSONTEST_FIXTURE( ValueTest, compareBoolean ) 1303 { 1304 JSONTEST_ASSERT_PRED( checkIsLess( false, true ) ); 1305 JSONTEST_ASSERT_PRED( checkIsEqual( false, false ) ); 1306 JSONTEST_ASSERT_PRED( checkIsEqual( true, true ) ); 1307 } 1308 1309 1310 JSONTEST_FIXTURE( ValueTest, compareArray ) 1311 { 1312 // array compare size then content 1313 Json::Value emptyArray(Json::arrayValue); 1314 Json::Value l1aArray; 1315 l1aArray.append( 0 ); 1316 Json::Value l1bArray; 1317 l1bArray.append( 10 ); 1318 Json::Value l2aArray; 1319 l2aArray.append( 0 ); 1320 l2aArray.append( 0 ); 1321 Json::Value l2bArray; 1322 l2bArray.append( 0 ); 1323 l2bArray.append( 10 ); 1324 JSONTEST_ASSERT_PRED( checkIsLess( emptyArray, l1aArray ) ); 1325 JSONTEST_ASSERT_PRED( checkIsLess( emptyArray, l2aArray ) ); 1326 JSONTEST_ASSERT_PRED( checkIsLess( l1aArray, l2aArray ) ); 1327 JSONTEST_ASSERT_PRED( checkIsLess( l2aArray, l2bArray ) ); 1328 JSONTEST_ASSERT_PRED( checkIsEqual( emptyArray, Json::Value( emptyArray ) ) ); 1329 JSONTEST_ASSERT_PRED( checkIsEqual( l1aArray, Json::Value( l1aArray) ) ); 1330 JSONTEST_ASSERT_PRED( checkIsEqual( l2bArray, Json::Value( l2bArray) ) ); 1331 } 1332 1333 1334 JSONTEST_FIXTURE( ValueTest, compareObject ) 1335 { 1336 // object compare size then content 1337 Json::Value emptyObject(Json::objectValue); 1338 Json::Value l1aObject; 1339 l1aObject["key1"] = 0; 1340 Json::Value l1bObject; 1341 l1aObject["key1"] = 10; 1342 Json::Value l2aObject; 1343 l2aObject["key1"] = 0; 1344 l2aObject["key2"] = 0; 1345 JSONTEST_ASSERT_PRED( checkIsLess( emptyObject, l1aObject ) ); 1346 JSONTEST_ASSERT_PRED( checkIsLess( emptyObject, l2aObject ) ); 1347 JSONTEST_ASSERT_PRED( checkIsLess( l1aObject, l2aObject ) ); 1348 JSONTEST_ASSERT_PRED( checkIsEqual( emptyObject, Json::Value( emptyObject ) ) ); 1349 JSONTEST_ASSERT_PRED( checkIsEqual( l1aObject, Json::Value( l1aObject ) ) ); 1350 JSONTEST_ASSERT_PRED( checkIsEqual( l2aObject, Json::Value( l2aObject ) ) ); 1351 } 1352 1353 1354 JSONTEST_FIXTURE( ValueTest, compareType ) 1355 { 1356 // object of different type are ordered according to their type 1357 JSONTEST_ASSERT_PRED( checkIsLess( Json::Value(), Json::Value(1) ) ); 1358 JSONTEST_ASSERT_PRED( checkIsLess( Json::Value(1), Json::Value(1u) ) ); 1359 JSONTEST_ASSERT_PRED( checkIsLess( Json::Value(1u), Json::Value(1.0) ) ); 1360 JSONTEST_ASSERT_PRED( checkIsLess( Json::Value(1.0), Json::Value("a") ) ); 1361 JSONTEST_ASSERT_PRED( checkIsLess( Json::Value("a"), Json::Value(true) ) ); 1362 JSONTEST_ASSERT_PRED( checkIsLess( Json::Value(true), Json::Value(Json::arrayValue) ) ); 1363 JSONTEST_ASSERT_PRED( checkIsLess( Json::Value(Json::arrayValue), Json::Value(Json::objectValue) ) ); 1364 } 1365 1366 1367 void 1368 ValueTest::checkIsLess( const Json::Value &x, const Json::Value &y ) 1369 { 1370 JSONTEST_ASSERT( x < y ); 1371 JSONTEST_ASSERT( y > x ); 1372 JSONTEST_ASSERT( x <= y ); 1373 JSONTEST_ASSERT( y >= x ); 1374 JSONTEST_ASSERT( !(x == y) ); 1375 JSONTEST_ASSERT( !(y == x) ); 1376 JSONTEST_ASSERT( !(x >= y) ); 1377 JSONTEST_ASSERT( !(y <= x) ); 1378 JSONTEST_ASSERT( !(x > y) ); 1379 JSONTEST_ASSERT( !(y < x) ); 1380 JSONTEST_ASSERT( x.compare( y ) < 0 ); 1381 JSONTEST_ASSERT( y.compare( x ) >= 0 ); 1382 } 1383 1384 1385 void 1386 ValueTest::checkIsEqual( const Json::Value &x, const Json::Value &y ) 1387 { 1388 JSONTEST_ASSERT( x == y ); 1389 JSONTEST_ASSERT( y == x ); 1390 JSONTEST_ASSERT( x <= y ); 1391 JSONTEST_ASSERT( y <= x ); 1392 JSONTEST_ASSERT( x >= y ); 1393 JSONTEST_ASSERT( y >= x ); 1394 JSONTEST_ASSERT( !(x < y) ); 1395 JSONTEST_ASSERT( !(y < x) ); 1396 JSONTEST_ASSERT( !(x > y) ); 1397 JSONTEST_ASSERT( !(y > x) ); 1398 JSONTEST_ASSERT( x.compare( y ) == 0 ); 1399 JSONTEST_ASSERT( y.compare( x ) == 0 ); 1400 } 1401 1402 int main( int argc, const char *argv[] ) 1403 { 1404 JsonTest::Runner runner; 1405 JSONTEST_REGISTER_FIXTURE( runner, ValueTest, checkNormalizeFloatingPointStr ); 1406 JSONTEST_REGISTER_FIXTURE( runner, ValueTest, memberCount ); 1407 JSONTEST_REGISTER_FIXTURE( runner, ValueTest, objects ); 1408 JSONTEST_REGISTER_FIXTURE( runner, ValueTest, arrays ); 1409 JSONTEST_REGISTER_FIXTURE( runner, ValueTest, null ); 1410 JSONTEST_REGISTER_FIXTURE( runner, ValueTest, strings ); 1411 JSONTEST_REGISTER_FIXTURE( runner, ValueTest, bools ); 1412 JSONTEST_REGISTER_FIXTURE( runner, ValueTest, integers ); 1413 JSONTEST_REGISTER_FIXTURE( runner, ValueTest, nonIntegers ); 1414 JSONTEST_REGISTER_FIXTURE( runner, ValueTest, compareNull ); 1415 JSONTEST_REGISTER_FIXTURE( runner, ValueTest, compareInt ); 1416 JSONTEST_REGISTER_FIXTURE( runner, ValueTest, compareUInt ); 1417 JSONTEST_REGISTER_FIXTURE( runner, ValueTest, compareDouble ); 1418 JSONTEST_REGISTER_FIXTURE( runner, ValueTest, compareString ); 1419 JSONTEST_REGISTER_FIXTURE( runner, ValueTest, compareBoolean ); 1420 JSONTEST_REGISTER_FIXTURE( runner, ValueTest, compareArray ); 1421 JSONTEST_REGISTER_FIXTURE( runner, ValueTest, compareObject ); 1422 JSONTEST_REGISTER_FIXTURE( runner, ValueTest, compareType ); 1423 return runner.runCommandLine( argc, argv ); 1424 } 1425