wordreference/libjson/_internal/TestSuite/TestRefCounting.cpp

131 lines
4 KiB
C++

#include "TestSuite.h"
void TestSuite::TestReferenceCounting(void){
UnitTest::SetPrefix("TestRefCounting.cpp - Reference Counting");
#ifdef JSON_LIBRARY
#else
JSONNode test1;
#ifdef JSON_UNIT_TEST
assertNotNull(test1.internal);
#ifdef JSON_REF_COUNT
assertEquals(test1.internal -> refcount, 1);
#endif
#endif
//copy ctor, should simply increment the reference counter
JSONNode test2 = JSONNode(test1);
#ifdef JSON_REF_COUNT
#ifdef JSON_UNIT_TEST
assertEquals(test1.internal, test2.internal);
#endif
assertEquals(test1, test2);
#ifdef JSON_UNIT_TEST
assertEquals(test1.internal -> refcount, 2);
#endif
#else
#ifdef JSON_UNIT_TEST
assertNotEquals(test1.internal, test2.internal);
#endif
assertEquals(test1, test2);
#endif
//assignment operator, should simply increment the reference counter
JSONNode test3 = test2;
#ifdef JSON_UNIT_TEST
#ifdef JSON_REF_COUNT
assertEquals(test1.internal, test3.internal);
assertEquals(test2.internal, test3.internal);
assertEquals(test1.internal -> refcount, 3);
#else
assertNotEquals(test1.internal, test3.internal);
assertNotEquals(test2.internal, test3.internal);
#endif
#endif
//assigning something, it should copy now
test2 = "hello";
#ifdef JSON_UNIT_TEST
#ifdef JSON_REF_COUNT
assertEquals(test1.internal, test3.internal);
assertNotEquals(test2.internal, test3.internal);
assertEquals(test1.internal -> refcount, 2);
assertEquals(test2.internal -> refcount, 1);
#else
assertNotEquals(test1.internal, test3.internal);
assertNotEquals(test2.internal, test3.internal);
#endif
#endif
//assigning something, it should copy now
test1 = 15;
#ifdef JSON_UNIT_TEST
assertNotEquals(test1.internal, test3.internal);
#ifdef JSON_REF_COUNT
assertEquals(test1.internal -> refcount, 1);
assertEquals(test3.internal -> refcount, 1);
#endif
#endif
test1 = test2;
#ifdef JSON_REF_COUNT
#ifdef JSON_UNIT_TEST
assertEquals(test1.internal, test2.internal);
assertEquals(test1.internal -> refcount, 2);
#endif
#else
#ifdef JSON_UNIT_TEST
assertNotEquals(test1.internal, test2.internal);
#endif
assertEquals(test1, test2);
#endif
test1.set_name(JSON_TEXT("hello world"));
#ifdef JSON_UNIT_TEST
assertNotEquals(test1.internal, test2.internal);
#ifdef JSON_REF_COUNT
assertEquals(test1.internal -> refcount, 1);
assertEquals(test1.internal -> refcount, 1);
#endif
#endif
//test tree copying and partial tree copying
UnitTest::SetPrefix("TestRefCounting.cpp - Partial Copy");
test1 = JSONNode(JSON_NODE);
test1.push_back(JSONNode(JSON_NODE));
test1.push_back(JSONNode(JSON_TEXT(""), 5));
assertEquals(test1.size(), 2);
test2 = test1;
#ifdef JSON_UNIT_TEST
#ifdef JSON_REF_COUNT
assertEquals(test1.internal -> refcount, 2);
assertEquals(test1.internal, test2.internal);
#else
assertNotEquals(test1.internal, test2.internal);
#endif
#endif
#ifdef JSON_READ_PRIORITY
assertEquals(test1, libjson::parse(JSON_TEXT("{\"\":{},\"\":5}")));
assertEquals(test1, test1);
assertEquals(libjson::parse(JSON_TEXT("{\"\":{},\"\":5}")), libjson::parse(JSON_TEXT("{\"\":{},\"\":5}")));
TestSuite::testParsingItself(test1);
#endif
test2[1] = 15;
assertEquals(test1[1], 5);
assertEquals(test2[1], 15);
test1 = test2;
#ifdef JSON_UNIT_TEST
#ifdef JSON_REF_COUNT
assertEquals(test1.internal, test2.internal);
#else
assertNotEquals(test1.internal, test2.internal);
#endif
#endif
test1[0].push_back(JSONNode(JSON_TEXT(""), 1));
test1[0].push_back(JSONNode(JSON_TEXT(""), 2));
assertEquals(test1[0].size(), 2);
assertEquals(test2[0].size(), 0);
TestSuite::testParsingItself(test1);
TestSuite::testParsingItself(test2);
#endif
}