21 RAPIDJSON_DIAG_OFF(c++98-compat)
    28 #if RAPIDJSON_48BITPOINTER_OPTIMIZATION    29         EXPECT_EQ(16, 
sizeof(
Value));
    31         EXPECT_EQ(24, 
sizeof(
Value));
    33         EXPECT_EQ(16, 
sizeof(
Value));
    41     EXPECT_TRUE(x.IsNull());
    52 #if RAPIDJSON_HAS_CXX11_RVALUE_REFS    54 #if 0 // Many old compiler does not support these. Turn it off temporaily.    56 #include <type_traits>    98     V::AllocatorType allocator;
   101     x.Reserve(4u, allocator);
   102     x.PushBack(1, allocator).PushBack(2, allocator).PushBack(3, allocator).PushBack(4, allocator);
   103     EXPECT_TRUE(x.IsArray());
   104     EXPECT_EQ(4u, x.Size());
   108     EXPECT_TRUE(x.IsNull());
   109     EXPECT_TRUE(y.IsArray());
   110     EXPECT_EQ(4u, y.Size());
   114     EXPECT_TRUE(y.IsNull());
   115     EXPECT_TRUE(z.IsArray());
   116     EXPECT_EQ(4u, z.Size());
   119 #endif // RAPIDJSON_HAS_CXX11_RVALUE_REFS   125     EXPECT_TRUE(x.IsNull());    
   126     EXPECT_EQ(1234, y.GetInt());
   129     EXPECT_TRUE(y.IsInt());
   130     EXPECT_EQ(5678, y.GetInt());
   133     EXPECT_TRUE(x.IsString());
   134     EXPECT_STREQ(x.GetString(),
"Hello");
   136     y = 
StringRef(x.GetString(),x.GetStringLength());
   137     EXPECT_TRUE(y.IsString());
   138     EXPECT_EQ(y.GetString(),x.GetString());
   139     EXPECT_EQ(y.GetStringLength(),x.GetStringLength());
   141     static char mstr[] = 
"mutable";
   144     EXPECT_TRUE(y.IsString());
   145     EXPECT_EQ(y.GetString(),mstr);
   147 #if RAPIDJSON_HAS_CXX11_RVALUE_REFS   150     EXPECT_TRUE(x.IsString());
   151     EXPECT_STREQ(
"World", x.GetString());
   154     EXPECT_TRUE(y.IsNull());
   155     EXPECT_TRUE(x.IsString());
   156     EXPECT_EQ(x.GetString(), mstr);
   158     y = std::move(
Value().SetInt(1234));
   159     EXPECT_TRUE(y.IsInt());
   161 #endif // RAPIDJSON_HAS_CXX11_RVALUE_REFS   164 template <
typename A, 
typename B> 
   166     EXPECT_TRUE (a == b);
   167     EXPECT_FALSE(a != b);
   168     EXPECT_TRUE (b == a);
   169     EXPECT_FALSE(b != a);
   172 template <
typename A, 
typename B> 
   174     EXPECT_FALSE(a == b);
   175     EXPECT_TRUE (a != b);
   176     EXPECT_FALSE(b == a);
   177     EXPECT_TRUE (b != a);
   183     x.AddMember(
"hello", 
"world", allocator)
   184         .AddMember(
"t", 
Value(
true).Move(), allocator)
   185         .AddMember(
"f", 
Value(
false).Move(), allocator)
   187         .AddMember(
"i", 123, allocator)
   188         .AddMember(
"pi", 3.14, allocator)
   189         .AddMember(
"a", 
Value(
kArrayType).Move().PushBack(1, allocator).PushBack(2, allocator).PushBack(3, allocator), allocator);
   193     const char* cc = 
"world";
   195     char* c = strdup(
"world");
   208     y.CopyFrom(x, crtAllocator);
   215     EXPECT_TRUE(y.RemoveMember(
"t"));
   218     EXPECT_TRUE(z.RemoveMember(
"t"));
   221     y.AddMember(
"t", 
false, crtAllocator);
   232     x[
"a"][0].Swap(x[
"a"][1]);
   234     x[
"a"][0].Swap(x[
"a"][1]);
   238     x[
"a"].PushBack(4, allocator);
   249 template <
