use of core.action.candidate.LockedCandidate in project solution-finder by knewjade.
the class CheckerNoHoldTest method testCase2.
@Test
void testCase2() throws Exception {
List<Pair<List<Piece>, Boolean>> testCases = new ArrayList<Pair<List<Piece>, Boolean>>() {
{
add(new Pair<>(Arrays.asList(I, L, T, S, Z), true));
}
};
// Field
String marks = "" + "XX______XX" + "X______XXX" + "X______XXX" + "XX_XXX_XXX" + "";
Field field = FieldFactory.createField(marks);
int maxClearLine = 4;
int maxDepth = 5;
// Initialize
Candidate<Action> candidate = new LockedCandidate(minoFactory, minoShifter, minoRotation, maxClearLine);
LockedReachable reachable = new LockedReachable(minoFactory, minoShifter, minoRotation, maxClearLine);
// Assertion
for (Pair<List<Piece>, Boolean> testCase : testCases) {
// Set test case
List<Piece> pieces = testCase.getKey();
Boolean expectedCount = testCase.getValue();
// Execute
boolean isSucceed = checker.check(field, pieces, candidate, maxClearLine, maxDepth);
assertThat(isSucceed).isEqualTo(expectedCount);
// Check result
if (isSucceed)
assertResult(field, maxClearLine, reachable, pieces);
}
}
use of core.action.candidate.LockedCandidate in project solution-finder by knewjade.
the class CheckerUsingHoldCountTest method testTemplate.
@Test
void testTemplate() throws Exception {
// Invoker
List<Piece> pieces = Arrays.asList(I, T, S, Z, J, L, O);
int popCount = 4;
int maxClearLine = 4;
int maxDepth = 3;
// Field
String marks = "" + "XXXXX____X" + "XXXXXX___X" + "XXXXXXX__X" + "XXXXXX___X" + "";
Field field = FieldFactory.createField(marks);
// Initialize
MinoFactory minoFactory = new MinoFactory();
MinoShifter minoShifter = new MinoShifter();
MinoRotation minoRotation = new MinoRotation();
PerfectValidator validator = new PerfectValidator();
CheckerUsingHold<Action> checker = new CheckerUsingHold<>(minoFactory, validator);
// Measure
Candidate<Action> candidate = new LockedCandidate(minoFactory, minoShifter, minoRotation, maxClearLine);
AnalyzeTree tree = new AnalyzeTree();
Iterable<List<Piece>> combinations = new PermutationIterable<>(pieces, popCount);
for (List<Piece> combination : combinations) {
boolean result = checker.check(field, combination, candidate, maxClearLine, maxDepth);
tree.set(result, combination);
}
// Source: Nilgiri: https://docs.google.com/spreadsheets/d/1bVY3t_X96xRmUL0qdgB9tViSIGenu6RMKX4RW7qWg8Y/edit#gid=0
assertThat(tree.getSuccessPercent()).isEqualTo(514 / 840.0);
}
use of core.action.candidate.LockedCandidate in project solution-finder by knewjade.
the class CheckerUsingHoldCountTest method testBT4_5.
@Test
@LongTest
void testBT4_5() throws Exception {
// Invoker
List<Piece> pieces = Arrays.asList(I, T, S, Z, J, L, O);
int popCount = 7;
int maxClearLine = 6;
int maxDepth = 7;
// Field
String marks = "" + "XX________" + "XX________" + "XXX______X" + "XXXXXXX__X" + "XXXXXX___X" + "XXXXXXX_XX" + "";
Field field = FieldFactory.createField(marks);
// Initialize
MinoFactory minoFactory = new MinoFactory();
MinoShifter minoShifter = new MinoShifter();
MinoRotation minoRotation = new MinoRotation();
PerfectValidator validator = new PerfectValidator();
CheckerUsingHold<Action> checker = new CheckerUsingHold<>(minoFactory, validator);
// Measure
Candidate<Action> candidate = new LockedCandidate(minoFactory, minoShifter, minoRotation, maxClearLine);
AnalyzeTree tree = new AnalyzeTree();
Iterable<List<Piece>> combinations = new PermutationIterable<>(pieces, popCount);
for (List<Piece> combination : combinations) {
boolean result = checker.check(field, combination, candidate, maxClearLine, maxDepth);
tree.set(result, combination);
}
// Source: myself 20170415
assertThat(tree.getSuccessPercent()).isEqualTo(5038 / 5040.0);
}
use of core.action.candidate.LockedCandidate in project solution-finder by knewjade.
the class CheckerUsingHoldCountTest method runTestCase.
private AnalyzeTree runTestCase(List<Piece> pieces, int popCount, int maxClearLine, int maxDepth, String marks) {
Field field = FieldFactory.createField(marks);
// Initialize
MinoFactory minoFactory = new MinoFactory();
MinoShifter minoShifter = new MinoShifter();
MinoRotation minoRotation = new MinoRotation();
PerfectValidator validator = new PerfectValidator();
CheckerUsingHold<Action> checker = new CheckerUsingHold<>(minoFactory, validator);
// Measure
Candidate<Action> candidate = new LockedCandidate(minoFactory, minoShifter, minoRotation, maxClearLine);
AnalyzeTree tree = new AnalyzeTree();
Iterable<List<Piece>> combinations = new PermutationIterable<>(pieces, popCount);
for (List<Piece> combination : combinations) {
// Hold分の追加
combination.add(0, Piece.T);
boolean result = checker.check(field, combination, candidate, maxClearLine, maxDepth);
tree.set(result, combination);
}
return tree;
}
use of core.action.candidate.LockedCandidate in project solution-finder by knewjade.
the class CheckerUsingHoldCountTest method testAfter4Line.
@Test
@LongTest
void testAfter4Line() throws Exception {
// Invoker
List<Piece> pieces = Arrays.asList(I, T, S, Z, J, L, O);
int popCount = 7;
int maxClearLine = 4;
int maxDepth = 6;
// Field
String marks = "" + "XXXX______" + "XXXX______" + "XXXX______" + "XXXX______" + "";
Field field = FieldFactory.createField(marks);
// Initialize
MinoFactory minoFactory = new MinoFactory();
MinoShifter minoShifter = new MinoShifter();
MinoRotation minoRotation = new MinoRotation();
PerfectValidator validator = new PerfectValidator();
CheckerUsingHold<Action> checker = new CheckerUsingHold<>(minoFactory, validator);
// Measure
Candidate<Action> candidate = new LockedCandidate(minoFactory, minoShifter, minoRotation, maxClearLine);
AnalyzeTree tree = new AnalyzeTree();
Iterable<List<Piece>> combinations = new PermutationIterable<>(pieces, popCount);
for (List<Piece> combination : combinations) {
boolean result = checker.check(field, combination, candidate, maxClearLine, maxDepth);
tree.set(result, combination);
}
// Source: myself 20170415
assertThat(tree.getSuccessPercent()).isEqualTo(5040 / 5040.0);
}
Aggregations