This commit is contained in:
mike
2026-01-23 20:33:36 +01:00
parent fa3e8ef1ed
commit 73192f5905
8 changed files with 132 additions and 116 deletions

View File

@@ -5,12 +5,11 @@ import anno.DictGen;
import lombok.val;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import puzzle.Export.Vestigium;
import puzzle.Export.Signa;
import puzzle.Export.Puzzle;
import puzzle.Export.Lettrix;
import puzzle.Export.PuzzleResult;
import puzzle.Export.Rewards;
import puzzle.Riddle.Rewards;
import puzzle.Main.Opts;
import puzzle.SwedishGenerator.Rng;
import puzzle.dict950.DictData950;
@@ -20,7 +19,7 @@ import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static precomp.Const9x8.*;
import static precomp.Const9x8.Cell.*;
import static puzzle.Export.Clue.*;
import static puzzle.Riddle.Clue.*;
import static puzzle.LemmaData.AB;
import static puzzle.LemmaData.AZ;
import static puzzle.SwedishGenerator.Lemma;
@@ -104,7 +103,7 @@ public class MainTest {
val map = grid.collect(Collectors.toMap(Lettrix::index, Lettrix::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(Vestigium::index, Vestigium::clue));
var clueMap = clues.stream().collect(Collectors.toMap(Riddle.Vestigium::index, Riddle.Vestigium::clue));
Assertions.assertEquals(1, clueMap.size());
Assertions.assertEquals(UP2.dir, clueMap.get(OFF_2_1));
@@ -117,7 +116,7 @@ public class MainTest {
// Test isDigitAt
Assertions.assertFalse(clues.isClueLo(OFF_0_0));
Assertions.assertTrue(clues.isClueLo(OFF_2_1));
clueMap = clues.stream().collect(Collectors.toMap(Vestigium::index, Vestigium::clue));
clueMap = clues.stream().collect(Collectors.toMap(Riddle.Vestigium::index, Riddle.Vestigium::clue));
Assertions.assertEquals(UP2.dir, clueMap.get(OFF_2_1));
Assertions.assertFalse(clues.isClueLo(OFF_2_3));
Assertions.assertFalse(clues.isClueLo(OFF_1_1));
@@ -132,11 +131,11 @@ public class MainTest {
var clues = Signa.of(r0c0d1, r0c1d2, r1c0d3, r1c1d0);
var copy = clues.deepCopyGrid();
var clueMap = clues.stream().collect(Collectors.toMap(Vestigium::index, Vestigium::clue));
var clueMap = clues.stream().collect(Collectors.toMap(Riddle.Vestigium::index, Riddle.Vestigium::clue));
Assertions.assertEquals(RIGHT1.dir, clueMap.get(OFF_0_0));
copy.setClue(r0c0d0);
var copied = copy.stream().collect(Collectors.toMap(Vestigium::index, Vestigium::clue));
var copied = copy.stream().collect(Collectors.toMap(Riddle.Vestigium::index, Riddle.Vestigium::clue));
Assertions.assertEquals(DOWN0.dir, copied.get(OFF_0_0));
Assertions.assertEquals(RIGHT1.dir, clueMap.get(OFF_0_0));
}
@@ -158,7 +157,7 @@ public class MainTest {
r7c0d2, r7c1d2, r7c2d2, r7c8d3
);
Assertions.assertEquals(20, mask.clueCount());
val map = mask.stream().collect(Collectors.toMap(Vestigium::index, Vestigium::clue));
val map = mask.stream().collect(Collectors.toMap(Riddle.Vestigium::index, Riddle.Vestigium::clue));
Assertions.assertEquals(20, map.size());
var slots = Masker.slots(mask.c(), DictData950.DICT950.index(), DictData950.DICT950.reversed());
// var filled = fillMask(rng, slotInfo, grid, false);

View File

@@ -4,9 +4,8 @@ import lombok.val;
import org.junit.jupiter.api.Test;
import puzzle.Export.Signa;
import puzzle.Export.Puzzle;
import puzzle.Export.Placed;
import puzzle.Export.PuzzleResult;
import puzzle.Export.Rewards;
import puzzle.Riddle.Rewards;
import puzzle.SwedishGenerator.Assign;
import puzzle.SwedishGenerator.FillResult;
import puzzle.SwedishGenerator.Lemma;
@@ -27,10 +26,13 @@ import static puzzle.Masker.STACK_SIZE;
public class MarkerTest {
private static Masker emptyMasker() {
return new Masker(new Rng(42), new int[STACK_SIZE], Clues.createEmpty());
}
@Test
void testValidRandomMask() {
var rng = new Rng(42);
var masker = new Masker(rng, new int[STACK_SIZE], Clues.createEmpty());
var masker = emptyMasker();
for (var i = 0; i < 200; i++) {
for (var j = 19; j < 24; j++) {
var clues = masker.randomMask(j);
@@ -40,15 +42,13 @@ public class MarkerTest {
}
@Test
void testValidMutate() {
var rng = new Rng(42);
var cache = Clues.createEmpty();
var masker = new Masker(rng, new int[STACK_SIZE], cache);
var masker = emptyMasker();
var sim = 0.0;
var simCount = 0.0;
for (var i = 0; i < 200; i++) {
for (var j = 19; j < 24; j++) {
var clues = masker.randomMask(j);
val orig = cache.from(clues);
val orig = masker.cache(clues);
simCount++;
masker.mutate(clues);
sim += Masker.similarity(orig, clues);
@@ -59,9 +59,7 @@ public class MarkerTest {
}
@Test
void testCross() {
var rng = new Rng(42);
var cache = Clues.createEmpty();
var masker = new Masker(rng, new int[STACK_SIZE], cache);
var masker = emptyMasker();
var sim = 0.0;
var simCount = 0.0;
for (var i = 0; i < 200; i++) {
@@ -97,7 +95,7 @@ public class MarkerTest {
@Test
void testIsValid() {
var masker = new Masker(new Rng(42), new int[STACK_SIZE], Clues.createEmpty());
var masker = emptyMasker();
assertTrue(masker.isValid(Clues.createEmpty()));
// Valid clue: Right from (0,0) in 9x8 grid. Length is 8.
@@ -132,7 +130,7 @@ public class MarkerTest {
@Test
void testIntersectionConstraint() {
var masker = new Masker(new Rng(42), new int[STACK_SIZE], Clues.createEmpty());
var masker = emptyMasker();
// Clue 1: (0,0) Right. Slot cells: (0,1), (0,2), (0,3), (0,4), (0,5), (0,6), (0,7), (0,8)
// Clue 2: (1,2) Up. Slot cells: (0,2)
// Intersection is exactly 1 cell (0,2). Valid.
@@ -152,7 +150,7 @@ public class MarkerTest {
@Test
void testInvalidDirectionBits() {
var masker = new Masker(new Rng(42), new int[STACK_SIZE], Clues.createEmpty());
var masker = emptyMasker();
var g = Clues.createEmpty();
// Dir 6 (x=1, r=1, v=0) is invalid
g.setClueLo(1L << 0, (byte) 6);
@@ -165,8 +163,7 @@ public class MarkerTest {
}
@Test
void testConnectivityPenalty() {
var rng = new Rng(42);
var masker = new Masker(rng, new int[STACK_SIZE], Clues.createEmpty());
var masker = emptyMasker();
// 1. Maak een masker met één component van clues (bijv. 2 clues die elkaar kruisen)
var singleComp = Clues.createEmpty().setClue(r0c0d1).setClue(r2c2d2);
@@ -209,8 +206,7 @@ public class MarkerTest {
@Test
void testCornerClueConnectivity() {
var rng = new Rng(42);
var masker = new Masker(rng, new int[STACK_SIZE], Clues.createEmpty());
var masker = emptyMasker();
// Clue A: (2,0) Right. Slot: (2,1), (2,2), (2,3), ...
// Clue B: (1,2) Corner Down. Word starts at (1,3) en gaat omlaag: (1,3), (2,3), (3,3)...
@@ -316,7 +312,7 @@ public class MarkerTest {
assertEquals(1, exported.words().length);
var w = exported.words()[0];
assertEquals("TEST", w.word());
assertEquals(Placed.HORIZONTAL, w.direction());
assertEquals(Riddle.Placed.HORIZONTAL, w.direction());
// The bounding box should include (0,0) for the arrow and (0,1)-(0,4) for the word.
// minR=0, maxR=0, minC=0, maxC=4

View File

@@ -5,7 +5,6 @@ import anno.DictGen;
import anno.Dictionaries;
import lombok.val;
import org.junit.jupiter.api.Test;
import puzzle.Export.Clue;
import puzzle.Export.Signa;
import puzzle.Export.Puzzle;
import puzzle.SwedishGenerator.Rng;
@@ -173,7 +172,7 @@ public class PerformanceTest {
for (var slot : slots) {
var key = slot.key();
var dir = Clue.from(Masker.Slot.dir(key));
var dir = Riddle.Clue.from(Masker.Slot.dir(key));
var clueIdx = Masker.Slot.clueIndex(key);
var cr = Masker.IT[clueIdx].r();

View File

@@ -6,15 +6,10 @@ import gen.Test123X_Neighbors9x8;
import lombok.val;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import puzzle.Export.Puzzle;
import puzzle.Export.PuzzleResult;
import puzzle.Export.Rewards;
import puzzle.Export.Signa;
import puzzle.Export.Vestigium;
import puzzle.Riddle.Rewards;
import puzzle.SwedishGenerator.Rng;
import puzzle.dict800.DictData800;
import puzzle.dict800_4.DictData800_4;
import java.util.Arrays;
import java.util.stream.Collectors;
import static precomp.Const3x4.Cell.r0c0d4;
import static precomp.Const3x4.Cell.r0c2d0;
@@ -42,7 +37,7 @@ public class TestDuplication {
r2c0d1,
r3c0d1);
Assertions.assertEquals(5, mask.clueCount());
val map = mask.stream().collect(Collectors.toMap(Vestigium::index, Vestigium::clue));
val map = mask.stream().collect(Collectors.toMap(Riddle.Vestigium::index, Riddle.Vestigium::clue));
Assertions.assertEquals(5, map.size());
var slots = Masker_Neighbors3x4.slots(mask.c(), DictData800_4.DICT800);
var grid = Masker_Neighbors3x4.grid(slots);
@@ -53,7 +48,7 @@ public class TestDuplication {
var result = new ExportX_Const3x4.PuzzleResult(new ExportX_Const3x4.Signa(mask.c()), grid1, slots, filled);
if (filled.ok()) {
System.out.println(filled);
val res = result.exportFormatFromFilled(new ExportX_Const3x4.Rewards(0, 0, 0), Masker_Neighbors3x4.IT);
val res = result.exportFormatFromFilled(new Rewards(0, 0, 0), Masker_Neighbors3x4.IT);
System.out.println(String.join("\n", res.grid()));
}
}