typename Value>
   254     EXPECT_TRUE(v1.GetType() == v2.GetType());
   255     EXPECT_EQ(v1.GetInt(), v2.GetInt());
   259     EXPECT_TRUE(v1.GetType() == v2.GetType());
   260     EXPECT_STREQ(v1.GetString(), v2.GetString());
   261     EXPECT_EQ(v1.GetString(), v2.GetString()); 
   263     v1.SetString(
"bar", a); 
   265     EXPECT_TRUE(v1.GetType() == v2.GetType());
   266     EXPECT_STREQ(v1.GetString(), v2.GetString());
   267     EXPECT_NE(v1.GetString(), v2.GetString()); 
   270     v1.SetArray().PushBack(1234, a);
   272     EXPECT_TRUE(v2.IsArray());
   273     EXPECT_EQ(v1.Size(), v2.Size());
   275     v1.PushBack(
Value().SetString(
"foo", a), a); 
   276     EXPECT_TRUE(v1.Size() != v2.Size());
   278     EXPECT_TRUE(v1.Size() == v2.Size());
   279     EXPECT_STREQ(v1[1].GetString(), v2[1].GetString());
   280     EXPECT_NE(v1[1].GetString(), v2[1].GetString()); 
   284     TestCopyFrom<Value>();
   292     EXPECT_EQ(&v1, &v1.Swap(v2));
   293     EXPECT_TRUE(v1.IsObject());
   294     EXPECT_TRUE(v2.IsInt());
   295     EXPECT_EQ(1234, v2.GetInt());
   300     EXPECT_TRUE(v1.IsInt());
   301     EXPECT_TRUE(v2.IsObject());
   308     EXPECT_TRUE(x.IsNull());
   310     EXPECT_FALSE(x.IsTrue());
   311     EXPECT_FALSE(x.IsFalse());
   312     EXPECT_FALSE(x.IsNumber());
   313     EXPECT_FALSE(x.IsString());
   314     EXPECT_FALSE(x.IsObject());
   315     EXPECT_FALSE(x.IsArray());
   319     EXPECT_TRUE(y.IsNull());
   324     EXPECT_TRUE(z.IsNull());
   331     EXPECT_TRUE(x.GetBool());
   332     EXPECT_TRUE(x.IsBool());
   333     EXPECT_TRUE(x.IsTrue());
   335     EXPECT_FALSE(x.IsNull());
   336     EXPECT_FALSE(x.IsFalse());
   337     EXPECT_FALSE(x.IsNumber());
   338     EXPECT_FALSE(x.IsString());
   339     EXPECT_FALSE(x.IsObject());
   340     EXPECT_FALSE(x.IsArray());
   344     EXPECT_TRUE(y.IsTrue());
   349     EXPECT_TRUE(z.IsTrue());
   352     EXPECT_TRUE(z.Is<
bool>());
   353     EXPECT_TRUE(z.Get<
bool>());
   354     EXPECT_FALSE(z.Set<
bool>(
false).Get<
bool>());
   355     EXPECT_TRUE(z.Set(
true).Get<
bool>());
   362     EXPECT_TRUE(x.IsBool());
   363     EXPECT_TRUE(x.IsFalse());
   365     EXPECT_FALSE(x.IsNull());
   366     EXPECT_FALSE(x.IsTrue());
   367     EXPECT_FALSE(x.GetBool());
   369     EXPECT_FALSE(x.IsNumber());
   370     EXPECT_FALSE(x.IsString());
   371     EXPECT_FALSE(x.IsObject());
   372     EXPECT_FALSE(x.IsArray());
   376     EXPECT_TRUE(y.IsFalse());
   381     EXPECT_TRUE(z.IsFalse());
   388     EXPECT_EQ(1234, x.GetInt());
   389     EXPECT_EQ(1234u, x.GetUint());
   390     EXPECT_EQ(1234, x.GetInt64());
   391     EXPECT_EQ(1234u, x.GetUint64());
   392     EXPECT_NEAR(1234.0, x.GetDouble(), 0.0);
   398     EXPECT_TRUE(x.IsNumber());
   399     EXPECT_TRUE(x.IsInt());
   400     EXPECT_TRUE(x.IsUint());
   401     EXPECT_TRUE(x.IsInt64());
   402     EXPECT_TRUE(x.IsUint64());
   404     EXPECT_FALSE(x.IsDouble());
   405     EXPECT_FALSE(x.IsFloat());
   406     EXPECT_FALSE(x.IsNull());
   407     EXPECT_FALSE(x.IsBool());
   408     EXPECT_FALSE(x.IsFalse());
   409     EXPECT_FALSE(x.IsTrue());
   410     EXPECT_FALSE(x.IsString());
   411     EXPECT_FALSE(x.IsObject());
   412     EXPECT_FALSE(x.IsArray());
   415     EXPECT_EQ(-1234, nx.GetInt());
   416     EXPECT_EQ(-1234, nx.GetInt64());
   417     EXPECT_TRUE(nx.IsInt());
   418     EXPECT_TRUE(nx.IsInt64());
   419     EXPECT_FALSE(nx.IsUint());
   420     EXPECT_FALSE(nx.IsUint64());
   424     EXPECT_TRUE(y.IsNumber());
   425     EXPECT_TRUE(y.IsInt());
   426     EXPECT_EQ(0, y.GetInt());
   431     EXPECT_EQ(1234, z.GetInt());
   435     EXPECT_EQ(5678, z.GetInt());
   438     EXPECT_TRUE(z.Is<
int>());
   439     EXPECT_EQ(5678, z.Get<
int>());
   440     EXPECT_EQ(5679, z.Set(5679).Get<
int>());
   441     EXPECT_EQ(5680, z.Set<
int>(5680).Get<
int>());
   448     EXPECT_EQ(1234, x.GetInt());
   449     EXPECT_EQ(1234u, x.GetUint());
   450     EXPECT_EQ(1234, x.GetInt64());
   451     EXPECT_EQ(1234u, x.GetUint64());
   452     EXPECT_TRUE(x.IsNumber());
   453     EXPECT_TRUE(x.IsInt());
   454     EXPECT_TRUE(x.IsUint());
   455     EXPECT_TRUE(x.IsInt64());
   456     EXPECT_TRUE(x.IsUint64());
   457     EXPECT_NEAR(1234.0, x.GetDouble(), 0.0);   
   459     EXPECT_FALSE(x.IsDouble());
   460     EXPECT_FALSE(x.IsFloat());
   461     EXPECT_FALSE(x.IsNull());
   462     EXPECT_FALSE(x.IsBool());
   463     EXPECT_FALSE(x.IsFalse());
   464     EXPECT_FALSE(x.IsTrue());
   465     EXPECT_FALSE(x.IsString());
   466     EXPECT_FALSE(x.IsObject());
   467     EXPECT_FALSE(x.IsArray());
   472     EXPECT_EQ(1234u, z.GetUint());
   476     EXPECT_EQ(5678u, z.GetUint());
   479     EXPECT_EQ(2147483648u, z.GetUint());
   480     EXPECT_FALSE(z.IsInt());
   481     EXPECT_TRUE(z.IsInt64());   
   484     EXPECT_TRUE(z.Is<
unsigned>());
   485     EXPECT_EQ(2147483648u, z.Get<
unsigned>());
   486     EXPECT_EQ(2147483649u, z.Set(2147483649u).Get<
unsigned>());
   487     EXPECT_EQ(2147483650u, z.Set<
unsigned>(2147483650u).Get<
unsigned>());
   494     EXPECT_EQ(1234, x.GetInt());
   495     EXPECT_EQ(1234u, x.GetUint());
   496     EXPECT_EQ(1234, x.GetInt64());
   497     EXPECT_EQ(1234u, x.GetUint64());
   498     EXPECT_TRUE(x.IsNumber());
   499     EXPECT_TRUE(x.IsInt());
   500     EXPECT_TRUE(x.IsUint());
   501     EXPECT_TRUE(x.IsInt64());
   502     EXPECT_TRUE(x.IsUint64());
   504     EXPECT_FALSE(x.IsDouble());
   505     EXPECT_FALSE(x.IsFloat());
   506     EXPECT_FALSE(x.IsNull());
   507     EXPECT_FALSE(x.IsBool());
   508     EXPECT_FALSE(x.IsFalse());
   509     EXPECT_FALSE(x.IsTrue());
   510     EXPECT_FALSE(x.IsString());
   511     EXPECT_FALSE(x.IsObject());
   512     EXPECT_FALSE(x.IsArray());
   515     EXPECT_EQ(-1234, nx.GetInt());
   516     EXPECT_EQ(-1234, nx.GetInt64());
   517     EXPECT_TRUE(nx.IsInt());
   518     EXPECT_TRUE(nx.IsInt64());
   519     EXPECT_FALSE(nx.IsUint());
   520     EXPECT_FALSE(nx.IsUint64());
   525     EXPECT_EQ(1234, z.GetInt64());
   527     z.SetInt64(2147483648u);   
   528     EXPECT_FALSE(z.IsInt());
   529     EXPECT_TRUE(z.IsUint());
   530     EXPECT_NEAR(2147483648.0, z.GetDouble(), 0.0);
   532     z.SetInt64(
int64_t(4294967295u) + 1);   
   533     EXPECT_FALSE(z.IsInt());
   534     EXPECT_FALSE(z.IsUint());
   535     EXPECT_NEAR(4294967296.0, z.GetDouble(), 0.0);
   537     z.SetInt64(-
int64_t(2147483648u) - 1);   
   538     EXPECT_FALSE(z.IsInt());
   539     EXPECT_NEAR(-2147483649.0, z.GetDouble(), 0.0);
   543     EXPECT_DOUBLE_EQ(-9223372036854775808.0, z.GetDouble());
   547     EXPECT_EQ(i, z.Get<
int64_t>());
   548 #if 0 // signed integer underflow is undefined behaviour   549     EXPECT_EQ(i - 1, z.Set(i - 1).Get<
