/*******************************************************************************
* Copyright (c) 2011, 2016 itemis AG and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Matthias Wienand (itemis AG) - initial API and implementation
* Colin Sharples - contribution for Bugzilla #491402
*
*******************************************************************************/
package org.eclipse.gef.geometry.tests;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.eclipse.gef.geometry.euclidean.Angle;
import org.eclipse.gef.geometry.internal.utils.PrecisionUtils;
import org.eclipse.gef.geometry.planar.Point;
import org.junit.Test;
public class AngleTests {
private static final double PRECISION_FRACTION = TestUtils
.getPrecisionFraction();
private static final double UNRECOGNIZABLE_FRACTION = PRECISION_FRACTION
- PRECISION_FRACTION / 10;
@Test
public void test_constructors() {
Angle alpha = Angle.fromDeg(180);
assertTrue(alpha.equals(new Angle(Math.PI)));
assertTrue(alpha.equals(Angle.fromDeg(180)));
assertTrue(alpha.equals(Angle.fromRad(Math.PI)));
assertTrue(new Angle().equals(Angle.fromRad(0)));
}
@Test
public void test_copy() {
Angle alpha = Angle.fromRad(0.234);
assertTrue(alpha.equals(alpha.getCopy()));
assertTrue(alpha.equals(alpha.clone()));
assertTrue(alpha.getCopy().equals(alpha.clone()));
}
@Test
public void test_deg() {
Angle alpha = Angle.fromDeg(180);
Angle beta = new Angle(Math.PI);
assertTrue(PrecisionUtils.equal(180, alpha.deg()));
assertTrue(PrecisionUtils.equal(180, beta.deg()));
for (double rad = 0; rad <= 2 * Math.PI; rad += 0.1) {
assertTrue(Angle.fromDeg(Angle.fromRad(rad).deg())
.equals(Angle.fromRad(rad)));
}
}
@Test
public void test_equals() {
Angle alpha = new Angle(Math.PI);
Angle beta = new Angle(Math.PI);
Angle gamma = new Angle(0);
Angle delta = new Angle(2 * Math.PI);
assertTrue(alpha.equals(alpha));
assertTrue(alpha.equals(beta));
assertFalse(alpha.equals(gamma));
assertFalse(alpha.equals(delta));
assertTrue(gamma.equals(delta));
assertTrue(delta.equals(gamma));
assertFalse(alpha.equals(null));
assertFalse(alpha.equals(new Point()));
alpha = new Angle(UNRECOGNIZABLE_FRACTION / 2);
beta = new Angle(2 * Math.PI - UNRECOGNIZABLE_FRACTION / 2);
assertTrue(alpha.equals(beta));
assertTrue(beta.equals(alpha));
}
@Test
public void test_getAdded() {
Angle alpha = Angle.fromDeg(180);
Angle beta = new Angle(Math.PI);
assertTrue(alpha.getAdded(beta).equals(beta.getAdded(alpha)));
}
@Test
public void test_getDeltaCCW() throws Exception {
Angle alpha = Angle.fromDeg(270);
assertEquals(Angle.fromDeg(60), alpha.getDeltaCCW(Angle.fromDeg(210)));
assertEquals(Angle.fromDeg(210), alpha.getDeltaCCW(Angle.fromDeg(60)));
alpha = Angle.fromDeg(90);
assertEquals(Angle.fromDeg(120), alpha.getDeltaCCW(Angle.fromDeg(330)));
}
@Test
public void test_getDeltaCW() throws Exception {
Angle alpha = Angle.fromDeg(90);
assertEquals(Angle.fromDeg(60), alpha.getDeltaCW(Angle.fromDeg(150)));
assertEquals(Angle.fromDeg(210), alpha.getDeltaCW(Angle.fromDeg(300)));
alpha = Angle.fromDeg(270);
assertEquals(Angle.fromDeg(120), alpha.getDeltaCW(Angle.fromDeg(30)));
}
@Test
public void test_getMultiplied() {
Angle alpha = Angle.fromDeg(180);
assertTrue(alpha.getMultiplied(2).equals(Angle.fromDeg(360)));
}
@Test
public void test_isClockwise() throws Exception {
Angle alpha = Angle.fromDeg(90);
assertTrue(alpha.isClockwise(Angle.fromDeg(180)));
assertFalse(alpha.isClockwise(Angle.fromDeg(0)));
alpha = Angle.fromDeg(300);
assertTrue(alpha.isClockwise(Angle.fromDeg(60)));
assertFalse(alpha.isClockwise(Angle.fromDeg(140)));
// edge case - exactly 180 degrees is true
assertTrue(alpha.isClockwise(Angle.fromDeg(120)));
}
@Test
public void test_norm() {
Angle alpha = Angle.fromDeg(361);
Angle beta = Angle.fromDeg(1);
assertTrue(alpha.equals(beta));
assertTrue(PrecisionUtils.equal(alpha.deg(), beta.deg()));
assertTrue(PrecisionUtils.equal(alpha.rad(), beta.rad()));
}
@Test
public void test_opposite() {
Angle alpha = Angle.fromDeg(180);
assertTrue(alpha.equals(alpha.getOppositeFull()));
assertTrue(alpha.getOppositeSemi().equals(Angle.fromRad(0)));
}
@Test
public void test_set() {
Angle alpha = Angle.fromDeg(0);
alpha.setDeg(90);
assertTrue(PrecisionUtils.equal(alpha.deg(), 90));
alpha.setDeg(450);
assertTrue(PrecisionUtils.equal(alpha.deg(), 90));
alpha.setRad(Math.PI);
assertTrue(PrecisionUtils.equal(alpha.rad(), Math.PI));
alpha.setRad(3 * Math.PI);
assertTrue(PrecisionUtils.equal(alpha.rad(), Math.PI));
}
@Test
public void test_toString() {
Angle alpha = Angle.fromDeg(0);
assertEquals("Angle(0.0rad (0.0deg))", alpha.toString());
}
}