Skip to content

Commit b901ee2

Browse files
Reverse history fix (#16)
* Fix move.reverse() by taking care of self.count * Add test to point out the problem
1 parent e579049 commit b901ee2

File tree

3 files changed

+13
-4
lines changed

3 files changed

+13
-4
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@ dist/
44
.coverage
55
venv/
66
junit/
7+
.venv*

magiccube/cube_move.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,12 +74,12 @@ class CubeMove():
7474
regex_pattern = re.compile(
7575
"^(?:([0-9]*)(([LRDUBF])([w]?)|([XYZMES]))([']?)([0-9]?))$")
7676

77-
def __init__(self, move_type: CubeMoveType, is_reversed: bool = False, wide: bool = False, layer: int = 1):
77+
def __init__(self, move_type: CubeMoveType, is_reversed: bool = False, wide: bool = False, layer: int = 1, count: int = 1):
7878
self.type = move_type
7979
self.is_reversed = is_reversed
8080
self.wide = wide
8181
self.layer = layer
82-
self.count = 1
82+
self.count = count
8383

8484
@staticmethod
8585
def _create_move(result, special_move):
@@ -132,7 +132,7 @@ def create(move_str: str):
132132

133133
def reverse(self):
134134
"""return the reverse move"""
135-
return CubeMove(self.type, not self.is_reversed, self.wide, self.layer)
135+
return CubeMove(self.type, not self.is_reversed, self.wide, self.layer, count=self.count)
136136

137137
def __str__(self):
138138
if (self.wide and self.layer == 2)\
@@ -142,7 +142,8 @@ def __str__(self):
142142
layer = self.layer # pragma: no cover
143143
wide = "w" if self.wide else ""
144144
reversed_move = "'" if self.is_reversed else ""
145-
return f"{layer}{self.type.name}{wide}{reversed_move}"
145+
count = "" if int(self.count) == 1 else int(self.count)
146+
return f"{layer}{self.type.name}{wide}{reversed_move}{count}"
146147

147148
def __repr__(self):
148149
return str(self) # pragma: no cover

test/test_cube.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,13 @@ def test_reverse():
141141
c.rotate(c.reverse_history())
142142
assert c.is_done()
143143

144+
def test_reverse_multiplicative_moves():
145+
c = Cube(3)
146+
moves = "R' L2"
147+
c.rotate(moves)
148+
assert c.reverse_history(to_str=True) == "L'2 R"
149+
c.rotate(c.reverse_history())
150+
assert c.is_done()
144151

145152
def test_scramble_3x3():
146153
c = Cube(3)

0 commit comments

Comments
 (0)