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"); } }