int64_t>());
   558     EXPECT_EQ(1234, x.GetInt());
   559     EXPECT_EQ(1234u, x.GetUint());
   560     EXPECT_EQ(1234, x.GetInt64());
   561     EXPECT_EQ(1234u, x.GetUint64());
   562     EXPECT_TRUE(x.IsNumber());
   563     EXPECT_TRUE(x.IsInt());
   564     EXPECT_TRUE(x.IsUint());
   565     EXPECT_TRUE(x.IsInt64());
   566     EXPECT_TRUE(x.IsUint64());
   568     EXPECT_FALSE(x.IsDouble());
   569     EXPECT_FALSE(x.IsFloat());
   570     EXPECT_FALSE(x.IsNull());
   571     EXPECT_FALSE(x.IsBool());
   572     EXPECT_FALSE(x.IsFalse());
   573     EXPECT_FALSE(x.IsTrue());
   574     EXPECT_FALSE(x.IsString());
   575     EXPECT_FALSE(x.IsObject());
   576     EXPECT_FALSE(x.IsArray());
   581     EXPECT_EQ(1234u, z.GetUint64());
   584     EXPECT_FALSE(z.IsInt());
   585     EXPECT_TRUE(z.IsUint());
   586     EXPECT_TRUE(z.IsInt64());
   588     z.SetUint64(
uint64_t(4294967295u) + 1);  
   589     EXPECT_FALSE(z.IsInt());
   590     EXPECT_FALSE(z.IsUint());
   591     EXPECT_TRUE(z.IsInt64());
   595     EXPECT_FALSE(z.IsInt64());
   596     EXPECT_EQ(u, z.GetUint64()); 
   597     EXPECT_DOUBLE_EQ(9223372036854775808.0, z.GetDouble());
   602     EXPECT_EQ(u + 1, z.Set(u + 1).Get<
uint64_t>());
   610     EXPECT_NEAR(12.34, x.GetDouble(), 0.0);
   611     EXPECT_TRUE(x.IsNumber());
   612     EXPECT_TRUE(x.IsDouble());
   614     EXPECT_FALSE(x.IsInt());
   615     EXPECT_FALSE(x.IsNull());
   616     EXPECT_FALSE(x.IsBool());
   617     EXPECT_FALSE(x.IsFalse());
   618     EXPECT_FALSE(x.IsTrue());
   619     EXPECT_FALSE(x.IsString());
   620     EXPECT_FALSE(x.IsObject());
   621     EXPECT_FALSE(x.IsArray());
   626     EXPECT_NEAR(12.34, z.GetDouble(), 0.0);
   629     EXPECT_NEAR(56.78, z.GetDouble(), 0.0);
   632     EXPECT_TRUE(z.Is<
double>());
   633     EXPECT_EQ(56.78, z.Get<
double>());
   634     EXPECT_EQ(57.78, z.Set(57.78).Get<
double>());
   635     EXPECT_EQ(58.78, z.Set<
double>(58.78).Get<double>());
   642     EXPECT_NEAR(12.34
f, x.GetFloat(), 0.0);
   643     EXPECT_TRUE(x.IsNumber());
   644     EXPECT_TRUE(x.IsDouble());
   645     EXPECT_TRUE(x.IsFloat());
   647     EXPECT_FALSE(x.IsInt());
   648     EXPECT_FALSE(x.IsNull());
   649     EXPECT_FALSE(x.IsBool());
   650     EXPECT_FALSE(x.IsFalse());
   651     EXPECT_FALSE(x.IsTrue());
   652     EXPECT_FALSE(x.IsString());
   653     EXPECT_FALSE(x.IsObject());
   654     EXPECT_FALSE(x.IsArray());
   659     EXPECT_NEAR(12.34
f, z.GetFloat(), 0.0f);
   663     EXPECT_EQ(0.0
f, z.GetFloat());
   666     EXPECT_NEAR(56.78
f, z.GetFloat(), 0.0f);
   669     EXPECT_TRUE(z.Is<
float>());
   670     EXPECT_EQ(56.78
f, z.Get<
float>());
   671     EXPECT_EQ(57.78
f, z.Set(57.78f).Get<
float>());
   672     EXPECT_EQ(58.78
f, z.Set<
float>(58.78f).Get<
float>());
   676     EXPECT_TRUE(
Value(0.0).IsLosslessDouble());
   677     EXPECT_TRUE(
Value(12.34).IsLosslessDouble());
   678     EXPECT_TRUE(
Value(-123).IsLosslessDouble());
   679     EXPECT_TRUE(
Value(2147483648u).IsLosslessDouble());
   681 #if !(defined(_MSC_VER) && _MSC_VER < 1800) // VC2010 has problem   690     EXPECT_TRUE(
Value(3.4028234e38f).IsLosslessDouble()); 
   691     EXPECT_TRUE(
Value(-3.4028234e38f).IsLosslessDouble()); 
   692     EXPECT_TRUE(
Value(1.17549435e-38
f).IsLosslessDouble()); 
   693     EXPECT_TRUE(
Value(-1.17549435e-38
f).IsLosslessDouble()); 
   694     EXPECT_TRUE(
Value(1.7976931348623157e+308).IsLosslessDouble()); 
   695     EXPECT_TRUE(
Value(-1.7976931348623157e+308).IsLosslessDouble()); 
   696     EXPECT_TRUE(
Value(2.2250738585072014e-308).IsLosslessDouble()); 
   697     EXPECT_TRUE(
Value(-2.2250738585072014e-308).IsLosslessDouble()); 
   701     EXPECT_TRUE(
Value(12.25).IsLosslessFloat());
   702     EXPECT_TRUE(
Value(-123).IsLosslessFloat());
   703     EXPECT_TRUE(
Value(2147483648u).IsLosslessFloat());
   704     EXPECT_TRUE(
Value(3.4028234e38f).IsLosslessFloat());
   705     EXPECT_TRUE(
Value(-3.4028234e38f).IsLosslessFloat());
   706     EXPECT_FALSE(
Value(3.4028235e38).IsLosslessFloat());
   707     EXPECT_FALSE(
Value(0.3).IsLosslessFloat());
   714     EXPECT_TRUE(x.IsString());
   715     EXPECT_STREQ(
"Hello", x.GetString());
   716     EXPECT_EQ(5u, x.GetStringLength());
   718     EXPECT_FALSE(x.IsNumber());
   719     EXPECT_FALSE(x.IsNull());
   720     EXPECT_FALSE(x.IsBool());
   721     EXPECT_FALSE(x.IsFalse());
   722     EXPECT_FALSE(x.IsTrue());
   723     EXPECT_FALSE(x.IsObject());
   724     EXPECT_FALSE(x.IsArray());
   726     static const char cstr[] = 
