// This file is part of www.nand2tetris.org // and the book "The Elements of Computing Systems" // by Nisan and Schocken, MIT Press. // File name: projects/11/ComplexArrays/Main.jack /** * Performs several complex array processing tests. * For each test, the expected result is printed, along with the * actual result. In each test, the two results should be equal. */ class Main { function void main() { var Array a, b, c; let a = Array.new(10); let b = Array.new(5); let c = Array.new(1); let a[3] = 2; let a[4] = 8; let a[5] = 4; let b[a[3]] = a[3] + 3; // b[2] = 5 let a[b[a[3]]] = a[a[5]] * b[((7 - a[3]) - Main.double(2)) + 1]; // a[5] = 8 * 5 = 40 let c[0] = null; let c = c[0]; do Output.printString("Test 1: expected result: 5; actual result: "); do Output.printInt(b[2]); do Output.println(); do Output.printString("Test 2: expected result: 40; actual result: "); do Output.printInt(a[5]); do Output.println(); do Output.printString("Test 3: expected result: 0; actual result: "); do Output.printInt(c); do Output.println(); let c = null; if (c = null) { do Main.fill(a, 10); let c = a[3]; let c[1] = 33; let c = a[7]; let c[1] = 77; let b = a[3]; let b[1] = b[1] + c[1]; // b[1] = 33 + 77 = 110; } do Output.printString("Test 4: expected result: 77; actual result: "); do Output.printInt(c[1]); do Output.println(); do Output.printString("Test 5: expected result: 110; actual result: "); do Output.printInt(b[1]); do Output.println(); return; } function int double(int a) { return a * 2; } function void fill(Array a, int size) { while (size > 0) { let size = size - 1; let a[size] = Array.new(3); } return; } }