diff options
Diffstat (limited to 'Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/interval/MinAggregatorTest.xtend')
-rw-r--r-- | Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/interval/MinAggregatorTest.xtend | 67 |
1 files changed, 67 insertions, 0 deletions
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 @@ | |||
1 | package hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests.interval | ||
2 | |||
3 | import com.google.common.collect.HashMultiset | ||
4 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.interval.Interval | ||
5 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.interval.IntervalAggregationMode | ||
6 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.interval.IntervalAggregationOperator | ||
7 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.interval.IntervalRedBlackNode | ||
8 | import java.math.BigDecimal | ||
9 | import java.util.Random | ||
10 | import org.junit.Assert | ||
11 | import org.junit.Before | ||
12 | import org.junit.Test | ||
13 | |||
14 | import static hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.interval.Interval.* | ||
15 | |||
16 | class MinAggregatorTest { | ||
17 | val aggregator = new IntervalAggregationOperator(IntervalAggregationMode.MIN) | ||
18 | var IntervalRedBlackNode value = null | ||
19 | |||
20 | @Before | ||
21 | def void reset() { | ||
22 | value = aggregator.createNeutral | ||
23 | } | ||
24 | |||
25 | @Test | ||
26 | def void emptyTest() { | ||
27 | assertEquals(EMPTY) | ||
28 | } | ||
29 | |||
30 | @Test | ||
31 | def void largeTest() { | ||
32 | val starts = #[null, new BigDecimal(-3), new BigDecimal(-2), new BigDecimal(-1)] | ||
33 | val ends = #[new BigDecimal(1), new BigDecimal(2), new BigDecimal(3), null] | ||
34 | val current = HashMultiset.create | ||
35 | val random = new Random(1) | ||
36 | for (var int i = 0; i < 1000; i++) { | ||
37 | val start = starts.get(random.nextInt(starts.size)) | ||
38 | val end = ends.get(random.nextInt(ends.size)) | ||
39 | val interval = Interval.of(start, end) | ||
40 | val isInsert = !current.contains(interval) || random.nextInt(3) == 0 | ||
41 | if (isInsert) { | ||
42 | current.add(interval) | ||
43 | } else { | ||
44 | current.remove(interval) | ||
45 | } | ||
46 | val expected = current.stream.reduce(aggregator.mode).orElse(EMPTY) | ||
47 | update(interval, isInsert) | ||
48 | assertEquals(expected) | ||
49 | } | ||
50 | } | ||
51 | |||
52 | private def update(Interval interval, boolean isInsert) { | ||
53 | value = aggregator.update(value, interval, isInsert) | ||
54 | val nodes = newArrayList | ||
55 | var node = value.min | ||
56 | while (node !== null) { | ||
57 | nodes += node | ||
58 | node = node.successor | ||
59 | } | ||
60 | value.assertSubtreeIsValid | ||
61 | } | ||
62 | |||
63 | private def assertEquals(Interval interval) { | ||
64 | val actual = aggregator.getAggregate(value) | ||
65 | Assert.assertEquals(interval, actual) | ||
66 | } | ||
67 | } | ||