aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorolim88 <bobq4582@gmail.com>2025-03-18 23:19:02 +0000
committerGitHub <noreply@github.com>2025-03-18 19:19:02 -0400
commit87341278c2a1c547e1b5785326195620726a0730 (patch)
treebe706a6bcb28098deafe29a4b88a5ff976067740 /src
parent7604c1cde3407ce97e22053f2919d7f22669f954 (diff)
downloadSkyblocker-87341278c2a1c547e1b5785326195620726a0730.tar.gz
Skyblocker-87341278c2a1c547e1b5785326195620726a0730.tar.bz2
Skyblocker-87341278c2a1c547e1b5785326195620726a0730.zip
fix bugged patters (#1216)
Write test for rotations. Work out it is wrong. fix this. now should work well (I should write test more often)
Diffstat (limited to 'src')
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/dwarven/fossil/FossilCalculations.java22
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/dwarven/fossil/FossilTypes.java2
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/dwarven/fossil/Structures.java11
-rw-r--r--src/test/java/de/hysky/skyblocker/skyblock/dwarven/fossil/FossilSolverTest.java62
4 files changed, 82 insertions, 15 deletions
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/fossil/FossilCalculations.java b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/fossil/FossilCalculations.java
index 14ca38c3..13dbf469 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/fossil/FossilCalculations.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/fossil/FossilCalculations.java
@@ -11,7 +11,7 @@ import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
public class FossilCalculations {
- private static final List<Structures.permutation> POSSIBLE_STATES = getAllPossibleStates();
+ protected static final List<Structures.permutation> POSSIBLE_STATES = getAllPossibleStates();
private static final int EXCAVATOR_WIDTH = 9;
private static final int EXCAVATOR_HEIGHT = 6;
@@ -186,7 +186,7 @@ public class FossilCalculations {
* @param grid input grid
* @return flipped grid
*/
- private static Structures.TileGrid flipGrid(Structures.TileGrid grid) {
+ protected static Structures.TileGrid flipGrid(Structures.TileGrid grid) {
Structures.TileGrid output = new Structures.TileGrid(new Structures.TileState[grid.height()][grid.width()]);
for (int x = 0; x < grid.width(); x++) {
for (int y = 0; y < grid.height(); y++) {
@@ -203,15 +203,15 @@ public class FossilCalculations {
* @param rotation rotation amount in degrees
* @return rotated grid
*/
- private static Structures.TileGrid rotateGrid(Structures.TileGrid grid, int rotation) {
+ protected static Structures.TileGrid rotateGrid(Structures.TileGrid grid, int rotation) {
int startingWidth = grid.width() - 1;
int startingHeight = grid.height() - 1;
switch (rotation) {
case 90 -> {
- Structures.TileGrid output = new Structures.TileGrid(new Structures.TileState[grid.height()][grid.width()]);
- for (int x = 0; x < grid.width(); x++) {
- for (int y = 0; y < grid.height(); y++) {
- output.updateSlot(startingWidth - x, y, grid.getSlot(x, y));
+ Structures.TileGrid output = new Structures.TileGrid(new Structures.TileState[grid.width()][grid.height()]);
+ for (int originalX = 0; originalX < grid.width(); originalX++) {
+ for (int originalY = 0; originalY < grid.height(); originalY++) {
+ output.updateSlot(startingHeight - originalY, originalX, grid.getSlot(originalX, originalY));
}
}
return output;
@@ -226,10 +226,10 @@ public class FossilCalculations {
return output;
}
case 270 -> {
- Structures.TileGrid output = new Structures.TileGrid(new Structures.TileState[grid.height()][grid.width()]);
- for (int x = 0; x < grid.width(); x++) {
- for (int y = 0; y < grid.height(); y++) {
- output.updateSlot(x, startingHeight - y, grid.getSlot(x, y));
+ Structures.TileGrid output = new Structures.TileGrid(new Structures.TileState[grid.width()][grid.height()]);
+ for (int originalX = 0; originalX < grid.width(); originalX++) {
+ for (int originalY = 0; originalY < grid.height(); originalY++) {
+ output.updateSlot(originalY,startingWidth - originalX, grid.getSlot(originalX, originalY));
}
}
return output;
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/fossil/FossilTypes.java b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/fossil/FossilTypes.java
index 4e3d1b1d..e5a80ee8 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/fossil/FossilTypes.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/fossil/FossilTypes.java
@@ -31,7 +31,7 @@ public enum FossilTypes {
{Structures.TileState.FOSSIL, Structures.TileState.EMPTY, Structures.TileState.EMPTY, Structures.TileState.EMPTY, Structures.TileState.FOSSIL},
{Structures.TileState.FOSSIL, Structures.TileState.EMPTY, Structures.TileState.FOSSIL, Structures.TileState.EMPTY, Structures.TileState.FOSSIL},
{Structures.TileState.FOSSIL, Structures.TileState.EMPTY, Structures.TileState.FOSSIL, Structures.TileState.FOSSIL, Structures.TileState.FOSSIL}
- }, List.of(Structures.TransformationOptions.ROTATED_0, Structures.TransformationOptions.ROTATED_90, Structures.TransformationOptions.ROTATED_180, Structures.TransformationOptions.ROTATED_270), "7.1", 14, "Helix"),
+ }, List.of(Structures.TransformationOptions.ROTATED_0, Structures.TransformationOptions.ROTATED_90, Structures.TransformationOptions.ROTATED_180, Structures.TransformationOptions.FLIP_ROTATED_270), "7.1", 14, "Helix"),
WEBBED(new Structures.TileState[][]{
{Structures.TileState.EMPTY, Structures.TileState.EMPTY, Structures.TileState.EMPTY, Structures.TileState.FOSSIL, Structures.TileState.EMPTY, Structures.TileState.EMPTY, Structures.TileState.EMPTY},
{Structures.TileState.FOSSIL, Structures.TileState.EMPTY, Structures.TileState.EMPTY, Structures.TileState.FOSSIL, Structures.TileState.EMPTY, Structures.TileState.EMPTY, Structures.TileState.FOSSIL},
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/fossil/Structures.java b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/fossil/Structures.java
index 3e7af14f..45bb9ca9 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/fossil/Structures.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/fossil/Structures.java
@@ -1,5 +1,7 @@
package de.hysky.skyblocker.skyblock.dwarven.fossil;
+import java.util.Arrays;
+
public class Structures {
/**
* The three possible states a tile could be in
@@ -42,6 +44,15 @@ public class Structures {
int height() {
return state.length;
}
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if(o instanceof TileGrid(TileState[][] state2)) {
+ return Arrays.deepEquals(state, state2);
+ }
+ return false;
+ }
}
/**
diff --git a/src/test/java/de/hysky/skyblocker/skyblock/dwarven/fossil/FossilSolverTest.java b/src/test/java/de/hysky/skyblocker/skyblock/dwarven/fossil/FossilSolverTest.java
index 99efca31..5eba8722 100644
--- a/src/test/java/de/hysky/skyblocker/skyblock/dwarven/fossil/FossilSolverTest.java
+++ b/src/test/java/de/hysky/skyblocker/skyblock/dwarven/fossil/FossilSolverTest.java
@@ -5,7 +5,9 @@ import de.hysky.skyblocker.skyblock.dwarven.fossil.Structures.TileState;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
-import static de.hysky.skyblocker.skyblock.dwarven.fossil.FossilCalculations.getFossilChance;
+import java.util.Arrays;
+
+import static de.hysky.skyblocker.skyblock.dwarven.fossil.FossilCalculations.*;
public class FossilSolverTest {
@@ -18,6 +20,10 @@ public class FossilSolverTest {
}
return new TileGrid(tileStates);
}
+ @Test
+ public void testPossibleFossils() {
+ Assertions.assertEquals(287, POSSIBLE_STATES.size());
+ }
@Test
void testPartlyFoundFossil() {
@@ -27,7 +33,7 @@ public class FossilSolverTest {
tileGrid.updateSlot(0, 4, TileState.FOSSIL);
tileGrid.updateSlot(0, 5, TileState.FOSSIL);
tileGrid.updateSlot(1, 5, TileState.FOSSIL);
- Assertions.assertEquals(getFossilChance(tileGrid, null)[20], 1);
+ Assertions.assertEquals(1, getFossilChance(tileGrid, null)[20]);
}
@Test
@@ -36,7 +42,7 @@ public class FossilSolverTest {
tileGrid.updateSlot(1, 0, TileState.FOSSIL);
tileGrid.updateSlot(3, 0, TileState.FOSSIL);
tileGrid.updateSlot(0, 1, TileState.FOSSIL);
- Assertions.assertEquals(getFossilChance(tileGrid, "7.7")[29], 1);
+ Assertions.assertEquals(1, getFossilChance(tileGrid, "7.7")[29]);
}
@Test
@@ -61,4 +67,54 @@ public class FossilSolverTest {
tileGrid.updateSlot(8, 0, TileState.FOSSIL);
Assertions.assertTrue(Double.isNaN(getFossilChance(tileGrid, null)[1]));
}
+
+
+ TileGrid createTestRotationGrid(int height, int width) {
+ TileState[][] tileStates = new TileState[height][width];
+ for (int x = 0; x < height; x++) {
+ for (int y = 0; y < width; y++) {
+ tileStates[x][y] = TileState.UNKNOWN;
+ }
+ }
+ return new TileGrid(tileStates);
+
+ }
+ @Test
+ void testRotation90(){
+ TileGrid originalGrid = createTestRotationGrid(6, 3);
+ originalGrid.updateSlot(0, 0, TileState.FOSSIL);
+ TileGrid targetGrid = createTestRotationGrid(3, 6);
+ targetGrid.updateSlot(5, 0, TileState.FOSSIL);
+ TileGrid rotatedGrid = rotateGrid(originalGrid, 90);
+ Assertions.assertEquals(targetGrid, rotatedGrid);
+ }
+ @Test
+ void testRotation180(){
+ TileGrid originalGrid = createTestRotationGrid(6, 3);
+ originalGrid.updateSlot(0, 0, TileState.FOSSIL);
+ TileGrid targetGrid = createTestRotationGrid(6, 3);
+ targetGrid.updateSlot(2, 5, TileState.FOSSIL);
+ TileGrid rotatedGrid = rotateGrid(originalGrid, 180);
+ Assertions.assertEquals(targetGrid, rotatedGrid);
+ }
+
+ @Test
+ void testRotation270(){
+ TileGrid originalGrid = createTestRotationGrid(6, 3);
+ originalGrid.updateSlot(0, 0, TileState.FOSSIL);
+ TileGrid targetGrid = createTestRotationGrid(3, 6);
+ targetGrid.updateSlot(0, 2, TileState.FOSSIL);
+ TileGrid rotatedGrid = rotateGrid(originalGrid, 270);
+ Assertions.assertEquals(targetGrid, rotatedGrid);
+ }
+
+ @Test
+ void testFlipped(){
+ TileGrid originalGrid = createTestRotationGrid(6, 3);
+ originalGrid.updateSlot(0, 0, TileState.FOSSIL);
+ TileGrid targetGrid = createTestRotationGrid(6, 3);
+ targetGrid.updateSlot(0, 5, TileState.FOSSIL);
+ TileGrid flippedGrid = flipGrid(originalGrid);
+ Assertions.assertEquals(targetGrid, flippedGrid);
+ }
}