JBAujogue commited on
Commit
53d3965
·
1 Parent(s): 3e056bc

add unit tests

Browse files
Files changed (1) hide show
  1. tests/unit/test_action.py +80 -0
tests/unit/test_action.py CHANGED
@@ -8,6 +8,10 @@ from rubik.action import (
8
  POS_SHIFTS,
9
  FACE_ROTATIONS,
10
  build_actions_tensor,
 
 
 
 
11
  )
12
 
13
 
@@ -97,3 +101,79 @@ def test_build_actions_tensor_shape(size: int):
97
  assert expected == observed, (
98
  f"'build_actions_tensor' output has incorrect shape: expected shape '{expected}', got '{observed}' instead"
99
  )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
  POS_SHIFTS,
9
  FACE_ROTATIONS,
10
  build_actions_tensor,
11
+ build_action_tensor,
12
+ parse_action_str,
13
+ parse_actions_str,
14
+ sample_actions_str,
15
  )
16
 
17
 
 
101
  assert expected == observed, (
102
  f"'build_actions_tensor' output has incorrect shape: expected shape '{expected}', got '{observed}' instead"
103
  )
104
+
105
+
106
+ @pytest.mark.parametrize(
107
+ "size, axis, slice, inverse",
108
+ [
109
+ (2, 2, 1, 0),
110
+ (3, 0, 1, 1),
111
+ (5, 1, 4, 0),
112
+ ],
113
+ )
114
+ def test_build_action_tensor_shape(size: int, axis: int, slice: int, inverse: int):
115
+ """
116
+ Test that "build_actions_tensor" output has expected shape.
117
+ """
118
+ expected = (3, size, 2, 6 * (size**2), 6 * (size**2))
119
+ observed = build_action_tensor(size, axis, slice, inverse).shape
120
+ assert expected == observed, (
121
+ f"'build_action_tensor' output has incorrect shape: expected shape '{expected}', got '{observed}' instead"
122
+ )
123
+
124
+
125
+ @pytest.mark.parametrize(
126
+ "move, expected",
127
+ [
128
+ ["X1", (0, 1, 0)],
129
+ ["X25i", (0, 25, 1)],
130
+ ["Y0", (1, 0, 0)],
131
+ ["Y5i", (1, 5, 1)],
132
+ ["Z30", (2, 30, 0)],
133
+ ["Z512ijk", (2, 512, 1)],
134
+ ],
135
+ )
136
+ def test_parse_action_str(move: str, expected: tuple[int, int, int]):
137
+ """
138
+ Test that "parse_action_str" behaves as expected.
139
+ """
140
+ observed = parse_action_str(move)
141
+ assert expected == observed, (
142
+ f"'parse_action_str' output is incorrect: expected '{expected}', got '{observed}' instead"
143
+ )
144
+
145
+
146
+ @pytest.mark.parametrize(
147
+ "moves, expected",
148
+ [
149
+ [" X1 Y0 X25i Z512ijk Z30 Y5i ", [(0, 1, 0), (1, 0, 0), (0, 25, 1), (2, 512, 1), (2, 30, 0), (1, 5, 1)]],
150
+ ],
151
+ )
152
+ def test_parse_actions_str(moves: str, expected: tuple[int, int, int]):
153
+ """
154
+ Test that "parse_action_str" behaves as expected.
155
+ """
156
+ observed = parse_actions_str(moves)
157
+ assert expected == observed, (
158
+ f"'parse_actions_str' output is incorrect: expected '{expected}', got '{observed}' instead"
159
+ )
160
+
161
+
162
+ @pytest.mark.parametrize(
163
+ "num_moves, size, seed",
164
+ [
165
+ [1, 3, 0],
166
+ [1, 20, 42],
167
+ [256, 5, 21],
168
+ ],
169
+ )
170
+ def test_sample_actions_str(num_moves: int, size: int, seed: int):
171
+ """
172
+ Test that "sample_actions_str" is deterministic and outputs parsable content.
173
+ """
174
+ moves_1 = sample_actions_str(num_moves, size, seed)
175
+ moves_2 = sample_actions_str(num_moves, size, seed)
176
+ assert moves_1 == moves_2, f"'sample_actions_str' is non-deterministic: {moves_1} != {moves_2}"
177
+
178
+ parsed = parse_actions_str(moves_1)
179
+ assert len(parsed) == len(moves_1.split()), "'sample_actions_str' output cannot be parsed correctly"