From 50a195ef78af5d15dd6e548d4d6928c281bbaac2 Mon Sep 17 00:00:00 2001 From: Adrien Hopkins Date: Fri, 3 May 2019 15:07:16 -0400 Subject: Added toString to UnitsDatabase and its helper classes. --- src/test/java/UnitsDatabaseTest.java | 67 +++++++++++++++++++++++++++++++++++- 1 file changed, 66 insertions(+), 1 deletion(-) (limited to 'src/test/java/UnitsDatabaseTest.java') diff --git a/src/test/java/UnitsDatabaseTest.java b/src/test/java/UnitsDatabaseTest.java index 9222740..6d2247f 100644 --- a/src/test/java/UnitsDatabaseTest.java +++ b/src/test/java/UnitsDatabaseTest.java @@ -19,6 +19,7 @@ package test.java; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; import java.util.Iterator; import java.util.Map; @@ -49,6 +50,8 @@ public class UnitsDatabaseTest { // used for testing expressions // J = U^2 * V / W^2 private static final LinearUnit J = SI.KILOGRAM.times(SI.METRE.toExponent(2)).dividedBy(SI.SECOND.toExponent(2)); + private static final LinearUnit K = SI.KELVIN; + private static final Unit NONLINEAR = new AbstractUnit(SI.METRE) { @Override @@ -69,6 +72,52 @@ public class UnitsDatabaseTest { private static final UnitPrefix AB = new DefaultUnitPrefix(7); private static final UnitPrefix BC = new DefaultUnitPrefix(11); + /** + * Confirms that operations that shouldn't function for infinite databases throw an {@code IllegalStateException}. + * + * @since 2019-05-03 + */ + @Test + public void testInfiniteSetExceptions() { + // load units + final UnitsDatabase infiniteDatabase = new UnitsDatabase(); + + infiniteDatabase.addUnit("J", J); + infiniteDatabase.addUnit("K", K); + + infiniteDatabase.addPrefix("A", A); + infiniteDatabase.addPrefix("B", B); + infiniteDatabase.addPrefix("C", C); + + { + boolean exceptionThrown = false; + try { + infiniteDatabase.unitMap().entrySet().toArray(); + } catch (final IllegalStateException e) { + exceptionThrown = true; + // pass! + } finally { + if (!exceptionThrown) { + fail("No IllegalStateException thrown"); + } + } + } + + { + boolean exceptionThrown = false; + try { + infiniteDatabase.unitMap().keySet().toArray(); + } catch (final IllegalStateException e) { + exceptionThrown = true; + // pass! + } finally { + if (!exceptionThrown) { + fail("No IllegalStateException thrown"); + } + } + } + } + /** * Test that prefixes correctly apply to units. * @@ -189,11 +238,15 @@ public class UnitsDatabaseTest { final UnitsDatabase database = new UnitsDatabase(); database.addUnit("J", J); + database.addUnit("K", K); database.addPrefix("A", A); database.addPrefix("B", B); database.addPrefix("C", C); + final int NUM_UNITS = database.unitMapPrefixless().size(); + final int NUM_PREFIXES = database.prefixMap().size(); + final Iterator nameIterator = database.unitMap().keySet().iterator(); final Iterator> entryIterator = database.unitMap().entrySet().iterator(); @@ -203,11 +256,12 @@ public class UnitsDatabaseTest { // loop 1000 times for (int i = 0; i < 1000; i++) { // expected length of next - if (unitsWithThisLengthSoFar >= (int) Math.pow(3, expectedLength - 1)) { + if (unitsWithThisLengthSoFar >= NUM_UNITS * (int) Math.pow(NUM_PREFIXES, expectedLength - 1)) { expectedLength++; unitsWithThisLengthSoFar = 0; } + // test that stuff is valid final String nextName = nameIterator.next(); final Unit nextUnit = database.getUnit(nextName); final Entry nextEntry = entryIterator.next(); @@ -218,6 +272,17 @@ public class UnitsDatabaseTest { unitsWithThisLengthSoFar++; } + + // test toString for consistency + final String entryIteratorString = entryIterator.toString(); + for (int i = 0; i < 3; i++) { + assertEquals(entryIteratorString, entryIterator.toString()); + } + + final String nameIteratorString = nameIterator.toString(); + for (int i = 0; i < 3; i++) { + assertEquals(nameIteratorString, nameIterator.toString()); + } } /** -- cgit v1.2.3