From 9debffd31d309a7fe4062241a731d5722f4199e0 Mon Sep 17 00:00:00 2001 From: Arne Juul Date: Tue, 14 Jul 2020 11:03:42 +0000 Subject: refactor and require unit for distance --- .../com/yahoo/geo/OneDegreeParserTestCase.java | 266 +++++++++++++++++++++ .../java/com/yahoo/geo/ParseDegreeTestCase.java | 266 --------------------- 2 files changed, 266 insertions(+), 266 deletions(-) create mode 100644 vespajlib/src/test/java/com/yahoo/geo/OneDegreeParserTestCase.java delete mode 100644 vespajlib/src/test/java/com/yahoo/geo/ParseDegreeTestCase.java (limited to 'vespajlib/src/test/java/com/yahoo/geo') diff --git a/vespajlib/src/test/java/com/yahoo/geo/OneDegreeParserTestCase.java b/vespajlib/src/test/java/com/yahoo/geo/OneDegreeParserTestCase.java new file mode 100644 index 00000000000..6a7ea5e826d --- /dev/null +++ b/vespajlib/src/test/java/com/yahoo/geo/OneDegreeParserTestCase.java @@ -0,0 +1,266 @@ +// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.geo; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +/** + * Tests for the OneDegreeParser class. + * + * @author arnej27959 + */ +public class OneDegreeParserTestCase { + + private static final double delta = 0.000000000001; + + private OneDegreeParser parser; + + private void checkLat(boolean ans, String to_parse, double expected) { + parser = new OneDegreeParser(ans, to_parse); + assertEquals(expected, parser.latitude, delta); + assertTrue(parser.foundLatitude); + assertFalse(parser.foundLongitude); + } + private void checkLon(boolean ans, String to_parse, double expected) { + parser = new OneDegreeParser(ans, to_parse); + assertEquals(expected, parser.longitude, delta); + assertFalse(parser.foundLatitude); + assertTrue(parser.foundLongitude); + } + private void checkLat(String to_parse, double expected) { + checkLat(true, to_parse, expected); + checkLat(false, to_parse, expected); + } + private void checkLon(String to_parse, double expected) { + checkLon(true, to_parse, expected); + checkLon(false, to_parse, expected); + } + + private void checkZeroLat(boolean ans, String to_parse) { + checkLat(ans, to_parse, 0d); + } + + private void checkZeroLon(boolean ans, String to_parse) { + checkLon(ans, to_parse, 0d); + } + + /** + * Tests different inputs that should all produce 0 or -0. + */ + @Test + public void testZero() { + checkZeroLat(true, "0"); + checkZeroLat(true, "0.0"); + checkZeroLat(true, "0o0.0"); + checkZeroLat(true, "0o0'0"); + checkZeroLat(true, "0\u00B00'0"); + + checkZeroLon(false, "0"); + checkZeroLon(false, "0.0"); + checkZeroLon(false, "0o0.0"); + checkZeroLon(false, "0o0'0"); + checkZeroLon(false, "0\u00B00'0"); + + checkZeroLat(false, "N0"); + checkZeroLat(false, "N0.0"); + checkZeroLat(false, "N0\u00B00'0"); + checkZeroLat(false, "S0"); + checkZeroLat(false, "S0.0"); + checkZeroLat(false, "S0o0'0"); + checkZeroLat(false, "S0\u00B00'0"); + + checkZeroLon(true, "E0"); + checkZeroLon(true, "E0.0"); + checkZeroLon(true, "E0\u00B00'0"); + checkZeroLon(true, "W0"); + checkZeroLon(true, "W0.0"); + checkZeroLon(true, "W0o0'0"); + checkZeroLon(true, "W0\u00B00'0"); + } + + /** + * Tests inputs that are close to 0. + */ + @Test + public void testNearZero() { + checkLat("N0.0001", 0.0001); + checkLat("S0.0001", -0.0001); + checkLon("E0.0001", 0.0001); + checkLon("W0.0001", -0.0001); + + checkLat("N0.000001", 0.000001); + checkLat("S0.000001", -0.000001); + checkLon("E0.000001", 0.000001); + checkLon("W0.000001", -0.000001); + + checkLat("N0\u00B00'1", 1/3600d); + checkLat("S0\u00B00'1", -1/3600d); + checkLon("E0\u00B00'1", 1/3600d); + checkLon("W0\u00B00'1", -1/3600d); + } + + /** + * Tests inputs that are close to latitude 90/-90 degrees and longitude 180/-180 degrees. + */ + @Test + public void testNearBoundary() { + checkLat("N89.9999", 89.9999); + checkLat("S89.9999", -89.9999); + checkLon("E179.9999", 179.9999); + checkLon("W179.9999", -179.9999); + + checkLat("N89.999999", 89.999999); + checkLat("S89.999999", -89.999999); + checkLon("E179.999999", 179.999999); + checkLon("W179.999999", -179.999999); + + checkLat("N89\u00B059'59", 89+59/60d+59/3600d); + checkLat("S89\u00B059'59", -(89+59/60d+59/3600d)); + checkLon("E179\u00B059'59", 179+59/60d+59/3600d); + checkLon("W179\u00B059'59", -(179+59/60d+59/3600d)); + } + + /** + * Tests inputs that are on latitude 90/-90 degrees and longitude 180/-180 degrees. + */ + @Test + public void testOnBoundary() { + checkLat("N90", 90d); + checkLat("N90\u00B00'0", 90d); + checkLat("S90", -90d); + checkLat("S90\u00B00'0", -90d); + + checkLon("E180", 180d); + checkLon("E180\u00B00'0", 180d); + checkLon("W180", -180d); + checkLon("W180\u00B00'0", -180d); + } + + /** + * Tests inputs that are above latitude 90/-90 degrees and longitude 180/-180 degrees. + */ + @Test + public void testAboveBoundary() { + String message = ""; + try { + parser = new OneDegreeParser(false, "N90.0001"); + } catch (IllegalArgumentException e) { + message = e.getMessage(); + } + assertEquals("out of range [-90,+90]: 90.0001", message); + try { + parser = new OneDegreeParser(false, "S90.0001"); + } catch (IllegalArgumentException e) { + message = e.getMessage(); + } + assertEquals("out of range [-90,+90]: -90.0001", message); + try { + parser = new OneDegreeParser(true, "E180.0001"); + } catch (IllegalArgumentException e) { + message = e.getMessage(); + } + assertEquals("out of range [-180,+180]: 180.0001", message); + try { + parser = new OneDegreeParser(true, "W180.0001"); + } catch (IllegalArgumentException e) { + message = e.getMessage(); + } + assertEquals("out of range [-180,+180]: -180.0001", message); + try { + parser = new OneDegreeParser(false, "N90.000001"); + } catch (IllegalArgumentException e) { + message = e.getMessage(); + } + assertEquals("out of range [-90,+90]: 90.000001", message); + try { + parser = new OneDegreeParser(false, "S90.000001"); + } catch (IllegalArgumentException e) { + message = e.getMessage(); + } + assertEquals("out of range [-90,+90]: -90.000001", message); + try { + parser = new OneDegreeParser(true, "E180.000001"); + } catch (IllegalArgumentException e) { + message = e.getMessage(); + } + assertEquals("out of range [-180,+180]: 180.000001", message); + try { + parser = new OneDegreeParser(true, "W180.000001"); + } catch (IllegalArgumentException e) { + message = e.getMessage(); + } + assertEquals("out of range [-180,+180]: -180.000001", message); + } + + /** + * Tests various inputs that contain syntax errors. + */ + @Test + public void testInputErrors() { + String message = ""; + try { + parser = new OneDegreeParser(false, "N90S90"); + } catch (IllegalArgumentException e) { + message = e.getMessage(); + } + assertEquals("already set direction once, cannot add direction: S", message); + try { + parser = new OneDegreeParser(false, "E120W120"); + } catch (IllegalArgumentException e) { + message = e.getMessage(); + } + assertEquals("already set direction once, cannot add direction: W", message); + try { + parser = new OneDegreeParser(false, "E"); + } catch (IllegalArgumentException e) { + message = e.getMessage(); + } + assertEquals("end of field without any number seen", message); + try { + parser = new OneDegreeParser(false, ""); + } catch (IllegalArgumentException e) { + message = e.getMessage(); + } + assertEquals("end of field without any number seen", message); + try { + parser = new OneDegreeParser(false, "NW25"); + } catch (IllegalArgumentException e) { + message = e.getMessage(); + } + assertEquals("already set direction once, cannot add direction: W", message); + try { + parser = new OneDegreeParser(false, "N16.25\u00B0"); + } catch (IllegalArgumentException e) { + message = e.getMessage(); + } + assertEquals("cannot have fractional degrees before degrees sign", message); + try { + parser = new OneDegreeParser(false, "N16\u00B022.40'"); + } catch (IllegalArgumentException e) { + message = e.getMessage(); + } + assertEquals("cannot have fractional minutes before minutes sign", message); + try { + parser = new OneDegreeParser(false, ""); + } catch (IllegalArgumentException e) { + message = e.getMessage(); + } + assertEquals("end of field without any number seen", message); + try { + parser = new OneDegreeParser(false, "Yahoo!"); + } catch (IllegalArgumentException e) { + message = e.getMessage(); + } + assertEquals("invalid character: Y", message); + try { + parser = new OneDegreeParser(false, "N63O025.105"); + } catch (IllegalArgumentException e) { + message = e.getMessage(); + } + assertEquals("invalid character: O", message); + } + +} diff --git a/vespajlib/src/test/java/com/yahoo/geo/ParseDegreeTestCase.java b/vespajlib/src/test/java/com/yahoo/geo/ParseDegreeTestCase.java deleted file mode 100644 index 3ca2d7ce4f8..00000000000 --- a/vespajlib/src/test/java/com/yahoo/geo/ParseDegreeTestCase.java +++ /dev/null @@ -1,266 +0,0 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.geo; - -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -/** - * Tests for the ParseDegree class. - * - * @author arnej27959 - */ -public class ParseDegreeTestCase { - - private static final double delta = 0.000000000001; - - private ParseDegree parser; - - private void checkLat(boolean ans, String to_parse, double expected) { - parser = new ParseDegree(ans, to_parse); - assertEquals(expected, parser.latitude, delta); - assertTrue(parser.foundLatitude); - assertFalse(parser.foundLongitude); - } - private void checkLon(boolean ans, String to_parse, double expected) { - parser = new ParseDegree(ans, to_parse); - assertEquals(expected, parser.longitude, delta); - assertFalse(parser.foundLatitude); - assertTrue(parser.foundLongitude); - } - private void checkLat(String to_parse, double expected) { - checkLat(true, to_parse, expected); - checkLat(false, to_parse, expected); - } - private void checkLon(String to_parse, double expected) { - checkLon(true, to_parse, expected); - checkLon(false, to_parse, expected); - } - - private void checkZeroLat(boolean ans, String to_parse) { - checkLat(ans, to_parse, 0d); - } - - private void checkZeroLon(boolean ans, String to_parse) { - checkLon(ans, to_parse, 0d); - } - - /** - * Tests different inputs that should all produce 0 or -0. - */ - @Test - public void testZero() { - checkZeroLat(true, "0"); - checkZeroLat(true, "0.0"); - checkZeroLat(true, "0o0.0"); - checkZeroLat(true, "0o0'0"); - checkZeroLat(true, "0\u00B00'0"); - - checkZeroLon(false, "0"); - checkZeroLon(false, "0.0"); - checkZeroLon(false, "0o0.0"); - checkZeroLon(false, "0o0'0"); - checkZeroLon(false, "0\u00B00'0"); - - checkZeroLat(false, "N0"); - checkZeroLat(false, "N0.0"); - checkZeroLat(false, "N0\u00B00'0"); - checkZeroLat(false, "S0"); - checkZeroLat(false, "S0.0"); - checkZeroLat(false, "S0o0'0"); - checkZeroLat(false, "S0\u00B00'0"); - - checkZeroLon(true, "E0"); - checkZeroLon(true, "E0.0"); - checkZeroLon(true, "E0\u00B00'0"); - checkZeroLon(true, "W0"); - checkZeroLon(true, "W0.0"); - checkZeroLon(true, "W0o0'0"); - checkZeroLon(true, "W0\u00B00'0"); - } - - /** - * Tests inputs that are close to 0. - */ - @Test - public void testNearZero() { - checkLat("N0.0001", 0.0001); - checkLat("S0.0001", -0.0001); - checkLon("E0.0001", 0.0001); - checkLon("W0.0001", -0.0001); - - checkLat("N0.000001", 0.000001); - checkLat("S0.000001", -0.000001); - checkLon("E0.000001", 0.000001); - checkLon("W0.000001", -0.000001); - - checkLat("N0\u00B00'1", 1/3600d); - checkLat("S0\u00B00'1", -1/3600d); - checkLon("E0\u00B00'1", 1/3600d); - checkLon("W0\u00B00'1", -1/3600d); - } - - /** - * Tests inputs that are close to latitude 90/-90 degrees and longitude 180/-180 degrees. - */ - @Test - public void testNearBoundary() { - checkLat("N89.9999", 89.9999); - checkLat("S89.9999", -89.9999); - checkLon("E179.9999", 179.9999); - checkLon("W179.9999", -179.9999); - - checkLat("N89.999999", 89.999999); - checkLat("S89.999999", -89.999999); - checkLon("E179.999999", 179.999999); - checkLon("W179.999999", -179.999999); - - checkLat("N89\u00B059'59", 89+59/60d+59/3600d); - checkLat("S89\u00B059'59", -(89+59/60d+59/3600d)); - checkLon("E179\u00B059'59", 179+59/60d+59/3600d); - checkLon("W179\u00B059'59", -(179+59/60d+59/3600d)); - } - - /** - * Tests inputs that are on latitude 90/-90 degrees and longitude 180/-180 degrees. - */ - @Test - public void testOnBoundary() { - checkLat("N90", 90d); - checkLat("N90\u00B00'0", 90d); - checkLat("S90", -90d); - checkLat("S90\u00B00'0", -90d); - - checkLon("E180", 180d); - checkLon("E180\u00B00'0", 180d); - checkLon("W180", -180d); - checkLon("W180\u00B00'0", -180d); - } - - /** - * Tests inputs that are above latitude 90/-90 degrees and longitude 180/-180 degrees. - */ - @Test - public void testAboveBoundary() { - String message = ""; - try { - parser = new ParseDegree(false, "N90.0001"); - } catch (IllegalArgumentException e) { - message = e.getMessage(); - } - assertEquals("out of range [-90,+90]: 90.0001", message); - try { - parser = new ParseDegree(false, "S90.0001"); - } catch (IllegalArgumentException e) { - message = e.getMessage(); - } - assertEquals("out of range [-90,+90]: -90.0001", message); - try { - parser = new ParseDegree(true, "E180.0001"); - } catch (IllegalArgumentException e) { - message = e.getMessage(); - } - assertEquals("out of range [-180,+180]: 180.0001", message); - try { - parser = new ParseDegree(true, "W180.0001"); - } catch (IllegalArgumentException e) { - message = e.getMessage(); - } - assertEquals("out of range [-180,+180]: -180.0001", message); - try { - parser = new ParseDegree(false, "N90.000001"); - } catch (IllegalArgumentException e) { - message = e.getMessage(); - } - assertEquals("out of range [-90,+90]: 90.000001", message); - try { - parser = new ParseDegree(false, "S90.000001"); - } catch (IllegalArgumentException e) { - message = e.getMessage(); - } - assertEquals("out of range [-90,+90]: -90.000001", message); - try { - parser = new ParseDegree(true, "E180.000001"); - } catch (IllegalArgumentException e) { - message = e.getMessage(); - } - assertEquals("out of range [-180,+180]: 180.000001", message); - try { - parser = new ParseDegree(true, "W180.000001"); - } catch (IllegalArgumentException e) { - message = e.getMessage(); - } - assertEquals("out of range [-180,+180]: -180.000001", message); - } - - /** - * Tests various inputs that contain syntax errors. - */ - @Test - public void testInputErrors() { - String message = ""; - try { - parser = new ParseDegree(false, "N90S90"); - } catch (IllegalArgumentException e) { - message = e.getMessage(); - } - assertEquals("already set direction once, cannot add direction: S", message); - try { - parser = new ParseDegree(false, "E120W120"); - } catch (IllegalArgumentException e) { - message = e.getMessage(); - } - assertEquals("already set direction once, cannot add direction: W", message); - try { - parser = new ParseDegree(false, "E"); - } catch (IllegalArgumentException e) { - message = e.getMessage(); - } - assertEquals("end of field without any number seen", message); - try { - parser = new ParseDegree(false, ""); - } catch (IllegalArgumentException e) { - message = e.getMessage(); - } - assertEquals("end of field without any number seen", message); - try { - parser = new ParseDegree(false, "NW25"); - } catch (IllegalArgumentException e) { - message = e.getMessage(); - } - assertEquals("already set direction once, cannot add direction: W", message); - try { - parser = new ParseDegree(false, "N16.25\u00B0"); - } catch (IllegalArgumentException e) { - message = e.getMessage(); - } - assertEquals("cannot have fractional degrees before degrees sign", message); - try { - parser = new ParseDegree(false, "N16\u00B022.40'"); - } catch (IllegalArgumentException e) { - message = e.getMessage(); - } - assertEquals("cannot have fractional minutes before minutes sign", message); - try { - parser = new ParseDegree(false, ""); - } catch (IllegalArgumentException e) { - message = e.getMessage(); - } - assertEquals("end of field without any number seen", message); - try { - parser = new ParseDegree(false, "Yahoo!"); - } catch (IllegalArgumentException e) { - message = e.getMessage(); - } - assertEquals("invalid character: Y", message); - try { - parser = new ParseDegree(false, "N63O025.105"); - } catch (IllegalArgumentException e) { - message = e.getMessage(); - } - assertEquals("invalid character: O", message); - } - -} -- cgit v1.2.3