/test/binary/bytearray-tests.js

https://github.com/jdeolive/ringojs · JavaScript · 322 lines · 238 code · 70 blank · 14 comment · 10 complexity · 7a64602c66a1fa8cebdf59c1e9fc01d3 MD5 · raw file

  1. var assert = require('assert');
  2. include("binary");
  3. exports.testByteArrayConstructor = function() {
  4. var testArray = [1,2,3,4],
  5. b;
  6. // ByteArray()
  7. // New, empty ByteArray.
  8. b = new ByteArray();
  9. //assert.isTrue(b instanceof Binary, "not instanceof Binary");
  10. assert.isTrue(b instanceof ByteArray, "not instanceof ByteArray");
  11. assert.strictEqual(0, b.length);
  12. b.length = 123;
  13. assert.strictEqual(123, b.length);
  14. assert.strictEqual(0, b.get(4));
  15. // ByteArray(length)
  16. // New ByteArray filled with length zero bytes.
  17. b = new ByteArray(10);
  18. assert.strictEqual(10, b.length);
  19. for (var i = 0; i < 10; i++)
  20. assert.strictEqual(0, b.get(i));
  21. assert.isNaN(b.get(10));
  22. b.length = 234;
  23. assert.strictEqual(234, b.length);
  24. assert.strictEqual(0, b.get(10));
  25. assert.strictEqual(0, b.get(233));
  26. assert.isNaN(b.get(234));
  27. // ByteArray(byteString)
  28. // Copy contents of byteString.
  29. b = new ByteArray(new ByteString(testArray));
  30. assert.strictEqual(testArray.length, b.length);
  31. b.length = 345;
  32. assert.strictEqual(345, b.length);
  33. assert.strictEqual(1, b.get(0));
  34. assert.strictEqual(4, b.get(3));
  35. assert.strictEqual(0, b.get(4));
  36. // ByteArray(byteArray)
  37. // Copy byteArray.
  38. b = new ByteArray(new ByteArray(testArray));
  39. assert.strictEqual(testArray.length, b.length);
  40. b.length = 456;
  41. assert.strictEqual(456, b.length);
  42. assert.strictEqual(1, b.get(0));
  43. assert.strictEqual(4, b.get(3));
  44. assert.strictEqual(0, b.get(4));
  45. // ByteArray(arrayOfBytes)
  46. // Use numbers in arrayOfBytes as contents.
  47. // Throws an exception if any element is outside the range 0...255 (TODO).
  48. b = new ByteArray(testArray);
  49. assert.strictEqual(testArray.length, b.length);
  50. b.length = 567;
  51. assert.strictEqual(567, b.length);
  52. assert.strictEqual(1, b.get(0));
  53. assert.strictEqual(4, b.get(3));
  54. assert.strictEqual(0, b.get(4));
  55. };
  56. exports.testByteArrayResizing = function() {
  57. var b1 = new ByteArray([0,1,2,3,4,5,6]);
  58. assert.strictEqual(7, b1.length);
  59. assert.isNaN(b1.get(7));
  60. b1.length = 10;
  61. assert.strictEqual(10, b1.length, "Length should change to 10");
  62. assert.strictEqual(5, b1.get(5));
  63. assert.strictEqual(0, b1.get(7));
  64. b1.length = 3;
  65. assert.strictEqual(3, b1.length, "Length should change to 10");
  66. assert.strictEqual(0, b1.get(0));
  67. assert.isNaN(b1.get(4));
  68. b1.length = 9;
  69. assert.strictEqual(9, b1.length, "Length should change to 9");
  70. assert.strictEqual(0, b1.get(0));
  71. assert.strictEqual(0, b1.get(4));
  72. };
  73. exports.testToByteArray = function() {
  74. var b1 = new ByteArray([1,2,3]),
  75. b2 = b1.toByteArray();
  76. assert.isTrue(b2 instanceof ByteArray, "not instanceof ByteArray");
  77. assert.strictEqual(b1.length, b2.length);
  78. assert.strictEqual(b1.get(0), b2.get(0));
  79. assert.strictEqual(b1.get(2), b2.get(2));
  80. assert.strictEqual(1, b1.get(0));
  81. assert.strictEqual(1, b2.get(0));
  82. b1.set(0, 10);
  83. assert.strictEqual(10, b1.get(0));
  84. assert.strictEqual(1, b2.get(0));
  85. };
  86. exports.testToByteString = function() {
  87. var b1 = new ByteArray([1,2,3]),
  88. b2 = b1.toByteString();
  89. assert.strictEqual(b1.length, b2.length);
  90. assert.strictEqual(b1.get(0), b2.get(0));
  91. assert.strictEqual(b1.get(2), b2.get(2));
  92. assert.strictEqual(1, b1.get(0));
  93. assert.strictEqual(1, b2.get(0));
  94. b1.set(0, 10);
  95. assert.strictEqual(10, b1.get(0));
  96. assert.strictEqual(1, b2.get(0));
  97. };
  98. exports.testToArray = function() {
  99. var testArray = [0,1,254,255],
  100. b1 = new ByteArray(testArray),
  101. a1 = b1.toArray();
  102. assert.strictEqual(testArray.length, a1.length);
  103. for (var i = 0; i < testArray.length; i++)
  104. assert.strictEqual(testArray[i], a1[i]);
  105. };
  106. exports.testToString = function() {
  107. // the format of the resulting string isn't specified, but it shouldn't be the decoded string
  108. // TODO: is this an ok test?
  109. var testString = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"+
  110. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
  111. testArray = [];
  112. for (var i = 0; i < 128; i++) testArray.push(65);
  113. var resultString = new ByteArray(testArray).toString();
  114. assert.isTrue(resultString.length < 100);
  115. assert.isTrue(resultString !== testString);
  116. };
  117. exports.testIndexOf = function() {
  118. var b1 = new ByteArray([0,1,2,3,4,5,0,1,2,3,4,5]);
  119. assert.strictEqual(-1, b1.indexOf(-1));
  120. assert.strictEqual(0, b1.indexOf(0));
  121. assert.strictEqual(5, b1.indexOf(5));
  122. assert.strictEqual(-1, b1.indexOf(12));
  123. assert.strictEqual(6, b1.indexOf(0, 6));
  124. assert.strictEqual(11, b1.indexOf(5, 6));
  125. assert.strictEqual(-1, b1.indexOf(12, 6));
  126. assert.strictEqual(0, b1.indexOf(0, 0, 3));
  127. assert.strictEqual(-1, b1.indexOf(5, 0, 3));
  128. assert.strictEqual(-1, b1.indexOf(12, 0, 3));
  129. };
  130. exports.testLastIndexOf = function() {
  131. var b1 = new ByteArray([0,1,2,3,4,5,0,1,2,3,4,5]);
  132. assert.strictEqual(-1, b1.lastIndexOf(-1));
  133. assert.strictEqual(6, b1.lastIndexOf(0));
  134. assert.strictEqual(11, b1.lastIndexOf(5));
  135. assert.strictEqual(-1, b1.lastIndexOf(12));
  136. assert.strictEqual(0, b1.lastIndexOf(0, 0, 6));
  137. assert.strictEqual(5, b1.lastIndexOf(5, 0, 6));
  138. assert.strictEqual(-1, b1.lastIndexOf(12, 0, 6));
  139. assert.strictEqual(6, b1.lastIndexOf(0, 6, 9));
  140. assert.strictEqual(-1, b1.lastIndexOf(5, 6, 9));
  141. assert.strictEqual(-1, b1.lastIndexOf(12, 6, 9));
  142. };
  143. exports.testByteArrayReverse = function() {
  144. var testArray = [0,1,2,3,4,5,6];
  145. var b1 = new ByteArray(testArray),
  146. b2 = b1.reverse();
  147. assert.strictEqual(b1, b2);
  148. assert.strictEqual(b1.length, b2.length);
  149. for (var i = 0; i < testArray.length; i++)
  150. assert.strictEqual(testArray[i], b2.get(testArray.length-i-1));
  151. testArray = [0,1,2,3,4,5,6,7];
  152. b1 = new ByteArray(testArray);
  153. b2 = b1.reverse();
  154. assert.strictEqual(b1, b2);
  155. assert.strictEqual(b1.length, b2.length);
  156. for (var i = 0; i < testArray.length; i++)
  157. assert.strictEqual(testArray[i], b2.get(testArray.length-i-1));
  158. };
  159. exports.testByteArraySort = function() {
  160. var testArray = [];
  161. for (var i = 0; i < 1000; i++)
  162. testArray.push(Math.floor(Math.random()*256));
  163. var a = new ByteArray(testArray);
  164. a.sort();
  165. for (var i = 1; i < a.length; i++)
  166. assert.isTrue(a.get(i-1) <= a.get(i), "index="+i+"("+a.get(i-1)+","+a.get(i)+")");
  167. };
  168. exports.testByteArraySortCustom = function() {
  169. var testArray = [];
  170. for (var i = 0; i < 1000; i++)
  171. testArray.push(Math.floor(Math.random()*256));
  172. var a = new ByteArray(testArray);
  173. a.sort(function(o1, o2) { return o2-o1; });
  174. for (var i = 1; i < a.length; i++)
  175. assert.isTrue(a.get(i-1) >= a.get(i), "index="+i+"("+a.get(i-1)+","+a.get(i)+")");
  176. };
  177. exports.testSplit = function() {
  178. var b1 = new ByteArray([0,1,2,3,4,5]), a1;
  179. a1 = b1.split([]);
  180. assert.strictEqual(1, a1.length);
  181. assert.isTrue(a1[0] instanceof ByteArray);
  182. assert.strictEqual(6, a1[0].length);
  183. assert.strictEqual(0, a1[0].get(0));
  184. assert.strictEqual(5, a1[0].get(5));
  185. a1 = b1.split([2]);
  186. assert.strictEqual(2, a1.length);
  187. assert.isTrue(a1[0] instanceof ByteArray);
  188. assert.strictEqual(2, a1[0].length);
  189. assert.strictEqual(0, a1[0].get(0));
  190. assert.strictEqual(1, a1[0].get(1));
  191. assert.strictEqual(3, a1[1].length);
  192. assert.strictEqual(3, a1[1].get(0));
  193. assert.strictEqual(5, a1[1].get(2));
  194. a1 = b1.split([2], { includeDelimiter : true });
  195. assert.strictEqual(3, a1.length);
  196. assert.isTrue(a1[0] instanceof ByteArray);
  197. assert.strictEqual(2, a1[0].length);
  198. assert.strictEqual(0, a1[0].get(0));
  199. assert.strictEqual(1, a1[0].get(1));
  200. assert.strictEqual(1, a1[1].length);
  201. assert.strictEqual(2, a1[1].get(0));
  202. assert.strictEqual(3, a1[2].length);
  203. assert.strictEqual(3, a1[2].get(0));
  204. assert.strictEqual(5, a1[2].get(2));
  205. a1 = b1.split(new ByteArray([2,3]));
  206. assert.strictEqual(2, a1.length);
  207. assert.isTrue(a1[0] instanceof ByteArray);
  208. assert.strictEqual(2, a1[0].length);
  209. assert.strictEqual(0, a1[0].get(0));
  210. assert.strictEqual(1, a1[0].get(1));
  211. assert.strictEqual(2, a1[1].length);
  212. assert.strictEqual(4, a1[1].get(0));
  213. assert.strictEqual(5, a1[1].get(1));
  214. };
  215. exports.testByteArrayForEach = function() {
  216. var b = new ByteArray([2, 3, 4, 5]),
  217. log = [],
  218. item;
  219. var thisObj = {};
  220. b.forEach(function() {
  221. log.push({
  222. thisObj: this,
  223. args: arguments
  224. });
  225. }, thisObj);
  226. assert.strictEqual(4, log.length, "block called for each item");
  227. item = log[0];
  228. assert.isTrue(thisObj === item.thisObj, "block called with correct thisObj");
  229. assert.strictEqual(3, item.args.length, "block called with three args");
  230. assert.strictEqual(b.get(0), item.args[0], "block called with correct item 0");
  231. item = log[3];
  232. assert.strictEqual(b.get(3), item.args[0], "block called with correct item 3");
  233. };
  234. exports.testByteArrayConcat = function() {
  235. var b = new ByteArray();
  236. var b1 = b.concat(new ByteArray([1,2,3]));
  237. assert.strictEqual(3, b1.length);
  238. assert.strictEqual(1, b1.get(0));
  239. assert.strictEqual(2, b1.get(1));
  240. assert.strictEqual(3, b1.get(2));
  241. var b2 = b1.concat(new ByteString([4,5,6]));
  242. assert.strictEqual(6, b2.length);
  243. assert.strictEqual(1, b2.get(0));
  244. assert.strictEqual(3, b2.get(2));
  245. assert.strictEqual(4, b2.get(3));
  246. assert.strictEqual(6, b2.get(5));
  247. var b3 = b2.concat(b, b1, b2, new ByteString(), new ByteArray());
  248. assert.strictEqual(b.length + b1.length + b2.length + b2.length, b3.length);
  249. };
  250. if (require.main === module.id) {
  251. run(exports);
  252. }