introduce bitloops
This commit is contained in:
@@ -37,12 +37,6 @@ public class MainTest {
|
||||
|
||||
@Test
|
||||
void testStaticSlotMethods() {
|
||||
// Test static offset extraction
|
||||
// packedPos: offset(1, 1) at index 0, offset(2, 2) at index 1
|
||||
var packedPos = ((long) Grid.offset(1, 1)) | (((long) Grid.offset(2, 2)) << 7);
|
||||
assertEquals(Grid.offset(1, 1), Slot.offset(packedPos, 0));
|
||||
assertEquals(Grid.offset(2, 2), Slot.offset(packedPos, 1));
|
||||
|
||||
// Test static horiz
|
||||
// dir 2 (right) is horizontal
|
||||
assertTrue(Slot.horiz(2));
|
||||
@@ -56,21 +50,20 @@ public class MainTest {
|
||||
grid.setClue(0, (byte) '2'); // right
|
||||
|
||||
var count = new AtomicInteger(0);
|
||||
grid.forEachSlot((key, packedPos, len) -> {
|
||||
grid.forEachSlot((key, lo, hi) -> {
|
||||
count.incrementAndGet();
|
||||
assertEquals(8, len);
|
||||
assertEquals(0, Grid.r(Slot.offset(packedPos, 0)));
|
||||
assertEquals(1, Grid.c(Slot.offset(packedPos, 0)));
|
||||
assertEquals(8, Long.bitCount(lo) + Long.bitCount(hi));
|
||||
assertEquals(0, Grid.r(Long.numberOfTrailingZeros(lo)));
|
||||
assertEquals(1, Grid.c(Long.numberOfTrailingZeros(lo)));
|
||||
});
|
||||
assertEquals(1, count.get());
|
||||
}
|
||||
@Test
|
||||
public void testHoriz() {
|
||||
assertTrue(Slot.from(2, 0L, 1).horiz());
|
||||
assertTrue(Slot.from(4, 0L, 1).horiz());
|
||||
assertFalse(Slot.from(1, 0L, 1).horiz());
|
||||
assertFalse(Slot.from(3, 0L, 1).horiz());
|
||||
assertFalse(Slot.from(5, 0L, 1).horiz());
|
||||
assertTrue(Slot.from(2, 0L, 0L).horiz());
|
||||
assertTrue(Slot.from(4, 0L, 0L).horiz());
|
||||
assertFalse(Slot.from(1, 0L, 0L).horiz());
|
||||
assertFalse(Slot.from(3, 0L, 0L).horiz());
|
||||
}
|
||||
@Test
|
||||
public void testGridBasics() {
|
||||
|
||||
@@ -15,7 +15,7 @@ public class SwedishGeneratorTest {
|
||||
@Test
|
||||
void testPatternForSlotAllLetters() {
|
||||
var grid = new Grid(new byte[]{ 65, 66, 67 }); // A B C
|
||||
var slot = Slot.from(18, ((long) 0) | ((long) 1 << 7) | ((long) 2 << 14), 3);
|
||||
var slot = Slot.from(18, 7L, 0L);
|
||||
long pattern = patternForSlot(grid, slot);
|
||||
|
||||
assertEquals(1 | (2 << 5) | (3 << 10), pattern);
|
||||
@@ -24,7 +24,7 @@ public class SwedishGeneratorTest {
|
||||
@Test
|
||||
void testPatternForSlotMixed() {
|
||||
var grid = new Grid(new byte[]{ 65, DASH, 67 }); // A - C
|
||||
var slot = Slot.from(1 << 4 | 2, ((long) 0) | ((long) 1 << 7) | ((long) 2 << 14), 3);
|
||||
var slot = Slot.from(1 << 3 | 2, 7L, 0L);
|
||||
long pattern = patternForSlot(grid, slot);
|
||||
|
||||
assertEquals(1 | (0 << 5) | (3 << 10), pattern);
|
||||
@@ -33,7 +33,7 @@ public class SwedishGeneratorTest {
|
||||
@Test
|
||||
void testPatternForSlotAllDashes() {
|
||||
var grid = new Grid(new byte[]{ DASH, DASH, DASH }); // - - -
|
||||
var slot = Slot.from(1 << 4 | 2, ((long) 0) | ((long) 1 << 7) | ((long) 2 << 14), 3);
|
||||
var slot = Slot.from(1 << 3 | 2, 7L, 0L);
|
||||
long pattern = patternForSlot(grid, slot);
|
||||
|
||||
assertEquals(0, pattern);
|
||||
@@ -42,7 +42,7 @@ public class SwedishGeneratorTest {
|
||||
@Test
|
||||
void testPatternForSlotSingleLetter() {
|
||||
var grid = new Grid(new byte[]{ 65, DASH, DASH }); // A - -
|
||||
var slot = Slot.from(1 << 4 | 2, ((long) 0) | ((long) 1 << 7) | ((long) 2 << 14), 3);
|
||||
var slot = Slot.from(1 << 3 | 2, 7L, 0L);
|
||||
long pattern = patternForSlot(grid, slot);
|
||||
|
||||
assertEquals(1, pattern);
|
||||
@@ -136,21 +136,21 @@ public class SwedishGeneratorTest {
|
||||
// key = (r << 8) | (c << 4) | d
|
||||
var offset = Grid.offset(2, 3);
|
||||
System.out.println("[DEBUG_LOG] Grid.offset(2, 3) = " + offset);
|
||||
var key = (offset << Slot.BIT_FOR_DIR) | 5;
|
||||
var key = (offset << Slot.BIT_FOR_DIR) | 3;
|
||||
System.out.println("[DEBUG_LOG] key = " + key);
|
||||
long packedPos = 0;
|
||||
long lo = 0;
|
||||
// pos 0: (2, 5)
|
||||
packedPos |= Grid.offset(2, 5);
|
||||
lo |= 1L << Grid.offset(2, 5);
|
||||
// pos 1: (3, 5)
|
||||
packedPos |= (long) Grid.offset(3, 5) << 7;
|
||||
lo |= 1L << Grid.offset(3, 5);
|
||||
// pos 2: (4, 5)
|
||||
packedPos |= (long) Grid.offset(4, 5) << 14;
|
||||
lo |= 1L << Grid.offset(4, 5);
|
||||
|
||||
var s = Slot.from(key, packedPos, 3);
|
||||
var s = Slot.from(key, lo, 0L);
|
||||
System.out.println("[DEBUG_LOG] s.dir() = " + s.dir());
|
||||
assertEquals(2, s.clueR());
|
||||
assertEquals(3, s.clueC());
|
||||
assertEquals(5, s.dir());
|
||||
assertEquals(3, s.dir());
|
||||
assertFalse(s.horiz());
|
||||
assertEquals(2, Grid.r(s.pos(0)));
|
||||
assertEquals(3, Grid.r(s.pos(1)));
|
||||
@@ -305,10 +305,9 @@ public class SwedishGeneratorTest {
|
||||
void testPlaceWord() {
|
||||
var grid = Grid.createEmpty();
|
||||
// Slot at (0,0) length 3, horizontal (right)
|
||||
// key = (r << 8) | (c << 4) | d. Here we just need a valid slot for placeWord.
|
||||
// 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 key = (Grid.offset(0,0) << Slot.BIT_FOR_DIR) | 2;
|
||||
var lo = (1L << Grid.offset(0, 0)) | (1L << Grid.offset(0, 1)) | (1L << Grid.offset(0, 2));
|
||||
var s = Slot.from(key, lo, 0L);
|
||||
var w1 = Lemma.from("ABC");
|
||||
var undoBuffer = new int[10];
|
||||
|
||||
@@ -345,8 +344,9 @@ public class SwedishGeneratorTest {
|
||||
void testBacktrackingHelpers() {
|
||||
var grid = Grid.createEmpty();
|
||||
// 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 key = (Grid.offset(0,0) << Slot.BIT_FOR_DIR) | 2;
|
||||
var lo = (1L << Grid.offset(0, 1)) | (1L << Grid.offset(0, 2));
|
||||
var s = Slot.from(key, lo, 0L);
|
||||
var w = Lemma.from("AZ");
|
||||
var undoBuffer = new int[10];
|
||||
|
||||
|
||||
Reference in New Issue
Block a user