redo
This commit is contained in:
@@ -78,7 +78,7 @@ public class MainTest {
|
||||
@Test
|
||||
void testForEachSlot() {
|
||||
var count = new AtomicInteger(0);
|
||||
Signa.of(r0c0d1).forEachSlot((key, lo, hi) -> {
|
||||
Masker.forEachSlot(Signa.of(r0c0d1).c(), (key, lo, hi) -> {
|
||||
count.incrementAndGet();
|
||||
assertEquals(8, Long.bitCount(lo) + Long.bitCount(hi));
|
||||
assertEquals(0, Masker.IT[Long.numberOfTrailingZeros(lo)].r());
|
||||
@@ -181,7 +181,7 @@ public class MainTest {
|
||||
);
|
||||
var slotInfo = mask.slots(DictData950.DICT950);
|
||||
var grid = Slotinfo.grid(slotInfo);
|
||||
var filled = fillMask(rng, slotInfo, grid.lo,grid.hi, grid.g);
|
||||
var filled = fillMask(rng, slotInfo, grid.lo, grid.hi, grid.g);
|
||||
Assertions.assertTrue(filled.ok(), "Puzzle generation failed (not ok)");
|
||||
Assertions.assertEquals(17, Slotinfo.wordCount(0, slotInfo), "Number of assigned words changed");
|
||||
Assertions.assertEquals("BEADEMT", Lemma.asWord(slotInfo[0].assign().w, Export.BYTES.get()));
|
||||
|
||||
@@ -7,7 +7,6 @@ import puzzle.Export.Puzzle;
|
||||
import puzzle.Export.Placed;
|
||||
import puzzle.Export.PuzzleResult;
|
||||
import puzzle.Export.Rewards;
|
||||
import puzzle.Masker.Clues;
|
||||
import puzzle.SwedishGenerator.Assign;
|
||||
import puzzle.SwedishGenerator.FillResult;
|
||||
import puzzle.SwedishGenerator.Lemma;
|
||||
@@ -52,7 +51,7 @@ public class MarkerTest {
|
||||
val orig = cache.from(clues);
|
||||
simCount++;
|
||||
masker.mutate(clues);
|
||||
sim += orig.similarity(clues);
|
||||
sim += Masker.similarity(orig, clues);
|
||||
assertTrue(masker.isValid(clues), "Mask should be valid for length \n" + new Signa(clues).gridToString());
|
||||
}
|
||||
}
|
||||
@@ -71,7 +70,7 @@ public class MarkerTest {
|
||||
var clues2 = masker.randomMask(j);
|
||||
simCount++;
|
||||
var cross = masker.crossover(clues, clues2);
|
||||
sim += Math.max(cross.similarity(clues), cross.similarity(clues2));
|
||||
sim += Math.max(Masker.similarity(cross, clues), Masker.similarity(cross, clues2));
|
||||
assertTrue(masker.isValid(cross), "Mask should be valid for length \n" + new Signa(cross).gridToString());
|
||||
}
|
||||
}
|
||||
@@ -83,17 +82,17 @@ public class MarkerTest {
|
||||
var b = Signa.of(r0c0d1, r2c1d0).c();
|
||||
|
||||
// Identity
|
||||
assertEquals(1.0, a.similarity(b), 0.001);
|
||||
assertEquals(1.0, Masker.similarity(a, b), 0.001);
|
||||
|
||||
// Different direction
|
||||
var c = Signa.of(r0c0d0, r2c1d0);
|
||||
assertTrue(a.similarity(c.c()) < 1.0);
|
||||
assertTrue(Masker.similarity(a, c.c()) < 1.0);
|
||||
|
||||
// Completely different
|
||||
var d = Clues.createEmpty();
|
||||
// Matching empty cells count towards similarity.
|
||||
// a has 2 clues, d has 0. They match on 70 empty cells.
|
||||
assertEquals(70.0 / 72.0, a.similarity(d), 0.001);
|
||||
assertEquals(70.0 / 72.0, Masker.similarity(a, d), 0.001);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -113,22 +112,22 @@ public class MarkerTest {
|
||||
var g = Clues.createEmpty();
|
||||
|
||||
// Room for Right clue at (0,0) (length 8)
|
||||
assertTrue(g.hasRoomForClue(r0c0d1.slotKey));
|
||||
assertTrue(Masker.hasRoomForClue(g,r0c0d1.slotKey));
|
||||
|
||||
// No room for Right clue at (0,8) (length 0 < MIN_LEN)
|
||||
assertFalse(g.hasRoomForClue(r0c8d1.slotKey));
|
||||
assertFalse(Masker.hasRoomForClue(g,r0c8d1.slotKey));
|
||||
|
||||
// Blocked room
|
||||
// Let's place a clue that leaves only 1 cell for another clue.
|
||||
g.setClue(r0c2d1);
|
||||
// Now Right at (0,0) only has (0,1) available -> length 1 < MIN_LEN (which is 2)
|
||||
assertFalse(g.hasRoomForClue(r0c0d1.slotKey));
|
||||
assertFalse(Masker.hasRoomForClue(g,r0c0d1.slotKey));
|
||||
|
||||
// But enough room
|
||||
g.clearClueLo(0L);
|
||||
g.setClue(r0c3d1);
|
||||
// Now Right at (0,0) has (0,1), (0,2) -> length 2 == MIN_LEN
|
||||
assertTrue(g.hasRoomForClue(r0c0d1.slotKey));
|
||||
assertTrue(Masker.hasRoomForClue(g,r0c0d1.slotKey));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -239,7 +238,7 @@ public class MarkerTest {
|
||||
|
||||
// Controleer of forEachSlot het slot vindt
|
||||
final var found = new boolean[]{ false };
|
||||
clues.forEachSlot((key, lo, hi) -> {
|
||||
Masker.forEachSlot(clues.c(), (key, lo, hi) -> {
|
||||
if (key == r0c0d4.slotKey) {
|
||||
found[0] = true;
|
||||
// Woord zou moeten starten op (0,1)
|
||||
@@ -269,7 +268,7 @@ public class MarkerTest {
|
||||
|
||||
// Controleer of forEachSlot het slot vindt
|
||||
final var found = new boolean[]{ false };
|
||||
clues.forEachSlot((key, lo, hi) -> {
|
||||
Masker.forEachSlot(clues.c(), (key, lo, hi) -> {
|
||||
if (key == r0c1d5.slotKey) {
|
||||
found[0] = true;
|
||||
// Woord zou moeten starten op (0,0)
|
||||
|
||||
@@ -8,8 +8,6 @@ import org.junit.jupiter.api.Test;
|
||||
import puzzle.Export.Clue;
|
||||
import puzzle.Export.Signa;
|
||||
import puzzle.Export.Puzzle;
|
||||
import puzzle.Masker.Clues;
|
||||
import puzzle.SwedishGenerator.Grid;
|
||||
import puzzle.SwedishGenerator.Rng;
|
||||
import puzzle.SwedishGenerator.Slotinfo;
|
||||
|
||||
@@ -50,7 +48,7 @@ public class PerformanceTest {
|
||||
var c = 0;
|
||||
for (var size : clueSizes) {
|
||||
var t0 = System.currentTimeMillis();
|
||||
val masker = new Masker(rng, new int[Masker.STACK_SIZE], Masker.Clues.createEmpty());
|
||||
val masker = new Masker(rng, new int[Masker.STACK_SIZE], Clues.createEmpty());
|
||||
// Increased population and generations for stress
|
||||
arr[c++] = masker.generateMask(size, 200, 100, 50);
|
||||
var t1 = System.currentTimeMillis();
|
||||
|
||||
@@ -13,7 +13,6 @@ import puzzle.DictJavaGeneratorMulti.DictEntryDTO.IntListDTO;
|
||||
import puzzle.Export.Signa;
|
||||
import puzzle.Export.Puzzle;
|
||||
import puzzle.Export.Lettrix;
|
||||
import puzzle.Masker.Clues;
|
||||
import puzzle.Masker.Slot;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
@@ -220,8 +219,8 @@ public class SwedishGeneratorTest {
|
||||
|
||||
@Test
|
||||
void testMaskFitnessBasic() {
|
||||
var gen = new Masker(new Rng(0), new int[Masker.STACK_SIZE], Masker.Clues.createEmpty());
|
||||
var grid = Masker.Clues.createEmpty();
|
||||
var gen = new Masker(new Rng(0), new int[Masker.STACK_SIZE], Clues.createEmpty());
|
||||
var grid = Clues.createEmpty();
|
||||
// Empty grid should have high penalty (no slots)
|
||||
var f1 = gen.maskFitness(grid, 18);
|
||||
assertTrue(f1 >= 1_000_000_000L);
|
||||
@@ -234,7 +233,7 @@ public class SwedishGeneratorTest {
|
||||
|
||||
@Test
|
||||
void testGeneticAlgorithmComponents() {
|
||||
var gen = new Masker(new Rng(42), new int[Masker.STACK_SIZE], Masker.Clues.createEmpty());
|
||||
var gen = new Masker(new Rng(42), new int[Masker.STACK_SIZE], Clues.createEmpty());
|
||||
var c1 = new Signa(gen.randomMask(18));
|
||||
assertNotNull(c1);
|
||||
var g2 = new Signa(gen.mutate(c1.deepCopyGrid().c()));
|
||||
@@ -332,8 +331,8 @@ public class SwedishGeneratorTest {
|
||||
|
||||
@Test
|
||||
void testMaskFitnessDetailed() {
|
||||
var gen = new Masker(new Rng(42), new int[Masker.STACK_SIZE], Masker.Clues.createEmpty());
|
||||
var grid = Masker.Clues.createEmpty();
|
||||
var gen = new Masker(new Rng(42), new int[Masker.STACK_SIZE], Clues.createEmpty());
|
||||
var grid = Clues.createEmpty();
|
||||
// Empty grid: huge penalty
|
||||
var fitEmpty = gen.maskFitness(grid, 18);
|
||||
assertTrue(fitEmpty >= 1_000_000_000L);
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package puzzle;
|
||||
|
||||
import puzzle.Masker_Neighbors4x3;
|
||||
import gen.Test123X_Neighbors4x3;
|
||||
import gen.Test123X_Neighbors9x8;
|
||||
import lombok.val;
|
||||
@@ -32,7 +33,7 @@ public class TestDuplication {
|
||||
Assertions.assertEquals(4, mask.clueCount());
|
||||
val map = mask.stream().collect(Collectors.toMap(Vestigium::index, Vestigium::clue));
|
||||
Assertions.assertEquals(4, map.size());
|
||||
var slots = mask.slots(DictData800.DICT800);
|
||||
var slots = Masker_Neighbors4x3.slots(mask.c(), DictData800.DICT800);
|
||||
// var filled = fillMask(rng, slotInfo, grid, false);
|
||||
// val res = new PuzzleResult(new Clued(mask), new Gridded(grid), slotInfo, filled).exportFormatFromFilled(0, new Rewards(0, 0, 0));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user