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)
}
}
|