package org.quaere.dsl; import org.junit.Assert; import org.junit.Test; import org.quaere.Queryable; import org.quaere.QueryableIterable; import org.quaere.expressions.*; import java.util.Arrays; public class AggregationClauseBuilderTest { @Test public void canApplyMinOperatorToArray() { Integer[] numbers = {5, 4, 1, 3, 9, 8, 6, 7, 2}; AggregationOperatorBuilder<Double> operatorBuilder = new AggregationOperatorBuilderImpl<Double>("min", new Identifier("n")); Double min = operatorBuilder.by("").in(Double.class, numbers); Assert.assertEquals(1D, min); } @Test public void canApplyMinOperatorToIterable() { Iterable<Integer> numbers = Arrays.asList(5, 4, 1, 3, 9, 8, 6, 7, 2); AggregationOperatorBuilder<Double> operatorBuilder = new AggregationOperatorBuilderImpl<Double>("min", new Identifier("n")); Double min = operatorBuilder.by("").in(Double.class, numbers); Assert.assertEquals(1D, min); } @Test public void canApplyMinOperatorToQueryable() { Queryable<Integer> numbers = new QueryableIterable<Integer>(Arrays.asList(5, 4, 1, 3, 9, 8, 6, 7, 2)); AggregationOperatorBuilder<Double> operatorBuilder = new AggregationOperatorBuilderImpl<Double>("min", new Identifier("n")); Double min = operatorBuilder.by("").in(Double.class, numbers); Assert.assertEquals(1D, min); } @Test public void canApplyMinOperatorWithLiteralQualifierExpression() { Integer[] numbers = {5, 4, 1, 3, 9, 8, 6, 7, 2}; AggregationOperatorBuilder<Double> operatorBuilder = new AggregationOperatorBuilderImpl<Double>("min", new Identifier("n")); Double min = operatorBuilder.by("n + 1").in(Double.class, numbers); Assert.assertEquals(2D, min); } @Test public void canApplyMinOperatorWithQualifierExpression() { Integer[] numbers = {5, 4, 1, 3, 9, 8, 6, 7, 2}; AggregationOperatorBuilder<Double> operatorBuilder = new AggregationOperatorBuilderImpl<Double>("min", new Identifier("n")); Double min = operatorBuilder.by( BinaryExpression.add( new Statement( Arrays.<Expression>asList(new Identifier("n")) ), new Statement( Arrays.<Expression>asList(new Constant(1)) ) ) ).in(Double.class, numbers); Assert.assertEquals(2D, min); } @Test public void canApplyMaxOperatorToArray() { Integer[] numbers = {5, 4, 1, 3, 9, 8, 6, 7, 2}; AggregationOperatorBuilder<Double> operatorBuilder = new AggregationOperatorBuilderImpl<Double>("max", new Identifier("n")); Double max = operatorBuilder.by("").in(Double.class, numbers); Assert.assertEquals(9D, max); } @Test public void canApplyMaxOperatorToIterable() { Iterable<Integer> numbers = Arrays.asList(5, 4, 1, 3, 9, 8, 6, 7, 2); AggregationOperatorBuilder<Double> operatorBuilder = new AggregationOperatorBuilderImpl<Double>("max", new Identifier("n")); Double max = operatorBuilder.by("").in(Double.class, numbers); Assert.assertEquals(9D, max); } @Test public void canApplyMaxOperatorToQueryable() { Queryable<Integer> numbers = new QueryableIterable<Integer>(Arrays.asList(5, 4, 1, 3, 9, 8, 6, 7, 2)); AggregationOperatorBuilder<Double> operatorBuilder = new AggregationOperatorBuilderImpl<Double>("max", new Identifier("n")); Double max = operatorBuilder.by("").in(Double.class, numbers); Assert.assertEquals(9D, max); } @Test public void canApplyMaxOperatorWithLiteralQualifierExpression() { Integer[] numbers = {5, 4, 1, 3, 9, 8, 6, 7, 2}; AggregationOperatorBuilder<Double> operatorBuilder = new AggregationOperatorBuilderImpl<Double>("max", new Identifier("n")); Double max = operatorBuilder.by("n + 1").in(Double.class, numbers); Assert.assertEquals(10D, max); } @Test public void canApplyMaxOperatorWithQualifierExpression() { Integer[] numbers = {5, 4, 1, 3, 9, 8, 6, 7, 2}; AggregationOperatorBuilder<Double> operatorBuilder = new AggregationOperatorBuilderImpl<Double>("max", new Identifier("n")); Double max = operatorBuilder.by( BinaryExpression.add( new Statement( Arrays.<Expression>asList(new Identifier("n")) ), new Statement( Arrays.<Expression>asList(new Constant(1)) ) ) ).in(Double.class, numbers); Assert.assertEquals(10D, max); } @Test public void canApplyAverageOperatorToArray() { Integer[] numbers = {5, 4, 1, 3, 9, 8, 6, 7, 2}; AggregationOperatorBuilder<Double> operatorBuilder = new AggregationOperatorBuilderImpl<Double>("average", new Identifier("n")); Double average = operatorBuilder.by("").in(Double.class, numbers); Assert.assertEquals(5D, average); } @Test public void canApplyAverageOperatorToIterable() { Iterable<Integer> numbers = Arrays.asList(5, 4, 1, 3, 9, 8, 6, 7, 2); AggregationOperatorBuilder<Double> operatorBuilder = new AggregationOperatorBuilderImpl<Double>("average", new Identifier("n")); Double average = operatorBuilder.by("").in(Double.class, numbers); Assert.assertEquals(5D, average); } @Test public void canApplyAverageOperatorToQueryable() { Queryable<Integer> numbers = new QueryableIterable<Integer>(Arrays.asList(5, 4, 1, 3, 9, 8, 6, 7, 2)); AggregationOperatorBuilder<Double> operatorBuilder = new AggregationOperatorBuilderImpl<Double>("average", new Identifier("n")); Double average = operatorBuilder.by("").in(Double.class, numbers); Assert.assertEquals(5D, average); } @Test public void canApplyAverageOperatorWithLiteralQualifierExpression() { Integer[] numbers = {5, 4, 1, 3, 9, 8, 6, 7, 2}; AggregationOperatorBuilder<Double> operatorBuilder = new AggregationOperatorBuilderImpl<Double>("average", new Identifier("n")); Double average = operatorBuilder.by("n + 1").in(Double.class, numbers); Assert.assertEquals(6D, average); } @Test public void canApplyAverageOperatorWithQualifierExpression() { Integer[] numbers = {5, 4, 1, 3, 9, 8, 6, 7, 2}; AggregationOperatorBuilder<Double> operatorBuilder = new AggregationOperatorBuilderImpl<Double>("average", new Identifier("n")); Double average = operatorBuilder.by( BinaryExpression.add( new Statement( Arrays.<Expression>asList(new Identifier("n")) ), new Statement( Arrays.<Expression>asList(new Constant(1)) ) ) ).in(Double.class, numbers); Assert.assertEquals(6D, average); } }