@@ -427,6 +427,67 @@ JSONTEST_FIXTURE( ValueTest, integers )
427
427
JSONTEST_ASSERT ( double (kuint64max) == val.asDouble ());
428
428
JSONTEST_ASSERT ( float (kuint64max) == val.asFloat ());
429
429
#else // ifdef JSON_NO_INT64
430
+ // 2^40 (signed constructor arg)
431
+ val = Json::Value (1LL << 40 );
432
+
433
+ checks = IsCheck ();
434
+ checks.isInt_ = true ;
435
+ checks.isNumeric_ = true ;
436
+ checks.isIntegral_ = true ;
437
+ JSONTEST_ASSERT_PRED ( checkIs ( val, checks ) );
438
+
439
+ JSONTEST_ASSERT ( (1LL << 40 ) == val.asInt64 ());
440
+ JSONTEST_ASSERT ( (1LL << 40 ) == val.asLargestInt ());
441
+ JSONTEST_ASSERT ( (1LL << 40 ) == val.asUInt64 ());
442
+ JSONTEST_ASSERT ( (1LL << 40 ) == val.asLargestUInt ());
443
+ JSONTEST_ASSERT ( (1LL << 40 ) == val.asDouble ());
444
+ JSONTEST_ASSERT ( (1LL << 40 ) == val.asFloat ());
445
+
446
+ // 2^40 (unsigned constructor arg)
447
+ val = Json::Value (1ULL << 40 );
448
+
449
+ checks = IsCheck ();
450
+ checks.isUInt_ = true ;
451
+ checks.isNumeric_ = true ;
452
+ checks.isIntegral_ = true ;
453
+ JSONTEST_ASSERT_PRED ( checkIs ( val, checks ) );
454
+
455
+ JSONTEST_ASSERT ( (1LL << 40 ) == val.asInt64 ());
456
+ JSONTEST_ASSERT ( (1LL << 40 ) == val.asLargestInt ());
457
+ JSONTEST_ASSERT ( (1LL << 40 ) == val.asUInt64 ());
458
+ JSONTEST_ASSERT ( (1LL << 40 ) == val.asLargestUInt ());
459
+ JSONTEST_ASSERT ( (1LL << 40 ) == val.asDouble ());
460
+ JSONTEST_ASSERT ( (1LL << 40 ) == val.asFloat ());
461
+
462
+ // 2^40 (floating-point constructor arg)
463
+ val = Json::Value ((1LL << 40 ) / 1.0 );
464
+
465
+ checks = IsCheck ();
466
+ checks.isDouble_ = true ;
467
+ checks.isNumeric_ = true ;
468
+ JSONTEST_ASSERT_PRED ( checkIs ( val, checks ) );
469
+
470
+ JSONTEST_ASSERT ( (1LL << 40 ) == val.asInt64 ());
471
+ JSONTEST_ASSERT ( (1LL << 40 ) == val.asLargestInt ());
472
+ JSONTEST_ASSERT ( (1LL << 40 ) == val.asUInt64 ());
473
+ JSONTEST_ASSERT ( (1LL << 40 ) == val.asLargestUInt ());
474
+ JSONTEST_ASSERT ( (1LL << 40 ) == val.asDouble ());
475
+ JSONTEST_ASSERT ( (1LL << 40 ) == val.asFloat ());
476
+
477
+ // -2^40
478
+ val = Json::Value (-(1LL << 40 ));
479
+
480
+ checks = IsCheck ();
481
+ checks.isInt_ = true ;
482
+ checks.isNumeric_ = true ;
483
+ checks.isIntegral_ = true ;
484
+ JSONTEST_ASSERT_PRED ( checkIs ( val, checks ) );
485
+
486
+ JSONTEST_ASSERT ( -(1LL << 40 ) == val.asInt64 ());
487
+ JSONTEST_ASSERT ( -(1LL << 40 ) == val.asLargestInt ());
488
+ JSONTEST_ASSERT ( -(1LL << 40 ) == val.asDouble ());
489
+ JSONTEST_ASSERT ( -(1LL << 40 ) == val.asFloat ());
490
+
430
491
// int64 max
431
492
val = Json::Value (Json::Int64 (kint64max));
432
493
0 commit comments