Array.unit.hx 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283
  1. // length
  2. [].length == 0;
  3. [1].length == 1;
  4. var a = [];
  5. a[4] = 1;
  6. a.length == 5;
  7. a[a.length] = 1;
  8. a.length == 6;
  9. // concat
  10. [].concat([]) == [];
  11. [1].concat([]) == [1];
  12. [].concat([1]) == [1];
  13. [1].concat([2]) == [1,2];
  14. [1,2].concat([2,1]) == [1,2,2,1];
  15. // join
  16. [1,2].join("") == "12";
  17. [].join("x") == "";
  18. [1].join("x") == "1";
  19. [1,2].join("x") == "1x2";
  20. [].join("") == "";
  21. [new ClassWithToString(), new ClassWithToStringChild(), new ClassWithToStringChild2()].join("_") == "ClassWithToString.toString()_ClassWithToString.toString()_ClassWithToStringChild2.toString()";
  22. // pop
  23. [].pop() == null;
  24. [1].pop() == 1;
  25. var a = [1, 2, 3];
  26. var b = a;
  27. a.pop() == 3;
  28. a == [1, 2];
  29. a == b;
  30. a.pop() == 2;
  31. a == [1];
  32. a == b;
  33. a.pop() == 1;
  34. a == [];
  35. a == b;
  36. a.pop() == null;
  37. a == [];
  38. a == b;
  39. // push
  40. var a:Array<Null<Int>> = [];
  41. var b = a;
  42. a.push(1) == 1;
  43. a == b;
  44. a == [1];
  45. a.push(2) == 2;
  46. a == b;
  47. a == [1, 2];
  48. a.push(null) == 3;
  49. a == [1, 2, null];
  50. // reverse
  51. var a = [1, 2, 3];
  52. var b = a;
  53. a.reverse();
  54. a == b;
  55. a == [3, 2, 1];
  56. var a = [];
  57. a.reverse();
  58. a == [];
  59. var a = [1];
  60. a.reverse();
  61. a == [1];
  62. // shift
  63. [].shift() == null;
  64. [1].shift() == 1;
  65. var a = [1, 2, 3];
  66. var b = a;
  67. a.shift() == 1;
  68. a == [2, 3];
  69. a == b;
  70. a.shift() == 2;
  71. a == [3];
  72. a == b;
  73. a.shift() == 3;
  74. a == [];
  75. a == b;
  76. a.shift() == null;
  77. a == [];
  78. a == b;
  79. // slice
  80. var i0 = new IntWrap(1);
  81. var i1 = new IntWrap(1);
  82. var i2 = new IntWrap(5);
  83. var i3 = new IntWrap(9);
  84. var i4 = new IntWrap(2);
  85. var a = [i4,i0,i1,i3,i0,i2];
  86. var b = a.slice(0);
  87. b != a;
  88. b == [i4, i0, i1, i3, i0, i2];
  89. b = b.slice(1);
  90. b == [i0, i1, i3, i0, i2];
  91. b = b.slice(1, 3);
  92. b == [i1, i3];
  93. b = b.slice( -1);
  94. b == [i3];
  95. b = b.slice(0, 4);
  96. b == [i3];
  97. b.slice( -3) == [i3];
  98. b.slice( -3, -3) == [];
  99. [1, 2, 3].slice(2, 1) == [];
  100. // sort
  101. var i0 = new IntWrap(1);
  102. var i1 = new IntWrap(1);
  103. var i2 = new IntWrap(5);
  104. var i3 = new IntWrap(9);
  105. var i4 = new IntWrap(2);
  106. var a = [i4, i0, i1, i3, i0, i2];
  107. haxe.ds.ArraySort.sort(a, IntWrap.compare);
  108. a == [i0, i1, i0, i4, i2, i3];
  109. // splice
  110. var i0 = new IntWrap(1);
  111. var i1 = new IntWrap(1);
  112. var i2 = new IntWrap(5);
  113. var i3 = new IntWrap(9);
  114. var i4 = new IntWrap(2);
  115. var b = [i4, i0, i1, i3, i0, i2];
  116. var a = b.splice(0, 0);
  117. b != a;
  118. a == [];
  119. b == [i4, i0, i1, i3, i0, i2];
  120. a = b.splice(1, b.length - 1);
  121. b == [i4];
  122. a == [i0, i1, i3, i0, i2];
  123. b = a.splice(1, -1);
  124. a == [i0, i1, i3, i0, i2];
  125. b == [];
  126. b = a.splice(0, 10);
  127. b == [i0, i1, i3, i0, i2];
  128. a == [];
  129. a = b.splice(10, 10);
  130. a == [];
  131. b = [i0, i1, i3, i0, i2];
  132. a = b.splice( -2, 2);
  133. b == [i0, i1, i3];
  134. a == [i0, i2];
  135. // toString
  136. var a = [new ClassWithToString(), new ClassWithToStringChild(), new ClassWithToStringChild2()];
  137. var comp = "ClassWithToString.toString(),ClassWithToString.toString(),ClassWithToStringChild2.toString()";
  138. a.toString() in [comp, "[" + comp + "]"];
  139. // unshift
  140. var a:Array<Null<Int>> = [];
  141. var b = a;
  142. a.unshift(1);
  143. a == b;
  144. a == [1];
  145. a.unshift(2);
  146. a == b;
  147. a == [2, 1];
  148. a.unshift(null);
  149. a == [null, 2, 1];
  150. // insert
  151. var a = [];
  152. a.insert(5, 1);
  153. a == [1];
  154. var a = [1, 2, 3];
  155. a.insert(1, 4);
  156. a == [1, 4, 2, 3];
  157. var a = [1, 2, 3];
  158. a.insert( -1, 4);
  159. a == [1, 2, 4, 3];
  160. a.insert( -2, 8);
  161. a == [1, 2, 8, 4, 3];
  162. a.insert ( -8, 9);
  163. a == [9, 1, 2, 8, 4, 3];
  164. // remove
  165. var i0 = new IntWrap(1);
  166. var i1 = new IntWrap(1);
  167. var i2 = new IntWrap(5);
  168. var i3 = new IntWrap(9);
  169. var i4 = new IntWrap(2);
  170. var a = [i4, i0, i1, i3, i0, i2];
  171. a.remove(i0) == true;
  172. a == [i4, i1, i3, i0, i2];
  173. a.remove(i0) == true;
  174. a == [i4, i1, i3, i2];
  175. a.remove(i0) == false;
  176. a == [i4, i1, i3, i2];
  177. var a = ["foo", "bar"];
  178. a.remove("foo") == true;
  179. a == ["bar"];
  180. var a = [i0, null, i1, null, null];
  181. a.remove(null) == true;
  182. a == [i0, i1, null, null];
  183. a.remove(null) == true;
  184. a == [i0, i1, null];
  185. a.remove(null) == true;
  186. a == [i0, i1];
  187. a.remove(null) == false;
  188. a == [i0, i1];
  189. // indexOf
  190. [].indexOf(10) == -1;
  191. [10].indexOf(10) == 0;
  192. [10, 10].indexOf(10) == 0;
  193. [2, 10].indexOf(10) == 1;
  194. [2, 5].indexOf(10) == -1;
  195. ["foo", "bar", "bar", "baz"].indexOf("bar") == 1;
  196. [1, 10, 10, 1].indexOf(10, 0) == 1;
  197. [1, 10, 10, 1].indexOf(10, 1) == 1;
  198. [1, 10, 10, 1].indexOf(10, 2) == 2;
  199. [1, 10, 10, 1].indexOf(10, 3) == -1;
  200. [1, 10, 10, 1].indexOf(10, 4) == -1;
  201. [1, 10, 10, 1].indexOf(10, 5) == -1;
  202. [1, 10, 10, 1].indexOf(10, -1) == -1;
  203. [1, 10, 10, 1].indexOf(10, -2) == 2;
  204. [1, 10, 10, 1].indexOf(10, -3) == 1;
  205. [1, 10, 10, 1].indexOf(10, -5) == 1;
  206. // lastIndexOf
  207. [].lastIndexOf(10) == -1;
  208. [10].lastIndexOf(10) == 0;
  209. [10, 10].lastIndexOf(10) == 1;
  210. [2, 10].lastIndexOf(10) == 1;
  211. [2, 5].lastIndexOf(10) == -1;
  212. ["foo", "bar", "bar", "baz"].lastIndexOf("bar") == 2;
  213. [1, 10, 10, 1].lastIndexOf(10, 4) == 2;
  214. [1, 10, 10, 1].lastIndexOf(10, 3) == 2;
  215. [1, 10, 10, 1].lastIndexOf(10, 2) == 2;
  216. [1, 10, 10, 1].lastIndexOf(10, 1) == 1;
  217. [1, 10, 10, 1].lastIndexOf(10, 0) == -1;
  218. [1, 10, 10, 1].lastIndexOf(10, -1) == 2;
  219. [1, 10, 10, 1].lastIndexOf(10, -2) == 2;
  220. [1, 10, 10, 1].lastIndexOf(10, -3) == 1;
  221. [1, 10, 10, 1].lastIndexOf(10, -4) == -1;
  222. [1, 10, 10, 1].lastIndexOf(10, -5) == -1;
  223. // copy
  224. var i0 = new IntWrap(1);
  225. var i1 = new IntWrap(1);
  226. var i2 = new IntWrap(5);
  227. var a = [i0, i1, i2];
  228. var b = a.copy();
  229. a != b;
  230. b == [i0, i1, i2];
  231. var a = [];
  232. var b = a.copy();
  233. a != b;
  234. b == [];
  235. // map
  236. [1, 2, 3].map(function(i) return i * 2) == [2, 4, 6];
  237. var a = [new IntWrap(1), new IntWrap(2)];
  238. var b = a.map(function(x) return x);
  239. a != b;
  240. b.length == a.length;
  241. a[0] == b[0];
  242. a[1] == b[1];
  243. var func = function(s) return s.toUpperCase();
  244. ["foo", "bar"].map(func) == ["FOO", "BAR"];
  245. [].map(func) == [];
  246. // filter
  247. [1, 2, 3, 4].filter(function(i) return i < 3) == [1, 2];
  248. [1, 2, 3, 4].filter(function(i) return true) == [1, 2, 3, 4];
  249. [1, 2, 3, 4].filter(function(i) return false) == [];
  250. [].filter(function(_) return true) == [];
  251. [].filter(function(_) return false) == [];
  252. var arr = [{id: 1}, {id: 2}, {id: 3}, {id: 4}, {id: 5}];
  253. arr = arr.filter(function(i) return i.id % 2 != 0);
  254. var values = [];
  255. for (a in arr) values.push(a.id);
  256. values == [1, 3, 5];
  257. #if !as3
  258. // check that map and filter work well on Dynamic as well
  259. var a : Dynamic = [0,1,2];
  260. var b : Dynamic = a.filter(function(x) return x & 1 == 0).map(function(x) return x * 10);
  261. b.length == 2;
  262. b[0] == 0;
  263. b[1] == 20;
  264. #end