Moved the Kociemba/Beginner solve options into a sleek dropdown menu positioned above the Scramble button on the left side of the screen. This ensures the solver controls no longer obstruct the programmatic move queue at the bottom.
118 lines
3.5 KiB
JavaScript
118 lines
3.5 KiB
JavaScript
import { Cube, FACES, COLORS } from "../src/utils/Cube.js";
|
|
import assert from "assert";
|
|
|
|
console.log("Running Cube Logic Tests...");
|
|
|
|
const cube = new Cube();
|
|
|
|
// Helper to check a specific face color at a position
|
|
const checkFace = (x, y, z, face, expectedColor, message) => {
|
|
const cubie = cube.cubies.find((c) => c.x === x && c.y === y && c.z === z);
|
|
if (!cubie) {
|
|
console.error(`Cubie not found at ${x}, ${y}, ${z}`);
|
|
return false;
|
|
}
|
|
const color = cubie.faces[face];
|
|
if (color !== expectedColor) {
|
|
console.error(
|
|
`FAIL: ${message}. Expected ${expectedColor} at ${face} of (${x},${y},${z}), got ${color}`,
|
|
);
|
|
return false;
|
|
}
|
|
return true;
|
|
};
|
|
|
|
// Test 1: Initial State
|
|
console.log("Test 1: Initial State");
|
|
// Top-Front-Right corner (1, 1, 1) should have Up=White, Front=Green, Right=Red
|
|
checkFace(1, 1, 1, FACES.UP, COLORS.WHITE, "Initial Top-Right-Front UP");
|
|
checkFace(1, 1, 1, FACES.FRONT, COLORS.GREEN, "Initial Top-Right-Front FRONT");
|
|
checkFace(1, 1, 1, FACES.RIGHT, COLORS.RED, "Initial Top-Right-Front RIGHT");
|
|
|
|
// Test 2: Rotate Right Face (R) -> Axis X, index 1, direction -1 (based on previous mapping)
|
|
// Wait, let's test `rotateLayer` directly first with axis 'x'.
|
|
// Axis X Positive Rotation (direction 1).
|
|
// Up (y=1) -> Front (z=1).
|
|
// The cubie at (1, 1, 1) (Top-Front-Right)
|
|
// Should move to (1, 0, 1)? No.
|
|
// (x, y, z) -> (x, -z, y).
|
|
// (1, 1, 1) -> (1, -1, 1). (Bottom-Front-Right).
|
|
// Let's trace the color.
|
|
// The White color was on UP.
|
|
// The cubie moves to Bottom-Front.
|
|
// The UP face of the cubie now points FRONT.
|
|
// So the cubie at (1, -1, 1) should have FRONT = WHITE.
|
|
|
|
console.log("Test 2: Rotate X Axis +90 (Right Layer)");
|
|
cube.rotateLayer("x", 1, 1);
|
|
|
|
// Cubie originally at (1, 1, 1) [White Up] moves to (1, -1, 1).
|
|
// Check (1, -1, 1).
|
|
// Its Front face should be White.
|
|
const result1 = checkFace(
|
|
1,
|
|
-1,
|
|
1,
|
|
FACES.FRONT,
|
|
COLORS.WHITE,
|
|
"After X+90: Old Up(White) should be on Front",
|
|
);
|
|
|
|
// Cubie originally at (1, 1, -1) [Blue Back, White Up] (Top-Back-Right)
|
|
// (1, 1, -1) -> (1, 1, 1). (Top-Front-Right).
|
|
// Wait. ny = -z = -(-1) = 1. nz = y = 1.
|
|
// So Top-Back moves to Top-Front.
|
|
// Its UP face (White) moves to FRONT?
|
|
// No. The rotation is around X.
|
|
// Top-Back (y=1, z=-1).
|
|
// Rot +90 X: y->z, z->-y ? No.
|
|
// ny = -z = 1. nz = y = 1.
|
|
// New pos: (1, 1, 1).
|
|
// The cubie moves from Top-Back to Top-Front.
|
|
// Its Up face (White) stays Up?
|
|
// No, the cubie rotates.
|
|
// Up face rotates to Front?
|
|
// Rotation around X axis.
|
|
// Top (Y+) rotates to Front (Z+)?
|
|
// Yes.
|
|
// So the cubie at (1, 1, 1) (new position) should have FRONT = WHITE.
|
|
const result2 = checkFace(
|
|
1,
|
|
1,
|
|
1,
|
|
FACES.FRONT,
|
|
COLORS.WHITE,
|
|
"After X+90: Old Top-Back Up(White) should be on Front",
|
|
);
|
|
|
|
if (result1 && result2) {
|
|
console.log("PASS: X Axis Rotation Logic seems correct (if fixed)");
|
|
} else {
|
|
console.log("FAIL: X Axis Rotation Logic is broken");
|
|
}
|
|
|
|
// Reset for Y test
|
|
cube.reset();
|
|
console.log("Test 3: Rotate Y Axis +90 (Top Layer)");
|
|
// Top Layer (y=1).
|
|
// Rotate Y+ (direction 1).
|
|
// Front (z=1) -> Right (x=1).
|
|
// Cubie at (0, 1, 1) (Front-Top-Center) [Green Front, White Up].
|
|
// Moves to (1, 1, 0) (Right-Top-Center).
|
|
// Its Front Face (Green) should move to Right Face.
|
|
cube.rotateLayer("y", 1, 1);
|
|
const resultY = checkFace(
|
|
1,
|
|
1,
|
|
0,
|
|
FACES.RIGHT,
|
|
COLORS.GREEN,
|
|
"After Y+90: Old Front(Green) should be on Right",
|
|
);
|
|
|
|
if (resultY) {
|
|
console.log("PASS: Y Axis Rotation Logic seems correct");
|
|
} else {
|
|
console.log("FAIL: Y Axis Rotation Logic is broken");
|
|
}
|