"World"; 
   728     EXPECT_TRUE(x.IsString());
   729     EXPECT_EQ(x.GetString(), cstr);
   730     EXPECT_EQ(x.GetStringLength(), 
sizeof(cstr)-1);
   732     static char mstr[] = 
"Howdy"; 
   735     EXPECT_TRUE(x.IsString());
   736     EXPECT_EQ(x.GetString(), mstr);
   737     EXPECT_EQ(x.GetStringLength(), 
sizeof(mstr)-1);
   738     strncpy(mstr,
"Hello", 
sizeof(mstr));
   739     EXPECT_STREQ(x.GetString(), 
"Hello");
   741     const char* pstr = cstr;
   744     EXPECT_TRUE(x.IsString());
   745     EXPECT_EQ(x.GetString(), cstr);
   746     EXPECT_EQ(x.GetStringLength(), 
sizeof(cstr)-1);
   750     EXPECT_TRUE(x.IsString());
   751     EXPECT_EQ(x.GetString(), mstr);
   752     EXPECT_EQ(x.GetStringLength(), 5u);
   753     EXPECT_STREQ(x.GetString(), 
"Hello");
   757     Value c(x.GetString(), x.GetStringLength(), allocator);
   758     EXPECT_NE(x.GetString(), c.GetString());
   759     EXPECT_EQ(x.GetStringLength(), c.GetStringLength());
   760     EXPECT_STREQ(x.GetString(), c.GetString());
   762     x.SetString(
"World", 5);
   763     EXPECT_STREQ(
"Hello", c.GetString());
   764     EXPECT_EQ(5u, c.GetStringLength());
   768     EXPECT_TRUE(y.IsString());
   769     EXPECT_STREQ(
"", y.GetString());    
   770     EXPECT_EQ(0u, y.GetStringLength());
   774     z.SetString(
"Hello");
   775     EXPECT_TRUE(x.IsString());
   776     z.SetString(
"Hello", 5);
   777     EXPECT_STREQ(
"Hello", z.GetString());
   778     EXPECT_STREQ(
"Hello", z.GetString());
   779     EXPECT_EQ(5u, z.GetStringLength());
   781     z.SetString(
"Hello");
   782     EXPECT_TRUE(z.IsString());
   783     EXPECT_STREQ(
"Hello", z.GetString());
   788     EXPECT_TRUE(z.IsString());
   789     EXPECT_STREQ(z.GetString(), mstr);
   792     EXPECT_TRUE(z.IsString());
   793     EXPECT_EQ(cstr, z.GetString());
   796     EXPECT_TRUE(z.IsString());
   797     EXPECT_EQ(cstr, z.GetString());
   802     w.SetString(s, static_cast<SizeType>(strlen(s)), allocator);
   804     EXPECT_STREQ(
"World", w.GetString());
   805     EXPECT_EQ(5u, w.GetStringLength());
   808     EXPECT_TRUE(z.Is<
const char*>());
   809     EXPECT_STREQ(cstr, z.Get<
const char*>());
   810     EXPECT_STREQ(
"Apple", z.Set<
const char*>(
"Apple").Get<
const char*>());
   812 #if RAPIDJSON_HAS_STDSTRING   814         std::string str = 
"Hello World";
   816         EXPECT_STREQ(str.data(),
"Hello"); 
   817         EXPECT_EQ(str.size(), 11u);
   821         EXPECT_TRUE(vs0.IsString());
   822         EXPECT_EQ(vs0.GetString(), str.data());
   823         EXPECT_EQ(vs0.GetStringLength(), str.size());
   827         Value vs1(str, allocator);
   828         EXPECT_TRUE(vs1.IsString());
   829         EXPECT_NE(vs1.GetString(), str.data());
   830         EXPECT_NE(vs1.GetString(), str); 
   831         EXPECT_EQ(vs1.GetStringLength(), str.size());
   836         vs0.SetNull().SetString(str, allocator);
   837         EXPECT_TRUE(vs0.IsString());
   838         EXPECT_STREQ(vs0.GetString(), str.c_str());
   839         EXPECT_EQ(vs0.GetStringLength(), str.size());
   849         EXPECT_TRUE(vs0.Is<std::string>());
   850         EXPECT_EQ(str, vs0.Get<std::string>());
   851         vs0.Set<std::string>(std::string(
"Apple"), allocator);
   852         EXPECT_EQ(std::string(
"Apple"), vs0.Get<std::string>());
   853         vs0.Set(std::string(
"Orange"), allocator);
   854         EXPECT_EQ(std::string(
"Orange"), vs0.Get<std::string>());
   856 #endif // RAPIDJSON_HAS_STDSTRING   863     const char* nullPtr = 0;
   867         EXPECT_NE(v.GetString(), nullPtr); 
   868         EXPECT_EQ(v.GetStringLength(), 0u);
   880         v.SetString(nullPtr, 0u);
   881         EXPECT_NE(v.GetString(), nullPtr); 
   882         EXPECT_EQ(v.GetStringLength(), 0u);
   885         v.SetString(nullPtr, 0u, allocator);
   886         EXPECT_NE(v.GetString(), nullPtr); 
   887         EXPECT_EQ(v.GetStringLength(), 0u);
   892         EXPECT_NE(v.GetString(), nullPtr); 
   893         EXPECT_EQ(v.GetStringLength(), 0u);
   896         Value v(nullPtr, 0u, allocator);
   897         EXPECT_NE(v.GetString(), nullPtr); 
   898         EXPECT_EQ(v.GetStringLength(), 0u);
   902 template <
typename T, 
typename Allocator>
   908     x.PushBack(v, allocator);
   910     x.PushBack(v, allocator);
   912     x.PushBack(v, allocator);
   914     x.PushBack(v, allocator);
   916     x.PushBack(
"foo", allocator);
   918     EXPECT_FALSE(x.Empty());
   919     EXPECT_EQ(5u, x.Size());
   920     EXPECT_FALSE(y.Empty());
   921     EXPECT_EQ(5u, y.Size());
   922     EXPECT_TRUE(x[
SizeType(0)].IsNull());
   923     EXPECT_TRUE(x[1].IsTrue());
   924     EXPECT_TRUE(x[2].IsFalse());
   925     EXPECT_TRUE(x[3].IsInt());
   926     EXPECT_EQ(123, x[3].GetInt());
   927     EXPECT_TRUE(y[
SizeType(0)].IsNull());
   928     EXPECT_TRUE(y[1].IsTrue());
   929     EXPECT_TRUE(y[2].IsFalse());
   930     EXPECT_TRUE(y[3].IsInt());
   931     EXPECT_EQ(123, y[3].GetInt());
   932     EXPECT_TRUE(y[4].IsString());
   933     EXPECT_STREQ(
"foo", y[4].GetString());
   935 #if RAPIDJSON_HAS_CXX11_RVALUE_REFS   939         y2.PushBack(
