/* * JaamSim Discrete Event Simulation * Copyright (C) 2012 Ausenco Engineering Canada Inc. * * 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. */ package com.jaamsim.math; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import org.junit.Test; public class TestVec2d extends TestVec { @Test public void testConstructors() { Vec2d vec2 = new Vec2d(); assertEqual(vec2, zero); vec2 = new Vec2d(seq); assertEqual(vec2, seq); vec2 = new Vec2d(1.0d, 2.0d); assertEqual(vec2, seq); } @Test public void testString() { Vec2d vec = new Vec2d(); vec.set2(seq); assertTrue("(1.0, 2.0)".equals(vec.toString())); vec.set2(nseq); assertTrue("(-1.0, -2.0)".equals(vec.toString())); vec.set2(allNaN); assertTrue("(NaN, NaN)".equals(vec.toString())); vec.set2(Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY); assertTrue("(Infinity, -Infinity)".equals(vec.toString())); } @Test public void testEquals() { Vec2d vec = new Vec2d(seq); assertTrue(vec.equals2(seq)); assertFalse(vec.equals2(one)); // Test -0.0 and 0.0 compare as equal vec.set2(-0.0d, -0.0d); assertTrue(vec.equals2(zero)); // any vec containing NaN will compare as not equal, even itself vec.set2(allNaN); assertFalse(vec.equals2(allNaN)); assertFalse(allNaN.equals2(allNaN)); } @Test public void testSet() { Vec2d vec; // Test set from another vec vec = new Vec2d(seq); vec.set2(zero); assertEqual(vec, zseq2); // Test set from doubles vec = new Vec2d(seq); vec.set2(0.0d, 0.0d); assertEqual(vec, zseq2); } @Test public void testAdd() { Vec2d vec; // Test add into vec vec = new Vec2d(seq); vec.add2(seq); assertEqual(vec, seqadd2); // Test set vec to sum vec = new Vec2d(seq); vec.add2(seq, seq); assertEqual(vec, seqadd2); } @Test public void testSub() { Vec2d vec; // Test sub into vec vec = new Vec2d(seq); vec.sub2(one); assertEqual(vec, seqsub2); // Test set vec to sub vec = new Vec2d(seq); vec.sub2(seq, one); assertEqual(vec, seqsub2); } @Test public void testScale() { Vec2d vec; vec = new Vec2d(seq); vec.scale2(2.0d); assertEqual(vec, scaleseq2); vec = new Vec2d(seq); vec.scale2(2.0d, seq); assertEqual(vec, scaleseq2); } @Test public void testInterpolation() { Vec2d vec; // Test add into vec vec = new Vec2d(seq); vec.interpolate2(seq, scaleseq4, 0.0d); assertEqual(vec, seq); vec.interpolate2(seq, scaleseq4, 1.0d); assertEqual(vec, scaleseq2); vec.interpolate2(seq, scaleseq4, 0.5d); assertEqual(vec, interpseq2); } @Test public void testMul() { Vec2d vec; // Test mul into vec vec = new Vec2d(seq); vec.mul2(seq); assertEqual(vec, seqmul2); // Test set vec to mul vec = new Vec2d(seq); vec.mul2(seq, seq); assertEqual(vec, seqmul2); } @Test public void testMin() { Vec2d vec; // Test mul into vec vec = new Vec2d(seq); vec.min2(nseq); assertEqual(vec, seqmin2); // Test set vec to mul vec = new Vec2d(seq); vec.min2(seq, nseq); assertEqual(vec, seqmin2); } @Test public void testMax() { Vec2d vec; // Test mul into vec vec = new Vec2d(nseq); vec.max2(seq); assertEqual(vec, seqmax2); // Test set vec to mul vec = new Vec2d(nseq); vec.max2(seq, nseq); assertEqual(vec, seqmax2); } @Test public void testDot() { Vec2d vec = new Vec2d(3.0d, 4.0d); assertTrue(vec.dot2(one) == 7.0d); assertTrue(vec.dot2(seq) == 11.0d); assertTrue(vec.mag2() == 5.0d); assertTrue(vec.magSquare2() == 25.0d); } @Test public void testNormalize() { Vec2d vec; vec = new Vec2d(one); vec.normalize2(); assertNear(vec.magSquare2(), 1.0d); assertNear(vec.mag2(), 1.0d); vec.normalize2(one); assertNear(vec.magSquare2(), 1.0d); assertNear(vec.mag2(), 1.0d); } @Test public void testMult() { Vec2d vec = new Vec2d(); vec.mult2(TestMat4d.seqOne, one); assertEqual(vec, mult2); vec.mult2(one, TestMat4d.seqOne); assertEqual(vec, mult2tpose); } @Test public void testNormDegen() { Vec2d vec; vec = new Vec2d(zero); vec.normalize2(); assertEqual(vec, yaxis); vec = new Vec2d(posInf); vec.normalize2(); assertEqual(vec, deg2posInf); vec = new Vec2d(negInf); vec.normalize2(); assertEqual(vec, deg2negInf); vec = new Vec2d(mixInf); vec.normalize2(); assertEqual(vec, deg2mixInf); vec = new Vec2d(mixInfNaN); vec.normalize2(); assertEqual(vec, deg2mixInfNaN); vec = new Vec2d(oneNaN); vec.normalize2(); assertEqual(vec, yaxis); // Test one-arg version vec = new Vec2d(); vec.normalize2(zero); assertEqual(vec, yaxis); vec = new Vec2d(); vec.normalize2(posInf); assertEqual(vec, yaxis); vec = new Vec2d(); vec.normalize2(negInf); assertEqual(vec, yaxis); vec = new Vec2d(); vec.normalize2(mixInf); assertEqual(vec, yaxis); vec = new Vec2d(); vec.normalize2(mixInfNaN); assertEqual(vec, yaxis); vec = new Vec2d(); vec.normalize2(oneNaN); assertEqual(vec, yaxis); } }