/*
* SPDX-FileCopyrightText: 2021-2023 The Refinery Authors
*
* SPDX-License-Identifier: EPL-2.0
*/
package tools.refinery.store.query.term.uppercardinality;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import tools.refinery.store.query.term.StatefulAggregate;
import tools.refinery.store.representation.cardinality.UpperCardinalities;
import tools.refinery.store.representation.cardinality.UpperCardinality;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
class UpperCardinalitySumAggregatorTest {
private StatefulAggregate accumulator;
@BeforeEach
void beforeEach() {
accumulator = UpperCardinalitySumAggregator.INSTANCE.createEmptyAggregate();
}
@Test
void emptyAggregationTest() {
assertThat(accumulator.getResult(), is(UpperCardinality.of(0)));
}
@Test
void singleBoundedTest() {
accumulator.add(UpperCardinality.of(3));
assertThat(accumulator.getResult(), is(UpperCardinality.of(3)));
}
@Test
void multipleBoundedTest() {
accumulator.add(UpperCardinality.of(2));
accumulator.add(UpperCardinality.of(3));
assertThat(accumulator.getResult(), is(UpperCardinality.of(5)));
}
@Test
void singleUnboundedTest() {
accumulator.add(UpperCardinalities.UNBOUNDED);
assertThat(accumulator.getResult(), is(UpperCardinalities.UNBOUNDED));
}
@Test
void multipleUnboundedTest() {
accumulator.add(UpperCardinalities.UNBOUNDED);
accumulator.add(UpperCardinalities.UNBOUNDED);
assertThat(accumulator.getResult(), is(UpperCardinalities.UNBOUNDED));
}
@Test
void removeBoundedTest() {
accumulator.add(UpperCardinality.of(2));
accumulator.add(UpperCardinality.of(3));
accumulator.remove(UpperCardinality.of(2));
assertThat(accumulator.getResult(), is(UpperCardinality.of(3)));
}
@Test
void removeAllUnboundedTest() {
accumulator.add(UpperCardinalities.UNBOUNDED);
accumulator.add(UpperCardinality.of(3));
accumulator.remove(UpperCardinalities.UNBOUNDED);
assertThat(accumulator.getResult(), is(UpperCardinality.of(3)));
}
@Test
void removeSomeUnboundedTest() {
accumulator.add(UpperCardinalities.UNBOUNDED);
accumulator.add(UpperCardinalities.UNBOUNDED);
accumulator.add(UpperCardinality.of(3));
accumulator.remove(UpperCardinalities.UNBOUNDED);
assertThat(accumulator.getResult(), is(UpperCardinalities.UNBOUNDED));
}
}