use of common.datastore.Operations in project solution-finder by knewjade.
the class PathCSVCaseTest method none1.
@Test
void none1() throws Exception {
// フォーマットをCSV
/*
comment: 4 -p I,*p6
X_________
XXXXX_____
XXXXX_____
XXXXX_____
*/
String tetfu = "v115@9gA8IeE8EeE8EeE8OeAgWQA0no2ANI98AwN88AjPEN?B";
int height = 4;
ConfigFileHelper.createFieldFile(FieldFactory.createField(height), height);
ConfigFileHelper.createPatternFile("*p2");
String command = String.format("path -t %s -f csv -k none", tetfu);
Log log = RunnerHelper.runnerCatchingLog(() -> EntryPointMain.main(command.split(" ")));
assertThat(log.getOutput()).contains("I,*p6").contains(Messages.clearLine(4)).contains(Messages.uniqueCount(186)).contains(Messages.minimalCount(142)).contains(Messages.useHold());
assertThat(log.getReturnCode()).isEqualTo(0);
Field field = FieldFactory.createField("" + "X_________" + "XXXXX_____" + "XXXXX_____" + "XXXXX_____");
// unique
PathCSV uniqueCSV = OutputFileHelper.loadPathUniqueNoneCSV();
assertThat(uniqueCSV.operations().stream().map(operations -> {
Field freeze = field.freeze(height);
for (Operation operation : operations.getOperations()) {
freeze.put(new Mino(operation.getPiece(), operation.getRotate()), operation.getX(), operation.getY());
freeze.clearLine();
}
return freeze;
})).hasSize(186).allMatch(Field::isPerfect);
// minimal
PathCSV minimalCSV = OutputFileHelper.loadPathMinimalNoneCSV();
assertThat(minimalCSV.operations().stream().map(operations -> {
Field freeze = field.freeze(height);
for (Operation operation : operations.getOperations()) {
freeze.put(new Mino(operation.getPiece(), operation.getRotate()), operation.getX(), operation.getY());
freeze.clearLine();
}
return freeze;
})).hasSize(142).allMatch(Field::isPerfect);
}
use of common.datastore.Operations in project solution-finder by knewjade.
the class OperationInterpreterTest method parseToOperations.
@Test
void parseToOperations() throws Exception {
String base = "T,0,1,0;L,2,1,2;I,L,3,1;J,2,1,3";
Operations operations = OperationInterpreter.parseToOperations(base);
String str = OperationInterpreter.parseToString(operations);
assertThat(base).isEqualTo(str);
}
use of common.datastore.Operations in project solution-finder by knewjade.
the class OperationTransformTest method parseToOperationWithKeys2.
@Test
void parseToOperationWithKeys2() throws Exception {
Field field = FieldFactory.createField(4);
String base = "T,2,5,1;I,0,2,0;I,0,7,0;I,L,0,1";
Operations operations = OperationInterpreter.parseToOperations(base);
MinoFactory minoFactory = new MinoFactory();
List<MinoOperationWithKey> operationWithKeys = OperationTransform.parseToOperationWithKeys(field, operations, minoFactory, 4);
String line = OperationWithKeyInterpreter.parseToString(operationWithKeys);
assertThat(line).isEqualTo("T,2,5,1,0,1025;I,0,2,0,0,1;I,0,7,0,0,1;I,L,0,1,0,1074791425");
}
use of common.datastore.Operations in project solution-finder by knewjade.
the class OperationTransformTest method parseToOperations.
@Test
void parseToOperations() throws Exception {
Field field = FieldFactory.createField("" + "____XXXXXX" + "____XXXXXX" + "____XXXXXX" + "____XXXXXX" + "");
String base = "J,2,2,1;I,0,1,2;J,R,0,1;S,0,2,0";
Operations operations = OperationInterpreter.parseToOperations(base);
MinoFactory minoFactory = new MinoFactory();
List<MinoOperationWithKey> operationWithKeys = OperationTransform.parseToOperationWithKeys(field, operations, minoFactory, 4);
Operations restoreOperations = OperationTransform.parseToOperations(field, operationWithKeys, 4);
assertThat(restoreOperations).isEqualTo(operations);
}
use of common.datastore.Operations in project solution-finder by knewjade.
the class OperationTransformTest method randomParse.
@Test
@LongTest
void randomParse() throws Exception {
// Initialize
Randoms randoms = new Randoms();
MinoFactory minoFactory = new MinoFactory();
MinoShifter minoShifter = new MinoShifter();
MinoRotation minoRotation = new MinoRotation();
// Define size
int height = 4;
int basicWidth = 3;
SizedBit sizedBit = new SizedBit(basicWidth, height);
SeparableMinos separableMinos = SeparableMinos.createSeparableMinos(minoFactory, minoShifter, sizedBit);
// Create basic solutions
TaskResultHelper taskResultHelper = new Field4x10MinoPackingHelper();
LockedReachableThreadLocal lockedReachableThreadLocal = new LockedReachableThreadLocal(minoFactory, minoShifter, minoRotation, height);
Predicate<ColumnField> memorizedPredicate = (columnField) -> true;
OnDemandBasicSolutions basicSolutions = new OnDemandBasicSolutions(separableMinos, sizedBit, memorizedPredicate);
for (int count = 0; count < 100; count++) {
// Create field
int numOfMinos = randoms.nextInt(6, 10);
Field field = randoms.field(height, numOfMinos);
// Search
List<InOutPairField> inOutPairFields = InOutPairField.createInOutPairFields(basicWidth, height, field);
SolutionFilter solutionFilter = new SRSValidSolutionFilter(field, lockedReachableThreadLocal, sizedBit);
PerfectPackSearcher searcher = new PerfectPackSearcher(inOutPairFields, basicSolutions, sizedBit, solutionFilter, taskResultHelper);
Optional<Result> resultOptional = searcher.findAny();
OperationWithKeyComparator<MinoOperationWithKey> operationWithKeyComparator = new OperationWithKeyComparator<>();
ListComparator<MinoOperationWithKey> comparator = new ListComparator<>(operationWithKeyComparator);
BuildUpStream buildUpStream = new BuildUpStream(lockedReachableThreadLocal.get(), height);
// If found solution
resultOptional.ifPresent(result -> {
List<MinoOperationWithKey> list = result.getMemento().getSeparableMinoStream(basicWidth).map(SeparableMino::toMinoOperationWithKey).collect(Collectors.toList());
Optional<List<MinoOperationWithKey>> validOption = buildUpStream.existsValidBuildPattern(field, list).findAny();
validOption.ifPresent(operationWithKeys -> {
Operations operations = OperationTransform.parseToOperations(field, operationWithKeys, height);
List<MinoOperationWithKey> actual = OperationTransform.parseToOperationWithKeys(field, operations, minoFactory, height);
assertThat(comparator.compare(operationWithKeys, actual)).as("%s%n%s%n %s", FieldView.toString(field, height), OperationWithKeyInterpreter.parseToString(operationWithKeys), OperationWithKeyInterpreter.parseToString(actual)).isEqualTo(0);
});
});
}
}
Aggregations