]> gitweb.fperrin.net Git - GpsPrune.git/blobdiff - test/tim/prune/function/olc/OlcDecoderTest.java
Version 20.4, May 2021
[GpsPrune.git] / test / tim / prune / function / olc / OlcDecoderTest.java
diff --git a/test/tim/prune/function/olc/OlcDecoderTest.java b/test/tim/prune/function/olc/OlcDecoderTest.java
new file mode 100644 (file)
index 0000000..951a081
--- /dev/null
@@ -0,0 +1,75 @@
+package tim.prune.function.olc;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+import org.junit.jupiter.api.Test;
+
+/**
+ * JUnit tests for decoding of Open Location Codes (Pluscodes)
+ */
+class OlcDecoderTest
+{
+
+       @Test
+       void testDecodeStringsTooShort()
+       {
+               OlcArea area = OlcDecoder.decode(null);
+               assertEquals(area, null, "Decoding null gives null");
+               area = OlcDecoder.decode("");
+               assertEquals(area, null, "Decoding \"\" gives null");
+               area = OlcDecoder.decode("9");
+               assertEquals(area, null, "Decoding \"9\" gives null");
+               area = OlcDecoder.decode("9999999");
+               assertEquals(area, null, "Decoding \"9999999\" gives null");
+       }
+
+       @Test
+       void testDecodeStringsInvalid()
+       {
+               OlcArea area = OlcDecoder.decode("11111111");
+               assertEquals(area, null, "Decoding lots of 1s gives null");
+               area = OlcDecoder.decode("99999991");
+               assertEquals(area, null, "Decoding with a single 1 gives null");
+               area = OlcDecoder.decode("99999999");
+               assertNotEquals(area, null, "Decoding with all 9s gives non-null");
+               area = OlcDecoder.decode("00000000");
+               assertEquals(area, null, "Decoding with all padding gives null");
+               area = OlcDecoder.decode("99000000");
+               assertNotEquals(area, null, "Decoding with some padding gives non-null");
+       }
+
+       @Test
+       void testDecodeZeroes()
+       {
+               OlcArea area = OlcDecoder.decode("22000000");
+               assertNotEquals(area, null, "Decoding with padding gives non-null");
+               assertEquals(-90.0, area.minLat, 0.0, "South 90");
+               assertEquals(-70.0, area.maxLat, 0.0, "South 70");
+               assertEquals(-180.0, area.minLon, 0.0, "West 180");
+               assertEquals(-160.0, area.maxLon, 0.0, "West 160");
+       }
+
+       @Test
+       void testDecodeZeroes2()
+       {
+               OlcArea area = OlcDecoder.decode("22220000");
+               assertNotEquals(area, null, "Decoding with padding gives non-null");
+               assertEquals(-90.0, area.minLat, 0.0, "South 90");
+               assertEquals(-89.0, area.maxLat, 0.0, "South 89");
+               assertEquals(-180.0, area.minLon, 0.0, "West 180");
+               assertEquals(-179.0, area.maxLon, 0.0, "West 179");
+       }
+
+       @Test
+       void testMountainView()
+       {
+               OlcArea area = OlcDecoder.decode("6PH57VP3+PR6");
+               assertNotEquals(area, null, "Decoding with separator gives non-null");
+               System.out.println("Min lat: " + area.minLat);
+               System.out.println("Max lat: " + area.maxLat);
+               System.out.println("Min lon: " + area.minLon);
+               System.out.println("Max lon: " + area.maxLon);
+               assertTrue(area.maxLat > area.minLat, "latitude range");
+               assertTrue(area.maxLon > area.minLon, "longitude range");
+       }
+}