introduce bitloops
This commit is contained in:
@@ -3,12 +3,12 @@ package puzzle;
|
||||
import lombok.val;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import puzzle.Export.ClueAt;
|
||||
import puzzle.Export.Clued;
|
||||
import puzzle.Export.Gridded;
|
||||
import puzzle.Export.LetterVisit.LetterAt;
|
||||
import puzzle.Export.PuzzleResult;
|
||||
import puzzle.Export.Rewards;
|
||||
import puzzle.ExportFormatTest.Clue;
|
||||
import puzzle.Main.Opts;
|
||||
import puzzle.SwedishGenerator.Rng;
|
||||
import puzzle.SwedishGenerator.Slot;
|
||||
@@ -95,17 +95,19 @@ public class MainTest {
|
||||
}
|
||||
@Test
|
||||
public void testGridBasics() {
|
||||
var clues = Clues.createEmpty();
|
||||
var clues = new Clued(Clues.createEmpty());
|
||||
val key = Slot.packSlotKey(OFF_2_1, CLUE_UP);
|
||||
clues.setClueLo(IDX_2_1.lo, CLUE_UP);
|
||||
var grid = new Gridded(clues.toGrid());
|
||||
|
||||
// Test set/get
|
||||
placeWord(grid.grid(), grid.grid().g, key, (1L << OFF_1_1) | (1L << OFF_0_1), 0, AZ);
|
||||
val arr = grid.stream(clues).collect(Collectors.toMap(LetterAt::index, LetterAt::letter));
|
||||
Assertions.assertEquals(LETTER_A, arr.get(OFF_1_1));
|
||||
Assertions.assertEquals(LETTER_Z, arr.get(OFF_0_1));
|
||||
Assertions.assertEquals(CLUE_UP, (byte) clues.digitAtLo(OFF_2_1));
|
||||
val map = grid.stream(clues.c()).collect(Collectors.toMap(LetterAt::index, LetterAt::letter));
|
||||
Assertions.assertEquals(LETTER_A, map.get(OFF_1_1));
|
||||
Assertions.assertEquals(LETTER_Z, map.get(OFF_0_1));
|
||||
var clueMap = clues.stream().collect(Collectors.toMap(ClueAt::index, ClueAt::clue));
|
||||
Assertions.assertEquals(1, clueMap.size());
|
||||
Assertions.assertEquals(CLUE_UP, clueMap.get(OFF_2_1));
|
||||
|
||||
// Test isLetterAt
|
||||
Assertions.assertTrue(clues.notClue(OFF_0_0));
|
||||
@@ -116,7 +118,8 @@ public class MainTest {
|
||||
// Test isDigitAt
|
||||
Assertions.assertFalse(clues.isClueLo(OFF_0_0));
|
||||
Assertions.assertTrue(clues.isClueLo(OFF_2_1));
|
||||
Assertions.assertEquals(CLUE_UP, (byte) clues.digitAtLo(OFF_2_1));
|
||||
clueMap = clues.stream().collect(Collectors.toMap(ClueAt::index, ClueAt::clue));
|
||||
Assertions.assertEquals(CLUE_UP, clueMap.get(OFF_2_1));
|
||||
Assertions.assertFalse(clues.isClueLo(OFF_2_3));
|
||||
Assertions.assertFalse(clues.isClueLo(OFF_1_1));
|
||||
|
||||
@@ -127,18 +130,20 @@ public class MainTest {
|
||||
}
|
||||
@Test
|
||||
public void testCluesDeepCopy() {
|
||||
var grid = Clues.createEmpty();
|
||||
grid.setClueLo(IDX_0_0.lo, RIGHT.dir);
|
||||
grid.setClueLo(IDX_0_1.lo, UP.dir);
|
||||
grid.setClueLo(IDX_1_0.lo, LEFT.dir);
|
||||
grid.setClueLo(IDX_1_1.lo, DOWN.dir);
|
||||
var clues = new Clued(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);
|
||||
|
||||
var copy = grid.deepCopyGrid();
|
||||
Assertions.assertEquals(1, copy.digitAtLo(0));
|
||||
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);
|
||||
Assertions.assertEquals(DOWN.dir, copy.digitAtLo(0));
|
||||
Assertions.assertEquals(1, grid.digitAtLo(0)); // Original should be unchanged
|
||||
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));
|
||||
}
|
||||
@Test
|
||||
public void testMini() {
|
||||
@@ -198,9 +203,9 @@ public class MainTest {
|
||||
System.out.println("[DEBUG_LOG] Simplicity: " + res.filled().stats().simplicity);
|
||||
System.out.println("[DEBUG_LOG] ClueMap Size: " + res.filled().wordCount());
|
||||
System.out.println("[DEBUG_LOG] Grid:");
|
||||
System.out.println(res.filled().grid().renderHuman(res.clues().mask()));
|
||||
System.out.println(res.filled().grid().gridToString(res.clues().mask()));
|
||||
System.out.println(res.filled().grid().renderHuman(res.clues().mask()));
|
||||
System.out.println(res.filled().grid().renderHuman(res.clues().c()));
|
||||
System.out.println(res.filled().grid().gridToString(res.clues().c()));
|
||||
System.out.println(res.filled().grid().renderHuman(res.clues().c()));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package puzzle;
|
||||
import lombok.val;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import puzzle.Export.Clued;
|
||||
import puzzle.Export.Gridded;
|
||||
import puzzle.Export.IntListDTO;
|
||||
import puzzle.Export.LetterVisit.LetterAt;
|
||||
@@ -317,16 +318,16 @@ public class SwedishGeneratorTest {
|
||||
var rng = new Rng(42);
|
||||
var gen = new SwedishGenerator(rng, new int[STACK_SIZE], Clues.createEmpty());
|
||||
|
||||
var g1 = gen.randomMask(18);
|
||||
assertNotNull(g1);
|
||||
var c1 = new Clued(gen.randomMask(18));
|
||||
assertNotNull(c1);
|
||||
|
||||
var g2 = gen.mutate(g1.deepCopyGrid());
|
||||
var g2 = new Clued(gen.mutate(c1.deepCopyGrid().c()));
|
||||
assertNotNull(g2);
|
||||
assertNotSame(g1, g2);
|
||||
assertNotSame(c1.c(), g2.c());
|
||||
|
||||
assertNotNull(gen.crossover(g1, g2));
|
||||
assertNotNull(gen.crossover(c1.c(), g2.c()));
|
||||
|
||||
var g4 = gen.hillclimb(g1, 18, 10);
|
||||
var g4 = gen.hillclimb(c1.c(), 18, 10);
|
||||
assertNotNull(g4);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user