From a00ad7ca48928a30ae577aeaed0345680df0a3fe Mon Sep 17 00:00:00 2001 From: Adrien Hopkins Date: Sat, 7 Jun 2025 22:11:45 -0500 Subject: Fix e-notation & consolidate expression parsing This commit moves all of the expression formatting code to one method, and changes it so that it works with things like '1e+2'. This does mean that I had to require spaces for addition and subtraction, but without that, the rules would be complicated. --- .../java/sevenUnits/unit/UnitDatabaseTest.java | 29 +++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) (limited to 'src/test/java/sevenUnits') diff --git a/src/test/java/sevenUnits/unit/UnitDatabaseTest.java b/src/test/java/sevenUnits/unit/UnitDatabaseTest.java index c78837f..800d13d 100644 --- a/src/test/java/sevenUnits/unit/UnitDatabaseTest.java +++ b/src/test/java/sevenUnits/unit/UnitDatabaseTest.java @@ -190,14 +190,35 @@ class UnitDatabaseTest { } private static final Stream testEvaluateExpressionValid() { + UncertainDouble uncertainTwoThirds = UncertainDouble.of(2.0, 1.0) + .dividedBy(UncertainDouble.of(3.0, 1.0)); return Stream.of( Arguments.of("J + (2 * 3) J + (20 / 4) J", LinearUnitValue.of(J, UncertainDouble.of(12, Math.sqrt(14.625)))), + Arguments.of("J + 2 * 3 * J + 20 / 4 * J", + LinearUnitValue.of(J, + UncertainDouble.of(12, Math.sqrt(14.625)))), Arguments.of("J - -1 * J", LinearUnitValue.of(J, UncertainDouble.of(2, 1))), Arguments.of("K^2", - LinearUnitValue.of(K.times(K), UncertainDouble.of(1, 0)))); + LinearUnitValue.of(K.times(K), UncertainDouble.of(1, 0))), + Arguments.of("2 J / 3 J", + LinearUnitValue.of(J.dividedBy(J), uncertainTwoThirds))); + } + + private static final Stream testFormatExpression() { + return Stream.of( + Arguments.of("1*2", "1 * 2"), + Arguments.of("1/2", "1 / 2"), + Arguments.of("1|2", "1 | 2"), + Arguments.of("1^2", "1 ^ 2"), + Arguments.of("1 * 2", "1 * 2"), + Arguments.of("+1", "+1"), + Arguments.of("-1", "-1"), + Arguments.of("1.1e+5", "1.1e+5"), + Arguments.of("1.25e-5", "1.25e-5") + ); } /** @@ -253,6 +274,12 @@ class UnitDatabaseTest { final var actualU = database.getUnitFromExpression(expression); assertEquals(expectedU, actualU); } + + @ParameterizedTest + @MethodSource + public void testFormatExpression(String expression, String expected) { + assertEquals(expected, UnitDatabase.formatExpression(expression)); + } /** * Test for {@link UnitDatabase#getUnit}, {@link UnitDatabase#getLinearUnit} -- cgit v1.2.3