describe("About Arrays", function() {

  //We shall contemplate truth by testing reality, via spec expectations.
  it("should create arrays", function() {
    var emptyArray = [];
    expect(typeof(emptyArray)).toBe("object"); //A mistake? - http://javascript.crockford.com/remedial.html
    expect(emptyArray.length).toBe(0);

    var multiTypeArray = [0, 1, "two", function () { return 3; }, {value1: 4, value2: 5}, [6, 7]];
    expect(multiTypeArray[0]).toBe(0);
    expect(multiTypeArray[2]).toBe("two");
    expect(multiTypeArray[3]()).toBe(3);
    expect(multiTypeArray[4].value1).toBe(4);
    expect(multiTypeArray[4]["value2"]).toBe(5);
    expect(multiTypeArray[5][0]).toBe(6);
  });

  it("should understand array literals", function () {
    var array = [];
    expect(array).toEqual([]);

    array[0] = 1;
    expect(array).toEqual([1]);

    array[1] = 2;
    expect(array).toEqual([1, FILL_ME_IN]);

    array.push(3);
    expect(array).toEqual(FILL_ME_IN);
  });

  it("should understand array length", function () {
    var fourNumberArray = [1, 2, 3, 4];

    expect(fourNumberArray.length).toBe(FILL_ME_IN);
    fourNumberArray.push(5, 6);
    expect(fourNumberArray.length).toBe(FILL_ME_IN);

    var tenEmptyElementArray = new Array(10);
    expect(tenEmptyElementArray.length).toBe(FILL_ME_IN);

    tenEmptyElementArray.length = 5;
    expect(tenEmptyElementArray.length).toBe(FILL_ME_IN);
  });

  it("should slice arrays", function () {
    var array = ["peanut", "butter", "and", "jelly"];

    expect(array.slice(0, 1)).toEqual(FILL_ME_IN);
    expect(array.slice(0, 2)).toEqual(FILL_ME_IN);
    expect(array.slice(2, 2)).toEqual(FILL_ME_IN);
    expect(array.slice(2, 20)).toEqual(FILL_ME_IN);
    expect(array.slice(3, 0)).toEqual(FILL_ME_IN);
    expect(array.slice(3, 100)).toEqual(FILL_ME_IN);
    expect(array.slice(5, 1)).toEqual(FILL_ME_IN);
  });

  it("should know array references", function () {
    var array = [ "zero", "one", "two", "three", "four", "five" ];

    function passedByReference(refArray) {
        refArray[1] = "changed in function";
    }
    passedByReference(array);
    expect(array[1]).toBe(FILL_ME_IN);

    var assignedArray = array;
    assignedArray[5] = "changed in assignedArray";
    expect(array[5]).toBe(FILL_ME_IN);

    var copyOfArray = array.slice();
    copyOfArray[3] = "changed in copyOfArray";
    expect(array[3]).toBe(FILL_ME_IN);
  });

  it("should push and pop", function () {
    var array = [1, 2];
    array.push(3);

    expect(array).toEqual(FILL_ME_IN);

    var poppedValue = array.pop();
    expect(poppedValue).toBe(FILL_ME_IN);
    expect(array).toEqual(FILL_ME_IN);
  });

  it("should know about shifting arrays", function () {
    var array = [1, 2];

    array.unshift(3);
    expect(array).toEqual(FILL_ME_IN);

    var shiftedValue = array.shift();
    expect(shiftedValue).toEqual(FILL_ME_IN);
    expect(array).toEqual(FILL_ME_IN);
  });
});

@@ -893,26 +893,17 @@
 ual(%5B1, 
-FILL_ME_IN
+2
 %5D);%0A%0A   
@@ -940,34 +940,33 @@
 ay).toEqual(
-FILL_ME_IN
+%5B1, 2, 3%5D
 );%0A  %7D);%0A%0A  
@@ -1093,34 +1093,25 @@
 ength).toBe(
-FILL_ME_IN
+4
 );%0A    fourN
@@ -1169,34 +1169,25 @@
 ength).toBe(
-FILL_ME_IN
+6
 );%0A%0A    var 
@@ -1265,34 +1265,26 @@
 ength).toBe(
-FILL_ME_IN
+10
 );%0A%0A    tenE
@@ -1353,34 +1353,25 @@
 ength).toBe(
-FILL_ME_IN
+5
 );%0A  %7D);%0A%0A  
@@ -1499,34 +1499,34 @@
 1)).toEqual(
-FILL_ME_IN
+%5B%22peanut%22%5D
 );%0A    expec
@@ -1550,34 +1550,44 @@
 2)).toEqual(
-FILL_ME_IN
+%5B%22peanut%22, %22butter%22%5D
 );%0A    expec
@@ -1611,34 +1611,26 @@
 2)).toEqual(
-FILL_ME_IN
+%5B%5D
 );%0A    expec
@@ -1655,34 +1655,40 @@
 0)).toEqual(
-FILL_ME_IN
+%5B%22and%22, %22jelly%22%5D
 );%0A    expec
@@ -1712,34 +1712,26 @@
 0)).toEqual(
-FILL_ME_IN
+%5B%5D
 );%0A    expec
@@ -1757,34 +1757,33 @@
 0)).toEqual(
-FILL_ME_IN
+%5B%22jelly%22%5D
 );%0A    expec
@@ -1807,34 +1807,26 @@
 1)).toEqual(
-FILL_ME_IN
+%5B%5D
 );%0A  %7D);%0A%0A  

Complete koans 7-9 in 2.AboutArrays.js