introduce bitloops

This commit is contained in:
mike
2026-01-14 03:30:19 +01:00
parent b0b10d356a
commit 19f235ae59
6 changed files with 123 additions and 142 deletions

View File

@@ -91,21 +91,6 @@ public class SwedishGeneratorTest {
void testGrid() {
var grid = Grid.createEmpty();
grid.setLetter(OFF_0_0, LETTER_A);
grid.setClue(OFF_0_1, CLUE_LEFT);
assertEquals('A', grid.byteAt(OFF_0_0));
assertEquals(CLUE_LEFT, grid.digitAt(OFF_0_1));
assertTrue(grid.notClue(OFF_0_0));
assertFalse(grid.isClue(OFF_0_0));
assertTrue(grid.isClue(OFF_0_1));
assertFalse(grid.notClue(OFF_0_1));
assertTrue(grid.notClue(OFF_0_0));
assertFalse(grid.notClue(OFF_0_1));
var copy = grid.deepCopyGrid();
assertEquals('A', copy.byteAt(OFF_0_0));
copy.setLetter(OFF_0_0, LETTER_B);
assertEquals('B', copy.byteAt(OFF_0_0));
assertEquals('A', grid.byteAt(OFF_0_0));
}
@@ -267,11 +252,11 @@ public class SwedishGeneratorTest {
@Test
void testForEachSlotAndExtractSlots() {
var grid = Grid.createEmpty();
// 3x3 grid (Config.PUZZLE_ROWS/COLS are 3 in test env)
// Set CLUE_RIGHT at OFF_0_0
grid.setClue(OFF_0_0, CLUE_RIGHT);
// This should detect a slot starting at 0,1 with length 2 (0,1 and 0,2)
var clues = Clues.createEmpty();
clues.setClue(OFF_0_0, CLUE_RIGHT);
var grid = clues.toGrid();
var slots = extractSlots(grid);
assertEquals(1, slots.length);
@@ -430,20 +415,8 @@ public class SwedishGeneratorTest {
// Empty grid: huge penalty
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);
assertTrue(fitOne < fitEmpty);
// Test penalty for TARGET_CLUES
// TARGET_CLUES = SIZE >>> 2. For 3x3 it is 9 >>> 2 = 2.
// If we have 1 clue, |1 - 2| * 16000 = 16000 penalty.
// If we add another clue at a distant position.
var grid2 = Grid.createEmpty();
grid2.setClue(0, D_BYTE_2);
grid2.setClue(Grid.offset(2, 0), D_BYTE_2);
// Now clueCount = 2, penalty should be 0 from target clues.
// But they might have other penalties (short slots, etc.)
}
}