package cgeo.geocaching.test;

import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.geopoint.Geopoint.GeopointException;

import android.test.AndroidTestCase;

import junit.framework.Assert;

public class GeopointTest extends AndroidTestCase {

    public void testCreation() {
        final Geopoint gp = new Geopoint(48.2, 3.5);
        Assert.assertEquals(48.2, gp.getLatitude(), 1e-8);
        Assert.assertEquals(3.5, gp.getLongitude(), 1e-8);
    }

    public void testCreationAtLimit() {
        // No exception should be raised at limits.
        final Geopoint gp1 = new Geopoint(90.0, 10.0);
        Assert.assertEquals(90, gp1.getLatitude(), 1e-8);

        final Geopoint gp2 = new Geopoint(-90.0, 10.0);
        Assert.assertEquals(-90, gp2.getLatitude(), 1e-8);

        final Geopoint gp3 = new Geopoint(10.0, 180.0);
        Assert.assertEquals(180, gp3.getLongitude(), 1e-8);

        // 180 should be preferred to -180
        final Geopoint gp4 = new Geopoint(10.0, -180.0);
        Assert.assertEquals(180, gp4.getLongitude(), 1e-8);
    }

    private static void createShouldFail(final double lat, final double lon) {
        try {
            final Geopoint gp = new Geopoint(lat, lon);
            Assert.fail("creation should fail: " + gp);
        } catch (GeopointException e) {
            // Success
        }
    }

    public void testCreationFails() {
        createShouldFail(90.1, 0.0);
        createShouldFail(-90.1, 0.0);
        createShouldFail(0.0, 180.1);
        createShouldFail(0.0, -180.1);
    }

    public void testEqual() {
        final Geopoint gp1 = new Geopoint(48.2, 2.31);
        Assert.assertTrue(gp1.equals(gp1));
        final Geopoint gp2 = new Geopoint(48.3, 2.31);
        Assert.assertFalse(gp1.equals(gp2));
    }

    public void testCreateE6() {
        final Geopoint gp1 = new Geopoint(48.2, 2.34);
        final Geopoint gp2 = new Geopoint(48200000, 2340000);
        Assert.assertTrue(gp1.isEqualTo(gp2, 1e-6));
    }

    public void testGetE6() {
        final Geopoint gp = new Geopoint(41.2, -3.4);
        Assert.assertEquals(41200000.0, gp.getLatitudeE6(), 1e-6);
        Assert.assertEquals(-3400000.0, gp.getLongitudeE6(), 1e-6);
    }

    public void testBearingDistance() {
        final Geopoint gp1 = new Geopoint(-30.4, -1.2);
        final Geopoint gp2 = new Geopoint(-30.1, -2.3);

        final float d12 = gp1.distanceTo(gp2);
        Assert.assertEquals(110.967995, d12, 1e-6);
        Assert.assertEquals(d12, gp2.distanceTo(gp1), 1e-6);

        // Bearing in both directions cannot be added, as this is
        // the initial bearing of the path in both cases.
        final float b12 = gp1.bearingTo(gp2);
        Assert.assertEquals(287.162, gp1.bearingTo(gp2), 1e-3);
        Assert.assertEquals(107.715, gp2.bearingTo(gp1), 1e-3);
    }

}

@@ -2663,54 +2663,8 @@
 es.%0A
-        final float b12 = gp1.bearingTo(gp2);%0A
     

Remove unused local variable in test