diff options
Diffstat (limited to 'src/test/java')
-rw-r--r-- | src/test/java/UnitsDatabaseTest.java | 67 |
1 files changed, 66 insertions, 1 deletions
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 @@ -70,6 +73,52 @@ public class UnitsDatabaseTest { 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. * * @since 2019-04-14 @@ -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<String> nameIterator = database.unitMap().keySet().iterator(); final Iterator<Entry<String, Unit>> 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<String, Unit> 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()); + } } /** |