diff options
Diffstat (limited to 'contexts/data/lib/closure-library/closure/goog/math/matrix_test.html')
-rw-r--r-- | contexts/data/lib/closure-library/closure/goog/math/matrix_test.html | 427 |
1 files changed, 0 insertions, 427 deletions
diff --git a/contexts/data/lib/closure-library/closure/goog/math/matrix_test.html b/contexts/data/lib/closure-library/closure/goog/math/matrix_test.html deleted file mode 100644 index ed16f60..0000000 --- a/contexts/data/lib/closure-library/closure/goog/math/matrix_test.html +++ /dev/null @@ -1,427 +0,0 @@ -<!DOCTYPE html> -<html> -<!-- -Copyright 2007 The Closure Library Authors. All Rights Reserved. - -Use of this source code is governed by the Apache License, Version 2.0. -See the COPYING file for details. ---> -<head> -<meta http-equiv="X-UA-Compatible" content="IE=edge"> -<title>Closure Unit Tests - goog.math.Matrix</title> -<script src="../base.js"></script> -<script> - goog.require('goog.math.Matrix'); - goog.require('goog.testing.jsunit'); -</script> -</head> -<body> -<pre> -<script> - - function testConstuctorWithGoodArray() { - var a1 = [ [1, 2], [2, 3], [4, 5] ]; - var m1 = new goog.math.Matrix(a1); - assertArrayEquals('1. Internal array should be the same', m1.toArray(), a1); - assertEquals(3, m1.getSize().height); - assertEquals(2, m1.getSize().width); - - var a2 = [ [-61, 45, 123], [11112, 343, 1235] ]; - var m2 = new goog.math.Matrix(a2); - assertArrayEquals('2. Internal array should be the same', m2.toArray(), a2); - assertEquals(2, m2.getSize().height); - assertEquals(3, m2.getSize().width); - - var a3 = [ [1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3], [4, 4, 4, 4] ]; - var m3 = new goog.math.Matrix(a3); - assertArrayEquals('3. Internal array should be the same', m3.toArray(), a3); - assertEquals(4, m3.getSize().height); - assertEquals(4, m3.getSize().width); - } - - - function testConstructorWithBadArray() { - assertThrows('1. All arrays should be of equal length', function() { - new goog.math.Matrix([[1, 2, 3], [1, 2], [1]]); - }); - - assertThrows('2. All arrays should be of equal length', function() { - new goog.math.Matrix([[1, 2], [1, 2], [1, 2, 3, 4]]); - }); - - assertThrows('3. Arrays should contain only numeric values', function() { - new goog.math.Matrix([[1, 2], [1, 2], [1, 'a']]); - }); - - assertThrows('4. Arrays should contain only numeric values', function() { - new goog.math.Matrix([[1, 2], [1, 2], [1, {a: 3}]]); - }); - - assertThrows('5. Arrays should contain only numeric values', function() { - new goog.math.Matrix([[1, 2], [1, 2], [1, [1, 2, 3]]]); - }); - } - - - function testConstructorWithGoodNumbers() { - var m1 = new goog.math.Matrix(2, 2); - assertEquals('Height should be 2', 2, m1.getSize().height); - assertEquals('Width should be 2', 2, m1.getSize().width); - - var m2 = new goog.math.Matrix(4, 2); - assertEquals('Height should be 4', 4, m2.getSize().height); - assertEquals('Width should be 2', 2, m2.getSize().width); - - var m3 = new goog.math.Matrix(4, 6); - assertEquals('Height should be 4', 4, m3.getSize().height); - assertEquals('Width should be 6', 6, m3.getSize().width); - } - - - function testConstructorWithBadNumbers() { - assertThrows('1. Negative argument should have errored', function() { - new goog.math.Matrix(-4, 6); - }); - - assertThrows('2. Negative argument should have errored', function() { - new goog.math.Matrix(4, -6); - }); - - assertThrows('3. Zero argument should have errored', function() { - new goog.math.Matrix(4, 0); - }); - - assertThrows('4. Zero argument should have errored', function() { - new goog.math.Matrix(0, 1); - }); - } - - - function testConstructorWithMatrix() { - var a1 = [ [1, 2], [2, 3], [4, 5] ]; - var m1 = new goog.math.Matrix(a1); - var m2 = new goog.math.Matrix(m1); - assertArrayEquals( - 'Internal arrays should be the same', m1.toArray(), m2.toArray()); - assertNotEquals( - 'Should be different objects', goog.getUid(m1), goog.getUid(m2)); - } - - - function testCreateIdentityMatrix() { - var m1 = goog.math.Matrix.createIdentityMatrix(3); - assertArrayEquals([[1, 0, 0], [0, 1, 0], [0, 0, 1]], m1.toArray()); - - var m2 = goog.math.Matrix.createIdentityMatrix(4); - assertArrayEquals( - [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]], m2.toArray()); - } - - - function testIsValidArrayWithGoodArrays() { - var fn = goog.math.Matrix.isValidArray; - assertTrue('2x2 array should be fine', fn([[1, 2], [3, 5]])); - assertTrue('3x2 array should be fine', fn([[1, 2, 3], [3, 5, 6]])); - assertTrue( - '3x3 array should be fine', fn([[1, 2, 3], [3, 5, 6], [10, 10, 10]])); - assertTrue('[[1]] should be fine', fn([[1]])); - assertTrue('1D array should work', fn([[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]])); - assertTrue('Negs and decimals should be ok', - fn([[0], [-4], [-10], [1.2345], [123.53]])); - assertTrue('Hex, Es and decimals are ok', fn([[0x100, 10E-2], [1.213, 213]])); - } - - - function testIsValidArrayWithBadArrays() { - var fn = goog.math.Matrix.isValidArray; - assertFalse('Arrays should have same size', fn([[1, 2], [3]])); - assertFalse('Arrays should have same size 2', fn([[1, 2], [3, 4, 5]])); - assertFalse('2D arrays are ok', fn([[1, 2], [3, 4], []])); - assertFalse('Values should be numeric', fn([[1, 2], [3, 'a']])); - assertFalse('Values can not be strings', fn([['bah'], ['foo']])); - assertFalse('Flat array not supported', fn([1, 2, 3, 4, 5])); - } - - - function testForEach() { - var m = new goog.math.Matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]); - var count = 0, sum = 0, xs = '', ys = ''; - goog.math.Matrix.forEach(m, function(val, x, y) { - count++; - sum += val; - xs += x; - ys += y; - }); - assertEquals('forEach should have visited every item', 9, count); - assertEquals('forEach should have summed all values', 45, sum); - assertEquals('Xs should have been visited in order', '000111222', xs); - assertEquals('Ys should have been visited sequentially', '012012012', ys); - } - - - function testMap() { - var m1 = new goog.math.Matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]); - var m2 = goog.math.Matrix.map(m1, function(val, x, y) { - return val + 1; - }); - assertArrayEquals([[2, 3, 4], [5, 6, 7], [8, 9, 10]], m2.toArray()); - } - - - function testSetValueAt() { - var m = new goog.math.Matrix(3, 3); - for (var x = 0; x < 3; x++) { - for (var y = 0; y < 3; y++) { - m.setValueAt(x, y, 3 * x - y); - } - } - assertArrayEquals([[0, -1, -2], [3, 2, 1], [6, 5, 4]], m.toArray()); - } - - - function testGetValueAt() { - var m = new goog.math.Matrix([[0, -1, -2], [3, 2, 1], [6, 5, 4]]); - for (var x = 0; x < 3; x++) { - for (var y = 0; y < 3; y++) { - assertEquals( - 'Value at (x, y) should equal 3x - y', - 3 * x - y, m.getValueAt(x, y)); - } - } - assertNull('Out of bounds value should be null', m.getValueAt(-1, 2)); - assertNull('Out of bounds value should be null', m.getValueAt(-1, 0)); - assertNull('Out of bounds value should be null', m.getValueAt(0, 4)); - } - - - function testSum1() { - var m1 = new goog.math.Matrix([[1, 1, 1], [2, 2, 2], [3, 3, 3]]); - var m2 = new goog.math.Matrix([[3, 3, 3], [2, 2, 2], [1, 1, 1]]); - assertArrayEquals('Sum should be all the 4s', - [[4, 4, 4], [4, 4, 4], [4, 4, 4]], m1.add(m2).toArray()); - assertArrayEquals('Addition should be commutative', - m1.add(m2).toArray(), m2.add(m1).toArray()); - } - - - function testSum2() { - var m1 = new goog.math.Matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]); - var m2 = new goog.math.Matrix([[-1, -2, -3], [-4, -5, -6], [-7, -8, -9]]); - assertArrayEquals('Sum should be all 0s', - [[0, 0, 0], [0, 0, 0], [0, 0, 0]], m1.add(m2).toArray()); - assertArrayEquals('Addition should be commutative', - m1.add(m2).toArray(), m2.add(m1).toArray()); - } - - - function testSubtract1() { - var m1 = new goog.math.Matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]); - var m2 = new goog.math.Matrix([[5, 5, 5], [5, 5, 5], [5, 5, 5]]); - - assertArrayEquals([[-4, -3, -2], [-1, 0, 1], [2, 3, 4]], - m1.subtract(m2).toArray()); - assertArrayEquals([[4, 3, 2], [1, 0, -1], [-2, -3, -4]], - m2.subtract(m1).toArray()); - } - - - function testSubtract2() { - var m1 = new goog.math.Matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]); - var m2 = new goog.math.Matrix([[-1, -2, -3], [-4, -5, -6], [-7, -8, -9]]); - assertArrayEquals([[2, 4, 6], [8, 10, 12], [14, 16, 18]], - m1.subtract(m2).toArray()); - assertArrayEquals([[-2, -4, -6], [-8, -10, -12], [-14, -16, -18]], - m2.subtract(m1).toArray()); - } - - - function testScalarMultiplication() { - var m1 = new goog.math.Matrix([[1, 1, 1], [2, 2, 2], [3, 3, 3]]); - assertArrayEquals( - [[2, 2, 2], [4, 4, 4], [6, 6, 6]], m1.multiply(2).toArray()); - assertArrayEquals( - [[3, 3, 3], [6, 6, 6], [9, 9, 9]], m1.multiply(3).toArray()); - assertArrayEquals( - [[4, 4, 4], [8, 8, 8], [12, 12, 12]], m1.multiply(4).toArray()); - - var m2 = new goog.math.Matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]); - assertArrayEquals( - [[2, 4, 6], [8, 10, 12], [14, 16, 18]], m2.multiply(2).toArray()); - } - - - function testMatrixMultiplication() { - var m1 = new goog.math.Matrix([[1, 2], [3, 4]]); - var m2 = new goog.math.Matrix([[3, 4], [5, 6]]); - // m1 * m2 - assertArrayEquals([[1 * 3 + 2 * 5, 1 * 4 + 2 * 6], - [3 * 3 + 4 * 5, 3 * 4 + 4 * 6]], - m1.multiply(m2).toArray()); - // m2 * m1 != m1 * m2 - assertArrayEquals([[3 * 1 + 4 * 3, 3 * 2 + 4 * 4], - [5 * 1 + 6 * 3, 5 * 2 + 6 * 4]], - m2.multiply(m1).toArray()); - var m3 = new goog.math.Matrix([[1, 2, 3, 4], - [5, 6, 7, 8]]); - var m4 = new goog.math.Matrix([[1, 2, 3], - [4, 5, 6], - [7, 8, 9], - [10, 11, 12]]); - // m3 * m4 - assertArrayEquals([[1 * 1 + 2 * 4 + 3 * 7 + 4 * 10, - 1 * 2 + 2 * 5 + 3 * 8 + 4 * 11, - 1 * 3 + 2 * 6 + 3 * 9 + 4 * 12], - [5 * 1 + 6 * 4 + 7 * 7 + 8 * 10, - 5 * 2 + 6 * 5 + 7 * 8 + 8 * 11, - 5 * 3 + 6 * 6 + 7 * 9 + 8 * 12]], - m3.multiply(m4).toArray()); - assertThrows("Matrix dimensions should not line up.", - function () { m4.multiply(m3); }); - } - - function testMatrixMultiplicationIsAssociative() { - var A = new goog.math.Matrix([[1, 2], [3, 4]]); - var B = new goog.math.Matrix([[3, 4], [5, 6]]); - var C = new goog.math.Matrix([[2, 7], [9, 1]]); - - assertArrayEquals('A(BC) == (AB)C', - A.multiply(B.multiply(C)).toArray(), - A.multiply(B).multiply(C).toArray()); - } - - - function testMatrixMultiplicationIsDistributive() { - var A = new goog.math.Matrix([[1, 2], [3, 4]]); - var B = new goog.math.Matrix([[3, 4], [5, 6]]); - var C = new goog.math.Matrix([[2, 7], [9, 1]]); - - assertArrayEquals('A(B + C) = AB + AC', - A.multiply(B.add(C)).toArray(), - A.multiply(B).add(A.multiply(C)).toArray()); - - assertArrayEquals('(A + B)C = AC + BC', - A.add(B).multiply(C).toArray(), - A.multiply(C).add(B.multiply(C)).toArray()); - } - - - function testTranspose() { - var m = new goog.math.Matrix([[1, 3, 1], [0, -6, 0]]); - var t = [[1, 0], [3, -6], [1, 0]]; - assertArrayEquals(t, m.getTranspose().toArray()); - } - - - function testAppendColumns() { - var m = new goog.math.Matrix([[1, 3, 2], [2, 0, 1], [5, 2, 2]]); - var b = new goog.math.Matrix([[4], [3], [1]]); - var result = [[1, 3, 2, 4], [2, 0, 1, 3], [5, 2, 2, 1]]; - assertArrayEquals(result, m.appendColumns(b).toArray()); - } - - - function testAppendRows() { - var m = new goog.math.Matrix([[1, 3, 2], [2, 0, 1], [5, 2, 2]]); - var b = new goog.math.Matrix([[4, 3, 1]]); - var result = [[1, 3, 2], [2, 0, 1], [5, 2, 2], [4, 3, 1]]; - assertArrayEquals(result, m.appendRows(b).toArray()); - } - - - function testSubmatrixByDeletion() { - var m = new goog.math.Matrix([[1, 2, 3, 4], [5, 6, 7, 8], - [9, 10, 11, 12], [13, 14, 15, 16]]); - var arr = [[1, 2, 3], [5, 6, 7], [13, 14, 15]]; - assertArrayEquals(arr, m.getSubmatrixByDeletion_(2, 3).toArray()); - } - - - function testMinor() { - var m = new goog.math.Matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]); - assertEquals(-3, m.getMinor_(0, 0)); - } - - - function testCofactor() { - var m = new goog.math.Matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]); - assertEquals(6, m.getCofactor_(0, 1)); - } - - - function testDeterminantForOneByOneMatrix() { - var m = new goog.math.Matrix([[3]]); - assertEquals(3, m.getDeterminant()); - } - - - function testDeterminant() { - var m = new goog.math.Matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]); - assertEquals(0, m.getDeterminant()); - } - - - function testGetSubmatrix() { - var m = new goog.math.Matrix([[ 2, -1, 0, 1, 0, 0], - [-1, 2, -1, 0, 1, 0], - [ 0, -1, 2, 0, 0, 1]]); - var sub1 = [[2, -1, 0], [-1, 2, -1], [0, -1, 2]]; - assertArrayEquals(sub1, - m.getSubmatrixByCoordinates_(0, 0, 2, 2).toArray()); - - var sub2 = [[1, 0, 0], [0, 1, 0], [0, 0, 1]]; - assertArrayEquals(sub2, m.getSubmatrixByCoordinates_(0, 3).toArray()); - } - - - function testGetReducedRowEchelonForm() { - var m = new goog.math.Matrix([[ 2, -1, 0, 1, 0, 0], - [-1, 2, -1, 0, 1, 0], - [ 0, -1, 2, 0, 0, 1]]); - - var expected = new goog.math.Matrix([[1, 0, 0, .75, .5, .25], - [0, 1, 0, .5, 1, .5 ], - [0, 0, 1, .25, .5, .75]]); - - assertTrue(expected.equals(m.getReducedRowEchelonForm())); - } - - - function testInverse() { - var m1 = new goog.math.Matrix([[ 2, -1, 0], - [-1, 2, -1], - [ 0, -1, 2]]); - var expected1 = new goog.math.Matrix([[.75, .5, .25], - [.5, 1, .5 ], - [.25, .5, .75]]); - assertTrue(expected1.equals(m1.getInverse())); - - var m2 = new goog.math.Matrix([[4, 8], - [7, -2]]); - var expected2 = new goog.math.Matrix([[.03125, .125 ], - [.10936, -.0625]]); - assertTrue(expected2.equals(m2.getInverse(), .0001)); - } - - - function testEquals() { - var a1 = new goog.math.Matrix([[1, 0, 0, .75, .5, .25], - [0, 1, 0, .5, 1, .5 ], - [0, 0, 1, .25, .5, .75]]); - - var a2 = new goog.math.Matrix([[1, 0, 0, .75, .5, .25], - [0, 1, 0, .5, 1, .5 ], - [0, 0, 1, .25, .5, .75]]); - - var a3 = new goog.math.Matrix([[1, 0, 0, .749, .5, .25], - [0, 1, 0, .5, 1, .5 ], - [0, 0, 1, .25, .5, .75]]); - - assertTrue(a1.equals(a2)); - assertTrue(a1.equals(a3, .01)); - assertFalse(a1.equals(a3, .001)); - } - -</script> - -</body> -</html> |