package util.test;

import util.PositionHelper;
import junit.framework.TestCase;
import com.buglabs.bug.module.gps.pub.LatLon;

/**
 * A JUnit test case for the PositionHelper class.
 * 
 * @author finsprings
 *
 */
public class PositionHelperTest extends TestCase {

	public final void testCalculateZeroDistance() {
		LatLon latLon1 = new LatLon();
		latLon1.latitude = 50.0;
		latLon1.longitude = 80.0;
		final double distance = PositionHelper.calculateDistance(latLon1, latLon1);
		assertEquals(0.0, distance, 0.0);
	}
	
	public final void testCalculateArbitraryDistance() {
		LatLon latLon1 = new LatLon();
		latLon1.latitude = 40.7486;
		latLon1.longitude = -73.9864;
		
		LatLon latLon2 = new LatLon();
		latLon2.latitude = -73.9864;
		latLon2.longitude = 40.7486;
		
		final double distance = PositionHelper.calculateDistance(latLon1, latLon2);
		assertEquals( 15098.0, distance, 2.0 );
	}
	
	public final void testCalculateInterestingDistance() {
		LatLon aberdeen = new LatLon();
		aberdeen.latitude = 57.15;
		aberdeen.longitude = -2.15;
		
		LatLon edinburgh = new LatLon();
		edinburgh.latitude = 55.95;
		edinburgh.longitude = -3.12;
		
		final double distance = PositionHelper.calculateDistance(aberdeen, edinburgh);
		assertEquals( 146.0, distance, 2.0 );
	}
	
	public final void testConvertZeroMiles() {
		final double miles = PositionHelper.kilometersToMiles( 0.0 );
		assertEquals( 0.0, miles, 0.0 );
	}
	
	public final void testConvertMiles() {
		final double miles = PositionHelper.kilometersToMiles( 146.0 );
		assertTrue( "Expected around 90 but got " + miles,
				Math.abs( miles - 90 ) < 2.0 );
	}
}