introduce bitloops

This commit is contained in:
mike
2026-01-14 02:18:40 +01:00
parent 1d731334d9
commit 107dfab0c7
4 changed files with 44 additions and 46 deletions

View File

@@ -26,7 +26,7 @@ public class ExportFormatTest {
@Test
void testExportFormatFromFilled() {
var swe = new SwedishGenerator(new Rng(0));
var swe = new SwedishGenerator(new Rng(0), new int[STACK_SIZE]);
var grid = Grid.createEmpty();
// Place a RIGHT clue at (0,0)
@@ -84,7 +84,7 @@ public class ExportFormatTest {
@Test
void testExportFormatEmpty() {
var swe = new SwedishGenerator(new Rng(0));
var swe = new SwedishGenerator(new Rng(0), new int[STACK_SIZE]);
var grid = Grid.createEmpty();
var fillResult = new FillResult(true, new Gridded(grid), new long[300], new FillStats(0, 0, 0, 0));
var puzzleResult = new PuzzleResult(swe, null, null, fillResult);

View File

@@ -261,13 +261,12 @@ public class SwedishGeneratorTest {
// Pattern "APP--" for length 5
var info = candidateInfoForPattern(Context.get().bitset(), packPattern("APP"), dict.index()[5], 5);
assertEquals(2, info.count());
assertNotNull(info.indices());
assertEquals(2, info.length);
assertNotNull(info);
}
@Test
void testForEachSlotAndExtractSlots() {
var gen = new SwedishGenerator(new Rng(0));
var grid = Grid.createEmpty();
// 3x3 grid (Config.PUZZLE_ROWS/COLS are 3 in test env)
// Set CLUE_RIGHT at OFF_0_0
@@ -285,23 +284,22 @@ public class SwedishGeneratorTest {
@Test
void testMaskFitnessBasic() {
var gen = new SwedishGenerator(new Rng(0));
var grid = Grid.createEmpty();
var stack = new int[STACK_SIZE];
var gen = new SwedishGenerator(new Rng(0), new int[STACK_SIZE]);
var grid = Grid.createEmpty();
// Empty grid should have high penalty (no slots)
var f1 = gen.maskFitness(grid, stack);
var f1 = gen.maskFitness(grid);
assertTrue(f1 >= 1_000_000_000L);
// Add a slot
grid.setClue(OFF_0_0, D_BYTE_2);
var f2 = gen.maskFitness(grid, stack);
var f2 = gen.maskFitness(grid);
assertTrue(f2 < f1);
}
@Test
void testGeneticAlgorithmComponents() {
var rng = new Rng(42);
var gen = new SwedishGenerator(rng);
var gen = new SwedishGenerator(rng, new int[STACK_SIZE]);
var g1 = gen.randomMask();
assertNotNull(g1);
@@ -312,8 +310,7 @@ public class SwedishGeneratorTest {
assertNotNull(gen.crossover(g1, g2));
val stack = new int[STACK_SIZE];
var g4 = gen.hillclimb(stack, g1, 10);
var g4 = gen.hillclimb(g1, 10);
assertNotNull(g4);
}
@@ -428,16 +425,15 @@ public class SwedishGeneratorTest {
@Test
void testMaskFitnessDetailed() {
var gen = new SwedishGenerator(new Rng(42));
var grid = Grid.createEmpty();
val stack = new int[STACK_SIZE];
var gen = new SwedishGenerator(new Rng(42), new int[STACK_SIZE]);
var grid = Grid.createEmpty();
// Empty grid: huge penalty
var fitEmpty = gen.maskFitness(grid, stack);
var fitEmpty = gen.maskFitness(grid);
assertTrue(fitEmpty >= 1_000_000_000L);
// Grid with one short slot: still high penalty but less than empty
grid.setClue(0, D_BYTE_2); // Right from 0,0. Len 2 if 3x3.
var fitOne = gen.maskFitness(grid, stack);
var fitOne = gen.maskFitness(grid);
assertTrue(fitOne < fitEmpty);
// Test penalty for TARGET_CLUES