// Copyright 2008 The Closure Library Authors. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS-IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. goog.provide('goog.math.Coordinate3Test'); goog.setTestOnly('goog.math.Coordinate3Test'); goog.require('goog.math.Coordinate3'); goog.require('goog.testing.jsunit'); function assertCoordinate3Equals(a, b) { assertTrue( b + ' should be equal to ' + a, goog.math.Coordinate3.equals(a, b)); } function testCoordinate3MissingXYZ() { var noXYZ = new goog.math.Coordinate3(); assertEquals(0, noXYZ.x); assertEquals(0, noXYZ.y); assertEquals(0, noXYZ.z); assertCoordinate3Equals(noXYZ, new goog.math.Coordinate3()); } function testCoordinate3MissingYZ() { var noYZ = new goog.math.Coordinate3(10); assertEquals(10, noYZ.x); assertEquals(0, noYZ.y); assertEquals(0, noYZ.z); assertCoordinate3Equals(noYZ, new goog.math.Coordinate3(10)); } function testCoordinate3MissingZ() { var noZ = new goog.math.Coordinate3(10, 20); assertEquals(10, noZ.x); assertEquals(20, noZ.y); assertEquals(0, noZ.z); assertCoordinate3Equals(noZ, new goog.math.Coordinate3(10, 20)); } function testCoordinate3IntegerValues() { var intCoord = new goog.math.Coordinate3(10, 20, -19); assertEquals(10, intCoord.x); assertEquals(20, intCoord.y); assertEquals(-19, intCoord.z); assertCoordinate3Equals(intCoord, new goog.math.Coordinate3(10, 20, -19)); } function testCoordinate3FloatValues() { var floatCoord = new goog.math.Coordinate3(10.5, 20.897, -71.385); assertEquals(10.5, floatCoord.x); assertEquals(20.897, floatCoord.y); assertEquals(-71.385, floatCoord.z); assertCoordinate3Equals( floatCoord, new goog.math.Coordinate3(10.5, 20.897, -71.385)); } function testCoordinate3OneNonNumericValue() { var dim5 = new goog.math.Coordinate3('ten', 1000, 85); assertTrue(isNaN(dim5.x)); assertEquals(1000, dim5.y); assertEquals(85, dim5.z); } function testCoordinate3AllNonNumericValues() { var nonNumeric = new goog.math.Coordinate3('ten', {woop: 'test'}, Math.sqrt(-1)); assertTrue(isNaN(nonNumeric.x)); assertTrue(isNaN(nonNumeric.y)); assertTrue(isNaN(nonNumeric.z)); } function testCoordinate3Origin() { var origin = new goog.math.Coordinate3(0, 0, 0); assertEquals(0, origin.x); assertEquals(0, origin.y); assertEquals(0, origin.z); assertCoordinate3Equals(origin, new goog.math.Coordinate3(0, 0, 0)); } function testCoordinate3Clone() { var c = new goog.math.Coordinate3(); assertCoordinate3Equals(c, c.clone()); c.x = -12; c.y = 13; c.z = 5; assertCoordinate3Equals(c, c.clone()); } function testToString() { assertEquals('(0, 0, 0)', new goog.math.Coordinate3().toString()); assertEquals('(1, 0, 0)', new goog.math.Coordinate3(1).toString()); assertEquals('(1, 2, 0)', new goog.math.Coordinate3(1, 2).toString()); assertEquals('(0, 0, 0)', new goog.math.Coordinate3(0, 0, 0).toString()); assertEquals('(1, 2, 3)', new goog.math.Coordinate3(1, 2, 3).toString()); assertEquals('(-4, 5, -3)', new goog.math.Coordinate3(-4, 5, -3).toString()); assertEquals( '(11.25, -71.935, 2.8)', new goog.math.Coordinate3(11.25, -71.935, 2.8).toString()); } function testEquals() { var a = new goog.math.Coordinate3(3, 4, 5); var b = new goog.math.Coordinate3(3, 4, 5); var c = new goog.math.Coordinate3(-3, 4, -5); assertTrue(goog.math.Coordinate3.equals(null, null)); assertFalse(goog.math.Coordinate3.equals(a, null)); assertTrue(goog.math.Coordinate3.equals(a, a)); assertTrue(goog.math.Coordinate3.equals(a, b)); assertFalse(goog.math.Coordinate3.equals(a, c)); } function testCoordinate3Distance() { var a = new goog.math.Coordinate3(-2, -3, 1); var b = new goog.math.Coordinate3(2, 0, 1); assertEquals(5, goog.math.Coordinate3.distance(a, b)); } function testCoordinate3SquaredDistance() { var a = new goog.math.Coordinate3(7, 11, 1); var b = new goog.math.Coordinate3(3, -1, 1); assertEquals(160, goog.math.Coordinate3.squaredDistance(a, b)); } function testCoordinate3Difference() { var a = new goog.math.Coordinate3(7, 11, 1); var b = new goog.math.Coordinate3(3, -1, 1); assertCoordinate3Equals( goog.math.Coordinate3.difference(a, b), new goog.math.Coordinate3(4, 12, 0)); } function testToArray() { var a = new goog.math.Coordinate3(7, 11, 1); var b = a.toArray(); assertEquals(b.length, 3); assertEquals(b[0], 7); assertEquals(b[1], 11); assertEquals(b[2], 1); var c = new goog.math.Coordinate3('abc', 'def', 'xyz'); var result = c.toArray(); assertTrue(isNaN(result[0])); assertTrue(isNaN(result[1])); assertTrue(isNaN(result[2])); } function testFromArray() { var a = [1, 2, 3]; var b = goog.math.Coordinate3.fromArray(a); assertEquals('(1, 2, 3)', b.toString()); var c = [1, 2]; var d = goog.math.Coordinate3.fromArray(c); assertEquals('(1, 2, 0)', d.toString()); var e = [1]; var f = goog.math.Coordinate3.fromArray(e); assertEquals('(1, 0, 0)', f.toString()); var g = []; var h = goog.math.Coordinate3.fromArray(g); assertEquals('(0, 0, 0)', h.toString()); var tooLong = [1, 2, 3, 4, 5, 6]; assertThrows( 'Error should be thrown attempting to convert an invalid type.', goog.partial(goog.math.Coordinate3.fromArray, tooLong)); }