15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright (c) 2012 The Chromium Authors. All rights reserved.
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Use of this source code is governed by a BSD-style license that can be
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * found in the LICENSE file.
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) **/
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)window.runTests = function(log) {
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var run = window.calculatorTestRun.create();
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ---------------------------------------------------------------------------
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Test fixes for <http://crbug.com/156448>:
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test('Twenty eight can be divided by three', '28 / 3 = [9.3333333]');
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test('Twenty nine can be divided by three', '29 / 3 = [9.6666667]');
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test('Thirty can be divided by three', '30 / 3 = [10]');
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test('Thirty one can be divided by three', '31 / 3 = [10.333333]');
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test('Thirty two can be divided by three', '32 / 3 = [10.666667]');
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test('Thirty three can be divided by three', '33 / 3 = [11]');
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ---------------------------------------------------------------------------
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Test fixes for <http://crbug.com/156449>:
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // run.test('Equals without operator results in operand value',
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //          '123 = [123]');
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // run.test('Operations without operands uses default operands',
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //          '2 + = [[2 _ 2][_ + 2][][4 _ 4]]');
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(dharcourt): Test the display for the expected output.
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // run.test('Successive operators replace each other.',
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //          '123 + - * / [123 / _] and no previous [* + *]');
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ---------------------------------------------------------------------------
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Test fixes for <http://crbug.com/156450>:
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // run.test('Operand can be erased and replaced',
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //          '123 + 456 < < < < 789 = [789]');
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(dharcourt): Test the display for the expected output.
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // run.test('Operators can be erased and replaced.',
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //          '123 + 456 < < < < < * 2 = [246]');
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(dharcourt): Test the display for the expected output.
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // run.test('Erase is ignored after equals.', '123 + 456 = < [579]');
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // run.test('Erase is ignored after zero result.', '123 - 123 = < [9]');
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(dharcourt): Test the display for the expected output.
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // run.test('Erasing an operand makes it blank.',
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //          '123 + 456 < < < [_ + _]');
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ---------------------------------------------------------------------------
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Test fixes for <http://crbug.com/156451>:
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // run.test('Negation applies to zero', '~ [[-0]]');
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // run.test('Negation applies before input', '~ 123 = [[-123]]');
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // run.test('Negation applies after input is erased',
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //          '123 < < < ~ 456 [[-456]]');
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // run.test('Negation is preserved when input is erased',
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //          '123 ~ < < < 456 [[-456]]');
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // run.test('Negation supports small values',
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //          '0.0000001 ~ [[-0.0000001]]');
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // run.test('Addition resets negated zeros', '~ + [_ + [0]]');
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // run.test('Subtraction resets negated zeros', '~ - [_ - [0]]');
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // run.test('Multiplication resets negated zeros', '~ * [_ * [0]]');
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // run.test('Division resets negated zeros', '~ / [_ / [0]]');
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // run.test('Equals resets negated zeros', '~ = [0 _ [0]]');
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ---------------------------------------------------------------------------
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Test fixes for <http://crbug.com/156452>:
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(dharcourt): Test the display for the expected output.
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(dharcourt): Make the test utilities support 'error'.
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // run.test('Errors results are spelled out', '1 / 0 = [[error]]');
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // run.test('Addition treats errors as zero',
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //          '1 / 0 = [error] + [0 + [0]] 123 = [123]');
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // run.test('Subtraction treats errors as zero',
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //          '1 / 0 = [error] - [0 - [0]] 123 = [-123]');
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // run.test('Multiplication treats errors as zero',
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //          '1 / 0 = [error] * [0 * [0]] 123 = [0]');
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // run.test('Division treats errors as zero',
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //          '1 / 0 = [error] / [0 / [0]] 123 = [0]');
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // run.test('Equals treats errors as zero',
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //         '1 / 0 = [error] = [0]');
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ---------------------------------------------------------------------------
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Test fixes for <http://crbug.com/156453>:
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // run.test('Common operations are reversible',
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //          '1 / 3 * 3 = [[1]]');
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // run.test('Large numbers are displayed as exponentials',
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //          '12345678 * 10 = [[1.23456e8]]');
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // run.test('Small numbers are displayed as exponentials',
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //          '0.0000001 / 10 = [[1e-8]]');
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ---------------------------------------------------------------------------
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Other tests.
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(dharcourt): Organize and beef up these tests.
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(dharcourt): Test {nega,posi}tive {under,over}flows.
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test("Initialization", function(controller) {
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    run.verify(null, controller.model.accumulator, 'Accumulator');
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    run.verify(null, controller.model.operator, 'Operator');
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    run.verify(null, controller.model.operand, 'Operand');
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    run.verify(null, controller.model.defaults.operator, 'Default Operator');
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    run.verify(null, controller.model.defaults.operand, 'Defaults Operand');
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  });
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test("AC", '1 + 2 = [3] 4 A [[_ _ 0]]');
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test("back", '1 + 2 < [_ + _] < [_ _ _] < [_ _ 0]');
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(dharcourt@chromium.org): The previous lines should be:
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //   '1 + 2 < [_ + _] < [_ _ 0] < [_ _ 0]'
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(dharcourt@chromium.org): Test more AC, C, back
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test("Miscellaneous Test A",
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           '2 [_ _ 2] + [[2 _ 2][_ + _]] = [[2 _ 2][_ + _][][4 _ 4]]' +
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           '          + [[2 _ 2][_ + _][][4 _ 4][_ + _]]' +
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           '          = [[2 _ 2][_ + _][][4 _ 4][_ + _][][8 _ 8]]' +
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           '          = [[2 _ 2][_ + _][][4 _ 4][_ + _][][8 _ 8][][12 _ 12]]');
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(dharcourt@chromium.org): The previous lines should be:
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //     '2 [_ _ 2] + [[2 _ 2][_ + _]] = [[2 _ 2][_ + 2][][4 _ 4]]' +
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //     '          + [[2 _ 2][_ + 2][][4 _ 4][_ + _]]' +
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //     '          = [[2 _ 2][_ + 2][][4 _ 4][_ + 4][][8 _ 8]]' +
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //     '          = [[2 _ 2][_ + 2][][4 _ 4][_ + 4][][8 _ 8][][12 _ 12]]');
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test("Miscellaneous Test B", '2 * = [4] * [_ * _] = [16] = [64]');
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test("Miscellaneous Test C", '0.020202020 [_ _ 0.0202020==]');
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test("Miscellaneous Test D", '.2 [_ _ 0 .2]');
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test("Miscellaneous Test E", '0.00000014 [_ _ 0.0000001=]');
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test("Miscellaneous Test F", '0.10000004 [_ _ 0.1000000=]');
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test("Miscellaneous Test G", '0.12312312 [_ _ 0.1231231=]');
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test("Miscellaneous Test H", '1.231231234 [_ _ 1.2312312==]');
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test("Miscellaneous Test I", '123.1231234 [_ _ 123.12312==]');
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test("Miscellaneous Test J", '123123.1234 [_ _ 123123.12==]');
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test("Miscellaneous Test K", '12312312.34 [_ _ 12312312.==]');
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test("Miscellaneous Test L", '12312312.04 [_ _ 12312312.==]');
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test("Miscellaneous Test M", '1231231234 [_ _ 12312312==]');
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test("Miscellaneous Test N", '1 + 1 + [[1 _ 1][2 + 1][_ + _]] = [4]');
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test("Miscellaneous Test O", '1 + 1 [_ + 1] 2 [_ + 1 2]');
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test("Positive + Positive", '82959 + 4 = [82963]');
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test("Positive + Negative", '123 + 456~ = [-333]');
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test("Negative + Positive", '502~ + 385 = [-117]');
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test("Negative + Negative", '4296~ + 32~ = [-4328]');
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test("Positive + Zero", '23650 + 0 = [23650]');
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test("Negative + Zero", '489719~ + 0 = [-489719]');
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test("Zero + Positive", '0 + 4296 = [4296]');
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test("Zero + Negative", '0 + 322~ = [-322]');
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test("Zero + Zero", '0 + 0 = [0]');
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test("Addition Chain",
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           '+ 5 + 3~ + [2] 2~ + [0] 1~ + [-1] 3 + [2] 0 = [2]');
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test("Positive - Positive", '4534 - 327 = [4207]');
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test("Subtraction Chain",
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           '- 5 - [-5] 3~ - [-2] 2~ - [0] 1~ - [1] 3 - [-2] 0 = [-2]');
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test("Positive * Positive", '7459 * 660 = [4922940]');
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test("Multiplication Chain",
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           '* 5 = [0] 1 * [1] 5 * [5] 2~ ' +
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           '* [-10] 1.5 * [-15] 1~ * [15] 0 = [0]');
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test("Positive / Positive", '181 / 778 = [0.2326478]');
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test("Division Chain",
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           '/ 5 = [0] 1 / [1] 5 / [0.2] 2~ ' +
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           '/ [-0.1] 0.1 / [-1] 1~ / [1] 0 = [E]');
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test("Positive Decimal Plus Positive Decimal",
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           '7.48 + 8.2 = [15.68]');
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test("Decimals with Leading Zeros",
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           '0.0023 + 0.082 = [0.0843]');
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test("Addition and Subtraction Chain",
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           '4 + [4] 1055226 - [1055230] 198067 = [857163]');
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test("Multiplication and Division Chain",
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           '580 * [580] 544 / [315520] 64 = [4930]');
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test("Addition After Equals",
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           '5138 + 3351301 = [3356439] 550  + 62338 = [62888]');
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test("Missing First Operand in Addition", '+ 9701389 = [9701389]');
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test("Missing First Operand in Subtraction", '- 1770 = [-1770]');
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test("Missing First Operand in Multiplication", '* 65146 = [0]');
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test("Missing First Operand in Division", '/ 8 = [0]');
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test("Missing Second Operand in Addition",
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           '28637 + = [[28637 _ 28637][_ + _][][57274 _ 57274]]');
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           // TODO(dharcourt): Previous line should be:
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           //        '28637 + = [[28637 _ 28637][_ + 28637][][57274 _ 57274]');
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test("Missing Second Operand in Subtraction",
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           '52288 - = [[52288 _ 52288][_ - _][][0 _ 0]]');
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           // TODO(dharcourt): Previous line should be:
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           //        '52288 - = [[52288 _ 52288][_ - 52288][][0 _ 0]]');
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test("Missing Second Operand in Multiplication",
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           '17 * = [17 _ 17][_ * _][][289]');
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           // TODO(dharcourt): Previous line should be:
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           //        '17 * = [17 _ 17][_ * 17][][289]');
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test("Missing Second Operand in Division",
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           '47 / = [47 _ 47][_ / _][][1]');
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           // TODO(dharcourt): Previous line should be:
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           //        '47 / = [47 _ 47][_ / 47][][1]');
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test("Missing Last Operand in Addition and Subtraction Chain",
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           '8449 + 4205138 - [4213587] = [0]');
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* TODO(dharcourt): Fix & reactivate these:
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test("Leading zeros should be collapsed",
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           '0 [_ _ [0]] 0 [_ _ [0]] 0 [_ _ [0]] ' +
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           '2 [_ _ [2]] 0 [_ _ [2 0]] + [20 + _] ' +
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           '0 [20 + [0]] 0 [20 + [0]] 0 [20 + [0]] ' +
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           '2 [20 + [2]] 0 [20 + [2 0]] = [40 _ _]');
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run.test("Test utilities should correctly predict zeros collapse",
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           '000 [[0==]] 20 [[20]] + 000 [[0==]] 20 [[20]] = [40]' +
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           '00020 + 00020 = [40]');
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (log || typeof log === 'undefined')
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    run.log();
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return run;
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
259