// 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.Vec3Test'); goog.setTestOnly('goog.math.Vec3Test'); goog.require('goog.math.Coordinate3'); goog.require('goog.math.Vec3'); goog.require('goog.testing.jsunit'); function assertVec3Equals(a, b) { assertTrue(b + ' should be equal to ' + a, goog.math.Vec3.equals(a, b)); } function testVec3() { var v = new goog.math.Vec3(3.14, 2.78, -7.21); assertEquals(3.14, v.x); assertEquals(2.78, v.y); assertEquals(-7.21, v.z); } function testRandomUnit() { var a = goog.math.Vec3.randomUnit(); assertRoughlyEquals(1.0, a.magnitude(), 1e-10); } function testRandom() { var a = goog.math.Vec3.random(); assertTrue(a.magnitude() <= 1.0); } function testFromCoordinate3() { var a = new goog.math.Coordinate3(-2, 10, 4); var b = goog.math.Vec3.fromCoordinate3(a); assertEquals(-2, b.x); assertEquals(10, b.y); assertEquals(4, b.z); } function testClone() { var a = new goog.math.Vec3(1, 2, 5); var b = a.clone(); assertEquals(a.x, b.x); assertEquals(a.y, b.y); assertEquals(a.z, b.z); } function testMagnitude() { var a = new goog.math.Vec3(0, 10, 0); var b = new goog.math.Vec3(3, 4, 5); var c = new goog.math.Vec3(-4, 3, 8); assertEquals(10, a.magnitude()); assertEquals(Math.sqrt(50), b.magnitude()); assertEquals(Math.sqrt(89), c.magnitude()); } function testSquaredMagnitude() { var a = new goog.math.Vec3(-3, -4, -5); assertEquals(50, a.squaredMagnitude()); } function testScale() { var a = new goog.math.Vec3(1, 2, 3); a.scale(0.5); assertEquals(0.5, a.x); assertEquals(1, a.y); assertEquals(1.5, a.z); } function testInvert() { var a = new goog.math.Vec3(3, 4, 5); a.invert(); assertEquals(-3, a.x); assertEquals(-4, a.y); assertEquals(-5, a.z); } function testNormalize() { var a = new goog.math.Vec3(5, 5, 5); a.normalize(); assertRoughlyEquals(1.0, a.magnitude(), 1e-10); } function testAdd() { var a = new goog.math.Vec3(1, -1, 7); a.add(new goog.math.Vec3(3, 3, 3)); assertVec3Equals(new goog.math.Vec3(4, 2, 10), a); } function testSubtract() { var a = new goog.math.Vec3(1, -1, 4); a.subtract(new goog.math.Vec3(3, 3, 3)); assertVec3Equals(new goog.math.Vec3(-2, -4, 1), a); } function testEquals() { var a = new goog.math.Vec3(1, 2, 5); assertFalse(a.equals(null)); assertFalse(a.equals(new goog.math.Vec3(1, 3, 5))); assertFalse(a.equals(new goog.math.Vec3(2, 2, 2))); assertTrue(a.equals(a)); assertTrue(a.equals(new goog.math.Vec3(1, 2, 5))); } function testSum() { var a = new goog.math.Vec3(0.5, 0.25, 1.2); var b = new goog.math.Vec3(0.5, 0.75, -0.6); var c = goog.math.Vec3.sum(a, b); assertVec3Equals(new goog.math.Vec3(1, 1, 0.6), c); } function testDifference() { var a = new goog.math.Vec3(0.5, 0.25, 3); var b = new goog.math.Vec3(0.5, 0.75, 5); var c = goog.math.Vec3.difference(a, b); assertVec3Equals(new goog.math.Vec3(0, -0.5, -2), c); } function testDistance() { var a = new goog.math.Vec3(3, 4, 5); var b = new goog.math.Vec3(-3, -4, 5); assertEquals(10, goog.math.Vec3.distance(a, b)); } function testSquaredDistance() { var a = new goog.math.Vec3(3, 4, 5); var b = new goog.math.Vec3(-3, -4, 5); assertEquals(100, goog.math.Vec3.squaredDistance(a, b)); } function testVec3Equals() { assertTrue(goog.math.Vec3.equals(null, null, null)); assertFalse(goog.math.Vec3.equals(null, new goog.math.Vec3())); var a = new goog.math.Vec3(1, 3, 5); assertTrue(goog.math.Vec3.equals(a, a)); assertTrue(goog.math.Vec3.equals(a, new goog.math.Vec3(1, 3, 5))); assertFalse(goog.math.Vec3.equals(1, new goog.math.Vec3(3, 1, 5))); } function testDot() { var a = new goog.math.Vec3(0, 5, 2); var b = new goog.math.Vec3(3, 0, 5); assertEquals(10, goog.math.Vec3.dot(a, b)); var c = new goog.math.Vec3(-5, -5, 5); var d = new goog.math.Vec3(0, 7, -2); assertEquals(-45, goog.math.Vec3.dot(c, d)); } function testCross() { var a = new goog.math.Vec3(3, 0, 0); var b = new goog.math.Vec3(0, 2, 0); assertVec3Equals(new goog.math.Vec3(0, 0, 6), goog.math.Vec3.cross(a, b)); var c = new goog.math.Vec3(1, 2, 3); var d = new goog.math.Vec3(4, 5, 6); assertVec3Equals(new goog.math.Vec3(-3, 6, -3), goog.math.Vec3.cross(c, d)); } function testLerp() { var a = new goog.math.Vec3(0, 0, 0); var b = new goog.math.Vec3(10, 10, 10); for (var i = 0; i <= 10; i++) { var c = goog.math.Vec3.lerp(a, b, i / 10); assertEquals(i, c.x); assertEquals(i, c.y); assertEquals(i, c.z); } }