You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

преди 10 години
преди 10 години
преди 10 години
преди 10 години
преди 10 години
преди 10 години
преди 10 години
преди 10 години
преди 10 години
преди 10 години
преди 10 години
преди 10 години
преди 10 години
преди 10 години
преди 10 години
преди 10 години
преди 10 години
преди 10 години
преди 10 години
преди 10 години
преди 10 години
преди 10 години
преди 10 години
преди 10 години
преди 10 години
преди 10 години
преди 10 години
преди 10 години
преди 10 години
преди 10 години
преди 10 години
преди 10 години
преди 10 години
преди 10 години
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  1. //
  2. // Lol Engine
  3. //
  4. // Copyright: (c) 2010-2014 Sam Hocevar <sam@hocevar.net>
  5. // This program is free software; you can redistribute it and/or
  6. // modify it under the terms of the Do What The Fuck You Want To
  7. // Public License, Version 2, as published by Sam Hocevar. See
  8. // http://www.wtfpl.net/ for more details.
  9. //
  10. #include <lol/engine-internal.h>
  11. #include <lolunit.h>
  12. namespace lol
  13. {
  14. struct TrackedObj
  15. {
  16. static int m_ctor, m_dtor;
  17. TrackedObj() { m_ctor++; }
  18. TrackedObj(TrackedObj const &) { m_ctor++; }
  19. ~TrackedObj() { m_dtor++; }
  20. };
  21. int TrackedObj::m_ctor = 0;
  22. int TrackedObj::m_dtor = 0;
  23. lolunit_declare_fixture(ArrayTest)
  24. {
  25. void SetUp() {}
  26. void TearDown() {}
  27. lolunit_declare_test(ArrayPush)
  28. {
  29. array<int> a;
  30. a.push(0);
  31. a.push(1);
  32. a.push(2);
  33. a.push(3);
  34. lolunit_assert_equal(a[0], 0);
  35. lolunit_assert_equal(a[1], 1);
  36. lolunit_assert_equal(a[2], 2);
  37. lolunit_assert_equal(a[3], 3);
  38. }
  39. lolunit_declare_test(ArrayInitializer)
  40. {
  41. array<int> a({ 2, 4, 6 });
  42. lolunit_assert_equal(a[0], 2);
  43. lolunit_assert_equal(a[1], 4);
  44. lolunit_assert_equal(a[2], 6);
  45. array<int> b = { 2, 4, 6 };
  46. lolunit_assert_equal(b[0], 2);
  47. lolunit_assert_equal(b[1], 4);
  48. lolunit_assert_equal(b[2], 6);
  49. array<int, float> c = { { 2, 3.0f },
  50. { 4, 5.0f },
  51. { 6, 7.0f } };
  52. lolunit_assert_equal(c[0].m1, 2);
  53. lolunit_assert_equal(c[0].m2, 3.0f);
  54. lolunit_assert_equal(c[1].m1, 4);
  55. lolunit_assert_equal(c[1].m2, 5.0f);
  56. lolunit_assert_equal(c[2].m1, 6);
  57. lolunit_assert_equal(c[2].m2, 7.0f);
  58. }
  59. lolunit_declare_test(ArrayPushWithShift)
  60. {
  61. array<int> a;
  62. a << 0 << 1 << 2 << 3;
  63. lolunit_assert_equal(a[0], 0);
  64. lolunit_assert_equal(a[1], 1);
  65. lolunit_assert_equal(a[2], 2);
  66. lolunit_assert_equal(a[3], 3);
  67. }
  68. lolunit_declare_test(ArrayCopy)
  69. {
  70. array<int> a;
  71. a << 0 << 1 << 2 << 3;
  72. array<int> b = a;
  73. lolunit_assert_equal(b[0], 0);
  74. lolunit_assert_equal(b[1], 1);
  75. lolunit_assert_equal(b[2], 2);
  76. lolunit_assert_equal(b[3], 3);
  77. }
  78. lolunit_declare_test(ArrayRemove)
  79. {
  80. array<int> a;
  81. a << 0 << 1 << 2 << 3;
  82. a.remove(1);
  83. lolunit_assert_equal(a.count(), 3);
  84. lolunit_assert_equal(a[0], 0);
  85. lolunit_assert_equal(a[1], 2);
  86. lolunit_assert_equal(a[2], 3);
  87. array<int> b;
  88. b << 0 << 1 << 2 << 3;
  89. b.remove(-2);
  90. lolunit_assert_equal(b.count(), 3);
  91. lolunit_assert_equal(b[0], 0);
  92. lolunit_assert_equal(b[1], 1);
  93. lolunit_assert_equal(b[2], 3);
  94. }
  95. lolunit_declare_test(ArrayRemoveSwap)
  96. {
  97. array<int> a;
  98. a << 0 << 1 << 2 << 3;
  99. a.remove_swap(1);
  100. lolunit_assert_equal(a.count(), 3);
  101. lolunit_assert_equal(a[0], 0);
  102. lolunit_assert_equal(a[1], 3);
  103. lolunit_assert_equal(a[2], 2);
  104. array<int> b;
  105. b << 0 << 1 << 2 << 3;
  106. b.remove(1, 2);
  107. lolunit_assert_equal(b.count(), 2);
  108. lolunit_assert_equal(b[0], 0);
  109. lolunit_assert_equal(b[1], 3);
  110. }
  111. lolunit_declare_test(EightElements)
  112. {
  113. array<int, long, float, double, unsigned, char, bool, void *> a;
  114. a.push(1, 2, 3.f, 4.0, 5, 'a', true, 0);
  115. lolunit_assert_equal(a[0].m1, 1);
  116. lolunit_assert_equal(a[0].m2, 2);
  117. lolunit_assert_equal(a[0].m3, 3.f);
  118. lolunit_assert_equal(a[0].m4, 4.0);
  119. lolunit_assert_equal(a[0].m5, 5);
  120. lolunit_assert_equal(a[0].m6, 'a');
  121. lolunit_assert_equal(a[0].m7, true);
  122. lolunit_assert_equal(a[0].m8, 0);
  123. }
  124. lolunit_declare_test(ArraySwap)
  125. {
  126. array<int, int> a;
  127. a.push(10, 20);
  128. a.push(30, 40);
  129. std::swap(a[0], a[1]);
  130. lolunit_assert_equal(30, a[0].m1);
  131. lolunit_assert_equal(40, a[0].m2);
  132. lolunit_assert_equal(10, a[1].m1);
  133. lolunit_assert_equal(20, a[1].m2);
  134. }
  135. lolunit_declare_test(ArrayInsert)
  136. {
  137. array<int> a;
  138. a << 1 << 2;
  139. a.insert(5, 0);
  140. lolunit_assert_equal(5, a[0]);
  141. lolunit_assert_equal(1, a[1]);
  142. lolunit_assert_equal(2, a[2]);
  143. a.insert(6, 3);
  144. lolunit_assert_equal(5, a[0]);
  145. lolunit_assert_equal(1, a[1]);
  146. lolunit_assert_equal(2, a[2]);
  147. lolunit_assert_equal(6, a[3]);
  148. a.insert(7, 2);
  149. lolunit_assert_equal(5, a[0]);
  150. lolunit_assert_equal(1, a[1]);
  151. lolunit_assert_equal(7, a[2]);
  152. lolunit_assert_equal(2, a[3]);
  153. lolunit_assert_equal(6, a[4]);
  154. }
  155. lolunit_declare_test(ArrayInsertTuple)
  156. {
  157. array<int, float, String> b;
  158. b.insert(0, 5, 6.f, "lol");
  159. lolunit_assert_equal(5, b[0].m1);
  160. lolunit_assert_equal(6.f, b[0].m2);
  161. b.insert(1, 8, 9.f, "hi there");
  162. lolunit_assert_equal(5, b[0].m1);
  163. lolunit_assert_equal(6.f, b[0].m2);
  164. lolunit_assert_equal(8, b[1].m1);
  165. lolunit_assert_equal(9.f, b[1].m2);
  166. b.insert(1, 4, 5.f, "anyone home?");
  167. lolunit_assert_equal(5, b[0].m1);
  168. lolunit_assert_equal(6.f, b[0].m2);
  169. lolunit_assert_equal(4, b[1].m1);
  170. lolunit_assert_equal(5.f, b[1].m2);
  171. lolunit_assert_equal(8, b[2].m1);
  172. lolunit_assert_equal(9.f, b[2].m2);
  173. }
  174. lolunit_declare_test(ArrayConcat)
  175. {
  176. array<int> a, b;
  177. a << 0 << 1;
  178. b << 2 << 3;
  179. array<int> c = a + b;
  180. lolunit_assert_equal(c[0], 0);
  181. lolunit_assert_equal(c[1], 1);
  182. lolunit_assert_equal(c[2], 2);
  183. lolunit_assert_equal(c[3], 3);
  184. }
  185. lolunit_declare_test(ArrayAppend)
  186. {
  187. array<int> a, b;
  188. a << 0 << 1;
  189. b << 2 << 3;
  190. a += b;
  191. lolunit_assert_equal(a[0], 0);
  192. lolunit_assert_equal(a[1], 1);
  193. lolunit_assert_equal(a[2], 2);
  194. lolunit_assert_equal(a[3], 3);
  195. b += b;
  196. lolunit_assert_equal(b[0], 2);
  197. lolunit_assert_equal(b[1], 3);
  198. lolunit_assert_equal(b[2], 2);
  199. lolunit_assert_equal(b[3], 3);
  200. }
  201. lolunit_declare_test(ElementCtorDtor)
  202. {
  203. /* Ensure array elements get created and destroyed the proper
  204. * number of times. */
  205. TrackedObj::m_ctor = 0;
  206. TrackedObj::m_dtor = 0;
  207. {
  208. array<TrackedObj> a;
  209. a.push(TrackedObj());
  210. }
  211. lolunit_assert_equal(TrackedObj::m_ctor, TrackedObj::m_dtor);
  212. TrackedObj::m_ctor = 0;
  213. TrackedObj::m_dtor = 0;
  214. {
  215. array<TrackedObj> a;
  216. a.resize(2);
  217. a.resize(4);
  218. a.resize(1);
  219. }
  220. lolunit_assert_equal(TrackedObj::m_ctor, TrackedObj::m_dtor);
  221. }
  222. };
  223. } /* namespace lol */