summaryrefslogtreecommitdiff
path: root/src/test/java/sevenUnits/math
diff options
context:
space:
mode:
authorAdrien Hopkins <ahopk127@my.yorku.ca>2021-06-28 17:16:12 -0500
committerAdrien Hopkins <ahopk127@my.yorku.ca>2021-06-28 17:16:12 -0500
commit78af49e0e5b2ab2eaab87e62c33089c5caa834f8 (patch)
tree14d2a49900d706070882cfe150e08ec1882cdbc2 /src/test/java/sevenUnits/math
parenta34d79383061ba53951f3f69a44f142820e82216 (diff)
Renamed project to 7Units
Diffstat (limited to 'src/test/java/sevenUnits/math')
-rw-r--r--src/test/java/sevenUnits/math/ConditionalExistenceCollectionsTest.java161
-rw-r--r--src/test/java/sevenUnits/math/ExpressionParserTest.java54
-rw-r--r--src/test/java/sevenUnits/math/ObjectProductTest.java80
3 files changed, 295 insertions, 0 deletions
diff --git a/src/test/java/sevenUnits/math/ConditionalExistenceCollectionsTest.java b/src/test/java/sevenUnits/math/ConditionalExistenceCollectionsTest.java
new file mode 100644
index 0000000..a35dc5a
--- /dev/null
+++ b/src/test/java/sevenUnits/math/ConditionalExistenceCollectionsTest.java
@@ -0,0 +1,161 @@
+/**
+ * Copyright (C) 2019 Adrien Hopkins
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+package sevenUnits.math;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.NoSuchElementException;
+
+import org.junit.jupiter.api.Test;
+
+import sevenUnits.math.ConditionalExistenceCollections;
+import sevenUnits.math.ConditionalExistenceCollections.ConditionalExistenceIterator;
+
+/**
+ * Tests the {@link #ConditionalExistenceCollections}.
+ *
+ * @author Adrien Hopkins
+ * @since 2019-10-16
+ */
+class ConditionalExistenceCollectionsTest {
+
+ /**
+ * The returned iterator ignores elements that don't start with "a".
+ *
+ * @return test iterator
+ * @since 2019-10-17
+ */
+ ConditionalExistenceIterator<String> getTestIterator() {
+ final List<String> items = Arrays.asList("aa", "ab", "ba");
+ final Iterator<String> it = items.iterator();
+ final ConditionalExistenceIterator<String> cit = (ConditionalExistenceIterator<String>) ConditionalExistenceCollections
+ .conditionalExistenceIterator(it, s -> s.startsWith("a"));
+ return cit;
+ }
+
+ /**
+ * The returned map ignores mappings where the value is zero.
+ *
+ * @return map to be used for test data
+ * @since 2019-10-16
+ */
+ Map<String, Integer> getTestMap() {
+ final Map<String, Integer> map = new HashMap<>();
+ map.put("one", 1);
+ map.put("two", 2);
+ map.put("zero", 0);
+ map.put("ten", 10);
+ final Map<String, Integer> conditionalMap = ConditionalExistenceCollections.conditionalExistenceMap(map,
+ e -> !Integer.valueOf(0).equals(e.getValue()));
+ return conditionalMap;
+ }
+
+ /**
+ * Test method for {@link org.unitConverter.math.ZeroIsNullMap#containsKey(java.lang.Object)}.
+ */
+ @Test
+ void testContainsKeyObject() {
+ final Map<String, Integer> map = this.getTestMap();
+ assertTrue(map.containsKey("one"));
+ assertTrue(map.containsKey("ten"));
+ assertFalse(map.containsKey("five"));
+ assertFalse(map.containsKey("zero"));
+ }
+
+ /**
+ * Test method for {@link org.unitConverter.math.ZeroIsNullMap#containsValue(java.lang.Object)}.
+ */
+ @Test
+ void testContainsValueObject() {
+ final Map<String, Integer> map = this.getTestMap();
+ assertTrue(map.containsValue(1));
+ assertTrue(map.containsValue(10));
+ assertFalse(map.containsValue(5));
+ assertFalse(map.containsValue(0));
+ }
+
+ /**
+ * Test method for {@link org.unitConverter.math.ZeroIsNullMap#entrySet()}.
+ */
+ @Test
+ void testEntrySet() {
+ final Map<String, Integer> map = this.getTestMap();
+ for (final Entry<String, Integer> e : map.entrySet()) {
+ assertTrue(e.getValue() != 0);
+ }
+ }
+
+ /**
+ * Test method for {@link org.unitConverter.math.ZeroIsNullMap#get(java.lang.Object)}.
+ */
+ @Test
+ void testGetObject() {
+ final Map<String, Integer> map = this.getTestMap();
+ assertEquals(1, map.get("one"));
+ assertEquals(10, map.get("ten"));
+ assertEquals(null, map.get("five"));
+ assertEquals(null, map.get("zero"));
+ }
+
+ @Test
+ void testIterator() {
+ final ConditionalExistenceIterator<String> testIterator = this.getTestIterator();
+
+ assertTrue(testIterator.hasNext);
+ assertTrue(testIterator.hasNext());
+ assertEquals("aa", testIterator.nextElement);
+ assertEquals("aa", testIterator.next());
+
+ assertTrue(testIterator.hasNext);
+ assertTrue(testIterator.hasNext());
+ assertEquals("ab", testIterator.nextElement);
+ assertEquals("ab", testIterator.next());
+
+ assertFalse(testIterator.hasNext);
+ assertFalse(testIterator.hasNext());
+ assertEquals(null, testIterator.nextElement);
+ assertThrows(NoSuchElementException.class, testIterator::next);
+ }
+
+ /**
+ * Test method for {@link org.unitConverter.math.ZeroIsNullMap#keySet()}.
+ */
+ @Test
+ void testKeySet() {
+ final Map<String, Integer> map = this.getTestMap();
+ assertFalse(map.keySet().contains("zero"));
+ }
+
+ /**
+ * Test method for {@link org.unitConverter.math.ZeroIsNullMap#values()}.
+ */
+ @Test
+ void testValues() {
+ final Map<String, Integer> map = this.getTestMap();
+ assertFalse(map.values().contains(0));
+ }
+
+}
diff --git a/src/test/java/sevenUnits/math/ExpressionParserTest.java b/src/test/java/sevenUnits/math/ExpressionParserTest.java
new file mode 100644
index 0000000..4801233
--- /dev/null
+++ b/src/test/java/sevenUnits/math/ExpressionParserTest.java
@@ -0,0 +1,54 @@
+/**
+ * Copyright (C) 2019 Adrien Hopkins
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+package sevenUnits.math;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import org.junit.jupiter.api.Test;
+
+import sevenUnits.math.ExpressionParser;
+
+/**
+ * A test for the {@code ExpressionParser} class. This is NOT part of this program's public API.
+ *
+ * @author Adrien Hopkins
+ * @since 2019-03-22
+ * @since v0.2.0
+ */
+class ExpressionParserTest {
+ private static final ExpressionParser<Integer> numberParser = new ExpressionParser.Builder<>(Integer::parseInt)
+ .addBinaryOperator("+", (o1, o2) -> o1 + o2, 0).addBinaryOperator("-", (o1, o2) -> o1 - o2, 0)
+ .addBinaryOperator("*", (o1, o2) -> o1 * o2, 1).addBinaryOperator("/", (o1, o2) -> o1 / o2, 1)
+ .addBinaryOperator("^", (o1, o2) -> (int) Math.pow(o1, o2), 2).build();
+
+ /**
+ * Test method for {@link sevenUnits.math.ExpressionParser#parseExpression(java.lang.String)}.
+ */
+ @Test
+ public void testParseExpression() {
+ // test parsing of expressions
+ assertEquals((int) numberParser.parseExpression("1 + 2 ^ 5 * 3"), 97);
+ assertEquals((int) numberParser.parseExpression("(1 + 2) ^ 5 * 3"), 729);
+
+ // ensure it normally goes left to right
+ assertEquals((int) numberParser.parseExpression("1 + 2 + 3 + 4"), 10);
+ assertEquals((int) numberParser.parseExpression("12 - 4 - 3"), 5);
+ assertEquals((int) numberParser.parseExpression("12 - (4 - 3)"), 11);
+ assertEquals((int) numberParser.parseExpression("1 / 2 + 3"), 3);
+ }
+
+}
diff --git a/src/test/java/sevenUnits/math/ObjectProductTest.java b/src/test/java/sevenUnits/math/ObjectProductTest.java
new file mode 100644
index 0000000..1734f26
--- /dev/null
+++ b/src/test/java/sevenUnits/math/ObjectProductTest.java
@@ -0,0 +1,80 @@
+/**
+ * Copyright (C) 2018 Adrien Hopkins
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+package sevenUnits.math;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static sevenUnits.unit.SI.Dimensions.AREA;
+import static sevenUnits.unit.SI.Dimensions.ENERGY;
+import static sevenUnits.unit.SI.Dimensions.LENGTH;
+import static sevenUnits.unit.SI.Dimensions.MASS;
+import static sevenUnits.unit.SI.Dimensions.MASS_DENSITY;
+import static sevenUnits.unit.SI.Dimensions.QUANTITY;
+import static sevenUnits.unit.SI.Dimensions.TIME;
+import static sevenUnits.unit.SI.Dimensions.VOLUME;
+
+import org.junit.jupiter.api.Test;
+
+import sevenUnits.math.ObjectProduct;
+import sevenUnits.unit.SI;
+
+/**
+ * Tests for {@link ObjectProduct} using BaseDimension as a test object. This is NOT part of this program's public API.
+ *
+ * @author Adrien Hopkins
+ * @since 2018-12-12
+ * @since v0.1.0
+ */
+class ObjectProductTest {
+ /**
+ * Tests {@link UnitDimension#equals}
+ *
+ * @since 2018-12-12
+ * @since v0.1.0
+ */
+ @Test
+ public void testEquals() {
+ assertEquals(LENGTH, LENGTH);
+ assertFalse(LENGTH.equals(QUANTITY));
+ }
+
+ /**
+ * Tests {@code UnitDimension}'s exponentiation
+ *
+ * @since 2019-01-15
+ * @since v0.1.0
+ */
+ @Test
+ public void testExponents() {
+ assertEquals(1, LENGTH.getExponent(SI.BaseDimensions.LENGTH));
+ assertEquals(3, VOLUME.getExponent(SI.BaseDimensions.LENGTH));
+ }
+
+ /**
+ * Tests {@code UnitDimension}'s multiplication and division.
+ *
+ * @since 2018-12-12
+ * @since v0.1.0
+ */
+ @Test
+ public void testMultiplicationAndDivision() {
+ assertEquals(AREA, LENGTH.times(LENGTH));
+ assertEquals(MASS_DENSITY, MASS.dividedBy(VOLUME));
+ assertEquals(ENERGY, AREA.times(MASS).dividedBy(TIME).dividedBy(TIME));
+ assertEquals(LENGTH, LENGTH.times(TIME).dividedBy(TIME));
+ }
+}