mirror of
https://github.com/tiennm99/rubik.git
synced 2026-05-14 00:58:30 +00:00
eb592e5c98
- Solver: cubejs-backed two-phase solver, lazy-loaded chunk so the ~80 KB table-init cost stays out of the main bundle. New cube-to-facelets converter (3D model -> 54-char URFDLB string) verified bit-for-bit against cubejs's own move() output. - Solve button in ControlsPanel with disabled "Solving..." state, wired through the CubeView controller; animates each move sequentially. - Rewrite solved-check to the WCA face-uniformity definition. The old strict "identity quaternion per cubie" check rejected center spins (invisible) and whole-cube rotations, both of which are still solved per WCA / Kociemba. - Vitest specs under tests/ cover cubie-model, move-definitions, move-parser, apply-move (4x turns, inverses, sune order=6, R2 == R R), scrambler, solved-check, algorithm-runner, cube-to-facelets, solver. 39 tests, ~3 s. Adds npm test / npm run test:watch scripts.
30 lines
1.0 KiB
JavaScript
30 lines
1.0 KiB
JavaScript
import { describe, it, expect } from 'vitest';
|
|
import { parseAlgorithm, stringifyMoves } from '../src/lib/core/move-parser.js';
|
|
|
|
describe('move-parser', () => {
|
|
it('parses an empty string to an empty array', () => {
|
|
expect(parseAlgorithm('')).toEqual([]);
|
|
expect(parseAlgorithm(null)).toEqual([]);
|
|
});
|
|
|
|
it('parses a simple algorithm to specs', () => {
|
|
const moves = parseAlgorithm("R U R' U'");
|
|
expect(moves.map((m) => m.name)).toEqual(['R', 'U', "R'", "U'"]);
|
|
});
|
|
|
|
it('treats commas, parentheses, and extra spaces as separators', () => {
|
|
const moves = parseAlgorithm(' (R, U), R\' U\' ');
|
|
expect(moves.map((m) => m.name)).toEqual(['R', 'U', "R'", "U'"]);
|
|
});
|
|
|
|
it('round-trips parse → stringify', () => {
|
|
const algo = "R U2 R' x F2 M";
|
|
expect(stringifyMoves(parseAlgorithm(algo))).toBe(algo);
|
|
});
|
|
|
|
it('rejects garbage tokens', () => {
|
|
expect(() => parseAlgorithm('R Q')).toThrow();
|
|
expect(() => parseAlgorithm('RR')).toThrow();
|
|
});
|
|
});
|