ArrayListTests.cpp 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. #include "../Tests.hpp"
  2. #include "core/ArrayList.hpp"
  3. #include "core/Test.hpp"
  4. template class Core::ArrayList<size_t, 20>;
  5. using IntList = Core::ArrayList<size_t, 20>;
  6. static void testAdd() {
  7. IntList list;
  8. list.add(5u);
  9. TEST(5, list[0]);
  10. TEST(5, list.getLast());
  11. const IntList& cList = list;
  12. TEST(5, cList.getLast());
  13. TEST(1, list.getLength());
  14. }
  15. static void testMultipleAdd() {
  16. IntList list;
  17. list.add(4u).add(3u).add(2u);
  18. TEST(4, list[0]);
  19. TEST(3, list[1]);
  20. TEST(2, list[2]);
  21. TEST(3, list.getLength());
  22. }
  23. static void testAddReplace() {
  24. IntList list;
  25. list.add(5u);
  26. list[0] = 3;
  27. TEST(3, list[0]);
  28. }
  29. static void testClear() {
  30. IntList list;
  31. list.add(5u).add(4u);
  32. list.clear();
  33. TEST(0, list.getLength());
  34. }
  35. static void testOverflow(bool light) {
  36. IntList list;
  37. for(size_t i = 0; i < 20; i++) {
  38. list.add(i);
  39. }
  40. size_t limit = light ? 1000 : 100'000;
  41. for(size_t i = 0; i < limit; i++) {
  42. list.add(i);
  43. }
  44. for(size_t i = 0; i < list.getLength(); i++) {
  45. TEST(i, list[i]);
  46. }
  47. }
  48. static void testCopy() {
  49. IntList list;
  50. list.add(1u).add(2u).add(3u);
  51. IntList copy(list);
  52. TEST(list.getLength(), copy.getLength());
  53. for(size_t i = 0; i < copy.getLength() && i < list.getLength(); i++) {
  54. TEST(list[i], copy[i]);
  55. }
  56. }
  57. static void testCopyAssignment() {
  58. IntList list;
  59. list.add(1u).add(2u).add(3u);
  60. IntList copy;
  61. copy = list;
  62. TEST(list.getLength(), copy.getLength());
  63. for(size_t i = 0; i < copy.getLength() && i < list.getLength(); i++) {
  64. TEST(list[i], copy[i]);
  65. }
  66. }
  67. static void testMove() {
  68. IntList list;
  69. list.add(1u).add(2u).add(3u);
  70. IntList move(Core::move(list));
  71. TEST(0, list.getLength());
  72. TEST(3, move.getLength());
  73. TEST(1, move[0]);
  74. TEST(2, move[1]);
  75. TEST(3, move[2]);
  76. }
  77. static void testMoveAssignment() {
  78. IntList list;
  79. list.add(1u).add(2u).add(3u);
  80. IntList move;
  81. move = Core::move(list);
  82. TEST(0, list.getLength());
  83. TEST(3, move.getLength());
  84. TEST(1, move[0]);
  85. TEST(2, move[1]);
  86. TEST(3, move[2]);
  87. }
  88. static void testToString() {
  89. IntList list;
  90. list.add(1u).add(243u).add(423u);
  91. TEST_STRING("[1, 243, 423]", list);
  92. TEST_STRING("[1]", IntList().add(1u));
  93. TEST_STRING("[]", IntList());
  94. }
  95. static void testRemoveBySwap() {
  96. IntList list;
  97. list.add(4u).add(3u).add(2u);
  98. list.removeBySwap(0);
  99. TEST(2, list[0]);
  100. TEST(3, list[1]);
  101. TEST(2, list.getLength());
  102. list.removeBySwap(1);
  103. TEST(2, list[0]);
  104. TEST(1, list.getLength());
  105. list.removeBySwap(0);
  106. TEST(0, list.getLength());
  107. }
  108. static void testRemove() {
  109. IntList list;
  110. list.add(4u).add(3u).add(2u);
  111. list.remove(0);
  112. TEST(3, list[0]);
  113. TEST(2, list[1]);
  114. TEST(2, list.getLength());
  115. list.remove(1);
  116. TEST(3, list[0]);
  117. TEST(1, list.getLength());
  118. list.removeLast();
  119. TEST(0, list.getLength());
  120. }
  121. static void testForRange() {
  122. IntList list;
  123. list.add(1u).add(2u).add(3u);
  124. for(size_t& i : list) {
  125. i++;
  126. }
  127. for(size_t i = 0; i < list.getLength(); i++) {
  128. TEST(i + 2, list[i]);
  129. }
  130. }
  131. void testArrayList(bool light) {
  132. testAdd();
  133. testMultipleAdd();
  134. testAddReplace();
  135. testClear();
  136. testOverflow(light);
  137. testCopy();
  138. testCopyAssignment();
  139. testMove();
  140. testMoveAssignment();
  141. testToString();
  142. testRemoveBySwap();
  143. testRemove();
  144. testForRange();
  145. }