var assert = require('assert');
var assertEquals = assert.equal;
var assertDeepEquals = assert.deepEqual;
var assertThrows = assert['throws'];

require('../array-of.js');

assertEquals(Array.of.length, 0);
assertEquals(Array.propertyIsEnumerable('of'), false);

assertDeepEquals(Array.of(undefined), [undefined]);
assertDeepEquals(Array.of(null), [null]);
assertDeepEquals(Array.of(false), [false]);
assertDeepEquals(Array.of(-Infinity), [-Infinity]);
assertDeepEquals(Array.of(-0), [-0]);
assertDeepEquals(Array.of(+0), [+0]);
assertDeepEquals(Array.of(1), [1]);
assertDeepEquals(Array.of(1, 2, 3), [1, 2, 3]);
assertDeepEquals(Array.of(+Infinity), [+Infinity]);
assertDeepEquals(Array.of({ '0': 'a', '1': 'b', '2': 'c', 'length': 3 }), [{ '0': 'a', '1': 'b', '2': 'c', 'length': 3 }]);
assertDeepEquals(Array.of(undefined, null, false, -Infinity, -0, +0, 1, 2, +Infinity), [undefined, null, false, -Infinity, -0, +0, 1, 2, +Infinity]);

// TODO: call, apply

@@ -936,25 +936,1791 @@
 );%0A%0A
-// TODO: call, apply
+assertDeepEquals(Array.of.call(null, undefined), %5Bundefined%5D);%0AassertDeepEquals(Array.of.call(null, null), %5Bnull%5D);%0AassertDeepEquals(Array.of.call(null, false), %5Bfalse%5D);%0AassertDeepEquals(Array.of.call(null, -Infinity), %5B-Infinity%5D);%0AassertDeepEquals(Array.of.call(null, -0), %5B-0%5D);%0AassertDeepEquals(Array.of.call(null, +0), %5B+0%5D);%0AassertDeepEquals(Array.of.call(null, 1), %5B1%5D);%0AassertDeepEquals(Array.of.call(null, 1, 2, 3), %5B1, 2, 3%5D);%0AassertDeepEquals(Array.of.call(null, +Infinity), %5B+Infinity%5D);%0AassertDeepEquals(Array.of.call(null, %7B '0': 'a', '1': 'b', '2': 'c', 'length': 3 %7D), %5B%7B '0': 'a', '1': 'b', '2': 'c', 'length': 3 %7D%5D);%0AassertDeepEquals(Array.of.call(null, undefined, null, false, -Infinity, -0, +0, 1, 2, +Infinity), %5Bundefined, null, false, -Infinity, -0, +0, 1, 2, +Infinity%5D);%0AassertDeepEquals(Array.of.call(Object, 1, 2, 3), %7B '0': 1, '1': 2, '2': 3 %7D);%0A%0AassertDeepEquals(Array.of.apply(null, %5Bundefined%5D), %5Bundefined%5D);%0AassertDeepEquals(Array.of.apply(null, %5Bnull%5D), %5Bnull%5D);%0AassertDeepEquals(Array.of.apply(null, %5Bfalse%5D), %5Bfalse%5D);%0AassertDeepEquals(Array.of.apply(null, %5B-Infinity%5D), %5B-Infinity%5D);%0AassertDeepEquals(Array.of.apply(null, %5B-0%5D), %5B-0%5D);%0AassertDeepEquals(Array.of.apply(null, %5B+0%5D), %5B+0%5D);%0AassertDeepEquals(Array.of.apply(null, %5B1%5D), %5B1%5D);%0AassertDeepEquals(Array.of.apply(null, %5B1, 2, 3%5D), %5B1, 2, 3%5D);%0AassertDeepEquals(Array.of.apply(null, %5B+Infinity%5D), %5B+Infinity%5D);%0AassertDeepEquals(Array.of.apply(null, %5B%7B '0': 'a', '1': 'b', '2': 'c', 'length': 3 %7D%5D), %5B%7B '0': 'a', '1': 'b', '2': 'c', 'length': 3 %7D%5D);%0AassertDeepEquals(Array.of.apply(null, %5Bundefined, null, false, -Infinity, -0, +0, 1, 2, +Infinity%5D), %5Bundefined, null, false, -Infinity, -0, +0, 1, 2, +Infinity%5D);%0AassertDeepEquals(Array.of.apply(Object, %5B1, 2, 3%5D), %7B '0': 1, '1': 2, '2': 3 %7D);
 %0A

Add more tests