package com.github.xbn.test.util.matrix;
import com.github.xbn.util.matrix.DistanceDirection;
import com.github.xbn.util.matrix.MatrixElement;
import com.github.xbn.util.matrix.MatrixDirection;
import org.junit.Test;
import static org.junit.Assert.*;
/*
java com.github.xbn.test.util.matrix.DistanceDirection_Unit
*/
public class DistanceDirection_Unit {
public static final void main(String[] ignored) {
DistanceDirection_Unit unit = new DistanceDirection_Unit();
unit.test_getDirectionFromDistances_basicIntsForEachDir();
unit.test_basicObjCreation();
unit.test_getDirectionFromDistances_null();
unit.test_getDirectionFromDistances_nonNull();
}
@Test
public void test_basicObjCreation() {
DistanceDirection dd = new DistanceDirection(1, 0);
assertEquals(1, dd.getRowIndex());
assertEquals(0, dd.getColumnIndex());
assertEquals(MatrixDirection.RIGHT, dd.getDirection());
}
@Test
public void test_getDirectionFromDistances_null() {
MatrixElement start = new MatrixElement(0, 0);
assertNull("No direction when end equals start",
DistanceDirection.getDirectionFromDistances(start, start));
assertNull("No direction when end equals start",
DistanceDirection.getDirectionFromDistances(0, 0));
MatrixElement end = new MatrixElement(1, 2);
assertNull("Diagonal, but not 45-degrees",
DistanceDirection.getDirectionFromDistances(start, end));
}
@Test
public void test_getDirectionFromDistances_basicIntsForEachDir() {
assertEquals(MatrixDirection.DOWN,
DistanceDirection.getDirectionFromDistances(0, 1));
assertEquals(MatrixDirection.UP,
DistanceDirection.getDirectionFromDistances(0, -1));
assertEquals(MatrixDirection.LEFT,
DistanceDirection.getDirectionFromDistances(-1, 0));
assertEquals(MatrixDirection.RIGHT,
DistanceDirection.getDirectionFromDistances(1, 0));
assertEquals(MatrixDirection.DOWN_RIGHT,
DistanceDirection.getDirectionFromDistances(1, 1));
assertEquals(MatrixDirection.DOWN_LEFT,
DistanceDirection.getDirectionFromDistances(-1, 1));
assertEquals(MatrixDirection.UP_RIGHT,
DistanceDirection.getDirectionFromDistances(1, -1));
assertEquals(MatrixDirection.UP_LEFT,
DistanceDirection.getDirectionFromDistances(-1, -1));
}
@Test
public void test_getDirectionFromDistances_nonNull() {
MatrixElement start = new MatrixElement(0, 0);
MatrixElement end = new MatrixElement(1, 0);
testForTwoCoordsInclOpposite(start, end, MatrixDirection.DOWN);
start = new MatrixElement(2, 2);
end = new MatrixElement(2, 1);
testForTwoCoordsInclOpposite(start, end, MatrixDirection.LEFT);
end = new MatrixElement(3, 3);
testForTwoCoordsInclOpposite(start, end, MatrixDirection.DOWN_RIGHT);
end = new MatrixElement(1, 3);
testForTwoCoordsInclOpposite(start, end, MatrixDirection.UP_RIGHT);
}
public static final void testForTwoCoordsInclOpposite(MatrixElement start, MatrixElement end, MatrixDirection start_toEndDir) {
assertEquals(start_toEndDir,
DistanceDirection.getDirectionFromDistances(start, end));
assertEquals(start_toEndDir,
DistanceDirection.getDirectionFromDistances(start.getHorizDistance(end),
start.getVertDistance(end)));
MatrixDirection oppDir = start_toEndDir.getOpposite();
assertEquals(oppDir, DistanceDirection.getDirectionFromDistances(end, start));
assertEquals(oppDir,
DistanceDirection.getDirectionFromDistances(end.getHorizDistance(start),
end.getVertDistance(start)));
}
}