package org.opensha2.geo;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertTrue;
import org.opensha2.util.Maths;
import org.junit.Before;
import org.junit.Test;
import com.google.common.collect.Lists;
import java.util.Collections;
import java.util.List;
@SuppressWarnings("javadoc")
public class LocationTest {
private static final double V = 10.0;
Location location;
@Before
public void setUp() throws Exception {
location = Location.create(V, V, V);
}
@Test
public final void create() {
Location loc = Location.create(V, V, V);
assertEquals(loc.lat(), V, 0);
assertEquals(loc.lon(), V, 0);
assertEquals(loc.depth(), V, 0);
loc = Location.create(V, V);
assertEquals(loc.depth(), 0, 0);
}
@Test(expected = IllegalArgumentException.class)
public final void create_IAE1() {
Location.create(90.1, 0);
}
@Test(expected = IllegalArgumentException.class)
public final void create_IAE2() {
Location.create(-90.1, 0);
}
@Test(expected = IllegalArgumentException.class)
public final void create_IAE3() {
Location.create(0, 360.0);
}
@Test(expected = IllegalArgumentException.class)
public final void create_IAE4() {
Location.create(0, -360.0);
}
@Test
public final void fromString() {
String s = "10.0,10.0,10.0";
assertEquals(Location.fromString(s), location);
}
@Test(expected = NumberFormatException.class)
public final void fromString_NFE() {
String s = "10.0,x,10.0";
Location.fromString(s);
}
@Test(expected = IndexOutOfBoundsException.class)
public final void fromString_IOOBE() {
String s = "10.0,10.0";
Location.fromString(s);
}
@Test
public final void depth() {
assertEquals(location.depth(), 10, 0);
}
@Test
public final void lat() {
assertEquals(location.lat(), 10, 0);
}
@Test
public final void lon() {
assertEquals(location.lon(), 10, 0);
}
@Test
public final void latRad() {
assertEquals(location.latRad(), V * Maths.TO_RAD, 0);
}
@Test
public final void lonRad() {
assertEquals(location.lonRad(), V * Maths.TO_RAD, 0);
}
@Test
public final void toStringTest() {
Location loc = Location.create(20, 30, 10);
String s = String.format("%.5f,%.5f,%.5f", loc.lon(), loc.lat(), loc.depth());
assertEquals(loc.toString(), s);
}
@Test
public final void equalsTest() {
assertEquals(location, location);
assertNotEquals(location, null);
assertNotEquals(location, "test");
// same values
Location loc = Location.create(V, V, V);
assertEquals(location, loc);
// different values
loc = Location.create(V + 0.1, V, V);
assertNotEquals(location, loc);
loc = Location.create(V, V + 0.1, V);
assertNotEquals(location, loc);
loc = Location.create(V, V, V + 0.1);
assertNotEquals(location, loc);
}
@Test
public final void hashCodeTest() {
Location other = Location.create(V, V, V);
assertEquals(location.hashCode(), other.hashCode());
Location locA = Location.create(45, 90, 25);
Location locB = Location.create(90, 45, 25);
assertNotEquals(locA.hashCode(), locB.hashCode());
}
@Test
public final void compareToTest() {
Location l0 = Location.create(20, -30);
Location l1 = Location.create(20, -50);
Location l2 = Location.create(-10, 10);
Location l3 = Location.create(-10, 30);
Location l4 = Location.create(-10, 30);
Location l5 = Location.create(40, 10);
List<Location> locList = Lists.newArrayList(l0, l1, l2, l3, l4, l5);
Collections.sort(locList);
assertTrue(locList.get(0) == l2);
assertTrue(locList.get(1) == l3);
assertTrue(locList.get(2) == l4);
assertTrue(locList.get(3) == l1);
assertTrue(locList.get(4) == l0);
assertTrue(locList.get(5) == l5);
}
}