introduce bitloops

This commit is contained in:
mike
2026-01-12 00:47:38 +01:00
parent 986c2f85a9
commit 84ba4c9c63
7 changed files with 164 additions and 143 deletions

View File

@@ -2,6 +2,7 @@ package puzzle;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import puzzle.Export.IntListDTO;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
@@ -91,7 +92,7 @@ public class SwedishGeneratorTest {
@Test
void testIntList() {
var list = new IntList();
var list = new IntListDTO();
assertEquals(0, list.size());
for (var i = 0; i < 10; i++) {
list.add(i);
@@ -103,27 +104,27 @@ public class SwedishGeneratorTest {
@Test
void testLemmaAndDict() {
var l2a = new Lemma("IN", 1);
var l4a = new Lemma("INER", 1);
var l6a = new Lemma("INEREN", 1);
var l7a = new Lemma("INERENA", 1);
var l8a = new Lemma("INERENAE", 1);
var l2a = new Lemma("IN");
var l4a = new Lemma("INER");
var l6a = new Lemma("INEREN");
var l7a = new Lemma("INERENA");
var l8a = new Lemma("INERENAE");
var l1 = new Lemma("APPLE", 5);
var l1 = new Lemma("APPLE");
Assertions.assertEquals(Lemma.pack("APPLE".getBytes(StandardCharsets.US_ASCII)), l1.word());
assertEquals(5, l1.len());
assertEquals(5, l1.simpel());
assertEquals((byte) 'A', l1.byteAt(0));
assertEquals(1, l1.intAt(0));
var l2 = new Lemma("AXE", 2);
var l2 = new Lemma("AXE");
var dict = new Dict(new Lemma[]{ l1, l2, l2a, l4a, l6a, l7a, l8a });
assertEquals(1, dict.index()[3].words().size());
assertEquals(1, dict.index()[5].words().size());
assertEquals(1, dict.index()[3].words().length);
assertEquals(1, dict.index()[5].words().length);
var entry3 = dict.index()[3];
assertEquals(1, entry3.words().size());
assertEquals(Lemma.pack("AXE".getBytes(StandardCharsets.US_ASCII)), entry3.words().getFirst().word());
assertEquals(1, entry3.words().length);
assertEquals(Lemma.pack("AXE".getBytes(StandardCharsets.US_ASCII)), entry3.words()[0].word());
// Check pos indexing
// AXE: A at 0, X at 1, E at 2
@@ -179,15 +180,15 @@ public class SwedishGeneratorTest {
@Test
void testCandidateInfoForPattern() {
var l0 = new Lemma("IN", 1);
var l3a = new Lemma("INE", 1);
var l4a = new Lemma("INER", 1);
var l6a = new Lemma("INEREN", 1);
var l7a = new Lemma("INERENA", 1);
var l8a = new Lemma("INERENAE", 1);
var l1 = new Lemma("APPLE", 1);
var l2 = new Lemma("APPLY", 1);
var l3 = new Lemma("BANAN", 1);
var l0 = new Lemma("IN");
var l3a = new Lemma("INE");
var l4a = new Lemma("INER");
var l6a = new Lemma("INEREN");
var l7a = new Lemma("INERENA");
var l8a = new Lemma("INERENAE");
var l1 = new Lemma("APPLE");
var l2 = new Lemma("APPLY");
var l3 = new Lemma("BANAN");
var dict = new Dict(new Lemma[]{ l0, l1, l2, l3, l3a, l4a, l6a, l7a, l8a });
// Pattern "APP--" for length 5
@@ -274,7 +275,7 @@ public class SwedishGeneratorTest {
// r(i) and c(i) are used by placeWord.
var packedPos = ((long) Grid.offset(0, 0)) | (((long) Grid.offset(0, 1)) << 7) | (((long) Grid.offset(0, 2)) << 14);
var s = Slot.from(0, packedPos, 3);
var w1 = new Lemma("ABC", 1);
var w1 = new Lemma("ABC");
var undoBuffer = new int[10];
// 1. Successful placement in empty grid
@@ -289,7 +290,7 @@ public class SwedishGeneratorTest {
assertEquals(0L, undoBuffer[1]); // 0 new characters placed
// 3. Conflict: place "ABD" where "ABC" is
var w2 = new Lemma("ABD", 1);
var w2 = new Lemma("ABD");
assertFalse(placeWord(grid, s, w2, undoBuffer, 2));
// Verify grid is unchanged (still "ABC")
assertEquals('A', grid.byteAt(Grid.offset(0, 0)));
@@ -312,7 +313,7 @@ public class SwedishGeneratorTest {
// Slot at 0,1 length 2
var packedPos = ((long) Grid.offset(0, 1)) | (((long) Grid.offset(0, 2)) << 7);
var s = Slot.from((0 << 8) | (1 << 4) | 2, packedPos, 2);
var w = new Lemma("AZ", 1);
var w = new Lemma("AZ");
var undoBuffer = new int[10];
var placed = placeWord(grid, s, w, undoBuffer, 0);