Value(
true), allocator);
   940         y2.PushBack(std::move(
Value(
kArrayType).PushBack(
Value(1), allocator).PushBack(
"foo", allocator)), allocator);
   941         EXPECT_EQ(2u, y2.Size());
   942         EXPECT_TRUE(y2[0].IsTrue());
   943         EXPECT_TRUE(y2[1].IsArray());
   944         EXPECT_EQ(2u, y2[1].Size());
   945         EXPECT_TRUE(y2[1][0].IsInt());
   946         EXPECT_TRUE(y2[1][1].IsString());
   951     typename T::ValueIterator itr = x.Begin();
   952     EXPECT_TRUE(itr != x.End());
   953     EXPECT_TRUE(itr->IsNull());
   955     EXPECT_TRUE(itr != x.End());
   956     EXPECT_TRUE(itr->IsTrue());
   958     EXPECT_TRUE(itr != x.End());
   959     EXPECT_TRUE(itr->IsFalse());
   961     EXPECT_TRUE(itr != x.End());
   962     EXPECT_TRUE(itr->IsInt());
   963     EXPECT_EQ(123, itr->GetInt());
   965     EXPECT_TRUE(itr != x.End());
   966     EXPECT_TRUE(itr->IsString());
   967     EXPECT_STREQ(
"foo", itr->GetString());
   970     typename T::ConstValueIterator citr = y.Begin();
   971     EXPECT_TRUE(citr != y.End());
   972     EXPECT_TRUE(citr->IsNull());
   974     EXPECT_TRUE(citr != y.End());
   975     EXPECT_TRUE(citr->IsTrue());
   977     EXPECT_TRUE(citr != y.End());
   978     EXPECT_TRUE(citr->IsFalse());
   980     EXPECT_TRUE(citr != y.End());
   981     EXPECT_TRUE(citr->IsInt());
   982     EXPECT_EQ(123, citr->GetInt());
   984     EXPECT_TRUE(citr != y.End());
   985     EXPECT_TRUE(citr->IsString());
   986     EXPECT_STREQ(
"foo", citr->GetString());
   990     EXPECT_EQ(4u, x.Size());
   991     EXPECT_TRUE(y[
SizeType(0)].IsNull());
   992     EXPECT_TRUE(y[1].IsTrue());
   993     EXPECT_TRUE(y[2].IsFalse());
   994     EXPECT_TRUE(y[3].IsInt());
   998     EXPECT_TRUE(x.Empty());
   999     EXPECT_EQ(0u, x.Size());
  1000     EXPECT_TRUE(y.Empty());
  1001     EXPECT_EQ(0u, y.Size());
  1007     for (
int i = 0; i < 10; i++)
  1008         x.PushBack(
Value(
kArrayType).PushBack(i, allocator).Move(), allocator);
  1011     itr = x.Erase(x.Begin());
  1012     EXPECT_EQ(x.Begin(), itr);
  1013     EXPECT_EQ(9u, x.Size());
  1014     for (
int i = 0; i < 9; i++)
  1015         EXPECT_EQ(i + 1, x[static_cast<SizeType>(i)][0].GetInt());
  1018     itr = x.Erase(x.End() - 1);
  1019     EXPECT_EQ(x.End(), itr);
  1020     EXPECT_EQ(8u, x.Size());
  1021     for (
int i = 0; i < 8; i++)
  1022         EXPECT_EQ(i + 1, x[static_cast<SizeType>(i)][0].GetInt());
  1025     itr = x.Erase(x.Begin() + 4);
  1026     EXPECT_EQ(x.Begin() + 4, itr);
  1027     EXPECT_EQ(7u, x.Size());
  1028     for (
int i = 0; i < 4; i++)
  1029         EXPECT_EQ(i + 1, x[static_cast<SizeType>(i)][0].GetInt());
  1030     for (
int i = 4; i < 7; i++)
  1031         EXPECT_EQ(i + 2, x[static_cast<SizeType>(i)][0].GetInt());
  1035     const unsigned n = 10;
  1036     for (
unsigned first = 0; first < n; first++) {
  1037         for (
unsigned last = first; last <= n; last++) {
  1039             for (
unsigned i = 0; i < n; i++)
  1040                 x.PushBack(
Value(
kArrayType).PushBack(i, allocator).Move(), allocator);
  1042             itr = x.Erase(x.Begin() + first, x.Begin() + last);
  1044                 EXPECT_EQ(x.End(), itr);
  1046                 EXPECT_EQ(x.Begin() + first, itr);
  1048             size_t removeCount = last - first;
  1049             EXPECT_EQ(n - removeCount, x.Size());
  1050             for (
unsigned i = 0; i < first; i++)
  1051                 EXPECT_EQ(i, x[i][0].GetUint());
  1052             for (
unsigned i = first; i < n - removeCount; i++)
  1053                 EXPECT_EQ(i + removeCount, x[static_cast<SizeType>(i)][0].GetUint());
  1064     EXPECT_TRUE(x.IsArray());
  1065     EXPECT_TRUE(x.Empty());
  1066     EXPECT_EQ(0u, x.Size());
  1067     EXPECT_TRUE(y.IsArray());
  1068     EXPECT_TRUE(y.Empty());
  1069     EXPECT_EQ(0u, y.Size());
  1071     EXPECT_FALSE(x.IsNull());
  1072     EXPECT_FALSE(x.IsBool());
  1073     EXPECT_FALSE(x.IsFalse());
  1074     EXPECT_FALSE(x.IsTrue());
  1075     EXPECT_FALSE(x.IsString());
  1076     EXPECT_FALSE(x.IsObject());
  1083     for (
int i = 0; i < 10; i++)
  1085             x.PushBack(i, allocator);
  1090     x.Erase(std::remove(x.Begin(), x.End(), null), x.End());
  1091     EXPECT_EQ(5u, x.Size());
  1092     for (
int i = 0; i < 5; i++)
  1093         EXPECT_EQ(i * 2, x[static_cast<SizeType>(i)]);
  1098     EXPECT_TRUE(z.IsArray());
  1099     EXPECT_TRUE(z.Empty());
  1116         EXPECT_EQ(1, a2.
Size());
  1119         EXPECT_EQ(1, a3.Size());
  1135         EXPECT_TRUE(x.IsArray());   
  1141         y.PushBack(123, allocator);
  1143         Value x(y.GetArray());      
  1144         EXPECT_TRUE(x.IsArray());
  1145         EXPECT_EQ(123, x[0].GetInt());
  1146         EXPECT_TRUE(y.IsArray());   
  1147         EXPECT_TRUE(y.Empty());
  1153         y.PushBack(123, allocator);
  1154         x.PushBack(y.GetArray(), allocator);    
  1156         EXPECT_EQ(1, x.Size());
  1157         EXPECT_EQ(123, x[0][0].GetInt());
  1158         EXPECT_TRUE(y.IsArray());
  1159         EXPECT_TRUE(y.Empty());
  1163 #if RAPIDJSON_HAS_CXX11_RANGE_FOR  1168     for (
int i = 0; i < 10; i++)
  1169         x.PushBack(i, allocator);
  1173         for (
auto& v : x.GetArray()) {
  1174             EXPECT_EQ(i, v.GetInt());
  1181         for (
const auto& v : const_cast<const Value&>(x).GetArray()) {
  1182             EXPECT_EQ(i, v.GetInt());
  1193 template <
typename T, 
typename Allocator>
  1198     x.AddMember(
"A", 
"Apple", allocator);
  1199     EXPECT_FALSE(x.ObjectEmpty());
  1200     EXPECT_EQ(1u, x.MemberCount());
  1203     x.AddMember(
"B", 
"Banana", allocator);
  1204     EXPECT_EQ(2u, x.MemberCount());
  1209         o.AddMember(
"true", 
true, allocator);
  1210         o.AddMember(
"false", 
false, allocator);
  1211         o.AddMember(
"int", -1, allocator);
  1212         o.AddMember(
"uint", 1u, allocator);
  1213         o.AddMember(
"int64", 
int64_t(-4294967296), allocator);
  1214         o.AddMember(
"uint64", 
uint64_t(4294967296), allocator);
  1215         o.AddMember(
"double", 3.14, allocator);
  1216         o.AddMember(
"string", 
"Jelly", allocator);
  1218         EXPECT_TRUE(o[
"true"].GetBool());
  1219         EXPECT_FALSE(o[
"false"].GetBool());
  1220         EXPECT_EQ(-1, o[
"int"].GetInt());
  1221         EXPECT_EQ(1u, o[
"uint"].GetUint());
  1222         EXPECT_EQ(
int64_t(-4294967296), o[
"int64"].GetInt64());
  1223         EXPECT_EQ(
uint64_t(4294967296), o[
"uint64"].GetUint64());
  1224         EXPECT_STREQ(
"Jelly",o[
"string"].GetString());
  1225         EXPECT_EQ(8u, o.MemberCount());
  1233         o.AddMember(n, 
"string", allocator);
  1234         EXPECT_EQ(1u, o.MemberCount());
  1237         o.AddMember(count, o.MemberCount(), allocator);
  1238         EXPECT_EQ(2u, o.MemberCount());
  1241 #if RAPIDJSON_HAS_STDSTRING  1245         o.AddMember(
"b", std::string(
"Banana"), allocator);
  1246         EXPECT_STREQ(
"Banana", o[
"b"].GetString());
  1249         o.RemoveMember(std::string(
"b"));
  1250         EXPECT_TRUE(o.ObjectEmpty());
  1254 #if RAPIDJSON_HAS_CXX11_RVALUE_REFS  1258         o.AddMember(
Value(
"true"), 
Value(
true), allocator);
  1259         o.AddMember(
Value(
"false"), 
Value(
false).Move(), allocator);    
  1260         o.AddMember(
Value(
"int").Move(), 
Value(-1), allocator);         
  1261         o.AddMember(
"uint", std::move(
Value().SetUint(1u)), allocator); 
  1262         EXPECT_TRUE(o[
"true"].GetBool());
  1263         EXPECT_FALSE(o[
"false"].GetBool());
  1264         EXPECT_EQ(-1, o[
"int"].GetInt());
  1265         EXPECT_EQ(1u, o[
"uint"].GetUint());
  1266         EXPECT_EQ(4u, o.MemberCount());
  1272     const Value C0D(
"C\0D", 3);
  1273     name.SetString(C0D.GetString(), 3);
  1274     value.SetString(
"CherryD", 7);
  1275     x.AddMember(name, value, allocator);
  1278     EXPECT_TRUE(x.HasMember(
"A"));
  1279     EXPECT_TRUE(x.HasMember(
"B"));
  1280     EXPECT_TRUE(y.HasMember(
"A"));
  1281     EXPECT_TRUE(y.HasMember(
"B"));
  1283 #if RAPIDJSON_HAS_STDSTRING  1284     EXPECT_TRUE(x.HasMember(std::string(
"A")));
  1287     name.SetString(
"C\0D");
  1288     EXPECT_TRUE(x.HasMember(name));
  1289     EXPECT_TRUE(y.HasMember(name));
  1292     EXPECT_TRUE(x.HasMember(othername));
  1293     EXPECT_TRUE(y.HasMember(othername));
  1294     othername.SetString(
"C\0D");
  1295     EXPECT_TRUE(x.HasMember(othername));
  1296     EXPECT_TRUE(y.HasMember(othername));
  1299     EXPECT_STREQ(
"Apple", x[
"A"].GetString());
  1300     EXPECT_STREQ(
"Banana", x[
"B"].GetString());
  1301     EXPECT_STREQ(
"CherryD", x[C0D].GetString());
  1302     EXPECT_STREQ(
"CherryD", x[othername].GetString());
  1306     EXPECT_STREQ(
"Apple", y[
"A"].GetString());
  1307     EXPECT_STREQ(
"Banana", y[
"B"].GetString());
  1308     EXPECT_STREQ(
"CherryD", y[C0D].GetString());
  1310 #if RAPIDJSON_HAS_STDSTRING  1311     EXPECT_STREQ(
