summaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
Diffstat (limited to 'src/test')
-rw-r--r--src/test/java/sevenUnits/unit/UnitDatabaseTest.java68
-rw-r--r--src/test/resources/test-dimensionfile-invalid1.txt3
-rw-r--r--src/test/resources/test-dimensionfile-invalid2.txt1
-rw-r--r--src/test/resources/test-dimensionfile-invalid3.txt5
-rw-r--r--src/test/resources/test-dimensionfile-valid1.txt12
5 files changed, 87 insertions, 2 deletions
diff --git a/src/test/java/sevenUnits/unit/UnitDatabaseTest.java b/src/test/java/sevenUnits/unit/UnitDatabaseTest.java
index 7612fc5..ed3b6b5 100644
--- a/src/test/java/sevenUnits/unit/UnitDatabaseTest.java
+++ b/src/test/java/sevenUnits/unit/UnitDatabaseTest.java
@@ -73,6 +73,23 @@ class UnitDatabaseTest {
private static final UnitPrefix BC = UnitPrefix.valueOf(11);
/**
+ * Loads the dimensionfile at src/test/resources/[path] to the database
+ * {@code loadTo}.
+ *
+ * @param loadTo database to load to
+ * @param path path of file to load
+ * @since 2021-10-04
+ */
+ private static void loadDimensionFile(UnitDatabase loadTo, String path) {
+ try (final InputStream testFile = UnitDatabaseTest.class
+ .getResourceAsStream(path)) {
+ loadTo.loadDimensionsFromStream(testFile);
+ } catch (final IOException e) {
+ fail(e.getClass() + " occurred upon loading file \"" + path + "\".");
+ }
+ }
+
+ /**
* Loads the unitfile at src/test/resources/[path] to the database
* {@code loadTo}.
*
@@ -141,6 +158,27 @@ class UnitDatabaseTest {
}
/**
+ * A bunch of tests for invalid dimension files
+ *
+ * @param num which file to test
+ * @since 2021-10-04
+ */
+ @ParameterizedTest
+ @ValueSource(ints = { 1, 2, 3 })
+ public void testLoadingInvalidDimensionFile(int num) {
+ final UnitDatabase database = new UnitDatabase();
+ database.addDimension("LENGTH", Metric.Dimensions.LENGTH);
+ database.addDimension("MASS", Metric.Dimensions.MASS);
+ database.addDimension("TIME", Metric.Dimensions.TIME);
+ final String filename = String.format("/test-dimensionfile-invalid%d.txt",
+ num);
+ final RuntimeException e = assertThrows(RuntimeException.class,
+ () -> loadDimensionFile(database, filename));
+ assertTrue(e instanceof IllegalArgumentException
+ || e instanceof NoSuchElementException);
+ }
+
+ /**
* A bunch of tests for invalid unit files
*
* @param num which file to test
@@ -148,12 +186,32 @@ class UnitDatabaseTest {
*/
@ParameterizedTest
@ValueSource(ints = { 1, 2, 3, 4, 5 })
- public void testLoadingInvalidFile(int num) {
+ public void testLoadingInvalidUnitFile(int num) {
final UnitDatabase database = new UnitDatabase();
final String filename = String.format("/test-unitsfile-invalid%d.txt",
num);
- assertThrows(IllegalArgumentException.class,
+ final RuntimeException e = assertThrows(RuntimeException.class,
() -> loadUnitsFile(database, filename));
+ assertTrue(e instanceof IllegalArgumentException
+ || e instanceof NoSuchElementException);
+ }
+
+ /**
+ * Tests loading a valid dimension-file with some derived dimensions.
+ *
+ * @since 2021-10-04
+ */
+ @Test
+ public void testLoadingValidDimensions() {
+ final UnitDatabase database = new UnitDatabase();
+ database.addDimension("LENGTH", Metric.Dimensions.LENGTH);
+ database.addDimension("MASS", Metric.Dimensions.MASS);
+ database.addDimension("TIME", Metric.Dimensions.TIME);
+
+ loadDimensionFile(database, "/test-dimensionfile-valid1.txt");
+ assertEquals(Metric.Dimensions.ENERGY, database.getDimension("ENERGY"));
+ assertEquals(Metric.Dimensions.POWER, database.getDimension("POWER"));
+
}
/**
@@ -207,6 +265,12 @@ class UnitDatabaseTest {
final Unit actual3 = database.getUnit("test3");
assertEquals(expected3, actual3);
+ final UnitValue expected4 = UnitValue.of(U, 1);
+ final UnitValue actual4 = database
+ .evaluateUnitExpression("-5 * U + -3 * U + 12 * U - 3 * U")
+ .asUnitValue();
+ assertEquals(expected4, actual4);
+
assertTrue(System.err.toString().length() > 0);
}
diff --git a/src/test/resources/test-dimensionfile-invalid1.txt b/src/test/resources/test-dimensionfile-invalid1.txt
new file mode 100644
index 0000000..ff9ccd8
--- /dev/null
+++ b/src/test/resources/test-dimensionfile-invalid1.txt
@@ -0,0 +1,3 @@
+LENGTH
+MASS
+TIME
diff --git a/src/test/resources/test-dimensionfile-invalid2.txt b/src/test/resources/test-dimensionfile-invalid2.txt
new file mode 100644
index 0000000..2818cfc
--- /dev/null
+++ b/src/test/resources/test-dimensionfile-invalid2.txt
@@ -0,0 +1 @@
+NONEXISTENT !
diff --git a/src/test/resources/test-dimensionfile-invalid3.txt b/src/test/resources/test-dimensionfile-invalid3.txt
new file mode 100644
index 0000000..a16f941
--- /dev/null
+++ b/src/test/resources/test-dimensionfile-invalid3.txt
@@ -0,0 +1,5 @@
+LENGTH !
+MASS !
+TIME !
+
+BAD LENGTH +-+ TIME \ No newline at end of file
diff --git a/src/test/resources/test-dimensionfile-valid1.txt b/src/test/resources/test-dimensionfile-valid1.txt
new file mode 100644
index 0000000..fc6a426
--- /dev/null
+++ b/src/test/resources/test-dimensionfile-valid1.txt
@@ -0,0 +1,12 @@
+LENGTH !
+MASS !
+TIME !
+
+ENERGY MASS * LENGTH^2 / TIME^2
+POWER ENERGY / TIME
+
+# doesn't work, but would require major changes to fix properly
+# for now, just don't use brackets in dimension expressions
+# (note that the unit/prefix expressions use a complete hack
+# to enable this, one that doesn't work for dimensions)
+# POWER MASS * (LENGTH / TIME)^2 / TIME \ No newline at end of file