introduce bitloops

This commit is contained in:
mike
2026-01-20 22:48:38 +01:00
parent b66437bb70
commit 85fa317eec
6 changed files with 95 additions and 88 deletions

View File

@@ -4,6 +4,7 @@ import module java.base;
import lombok.val;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import precomp.Neighbors9x8.rci;
import puzzle.Export.ClueAt;
import puzzle.Export.Clued;
import puzzle.Export.Gridded;
@@ -23,10 +24,10 @@ import static precomp.Const9x8.OFF_1_1;
import static precomp.Const9x8.OFF_1_2;
import static precomp.Const9x8.OFF_2_1;
import static precomp.Const9x8.OFF_2_3;
import static puzzle.Export.Clue.DOWN;
import static puzzle.Export.Clue.LEFT;
import static puzzle.Export.Clue.RIGHT;
import static puzzle.Export.Clue.UP;
import static puzzle.Export.Clue.DOWN0;
import static puzzle.Export.Clue.LEFT3;
import static puzzle.Export.Clue.RIGHT1;
import static puzzle.Export.Clue.UP2;
import static puzzle.SwedishGenerator.Lemma;
import static puzzle.SwedishGenerator.Slotinfo;
import static puzzle.SwedishGenerator.fillMask;
@@ -70,11 +71,11 @@ public class MainTest {
assertEquals(1, slots.length);
var s = slots[0];
assertEquals(8, Masker.Slot.length(s.lo(), s.hi()));
var cells = Gridded.cellWalk((byte) s.key(), s.lo(), s.hi()).toArray();
assertEquals(0, Masker.IT[cells[0]].r());
assertEquals(1, Masker.IT[cells[0]].c());
assertEquals(0, Masker.IT[cells[1]].r());
assertEquals(2, Masker.IT[cells[1]].c());
var cells = Gridded.cellWalk((byte) s.key(), s.lo(), s.hi()).mapToObj(c-> Masker.IT[c]).toArray(rci[]::new);
assertEquals(0, cells[0].r());
assertEquals(1, cells[0].c());
assertEquals(0, cells[1].r());
assertEquals(2, cells[1].c());
}
@Test
@@ -125,10 +126,10 @@ public class MainTest {
Assertions.assertEquals(CLUE_UP, clueMap.get(OFF_2_1));
// Test isLetterAt
Assertions.assertTrue(clues.notClue(OFF_0_0));
Assertions.assertTrue(clues.notClue(OFF_1_2));
Assertions.assertTrue(clues.notClue(OFF_2_3));
Assertions.assertFalse(clues.isClueLo(OFF_1_1));
Assertions.assertFalse(clueMap.containsKey(OFF_0_0));
Assertions.assertFalse(clueMap.containsKey(OFF_1_2));
Assertions.assertFalse(clueMap.containsKey(OFF_2_3));
Assertions.assertFalse(clueMap.containsKey(OFF_1_1));
// Test isDigitAt
Assertions.assertFalse(clues.isClueLo(OFF_0_0));
@@ -146,19 +147,19 @@ public class MainTest {
@Test
public void testCluesDeepCopy() {
var clues = new Clued(Masker.Clues.createEmpty());
clues.setClueLo(IDX_0_0.lo, RIGHT.dir);
clues.setClueLo(IDX_0_1.lo, UP.dir);
clues.setClueLo(IDX_1_0.lo, LEFT.dir);
clues.setClueLo(IDX_1_1.lo, DOWN.dir);
clues.setClueLo(IDX_0_0.lo, RIGHT1.dir);
clues.setClueLo(IDX_0_1.lo, UP2.dir);
clues.setClueLo(IDX_1_0.lo, LEFT3.dir);
clues.setClueLo(IDX_1_1.lo, DOWN0.dir);
var copy = clues.deepCopyGrid();
var clueMap = clues.stream().collect(Collectors.toMap(ClueAt::index, ClueAt::clue));
Assertions.assertEquals(CLUE_RIGHT, clueMap.get(OFF_0_0));
copy.setClueLo(IDX_0_0.lo, DOWN.dir);
copy.setClueLo(IDX_0_0.lo, DOWN0.dir);
var copied = copy.stream().collect(Collectors.toMap(ClueAt::index, ClueAt::clue));
Assertions.assertEquals(DOWN.dir, copied.get(OFF_0_0));
Assertions.assertEquals(RIGHT.dir, clueMap.get(OFF_0_0));
Assertions.assertEquals(DOWN0.dir, copied.get(OFF_0_0));
Assertions.assertEquals(RIGHT1.dir, clueMap.get(OFF_0_0));
}
@Test
public void testMini() {