"Apple", x[
"A"].GetString());
  1312     EXPECT_STREQ(
"Apple", y[std::string(
"A")].GetString());
  1317     EXPECT_TRUE(itr != x.MemberEnd());
  1318     EXPECT_STREQ(
"A", itr->name.GetString());
  1319     EXPECT_STREQ(
"Apple", itr->value.GetString());
  1321     EXPECT_TRUE(itr != x.MemberEnd());
  1322     EXPECT_STREQ(
"B", itr->name.GetString());
  1323     EXPECT_STREQ(
"Banana", itr->value.GetString());
  1325     EXPECT_TRUE(itr != x.MemberEnd());
  1326     EXPECT_TRUE(memcmp(itr->name.GetString(), 
"C\0D", 4) == 0);
  1327     EXPECT_STREQ(
"CherryD", itr->value.GetString());
  1329     EXPECT_FALSE(itr != x.MemberEnd());
  1333     EXPECT_TRUE(citr != y.MemberEnd());
  1334     EXPECT_STREQ(
"A", citr->name.GetString());
  1335     EXPECT_STREQ(
"Apple", citr->value.GetString());
  1337     EXPECT_TRUE(citr != y.MemberEnd());
  1338     EXPECT_STREQ(
"B", citr->name.GetString());
  1339     EXPECT_STREQ(
"Banana", citr->value.GetString());
  1341     EXPECT_TRUE(citr != y.MemberEnd());
  1342     EXPECT_TRUE(memcmp(citr->name.GetString(), 
"C\0D", 4) == 0);
  1343     EXPECT_STREQ(
"CherryD", citr->value.GetString());
  1345     EXPECT_FALSE(citr != y.MemberEnd());
  1348     itr  = x.MemberBegin();
  1349     citr = x.MemberBegin(); 
  1351     EXPECT_TRUE(itr < x.MemberEnd());
  1352     EXPECT_FALSE(itr > y.MemberEnd());
  1353     EXPECT_TRUE(citr < x.MemberEnd());
  1354     EXPECT_FALSE(citr > y.MemberEnd());
  1357     EXPECT_FALSE(itr < itr);
  1358     EXPECT_TRUE(itr < citr);
  1359     EXPECT_FALSE(itr > itr);
  1360     EXPECT_TRUE(citr > itr);
  1361     EXPECT_EQ(1, citr - x.MemberBegin());
  1362     EXPECT_EQ(0, itr - y.MemberBegin());
  1363     itr += citr - x.MemberBegin();
  1364     EXPECT_EQ(1, itr - y.MemberBegin());
  1366     EXPECT_TRUE(itr <= citr);
  1367     EXPECT_TRUE(citr <= itr);
  1369     EXPECT_TRUE(itr >= citr);
  1370     EXPECT_FALSE(citr >= itr);
  1373     EXPECT_TRUE(x.RemoveMember(
"A"));
  1374     EXPECT_FALSE(x.HasMember(
"A"));
  1376     EXPECT_TRUE(x.RemoveMember(
"B"));
  1377     EXPECT_FALSE(x.HasMember(
"B"));
  1379     EXPECT_FALSE(x.RemoveMember(
"nonexist"));
  1381     EXPECT_TRUE(x.RemoveMember(othername));
  1382     EXPECT_FALSE(x.HasMember(name));
  1384     EXPECT_TRUE(x.MemberBegin() == x.MemberEnd());
  1390     const char keys[][2] = { 
"a", 
"b", 
"c", 
"d", 
"e", 
"f", 
"g", 
"h", 
"i", 
"j" };
  1391     for (
int i = 0; i < 10; i++)
  1392         x.AddMember(keys[i], 
Value(
kArrayType).PushBack(i, allocator), allocator);
  1395     EXPECT_EQ(x.MemberCount(), 
SizeType(x.MemberEnd() - x.MemberBegin()));
  1398     itr = x.EraseMember(x.MemberBegin());
  1399     EXPECT_FALSE(x.HasMember(keys[0]));
  1400     EXPECT_EQ(x.MemberBegin(), itr);
  1401     EXPECT_EQ(9u, x.MemberCount());
  1402     for (; itr != x.MemberEnd(); ++itr) {
  1403         size_t i = 
static_cast<size_t>((itr - x.MemberBegin())) + 1;
  1404         EXPECT_STREQ(itr->name.GetString(), keys[i]);
  1405         EXPECT_EQ(i, itr->value[0].GetInt());
  1409     itr = x.EraseMember(x.MemberEnd() - 1);
  1410     EXPECT_FALSE(x.HasMember(keys[9]));
  1411     EXPECT_EQ(x.MemberEnd(), itr);
  1412     EXPECT_EQ(8u, x.MemberCount());
  1413     for (; itr != x.MemberEnd(); ++itr) {
  1414         size_t i = 
static_cast<size_t>(itr - x.MemberBegin()) + 1;
  1415         EXPECT_STREQ(itr->name.GetString(), keys[i]);
  1416         EXPECT_EQ(i, itr->value[0].GetInt());
  1420     itr = x.EraseMember(x.MemberBegin() + 4);
  1421     EXPECT_FALSE(x.HasMember(keys[5]));
  1422     EXPECT_EQ(x.MemberBegin() + 4, itr);
  1423     EXPECT_EQ(7u, x.MemberCount());
  1424     for (; itr != x.MemberEnd(); ++itr) {
  1425         size_t i = 
static_cast<size_t>(itr - x.MemberBegin());
  1426         i += (i < 4) ? 1 : 2;
  1427         EXPECT_STREQ(itr->name.GetString(), keys[i]);
  1428         EXPECT_EQ(i, itr->value[0].GetInt());
  1433     const unsigned n = 10;
  1434     for (
unsigned first = 0; first < n; first++) {
  1435         for (
unsigned last = first; last <= n; last++) {
  1436             x.RemoveAllMembers();
  1437             for (
unsigned i = 0; i < n; i++)
  1438                 x.AddMember(keys[i], 
Value(
kArrayType).PushBack(i, allocator), allocator);
  1440             itr = x.EraseMember(x.MemberBegin() + 
static_cast<int>(first), x.MemberBegin() + 
static_cast<int>(last));
  1442                 EXPECT_EQ(x.MemberEnd(), itr);
  1444                 EXPECT_EQ(x.MemberBegin() + 
static_cast<int>(first), itr);
  1446             size_t removeCount = last - first;
  1447             EXPECT_EQ(n - removeCount, x.MemberCount());
  1448             for (
unsigned i = 0; i < first; i++)
  1449                 EXPECT_EQ(i, x[keys[i]][0].GetUint());
  1450             for (
unsigned i = first; i < n - removeCount; i++)
  1451                 EXPECT_EQ(i + removeCount, x[keys[i+removeCount]][0].GetUint());
  1456     x.RemoveAllMembers();
  1457     EXPECT_TRUE(x.ObjectEmpty());
  1458     EXPECT_EQ(0u, x.MemberCount());
  1467     EXPECT_TRUE(x.IsObject());
  1468     EXPECT_TRUE(x.ObjectEmpty());
  1469     EXPECT_EQ(0u, x.MemberCount());
  1471     EXPECT_TRUE(y.IsObject());
  1472     EXPECT_TRUE(y.ObjectEmpty());
  1473     EXPECT_EQ(0u, y.MemberCount());
  1480     EXPECT_TRUE(z.IsObject());
  1500         EXPECT_EQ(1, o3.MemberCount());
  1507         x.RemoveAllMembers();
  1516         EXPECT_TRUE(x.IsObject());   
  1522         x.AddMember(
"a", 
"apple", allocator);
  1523         Value y(x.GetObject());
  1524         EXPECT_STREQ(
"apple", y[
"a"].GetString());
  1525         EXPECT_TRUE(x.IsObject());  
  1530         x.AddMember(
"a", 
"apple", allocator);
  1532         y.AddMember(
"fruits", x.GetObject(), allocator);
  1533         EXPECT_STREQ(
"apple", y[
"fruits"][
"a"].GetString());
  1534         EXPECT_TRUE(x.IsObject());  
  1538 #if RAPIDJSON_HAS_CXX11_RANGE_FOR  1543     for (
int i = 0; i < 10; i++) {
  1545         Value n(name, static_cast<SizeType>(sprintf(name, 
"%d", i)), allocator);
  1546         x.AddMember(n, i, allocator);
  1551         for (
auto& m : x.GetObject()) {
  1553             sprintf(name, 
"%d", i);
  1554             EXPECT_STREQ(name, m.name.GetString());
  1555             EXPECT_EQ(i, m.value.GetInt());
  1562         for (
const auto& m : const_cast<const Value&>(x).GetObject()) {
  1564             sprintf(name, 
"%d", i);
  1565             EXPECT_STREQ(name, m.name.GetString());
  1566             EXPECT_EQ(i, m.value.GetInt());
  1580     x.AddMember(
"A", 
"Apple", allocator);
  1581     x.AddMember(
"B", 
"Banana", allocator);
  1583     EXPECT_TRUE(x.EraseMember(
"B"));
  1584     EXPECT_FALSE(x.HasMember(
"B"));
  1586     EXPECT_FALSE(x.EraseMember(
"nonexist"));
  1589     EXPECT_TRUE(x.EraseMember(othername));
  1590     EXPECT_FALSE(x.HasMember(
"A"));
  1592     EXPECT_TRUE(x.MemberBegin() == x.MemberEnd());
  1603             Value number(static_cast<int>(i * n + j));
  1604             y.PushBack(number, allocator);
  1606         x.PushBack(y, allocator);
  1611             EXPECT_TRUE(x[i][j].IsInt());
  1612             EXPECT_EQ(static_cast<int>(i * n + j), x[i][j].GetInt());
  1623         sprintf(name1, 
"%d", i);
  1626         Value name(name1, static_cast<SizeType>(strlen(name1)), allocator);
  1631             sprintf(name2, 
"%d", j);
  1633             Value name3(name2, static_cast<SizeType>(strlen(name2)), allocator);
  1634             Value number(static_cast<int>(i * n + j));
  1635             object.AddMember(name3, number, allocator);
  1639         x.AddMember(name, 
object, allocator);
  1644         sprintf(name1, 
"%d", i);
  1648             sprintf(name2, 
"%d", j);
  1650             EXPECT_EQ(static_cast<int>(i * n + j), x[name1][name2].GetInt());
  1661     objVal.AddMember(
"var1", 123, allocator);       
  1662     objVal.AddMember(
"var2", 
"444", allocator);
  1663     objVal.AddMember(
"var3", 555, allocator);
  1664     EXPECT_TRUE(objVal.HasMember(
"var3"));
  1665     objVal.RemoveMember(
"var3");    
  1666     EXPECT_FALSE(objVal.HasMember(
"var3"));
  1673     V::AllocatorType allocator;
  1675     o.AddMember(
"x", 1, allocator); 
  1678     a.PushBack(1, allocator);   
  1686     val.SetString(str, len, doc.GetAllocator());
  1688         EXPECT_EQ(val.GetStringLength(), len);
  1689         EXPECT_STREQ(val.GetString(), str);
  1705     bool Int(
int) { 
return e != 2; }
  1706     bool Uint(
unsigned) { 
return e != 3; }
  1719 #define TEST_TERMINATION(e, json)\  1722     EXPECT_FALSE(d.Parse(json).HasParseError()); \  1724     TerminateHandler<e> h;\  1725     EXPECT_FALSE(d.Accept(h));\  1748         return lhs.GetInt() < rhs.GetInt();
  1752 #if RAPIDJSON_HAS_CXX11_RVALUE_REFS  1756     a.PushBack(5, allocator);
  1757     a.PushBack(1, allocator);
  1758     a.PushBack(3, allocator);
  1760     EXPECT_EQ(1, a[0].GetInt());
  1761     EXPECT_EQ(3, a[1].GetInt());
  1762     EXPECT_EQ(5, a[2].GetInt());
  1778                 itr2->value.PushBack(itr->value[0], a);
  1779                 itr = v.EraseMember(itr);
  1787             if (itr->value.Size() == 1)
  1788                 itr->value = itr->value[0];
  1792     else if (v.IsArray())
 
void TestUnequal(const A &a, const B &b)
void TestEqual(const A &a, const B &b)
RAPIDJSON_NAMESPACE_BEGIN typedef unsigned SizeType
Size type (for string lengths, array sizes, etc.) 
GenericObject AddMember(ValueType &name, ValueType &value, AllocatorType &allocator) const 
#define RAPIDJSON_UINT64_C2(high32, low32)
Construct a 64-bit literal by a pair of 32-bit integer. 
Helper class for accessing Value of array type. 
static void TestShortStringOptimization(const char *str)
(Constant) member iterator for a JSON object value 
GenericArray PushBack(ValueType &value, AllocatorType &allocator) const 
A document for parsing JSON text as DOM. 
bool operator()(const Value &lhs, const Value &rhs) const 
bool Key(const char *, SizeType, bool)
GenericValue< UTF8<> > Value
GenericValue with UTF8 encoding. 
Helper class for accessing Value of object type. 
unsigned __int64 uint64_t
#define TEST_TERMINATION(e, json)
Concept for allocating, resizing and freeing memory block. 
Allocator & GetAllocator()
Get the allocator of this document. 
GenericDocument< UTF8<> > Document
GenericDocument with UTF8 encoding. 
void Swap(T &a, T &b) RAPIDJSON_NOEXCEPT
Custom swap() to avoid dependency on C++ <algorithm> header. 
GenericDocument & Parse(const typename SourceEncoding::Ch *str)
Parse JSON text from a read-only string (with Encoding conversion) 
SizeType MemberCount() const 
bool RawNumber(const char *, SizeType, bool)
const GenericPointer< typename T::ValueType > T2 T::AllocatorType & a
C-runtime library allocator. 
bool String(const char *, SizeType, bool)
GenericStringRef< CharType > StringRef(const CharType *str)
Mark a character pointer as constant string. 
static void TestArray(T &x, Allocator &allocator)
const GenericPointer< typename T::ValueType > T2 value
static void TestObject(T &x, Allocator &allocator)
static void MergeDuplicateKey(Value &v, Value::AllocatorType &a)