ArrayTest.cpp 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. 
  2. #include "../testTools.h"
  3. #include "../../DFPSR/collection/Array.h"
  4. START_TEST(Array)
  5. { // Arrays of integers.
  6. ASSERT_HEAP_DEPTH(0);
  7. Array<int> a = Array<int>(4, 123);
  8. ASSERT_HEAP_DEPTH(1);
  9. a[1] = 85;
  10. a[3] = -100;
  11. ASSERT_EQUAL(a.length(), 4);
  12. ASSERT_EQUAL(a[0], 123);
  13. ASSERT_EQUAL(a[1], 85);
  14. ASSERT_EQUAL(a[2], 123);
  15. ASSERT_EQUAL(a[3], -100);
  16. ASSERT_HEAP_DEPTH(1);
  17. ASSERT_EQUAL(string_combine(a),
  18. U"{\n"
  19. U" 123,\n"
  20. U" 85,\n"
  21. U" 123,\n"
  22. U" -100\n"
  23. U"}"
  24. );
  25. ASSERT_HEAP_DEPTH(1);
  26. // An initial assignment uses the copy constructor, because there is no pre-existing data in b.
  27. Array<int> b = a;
  28. ASSERT_HEAP_DEPTH(2);
  29. b[0] = 200;
  30. b[2] = 100000;
  31. ASSERT_HEAP_DEPTH(2);
  32. // The b array has changed...
  33. ASSERT_EQUAL(string_combine(b),
  34. U"{\n"
  35. U" 200,\n"
  36. U" 85,\n"
  37. U" 100000,\n"
  38. U" -100\n"
  39. U"}"
  40. );
  41. ASSERT_HEAP_DEPTH(2);
  42. // ...but a remains the same, because the data was cloned when assigning.
  43. ASSERT_EQUAL(string_combine(a),
  44. U"{\n"
  45. U" 123,\n"
  46. U" 85,\n"
  47. U" 123,\n"
  48. U" -100\n"
  49. U"}"
  50. );
  51. // They are not equal
  52. ASSERT_NOT_EQUAL(a, b);
  53. ASSERT_HEAP_DEPTH(2);
  54. // Assigning from copy construction.
  55. a = Array<int>(b);
  56. ASSERT_HEAP_DEPTH(2);
  57. // Now they are equal
  58. ASSERT_EQUAL(a, b);
  59. // Create another length
  60. Array<int> c = Array<int>(7, 75);
  61. ASSERT_HEAP_DEPTH(3);
  62. ASSERT_EQUAL(string_combine(c),
  63. U"{\n"
  64. U" 75,\n"
  65. U" 75,\n"
  66. U" 75,\n"
  67. U" 75,\n"
  68. U" 75,\n"
  69. U" 75,\n"
  70. U" 75\n"
  71. U"}"
  72. );
  73. // Assign larger array
  74. a = c;
  75. ASSERT_HEAP_DEPTH(3);
  76. ASSERT_EQUAL(string_combine(a),
  77. U"{\n"
  78. U" 75,\n"
  79. U" 75,\n"
  80. U" 75,\n"
  81. U" 75,\n"
  82. U" 75,\n"
  83. U" 75,\n"
  84. U" 75\n"
  85. U"}"
  86. );
  87. ASSERT_EQUAL(a, c);
  88. ASSERT_NOT_EQUAL(a, b);
  89. // Assign smaller array
  90. c = b;
  91. ASSERT_HEAP_DEPTH(3);
  92. ASSERT_EQUAL(string_combine(c),
  93. U"{\n"
  94. U" 200,\n"
  95. U" 85,\n"
  96. U" 100000,\n"
  97. U" -100\n"
  98. U"}"
  99. );
  100. ASSERT_EQUAL(c, b);
  101. ASSERT_NOT_EQUAL(a, c);
  102. }
  103. { // Arrays of non-trivial types.
  104. Array<Array<String>> a = Array<Array<String>>(2, Array<String>(3, U"?"));
  105. ASSERT_EQUAL(a.length(), 2);
  106. ASSERT_CRASH(a[-1], U"Array index -1 is out of bound 0..1!");
  107. ASSERT_EQUAL(a[0].length(), 3);
  108. ASSERT_EQUAL(a[1].length(), 3);
  109. ASSERT_CRASH(a[2], U"Array index 2 is out of bound 0..1!");
  110. ASSERT_EQUAL(a[0][0], U"?");
  111. ASSERT_EQUAL(a[0][1], U"?");
  112. ASSERT_EQUAL(a[0][2], U"?");
  113. ASSERT_EQUAL(a[1][0], U"?");
  114. ASSERT_EQUAL(a[1][1], U"?");
  115. ASSERT_EQUAL(a[1][2], U"?");
  116. a[0][0] = U"Testing";
  117. a[0][1] = U"an";
  118. a[0][2] = U"array";
  119. a[1][0] = U"of";
  120. a[1][1] = U"string";
  121. a[1][2] = U"arrays";
  122. ASSERT_EQUAL(a[0][0], U"Testing");
  123. ASSERT_EQUAL(a[0][1], U"an");
  124. ASSERT_EQUAL(a[0][2], U"array");
  125. ASSERT_EQUAL(a[1][0], U"of");
  126. ASSERT_EQUAL(a[1][1], U"string");
  127. ASSERT_EQUAL(a[1][2], U"arrays");
  128. Array<String> b = std::move(a[0]);
  129. ASSERT_EQUAL(a[0].length(), 0);
  130. ASSERT_EQUAL(a[1].length(), 3);
  131. ASSERT_EQUAL(b.length(), 3);
  132. Array<String> c(std::move(a[1]));
  133. ASSERT_EQUAL(a[0].length(), 0);
  134. ASSERT_EQUAL(a[1].length(), 0);
  135. ASSERT_EQUAL(b.length(), 3);
  136. ASSERT_EQUAL(c.length(), 3);
  137. }
  138. END_TEST