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