package lab.art; import static org.junit.Assert.*; import java.util.Random; import org.junit.Test; public class BinaryExpressionTester { private static class MinimumOperator extends BinaryOperator { public double operation(double a, double b) { return Math.min(a, b); } } private static class Minimum extends BinaryExpression { public Minimum(Expression first, Expression second) { super(first, second); } public double evaluate(double x, double y) { return super.evaluate(x, y, new MinimumOperator()); } } @Test public void testConstructor() { Expression first = new VariableX(); Expression second = new VariableY(); new Minimum(first, second); } @Test public void testEquals() { Expression x = new VariableX(); Expression y = new VariableY(); Expression first = new Minimum(x, y); assertEquals("equals method failed", false, first.equals(null)); assertEquals("equals method failed", false, first.equals(new Object())); assertEquals("equals method failed", true, first.equals(first)); Expression second = new Minimum(y, x); assertEquals("equals method failed", true, first.equals(second)); } @Test public void testHashCode() { Expression first = new VariableX(); Expression second = new VariableY(); Expression expression = new Minimum(first, second); assertEquals("hashCode method failed", first.hashCode() + second.hashCode(), expression.hashCode()); } @Test public void testEvaluate() { Expression first = new VariableX(); Expression second = new VariableY(); BinaryExpression expression = new Minimum(first, second); Random random = new Random(System.currentTimeMillis()); int NUMBER = 1000; double DELTA = 0.0001; for (int n = 0; n < NUMBER; n++) { double x = random.nextDouble(); if (random.nextBoolean()) { x = -x; } double y = random.nextDouble(); if (random.nextBoolean()) { y = -y; } assertEquals("evaluate failed", Math.min(x, y), expression.evaluate(x, y), DELTA); } } @Test public void testToString() { Expression first = new VariableX(); Expression second = new VariableY(); BinaryExpression expression = new Minimum(first, second); String pattern = "minimum of %s and %s"; assertEquals("toString failed", "minimum of x and y", expression.toString(pattern)); } }