Skip to content

Commit 4289f2f

Browse files
committed
introduced BinaryExpression
1 parent 3bf4da7 commit 4289f2f

File tree

2 files changed

+70
-0
lines changed

2 files changed

+70
-0
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package net.itarray.automotion.validation.properties;
2+
3+
import net.itarray.automotion.internal.geometry.Direction;
4+
import net.itarray.automotion.internal.properties.Context;
5+
6+
import java.util.function.BiFunction;
7+
8+
public class BinaryExpression<L, R, T> implements Expression<T> {
9+
10+
private final Expression<L> left;
11+
private final Expression<R> right;
12+
private final BiFunction<L, R, T> operation;
13+
private String descriptionFormat;
14+
15+
public BinaryExpression(Expression<L> left, Expression<R> right, BiFunction<L, R, T> operation, String descriptionFormat) {
16+
this.left = left;
17+
this.right = right;
18+
this.operation = operation;
19+
this.descriptionFormat = descriptionFormat;
20+
}
21+
22+
@Override
23+
public T evaluateIn(Context context, Direction direction) {
24+
return operation.apply(left.evaluateIn(context, direction), right.evaluateIn(context, direction));
25+
}
26+
27+
@Override
28+
public String getDescription(Context context, Direction direction) {
29+
return String.format(
30+
descriptionFormat,
31+
left.getDescription(context, direction),
32+
right.getDescription(context, direction));
33+
}
34+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package net.itarray.automotion.tests.properties;
2+
3+
import net.itarray.automotion.internal.geometry.Direction;
4+
import net.itarray.automotion.internal.geometry.Scalar;
5+
import net.itarray.automotion.internal.properties.PixelConstant;
6+
import net.itarray.automotion.validation.properties.BinaryExpression;
7+
import org.junit.Before;
8+
import org.junit.Test;
9+
10+
import static org.assertj.core.api.Assertions.assertThat;
11+
12+
public class BinaryExpressionTest {
13+
14+
private BinaryExpression<Scalar, Scalar, Boolean> expression;
15+
16+
@Before
17+
public void setUp() {
18+
expression = new BinaryExpression<>(
19+
new PixelConstant(new Scalar(17)),
20+
new PixelConstant(new Scalar(16)),
21+
Scalar::isLessOrEqualTo,
22+
"%s to be less or equal to %s");
23+
}
24+
25+
@Test
26+
public void evaluatesToTheValueOfTheOperationAppliedToTheEvaluatedLeftAndRightExpressions() {
27+
Boolean result = expression.evaluateIn(new TestContext(), Direction.RIGHT);
28+
assertThat(result).isFalse();
29+
}
30+
31+
@Test
32+
public void shouldName() {
33+
String description = expression.getDescription(new TestContext(), Direction.RIGHT);
34+
assertThat(description).isEqualTo("17px to be less or equal to 16px");
35+
}
36+
}

0 commit comments

Comments
 (0)