summaryrefslogtreecommitdiff
path: root/core/src/commonTest/kotlin/coffee/liz/rookery/CubeTest.kt
blob: 829049ef07759c7399a037f0b43ca57f1475604d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package coffee.liz.rookery

import coffee.liz.rookery.puzzle.NxnCube
import coffee.liz.rookery.puzzle.Notation
import kotlin.test.Test
import kotlin.test.assertContentEquals
import kotlin.test.assertEquals
import kotlin.test.assertFalse
import kotlin.test.assertTrue

class CubeTest {
    @Test fun basicIdentities() {
        for (n in 2..7) {
            assertTrue(NxnCube(n).apply("R R R R").isSolved)
            assertTrue(NxnCube(n).apply("R U R' U' R U R' U' R U R' U' R U R' U' R U R' U' R U R' U'").isSolved, "sexy^6 on $n")
            assertFalse(NxnCube(n).apply("R U").isSolved)
        }
    }

    @Test fun scrambleThenInverseSolves() {
        val scr = "3Rw2 Uw' F 3Fw D2 Lw' B2 x y' 2R 3Uw2 z M"
        val c = NxnCube(7).apply(scr)
        assertFalse(c.isSolved)
        c.apply(Notation.invert(scr))
        assertTrue(c.isSolved)
    }

    @Test fun rMovesFrontToUp() {
        val c = NxnCube(3).apply("R")
        // U face right column now shows F's colour (index 2)
        assertEquals(listOf(0, 0, 2, 0, 0, 2, 0, 0, 2), c.face(NxnCube.Face.U).toList())
        // F face right column shows D (3)
        assertEquals(listOf(2, 2, 3, 2, 2, 3, 2, 2, 3), c.face(NxnCube.Face.F).toList())
    }

    @Test fun uMovesFrontToLeft() {
        val c = NxnCube(3).apply("U")
        assertEquals(listOf(5, 5, 5), c.face(NxnCube.Face.R).take(3)) // B comes to R
        assertEquals(listOf(2, 2, 2), c.face(NxnCube.Face.L).take(3)) // F goes to L
    }

    @Test fun wideEqualsFacePlusSlice() {
        val a = NxnCube(5).apply("Rw")
        val b = NxnCube(5).apply("R 2R")
        assertContentEquals(a.stickers, b.stickers)
        assertContentEquals(NxnCube(3).apply("x").stickers, NxnCube(3).apply("R M' L'").stickers)
    }

    @Test fun tPermIsOrderTwo() {
        val t = "R U R' U' R' F R2 U' R' U' R U R' F'"
        val c = NxnCube(3).apply(t)
        assertFalse(c.isSolved)
        assertTrue(c.apply(t).isSolved)
    }
}