TestSharedString.cpp 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. #include "TestSuite.h"
  2. #include "../Source/JSONSharedString.h"
  3. void TestSuite::TestSharedString(void){
  4. UnitTest::SetPrefix("TestSharedString.cpp - Seeing how much regular strings share");
  5. json_string sharey = JSON_TEXT("Hello world");
  6. json_string sharey2 = sharey;
  7. if (sharey2.data() == sharey.data()) echo("Assignment shares data");
  8. sharey2 = json_string(sharey);
  9. if (sharey2.data() == sharey.data()) echo("Copy ctor shares data");
  10. sharey2 = json_string(sharey.begin(), sharey.end());
  11. if (sharey2.data() == sharey.data()) echo("Copy with iterators shares data");
  12. sharey2 = sharey.substr(0);
  13. if (sharey2.data() == sharey.data()) echo("substr shares data");
  14. json_string value = JSON_TEXT("Hello, I am a string with lots of words");
  15. json_shared_string shared = json_shared_string(value);
  16. UnitTest::SetPrefix("TestSharedString.cpp - Whole String");
  17. //make it out of a string, make sure they are equal
  18. assertEquals(value.length(), shared.length());
  19. assertEquals(value, json_string(shared.std_begin(), shared.std_end()));
  20. #ifdef JSON_UNIT_TEST
  21. assertEquals(1, shared._str -> refCount);
  22. #endif
  23. UnitTest::SetPrefix("TestSharedString.cpp - Substring");
  24. //take a substring out of it, make sure its using the same reference
  25. json_shared_string hello = json_shared_string(shared, 0, 5);
  26. json_string shello = value.substr(0, 5);
  27. #ifdef JSON_UNIT_TEST
  28. assertEquals(shared._str, hello._str);
  29. assertEquals(2, shared._str -> refCount);
  30. #endif
  31. assertEquals(shello, json_string(hello.std_begin(), hello.std_end()));
  32. #ifdef JSON_UNIT_TEST
  33. assertEquals(shared._str, hello._str);
  34. assertEquals(2, shared._str -> refCount);
  35. #endif
  36. UnitTest::SetPrefix("TestSharedString.cpp - Substring to String");
  37. //make sure converting it to a string actually does the convert
  38. assertEquals(json_string(JSON_TEXT("Hello")), hello.toString());
  39. #ifdef JSON_UNIT_TEST
  40. assertNotEquals(shared._str, hello._str);
  41. assertEquals(1, shared._str -> refCount);
  42. assertEquals(1, hello._str -> refCount);
  43. #endif
  44. UnitTest::SetPrefix("TestSharedString.cpp - Substring of substring offset zero");
  45. json_shared_string rest = json_shared_string(shared, 7);
  46. json_string srest = value.substr(7);
  47. #ifdef JSON_UNIT_TEST
  48. assertEquals(shared._str, rest._str);
  49. assertEquals(7,rest.offset);
  50. assertEquals(2, shared._str -> refCount);
  51. #endif
  52. assertEquals(srest, json_string(rest.std_begin(), rest.std_end()));
  53. #ifdef JSON_UNIT_TEST
  54. assertEquals(shared._str, rest._str);
  55. assertEquals(2, shared._str -> refCount);
  56. #endif
  57. json_shared_string I_am_a_string = json_shared_string(rest, 0, 13);
  58. json_string sI_am_a_string = srest.substr(0, 13);
  59. #ifdef JSON_UNIT_TEST
  60. assertEquals(shared._str, I_am_a_string._str);
  61. assertEquals(7,rest.offset);
  62. assertEquals(3, shared._str -> refCount);
  63. #endif
  64. assertEquals(sI_am_a_string, json_string(I_am_a_string.std_begin(), I_am_a_string.std_end()));
  65. assertEquals(srest, json_string(rest.std_begin(), rest.std_end()));
  66. #ifdef JSON_UNIT_TEST
  67. assertEquals(shared._str, I_am_a_string._str);
  68. assertEquals(3, shared._str -> refCount);
  69. #endif
  70. UnitTest::SetPrefix("TestSharedString.cpp - Finding Ref 1");
  71. assertEquals(0, hello.find(JSON_TEXT('H')));
  72. assertEquals(shello.find(JSON_TEXT('H')), hello.find(JSON_TEXT('H')));
  73. assertEquals(4, hello.find(JSON_TEXT('o')));
  74. assertEquals(shello.find(JSON_TEXT('o')), hello.find(JSON_TEXT('o')));
  75. assertEquals(json_string::npos, hello.find(JSON_TEXT('z')));
  76. assertEquals(shello.find(JSON_TEXT('z')), hello.find(JSON_TEXT('z')));
  77. UnitTest::SetPrefix("TestSharedString.cpp - Finding Shared");
  78. assertEquals(0, I_am_a_string.find(JSON_TEXT('I')));
  79. assertEquals(sI_am_a_string.find(JSON_TEXT('I')), I_am_a_string.find(JSON_TEXT('I')));
  80. assertEquals(7, I_am_a_string.find(JSON_TEXT('s')));
  81. assertEquals(sI_am_a_string.find(JSON_TEXT('s')), I_am_a_string.find(JSON_TEXT('s')));
  82. assertEquals(json_string::npos, I_am_a_string.find(JSON_TEXT('z')));
  83. assertEquals(sI_am_a_string.find(JSON_TEXT('z')), I_am_a_string.find(JSON_TEXT('z')));
  84. //still sharing memory with the parent string, which contains a w
  85. assertEquals(json_string::npos, I_am_a_string.find(JSON_TEXT('w')));
  86. assertEquals(sI_am_a_string.find(JSON_TEXT('w')), I_am_a_string.find(JSON_TEXT('w')));
  87. UnitTest::SetPrefix("TestSharedString.cpp - Iterator substrings");
  88. json_string blah = JSON_TEXT("hello world");
  89. json_shared_string blahs(blah);
  90. #ifdef JSON_UNIT_TEST
  91. assertEquals(blahs._str -> refCount, 1);
  92. #endif
  93. json_string sub = json_string(blah.begin(), blah.end());
  94. json_shared_string subs = json_shared_string(blahs.begin(), blahs.end());
  95. #ifdef JSON_UNIT_TEST
  96. assertEquals(blahs._str, subs._str);
  97. assertEquals(blahs._str -> refCount, 2);
  98. #endif
  99. assertEquals(blah, blahs.toString());
  100. assertEquals(sub, subs.toString());
  101. assertEquals(sub.length(), subs.length());
  102. sub = json_string(blah.begin(), blah.begin() + 5);
  103. subs = json_shared_string(blahs.begin(), blahs.begin() + 5);
  104. #ifdef JSON_UNIT_TEST
  105. assertEquals(blahs._str, subs._str);
  106. assertEquals(blahs._str -> refCount, 2);
  107. #endif
  108. assertEquals(blah, blahs.toString());
  109. assertEquals(sub, subs.toString());
  110. assertEquals(sub.length(), subs.length());
  111. }