From 9670538a0e5630edecab8aaf4ba38ae6c81e8606 Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Fri, 10 May 2019 17:27:13 -0400 Subject: Interval power and aggregator fix --- .../tests/interval/MinAggregatorTest.xtend | 67 ++++++++++ .../logic2viatra/tests/interval/PowerTest.xtend | 43 +++++++ .../tests/interval/SumAggregatorTest.xtend | 140 +++++++++++++++++++++ .../logic2viatra/tests/interval/SumTest.xtend | 140 --------------------- 4 files changed, 250 insertions(+), 140 deletions(-) create mode 100644 Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/interval/MinAggregatorTest.xtend create mode 100644 Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/interval/PowerTest.xtend create mode 100644 Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/interval/SumAggregatorTest.xtend delete mode 100644 Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/interval/SumTest.xtend (limited to 'Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests') diff --git a/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/interval/MinAggregatorTest.xtend b/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/interval/MinAggregatorTest.xtend new file mode 100644 index 00000000..7d46e16c --- /dev/null +++ b/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/interval/MinAggregatorTest.xtend @@ -0,0 +1,67 @@ +package hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests.interval + +import com.google.common.collect.HashMultiset +import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.interval.Interval +import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.interval.IntervalAggregationMode +import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.interval.IntervalAggregationOperator +import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.interval.IntervalRedBlackNode +import java.math.BigDecimal +import java.util.Random +import org.junit.Assert +import org.junit.Before +import org.junit.Test + +import static hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.interval.Interval.* + +class MinAggregatorTest { + val aggregator = new IntervalAggregationOperator(IntervalAggregationMode.MIN) + var IntervalRedBlackNode value = null + + @Before + def void reset() { + value = aggregator.createNeutral + } + + @Test + def void emptyTest() { + assertEquals(EMPTY) + } + + @Test + def void largeTest() { + val starts = #[null, new BigDecimal(-3), new BigDecimal(-2), new BigDecimal(-1)] + val ends = #[new BigDecimal(1), new BigDecimal(2), new BigDecimal(3), null] + val current = HashMultiset.create + val random = new Random(1) + for (var int i = 0; i < 1000; i++) { + val start = starts.get(random.nextInt(starts.size)) + val end = ends.get(random.nextInt(ends.size)) + val interval = Interval.of(start, end) + val isInsert = !current.contains(interval) || random.nextInt(3) == 0 + if (isInsert) { + current.add(interval) + } else { + current.remove(interval) + } + val expected = current.stream.reduce(aggregator.mode).orElse(EMPTY) + update(interval, isInsert) + assertEquals(expected) + } + } + + private def update(Interval interval, boolean isInsert) { + value = aggregator.update(value, interval, isInsert) + val nodes = newArrayList + var node = value.min + while (node !== null) { + nodes += node + node = node.successor + } + value.assertSubtreeIsValid + } + + private def assertEquals(Interval interval) { + val actual = aggregator.getAggregate(value) + Assert.assertEquals(interval, actual) + } +} diff --git a/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/interval/PowerTest.xtend b/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/interval/PowerTest.xtend new file mode 100644 index 00000000..c842d90d --- /dev/null +++ b/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/interval/PowerTest.xtend @@ -0,0 +1,43 @@ +package hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests.interval + +import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.interval.Interval +import java.util.Collection +import org.junit.Assert +import org.junit.Test +import org.junit.runner.RunWith +import org.junit.runners.Parameterized +import org.junit.runners.Parameterized.Parameter +import org.junit.runners.Parameterized.Parameters + +import static hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.interval.Interval.* + +@RunWith(Parameterized) +class PowerTest { + @Parameters(name="{index}: {0} ** {1} = {2}") + static def Collection data() { + #[ + #[EMPTY, EMPTY, EMPTY], + #[EMPTY, between(-1, 1), EMPTY], + #[between(-1, 1), EMPTY, EMPTY], + #[upTo(-1), between(-1, 2), EMPTY], + #[upTo(0), between(-1, 2), between(0, 0)], + #[upTo(2), between(-1, 2), above(0)], + #[upTo(2), between(1, 2), between(0, 4)], + #[above(1), between(1, 2), above(1)], + #[between(2, 4), upTo(1), between(0, 4)], + #[between(0.25, 0.5), upTo(1), above(0.25)], + #[between(2, 3), above(1), above(2)], + #[between(0.25, 0.5), above(1), between(0, 0.5)], + #[between(1, 2), between(-1, 2), between(0.5, 4)] + ] + } + + @Parameter(0) public var Interval a + @Parameter(1) public var Interval b + @Parameter(2) public var Interval result + + @Test + def void powerTest() { + Assert.assertEquals(result, a ** b) + } +} diff --git a/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/interval/SumAggregatorTest.xtend b/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/interval/SumAggregatorTest.xtend new file mode 100644 index 00000000..56172b6c --- /dev/null +++ b/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/interval/SumAggregatorTest.xtend @@ -0,0 +1,140 @@ +package hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests.interval + +import com.google.common.collect.HashMultiset +import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.interval.Interval +import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.interval.IntervalAggregationMode +import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.interval.IntervalAggregationOperator +import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.interval.IntervalRedBlackNode +import java.math.BigDecimal +import java.util.Random +import org.junit.Assert +import org.junit.Before +import org.junit.Test + +import static hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.interval.Interval.* + +class SumAggregatorTest { + val aggregator = new IntervalAggregationOperator(IntervalAggregationMode.SUM) + var IntervalRedBlackNode value = null + + @Before + def void reset() { + value = aggregator.createNeutral + } + + @Test + def void emptyTest() { + assertEquals(ZERO) + } + + @Test + def void addSingleTest() { + add(between(-1, 1)) + assertEquals(between(-1, 1)) + } + + @Test + def void addRemoveTest() { + add(between(-1, 1)) + remove(between(-1, 1)) + assertEquals(ZERO) + } + + @Test + def void addTwoTest() { + add(between(-1, 1)) + add(above(2)) + assertEquals(above(1)) + } + + @Test + def void addTwoRemoveFirstTest() { + add(between(-1, 1)) + add(above(2)) + remove(between(-1, 1)) + assertEquals(above(2)) + } + + @Test + def void addTwoRemoveSecondTest() { + add(between(-1, 1)) + add(above(2)) + remove(above(2)) + assertEquals(between(-1, 1)) + } + + @Test + def void addMultiplicityTest() { + add(between(-1, 1)) + add(between(-1, 1)) + add(between(-1, 1)) + assertEquals(between(-3, 3)) + } + + @Test + def void removeAllMultiplicityTest() { + add(between(-1, 1)) + add(between(-1, 1)) + add(between(-1, 1)) + remove(between(-1, 1)) + remove(between(-1, 1)) + remove(between(-1, 1)) + assertEquals(ZERO) + } + + @Test + def void removeSomeMultiplicityTest() { + add(between(-1, 1)) + add(between(-1, 1)) + add(between(-1, 1)) + remove(between(-1, 1)) + remove(between(-1, 1)) + assertEquals(between(-1, 1)) + } + + @Test + def void largeTest() { + val starts = #[null, new BigDecimal(-3), new BigDecimal(-2), new BigDecimal(-1)] + val ends = #[new BigDecimal(1), new BigDecimal(2), new BigDecimal(3), null] + val current = HashMultiset.create + val random = new Random(1) + for (var int i = 0; i < 1000; i++) { + val start = starts.get(random.nextInt(starts.size)) + val end = ends.get(random.nextInt(ends.size)) + val interval = Interval.of(start, end) + val isInsert = !current.contains(interval) || random.nextInt(3) == 0 + if (isInsert) { + current.add(interval) + } else { + current.remove(interval) + } + val expected = current.stream.reduce(aggregator.mode).orElse(ZERO) + update(interval, isInsert) + assertEquals(expected) + } + } + + private def update(Interval interval, boolean isInsert) { + value = aggregator.update(value, interval, isInsert) + val nodes = newArrayList + var node = value.min + while (node !== null) { + nodes += node + node = node.successor + } + value.assertSubtreeIsValid + } + + private def add(Interval interval) { + update(interval, true) + } + + private def remove(Interval interval) { + update(interval, false) + } + + private def assertEquals(Interval interval) { + val actual = aggregator.getAggregate(value) + Assert.assertEquals(interval, actual) + } +} diff --git a/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/interval/SumTest.xtend b/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/interval/SumTest.xtend deleted file mode 100644 index 530c081c..00000000 --- a/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/interval/SumTest.xtend +++ /dev/null @@ -1,140 +0,0 @@ -package hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests.interval - -import com.google.common.collect.HashMultiset -import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.interval.Interval -import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.interval.IntervalAggregationMode -import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.interval.IntervalAggregationOperator -import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.interval.IntervalRedBlackNode -import java.math.BigDecimal -import java.util.Random -import org.junit.Assert -import org.junit.Before -import org.junit.Test - -import static hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.interval.Interval.* - -class SumTest { - val aggregator = new IntervalAggregationOperator(IntervalAggregationMode.SUM) - var IntervalRedBlackNode value = null - - @Before - def void reset() { - value = aggregator.createNeutral - } - - @Test - def void emptyTest() { - assertEquals(ZERO) - } - - @Test - def void addSingleTest() { - add(between(-1, 1)) - assertEquals(between(-1, 1)) - } - - @Test - def void addRemoveTest() { - add(between(-1, 1)) - remove(between(-1, 1)) - assertEquals(ZERO) - } - - @Test - def void addTwoTest() { - add(between(-1, 1)) - add(above(2)) - assertEquals(above(1)) - } - - @Test - def void addTwoRemoveFirstTest() { - add(between(-1, 1)) - add(above(2)) - remove(between(-1, 1)) - assertEquals(above(2)) - } - - @Test - def void addTwoRemoveSecondTest() { - add(between(-1, 1)) - add(above(2)) - remove(above(2)) - assertEquals(between(-1, 1)) - } - - @Test - def void addMultiplicityTest() { - add(between(-1, 1)) - add(between(-1, 1)) - add(between(-1, 1)) - assertEquals(between(-3, 3)) - } - - @Test - def void removeAllMultiplicityTest() { - add(between(-1, 1)) - add(between(-1, 1)) - add(between(-1, 1)) - remove(between(-1, 1)) - remove(between(-1, 1)) - remove(between(-1, 1)) - assertEquals(ZERO) - } - - @Test - def void removeSomeMultiplicityTest() { - add(between(-1, 1)) - add(between(-1, 1)) - add(between(-1, 1)) - remove(between(-1, 1)) - remove(between(-1, 1)) - assertEquals(between(-1, 1)) - } - - @Test - def void largeTest() { - val starts = #[null, new BigDecimal(-3), new BigDecimal(-2), new BigDecimal(-1)] - val ends = #[new BigDecimal(1), new BigDecimal(2), new BigDecimal(3), null] - val current = HashMultiset.create - val random = new Random(1) - for (var int i = 0; i < 1000; i++) { - val start = starts.get(random.nextInt(starts.size)) - val end = ends.get(random.nextInt(ends.size)) - val interval = Interval.of(start, end) - val isInsert = !current.contains(interval) || random.nextInt(3) == 0 - if (isInsert) { - current.add(interval) - } else { - current.remove(interval) - } - val expected = current.stream.reduce(aggregator.mode).orElse(ZERO) - update(interval, isInsert) - assertEquals(expected) - } - } - - private def update(Interval interval, boolean isInsert) { - value = aggregator.update(value, interval, isInsert) - val nodes = newArrayList - var node = value.min - while (node !== null) { - nodes += node - node = node.successor - } - value.assertSubtreeIsValid - } - - private def add(Interval interval) { - update(interval, true) - } - - private def remove(Interval interval) { - update(interval, false) - } - - private def assertEquals(Interval interval) { - val actual = aggregator.getAggregate(value) - Assert.assertEquals(interval, actual) - } -} -- cgit v1.2.3-54-g00ecf