rubiks-cube-3x3-solver / tests/cube.rs

raw file 1011 bytes
use rubiks_cube_3x3_solver::cube::{CubieCube, FaceCube};
use rubiks_cube_3x3_solver::moves::Move;
use rubiks_cube_3x3_solver::notation;

#[test]
fn solved_cube_is_solvable() {
    let cc = CubieCube::default();
    assert!(cc.is_solvable());
}

#[test]
fn move_round_trip() {
    let cc = CubieCube::default();
    let m = Move::U;
    let cc2 = cc.apply_move(m);
    let cc3 = cc2.apply_move(m.get_inverse());
    assert_eq!(cc, cc3);
}

#[test]
fn parse_and_format_moves() {
    let s = "R U R' U'";
    let moves = notation::parse_moves(s).unwrap();
    assert_eq!(moves.len(), 4);
    let out = notation::format_moves(&moves);
    assert_eq!(out, s);
}

#[test]
fn facelet_round_trip() {
    let cc = CubieCube::default();
    let fc = FaceCube::try_from(&cc).unwrap();
    let s = fc.to_string();
    assert_eq!(s, "UUUUUUUUURRRRRRRRRFFFFFFFFFDDDDDDDDDLLLLLLLLLBBBBBBBBB");
    let fc2 = FaceCube::try_from(s.as_str()).unwrap();
    let cc2 = CubieCube::try_from(&fc2).unwrap();
    assert_eq!(cc, cc2);
}