Vector.vala 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. using Invercargill;
  2. using Invercargill.DataStructures;
  3. void vector_tests() {
  4. Test.add_func("/invercargill/structure/vector/add_item", () => {
  5. var vector = new Vector<int>();
  6. vector.add(8);
  7. assert(vector.first_or_default() == 8);
  8. assert(vector.get_or_default(0) == 8);
  9. assert(vector[0] == 8);
  10. assert(vector.count() == 1);
  11. });
  12. Test.add_func("/invercargill/structure/vector/add_strings", () => {
  13. var vector = new Vector<string>();
  14. vector.add("test string");
  15. assert(vector.first_or_default() == "test string");
  16. assert(vector.get_or_default(0) == "test string");
  17. assert(vector.count() == 1);
  18. });
  19. Test.add_func("/invercargill/structure/vector/from_attempts", () => {
  20. var vector = Iterate.range(0,64).select<Attempt<int>>(i => new Attempt<int>(() => i+2)).to_vector();
  21. assert(vector.first_or_default().success);
  22. assert(vector.get_or_default(1).success);
  23. assert(vector.get_or_default(2).result == 4);
  24. assert(vector.count() == 64);
  25. });
  26. Test.add_func("/invercargill/structure/vector/add_objects", () => {
  27. var vector = new Vector<TestObject>();
  28. var obj = new TestObject() {
  29. string_value = "hello, world",
  30. int_value = 1999
  31. };
  32. vector.add(obj);
  33. assert(vector.first_or_default() == obj);
  34. assert(vector.get_or_default(0) == obj);
  35. assert(vector.first_or_default().int_value == 1999);
  36. assert(vector.first_or_default().string_value == "hello, world");
  37. assert(vector.count() == 1);
  38. });
  39. Test.add_func("/invercargill/structure/vector/expand", () => {
  40. var vector = new Vector<int>();
  41. vector.add(8);
  42. vector.add(10);
  43. vector.add(64);
  44. vector.add(35);
  45. vector.add(129);
  46. assert(vector.first_or_default() == 8);
  47. assert(vector.get_or_default(0) == 8);
  48. assert(vector.get_or_default(1) == 10);
  49. assert(vector.get_or_default(2) == 64);
  50. assert(vector.get_or_default(3) == 35);
  51. assert(vector.get_or_default(4) == 129);
  52. assert(vector.last_or_default() == 129);
  53. assert(vector.count() == 5);
  54. });
  55. Test.add_func("/invercargill/structure/vector/to_vector", () => {
  56. var items = new int[] { 1, 8, 2, 4, 6, 5, 3, 10, 3, 7 };
  57. var vector = Wrap.array(items).to_vector();
  58. assert(vector.count() == 10);
  59. for(int i = 0; i < items.length; i++) {
  60. assert(vector.get_or_default(i) == items[i]);
  61. }
  62. });
  63. Test.add_func("/invercargill/structure/vector/to_array", () => {
  64. var items = new int[] { 1, 8, 2, 4, 6, 5, 3, 10, 3, 7 };
  65. var vector = Wrap.array(items).to_vector();
  66. var array = vector.to_array();
  67. assert(array.length == 10);
  68. for(int i = 0; i < items.length; i++) {
  69. assert(array[i] == items[i]);
  70. }
  71. });
  72. Test.add_func("/invercargill/structure/vector/many_items", () => {
  73. var items = Iterate.range(0, 10000000);
  74. var vector = items.to_vector();
  75. assert(vector.count() == 10000000);
  76. assert(vector.matches(items, (a, b) => a == b));
  77. });
  78. Test.add_func("/invercargill/structure/vector/remove", () => {
  79. var items = new int[] { 1, 8, 2, 4, 6, 5, 3, 10, 3, 7 };
  80. var expected = new int[] { 1, 8, 2, 4, 6, 3, 10, 3, 7 };
  81. var vector = Wrap.array(items).to_vector();
  82. try {
  83. vector.remove_at(5);
  84. assert(vector.count() == 9);
  85. assert(vector.matches(Wrap.array(expected), (a, b) => a == b));
  86. }
  87. catch(Error e) {
  88. assert_no_error(e);
  89. }
  90. });
  91. Test.add_func("/invercargill/structure/vector/last/no-condition", () => {
  92. var items = Wrap.array(new int[] { 1, 2, 3, 4, 5, 6}).to_vector();
  93. try{
  94. var last = items.last();
  95. assert_true(last == 6);
  96. }
  97. catch (Error e) {
  98. assert_no_error(e);
  99. }
  100. });
  101. Test.add_func("/invercargill/structure/vector/last/condition", () => {
  102. var items = Wrap.array(new int[] { 1, 2, 3, 4, 5, 6}).to_vector();
  103. try {
  104. var last = items.last(i => i < 4);
  105. assert_true(last == 3);
  106. }
  107. catch (Error e) {
  108. assert_no_error(e);
  109. }
  110. });
  111. Test.add_func("/invercargill/structure/vector/last/empty", () => {
  112. var items = new Vector<int>();
  113. try {
  114. items.last();
  115. assert_not_reached();
  116. }
  117. catch (Error e) {
  118. }
  119. });
  120. Test.add_func("/invercargill/structure/vector/get/empty", () => {
  121. var items = new Vector<int>();
  122. try {
  123. items.get(0);
  124. assert_not_reached();
  125. }
  126. catch (Error e) {
  127. }
  128. });
  129. Test.add_func("/invercargill/structure/vector/get/negative-index", () => {
  130. var items = new Vector<int>();
  131. try {
  132. items.get(-5);
  133. assert_not_reached();
  134. }
  135. catch (Error e) {
  136. }
  137. });
  138. Test.add_func("/invercargill/structure/vector/get/out-of-bounds", () => {
  139. var items = Wrap.array(new int[] { 1, 2, 3, 4, 5, 6}).to_vector();
  140. try {
  141. items.get(6);
  142. assert_not_reached();
  143. }
  144. catch (Error e) {
  145. }
  146. });
  147. Test.add_func("/invercargill/structure/vector/set/empty", () => {
  148. var items = new Vector<int>();
  149. try {
  150. items.set(0, 5);
  151. assert_not_reached();
  152. }
  153. catch (Error e) {
  154. }
  155. });
  156. Test.add_func("/invercargill/structure/vector/set/negative-index", () => {
  157. var items = new Vector<int>();
  158. try {
  159. items.set(-5, 73);
  160. assert_not_reached();
  161. }
  162. catch (Error e) {
  163. }
  164. });
  165. Test.add_func("/invercargill/structure/vector/set/out-of-bounds", () => {
  166. var items = Wrap.array(new int[] { 1, 2, 3, 4, 5, 6}).to_vector();
  167. try {
  168. items.set(6, 7);
  169. assert_not_reached();
  170. }
  171. catch (Error e) {
  172. }
  173. });
  174. Test.add_func("/invercargill/structure/vector/set/valid", () => {
  175. var items = Wrap.array(new int[] { 1, 2, 3, 4, 5, 6}).to_vector();
  176. try {
  177. items.set(1, 8);
  178. }
  179. catch (Error e) {
  180. assert_not_reached();
  181. }
  182. assert(items.get_or_default(1) == 8);
  183. });
  184. }
  185. private class TestObject {
  186. public string string_value { get; set; }
  187. public int int_value { get; set; }
  188. }