aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/000_basic/all.in0
-rw-r--r--test/000_basic/all.out7
-rw-r--r--test/000_basic/basic_tests.c33
-rw-r--r--test/001_cube_conversion/00_solved.in1
-rw-r--r--test/001_cube_conversion/00_solved.out1
-rw-r--r--test/001_cube_conversion/01_scrambled.in1
-rw-r--r--test/001_cube_conversion/01_scrambled.out1
-rw-r--r--test/001_cube_conversion/cube_conversion_tests.c27
-rw-r--r--test/010_math_permsign/00_solved.in8
-rw-r--r--test/010_math_permsign/00_solved.out1
-rw-r--r--test/010_math_permsign/01_3cycle.in6
-rw-r--r--test/010_math_permsign/01_3cycle.out1
-rw-r--r--test/010_math_permsign/02_22swap.in13
-rw-r--r--test/010_math_permsign/02_22swap.out1
-rw-r--r--test/010_math_permsign/03_singleswap.in7
-rw-r--r--test/010_math_permsign/03_singleswap.out1
-rw-r--r--test/010_math_permsign/04_5ycle.in11
-rw-r--r--test/010_math_permsign/04_5ycle.out1
-rw-r--r--test/010_math_permsign/05_6ycle.in9
-rw-r--r--test/010_math_permsign/05_6ycle.out1
-rw-r--r--test/010_math_permsign/permsgn_tests.c22
-rw-r--r--test/020_io_H48_read_write/00_garbage.in3
-rw-r--r--test/020_io_H48_read_write/00_garbage.out1
-rw-r--r--test/020_io_H48_read_write/01_solved_oneline.in1
-rw-r--r--test/020_io_H48_read_write/01_solved_oneline.out1
-rw-r--r--test/020_io_H48_read_write/02_solved_oneline_whitespace.in1
-rw-r--r--test/020_io_H48_read_write/02_solved_oneline_whitespace.out1
-rw-r--r--test/020_io_H48_read_write/03_solved_multiline.in9
-rw-r--r--test/020_io_H48_read_write/03_solved_multiline.out1
-rw-r--r--test/020_io_H48_read_write/04_unsolvable_ep.in1
-rw-r--r--test/020_io_H48_read_write/04_unsolvable_ep.out1
-rw-r--r--test/020_io_H48_read_write/05_unsolvable_eo.in1
-rw-r--r--test/020_io_H48_read_write/05_unsolvable_eo.out1
-rw-r--r--test/020_io_H48_read_write/06_unsolvable_cp.in1
-rw-r--r--test/020_io_H48_read_write/06_unsolvable_cp.out1
-rw-r--r--test/020_io_H48_read_write/07_unsolvable_co.in1
-rw-r--r--test/020_io_H48_read_write/07_unsolvable_co.out1
-rw-r--r--test/020_io_H48_read_write/08_unsolved.in6
-rw-r--r--test/020_io_H48_read_write/08_unsolved.out1
-rw-r--r--test/020_io_H48_read_write/io_H48_tests.c24
-rw-r--r--test/023_io_LST_write/01_solved.in1
-rw-r--r--test/023_io_LST_write/01_solved.out1
-rw-r--r--test/023_io_LST_write/02_scrambled.in1
-rw-r--r--test/023_io_LST_write/02_scrambled.out1
-rw-r--r--test/023_io_LST_write/io_LST_tests.c24
-rw-r--r--test/024_io_LST_read/01_solved.in1
-rw-r--r--test/024_io_LST_read/01_solved.out1
-rw-r--r--test/024_io_LST_read/02_scrambled.in1
-rw-r--r--test/024_io_LST_read/02_scrambled.out1
-rw-r--r--test/024_io_LST_read/io_LST_tests.c24
-rw-r--r--test/030_move/000_nomove_solved.in2
-rw-r--r--test/030_move/000_nomove_solved.out1
-rw-r--r--test/030_move/001_nomove_scrambled.in2
-rw-r--r--test/030_move/001_nomove_scrambled.out1
-rw-r--r--test/030_move/010_U_solved.in2
-rw-r--r--test/030_move/010_U_solved.out1
-rw-r--r--test/030_move/011_U_scrambled.in2
-rw-r--r--test/030_move/011_U_scrambled.out1
-rw-r--r--test/030_move/012_U_inverse.in2
-rw-r--r--test/030_move/012_U_inverse.out1
-rw-r--r--test/030_move/020_U2_solved.in2
-rw-r--r--test/030_move/020_U2_solved.out1
-rw-r--r--test/030_move/021_U2_scrambled.in2
-rw-r--r--test/030_move/021_U2_scrambled.out1
-rw-r--r--test/030_move/022_U2_inverse.in2
-rw-r--r--test/030_move/022_U2_inverse.out1
-rw-r--r--test/030_move/030_U3_solved.in2
-rw-r--r--test/030_move/030_U3_solved.out1
-rw-r--r--test/030_move/031_U3_inverse.in2
-rw-r--r--test/030_move/031_U3_inverse.out1
-rw-r--r--test/030_move/032_U3_scrambled.in2
-rw-r--r--test/030_move/032_U3_scrambled.out1
-rw-r--r--test/030_move/033_U3_with_prime.in2
-rw-r--r--test/030_move/033_U3_with_prime.out1
-rw-r--r--test/030_move/040_D_solved.in2
-rw-r--r--test/030_move/040_D_solved.out1
-rw-r--r--test/030_move/050_D2_solved.in2
-rw-r--r--test/030_move/050_D2_solved.out1
-rw-r--r--test/030_move/060_D3_solved.in2
-rw-r--r--test/030_move/060_D3_solved.out1
-rw-r--r--test/030_move/070_R_solved.in2
-rw-r--r--test/030_move/070_R_solved.out1
-rw-r--r--test/030_move/071_R_scrambled.in2
-rw-r--r--test/030_move/071_R_scrambled.out1
-rw-r--r--test/030_move/080_R2_solved.in2
-rw-r--r--test/030_move/080_R2_solved.out1
-rw-r--r--test/030_move/090_R3_solved.in2
-rw-r--r--test/030_move/090_R3_solved.out1
-rw-r--r--test/030_move/100_L_solved.in2
-rw-r--r--test/030_move/100_L_solved.out1
-rw-r--r--test/030_move/110_L2_solved.in2
-rw-r--r--test/030_move/110_L2_solved.out1
-rw-r--r--test/030_move/120_L3_solved.in2
-rw-r--r--test/030_move/120_L3_solved.out1
-rw-r--r--test/030_move/130_F_solved.in2
-rw-r--r--test/030_move/130_F_solved.out1
-rw-r--r--test/030_move/132_F_scrambled.in2
-rw-r--r--test/030_move/132_F_scrambled.out1
-rw-r--r--test/030_move/133_F_scrambled_2.in2
-rw-r--r--test/030_move/133_F_scrambled_2.out1
-rw-r--r--test/030_move/140_F2_solved.in2
-rw-r--r--test/030_move/140_F2_solved.out1
-rw-r--r--test/030_move/150_F3_solved.in2
-rw-r--r--test/030_move/150_F3_solved.out1
-rw-r--r--test/030_move/160_B_solved.in2
-rw-r--r--test/030_move/160_B_solved.out1
-rw-r--r--test/030_move/170_B2_solved.in2
-rw-r--r--test/030_move/170_B2_solved.out1
-rw-r--r--test/030_move/180_B3_solved.in2
-rw-r--r--test/030_move/180_B3_solved.out1
-rw-r--r--test/030_move/200_scramble_solved.in2
-rw-r--r--test/030_move/200_scramble_solved.out1
-rw-r--r--test/030_move/201_solution_scrambled.in2
-rw-r--r--test/030_move/201_solution_scrambled.out1
-rw-r--r--test/030_move/300_multimove_solved.in2
-rw-r--r--test/030_move/300_multimove_solved.out1
-rw-r--r--test/030_move/301_multimove_scrambled.in2
-rw-r--r--test/030_move/301_multimove_scrambled.out1
-rw-r--r--test/030_move/move_tests.c25
-rw-r--r--test/040_inverse_cube/00_solved.in1
-rw-r--r--test/040_inverse_cube/00_solved.out1
-rw-r--r--test/040_inverse_cube/01_scrambled.in1
-rw-r--r--test/040_inverse_cube/01_scrambled.out1
-rw-r--r--test/040_inverse_cube/inverse_tests.c23
-rw-r--r--test/050_compose/00_solved_solved.in2
-rw-r--r--test/050_compose/00_solved_solved.out1
-rw-r--r--test/050_compose/01_solved_U.in2
-rw-r--r--test/050_compose/01_solved_U.out1
-rw-r--r--test/050_compose/02_solved_scrambled.in2
-rw-r--r--test/050_compose/02_solved_scrambled.out1
-rw-r--r--test/050_compose/11_U_solved.in2
-rw-r--r--test/050_compose/11_U_solved.out1
-rw-r--r--test/050_compose/12_scrambled_solved.in2
-rw-r--r--test/050_compose/12_scrambled_solved.out1
-rw-r--r--test/050_compose/20_U_U.in2
-rw-r--r--test/050_compose/20_U_U.out1
-rw-r--r--test/050_compose/21_U_Uinverse.in2
-rw-r--r--test/050_compose/21_U_Uinverse.out1
-rw-r--r--test/050_compose/22_F_Finverse.in2
-rw-r--r--test/050_compose/22_F_Finverse.out1
-rw-r--r--test/050_compose/23_F2_F2.in2
-rw-r--r--test/050_compose/23_F2_F2.out1
-rw-r--r--test/050_compose/24_U_F.in2
-rw-r--r--test/050_compose/24_U_F.out1
-rw-r--r--test/050_compose/25_F_R.in2
-rw-r--r--test/050_compose/25_F_R.out1
-rw-r--r--test/050_compose/30_scrambled_inverse.in4
-rw-r--r--test/050_compose/30_scrambled_inverse.out1
-rw-r--r--test/050_compose/31_scrambled_scrambled.in4
-rw-r--r--test/050_compose/31_scrambled_scrambled.out1
-rw-r--r--test/050_compose/compose_tests.c26
-rw-r--r--test/060_transform/000_solved_UFr.in2
-rw-r--r--test/060_transform/000_solved_UFr.out1
-rw-r--r--test/060_transform/001_solved_BLm.in2
-rw-r--r--test/060_transform/001_solved_BLm.out1
-rw-r--r--test/060_transform/100_UFr_U.in2
-rw-r--r--test/060_transform/100_UFr_U.out1
-rw-r--r--test/060_transform/101_UFm_U.in2
-rw-r--r--test/060_transform/101_UFm_U.out1
-rw-r--r--test/060_transform/102_UFr_R.in2
-rw-r--r--test/060_transform/102_UFr_R.out1
-rw-r--r--test/060_transform/103_UFm_R.in2
-rw-r--r--test/060_transform/103_UFm_R.out1
-rw-r--r--test/060_transform/104_UFr_F.in2
-rw-r--r--test/060_transform/104_UFr_F.out1
-rw-r--r--test/060_transform/105_UFm_F.in2
-rw-r--r--test/060_transform/105_UFm_F.out1
-rw-r--r--test/060_transform/106_ULr_U.in2
-rw-r--r--test/060_transform/106_ULr_U.out1
-rw-r--r--test/060_transform/107_ULm_U.in2
-rw-r--r--test/060_transform/107_ULm_U.out1
-rw-r--r--test/060_transform/108_ULr_R.in2
-rw-r--r--test/060_transform/108_ULr_R.out1
-rw-r--r--test/060_transform/109_ULm_R.in2
-rw-r--r--test/060_transform/109_ULm_R.out1
-rw-r--r--test/060_transform/110_ULr_F.in2
-rw-r--r--test/060_transform/110_ULr_F.out1
-rw-r--r--test/060_transform/111_ULm_F.in2
-rw-r--r--test/060_transform/111_ULm_F.out1
-rw-r--r--test/060_transform/112_UBr_U.in2
-rw-r--r--test/060_transform/112_UBr_U.out1
-rw-r--r--test/060_transform/113_UBm_U.in2
-rw-r--r--test/060_transform/113_UBm_U.out1
-rw-r--r--test/060_transform/114_UBr_R.in2
-rw-r--r--test/060_transform/114_UBr_R.out1
-rw-r--r--test/060_transform/115_UBm_R.in2
-rw-r--r--test/060_transform/115_UBm_R.out1
-rw-r--r--test/060_transform/116_UBr_F.in2
-rw-r--r--test/060_transform/116_UBr_F.out1
-rw-r--r--test/060_transform/117_UBm_F.in2
-rw-r--r--test/060_transform/117_UBm_F.out1
-rw-r--r--test/060_transform/118_URr_U.in2
-rw-r--r--test/060_transform/118_URr_U.out1
-rw-r--r--test/060_transform/119_URm_U.in2
-rw-r--r--test/060_transform/119_URm_U.out1
-rw-r--r--test/060_transform/120_URr_R.in2
-rw-r--r--test/060_transform/120_URr_R.out1
-rw-r--r--test/060_transform/121_URm_R.in2
-rw-r--r--test/060_transform/121_URm_R.out1
-rw-r--r--test/060_transform/122_URr_F.in2
-rw-r--r--test/060_transform/122_URr_F.out1
-rw-r--r--test/060_transform/123_URm_F.in2
-rw-r--r--test/060_transform/123_URm_F.out1
-rw-r--r--test/060_transform/124_DFr_U.in2
-rw-r--r--test/060_transform/124_DFr_U.out1
-rw-r--r--test/060_transform/125_DFm_U.in2
-rw-r--r--test/060_transform/125_DFm_U.out1
-rw-r--r--test/060_transform/126_DFr_R.in2
-rw-r--r--test/060_transform/126_DFr_R.out1
-rw-r--r--test/060_transform/127_DFm_R.in2
-rw-r--r--test/060_transform/127_DFm_R.out1
-rw-r--r--test/060_transform/128_DFr_F.in2
-rw-r--r--test/060_transform/128_DFr_F.out1
-rw-r--r--test/060_transform/129_DFm_F.in2
-rw-r--r--test/060_transform/129_DFm_F.out1
-rw-r--r--test/060_transform/130_DLr_U.in2
-rw-r--r--test/060_transform/130_DLr_U.out1
-rw-r--r--test/060_transform/131_DLm_U.in2
-rw-r--r--test/060_transform/131_DLm_U.out1
-rw-r--r--test/060_transform/132_DLr_R.in2
-rw-r--r--test/060_transform/132_DLr_R.out1
-rw-r--r--test/060_transform/133_DLm_R.in2
-rw-r--r--test/060_transform/133_DLm_R.out1
-rw-r--r--test/060_transform/134_DLr_F.in2
-rw-r--r--test/060_transform/134_DLr_F.out1
-rw-r--r--test/060_transform/135_DLm_F.in2
-rw-r--r--test/060_transform/135_DLm_F.out1
-rw-r--r--test/060_transform/136_DBr_U.in2
-rw-r--r--test/060_transform/136_DBr_U.out1
-rw-r--r--test/060_transform/137_DBm_U.in2
-rw-r--r--test/060_transform/137_DBm_U.out1
-rw-r--r--test/060_transform/138_DBr_R.in2
-rw-r--r--test/060_transform/138_DBr_R.out1
-rw-r--r--test/060_transform/139_DBm_R.in2
-rw-r--r--test/060_transform/139_DBm_R.out1
-rw-r--r--test/060_transform/140_DBr_F.in2
-rw-r--r--test/060_transform/140_DBr_F.out1
-rw-r--r--test/060_transform/141_DBm_F.in2
-rw-r--r--test/060_transform/141_DBm_F.out1
-rw-r--r--test/060_transform/142_DRr_U.in2
-rw-r--r--test/060_transform/142_DRr_U.out1
-rw-r--r--test/060_transform/143_DRm_U.in2
-rw-r--r--test/060_transform/143_DRm_U.out1
-rw-r--r--test/060_transform/144_DRr_R.in2
-rw-r--r--test/060_transform/144_DRr_R.out1
-rw-r--r--test/060_transform/145_DRm_R.in2
-rw-r--r--test/060_transform/145_DRm_R.out1
-rw-r--r--test/060_transform/146_DRr_F.in2
-rw-r--r--test/060_transform/146_DRr_F.out1
-rw-r--r--test/060_transform/147_DRm_F.in2
-rw-r--r--test/060_transform/147_DRm_F.out1
-rw-r--r--test/060_transform/148_RUr_U.in2
-rw-r--r--test/060_transform/148_RUr_U.out1
-rw-r--r--test/060_transform/149_RUm_U.in2
-rw-r--r--test/060_transform/149_RUm_U.out1
-rw-r--r--test/060_transform/150_RUr_R.in2
-rw-r--r--test/060_transform/150_RUr_R.out1
-rw-r--r--test/060_transform/151_RUm_R.in2
-rw-r--r--test/060_transform/151_RUm_R.out1
-rw-r--r--test/060_transform/152_RUr_F.in2
-rw-r--r--test/060_transform/152_RUr_F.out1
-rw-r--r--test/060_transform/153_RUm_F.in2
-rw-r--r--test/060_transform/153_RUm_F.out1
-rw-r--r--test/060_transform/154_RFr_U.in2
-rw-r--r--test/060_transform/154_RFr_U.out1
-rw-r--r--test/060_transform/155_RFm_U.in2
-rw-r--r--test/060_transform/155_RFm_U.out1
-rw-r--r--test/060_transform/156_RFr_R.in2
-rw-r--r--test/060_transform/156_RFr_R.out1
-rw-r--r--test/060_transform/157_RFm_R.in2
-rw-r--r--test/060_transform/157_RFm_R.out1
-rw-r--r--test/060_transform/158_RFr_F.in2
-rw-r--r--test/060_transform/158_RFr_F.out1
-rw-r--r--test/060_transform/159_RFm_F.in2
-rw-r--r--test/060_transform/159_RFm_F.out1
-rw-r--r--test/060_transform/160_RDr_U.in2
-rw-r--r--test/060_transform/160_RDr_U.out1
-rw-r--r--test/060_transform/161_RDm_U.in2
-rw-r--r--test/060_transform/161_RDm_U.out1
-rw-r--r--test/060_transform/162_RDr_R.in2
-rw-r--r--test/060_transform/162_RDr_R.out1
-rw-r--r--test/060_transform/163_RDm_R.in2
-rw-r--r--test/060_transform/163_RDm_R.out1
-rw-r--r--test/060_transform/164_RDr_F.in2
-rw-r--r--test/060_transform/164_RDr_F.out1
-rw-r--r--test/060_transform/165_RDm_F.in2
-rw-r--r--test/060_transform/165_RDm_F.out1
-rw-r--r--test/060_transform/166_RBr_U.in2
-rw-r--r--test/060_transform/166_RBr_U.out1
-rw-r--r--test/060_transform/167_RBm_U.in2
-rw-r--r--test/060_transform/167_RBm_U.out1
-rw-r--r--test/060_transform/168_RBr_R.in2
-rw-r--r--test/060_transform/168_RBr_R.out1
-rw-r--r--test/060_transform/169_RBm_R.in2
-rw-r--r--test/060_transform/169_RBm_R.out1
-rw-r--r--test/060_transform/170_RBr_F.in2
-rw-r--r--test/060_transform/170_RBr_F.out1
-rw-r--r--test/060_transform/171_RBm_F.in2
-rw-r--r--test/060_transform/171_RBm_F.out1
-rw-r--r--test/060_transform/172_LUr_U.in2
-rw-r--r--test/060_transform/172_LUr_U.out1
-rw-r--r--test/060_transform/173_LUm_U.in2
-rw-r--r--test/060_transform/173_LUm_U.out1
-rw-r--r--test/060_transform/174_LUr_R.in2
-rw-r--r--test/060_transform/174_LUr_R.out1
-rw-r--r--test/060_transform/175_LUm_R.in2
-rw-r--r--test/060_transform/175_LUm_R.out1
-rw-r--r--test/060_transform/176_LUr_F.in2
-rw-r--r--test/060_transform/176_LUr_F.out1
-rw-r--r--test/060_transform/177_LUm_F.in2
-rw-r--r--test/060_transform/177_LUm_F.out1
-rw-r--r--test/060_transform/178_LFr_U.in2
-rw-r--r--test/060_transform/178_LFr_U.out1
-rw-r--r--test/060_transform/179_LFm_U.in2
-rw-r--r--test/060_transform/179_LFm_U.out1
-rw-r--r--test/060_transform/180_LFr_R.in2
-rw-r--r--test/060_transform/180_LFr_R.out1
-rw-r--r--test/060_transform/181_LFm_R.in2
-rw-r--r--test/060_transform/181_LFm_R.out1
-rw-r--r--test/060_transform/182_LFr_F.in2
-rw-r--r--test/060_transform/182_LFr_F.out1
-rw-r--r--test/060_transform/183_LFm_F.in2
-rw-r--r--test/060_transform/183_LFm_F.out1
-rw-r--r--test/060_transform/184_LDr_U.in2
-rw-r--r--test/060_transform/184_LDr_U.out1
-rw-r--r--test/060_transform/185_LDm_U.in2
-rw-r--r--test/060_transform/185_LDm_U.out1
-rw-r--r--test/060_transform/186_LDr_R.in2
-rw-r--r--test/060_transform/186_LDr_R.out1
-rw-r--r--test/060_transform/187_LDm_R.in2
-rw-r--r--test/060_transform/187_LDm_R.out1
-rw-r--r--test/060_transform/188_LDr_F.in2
-rw-r--r--test/060_transform/188_LDr_F.out1
-rw-r--r--test/060_transform/189_LDm_F.in2
-rw-r--r--test/060_transform/189_LDm_F.out1
-rw-r--r--test/060_transform/190_LBr_U.in2
-rw-r--r--test/060_transform/190_LBr_U.out1
-rw-r--r--test/060_transform/191_LBm_U.in2
-rw-r--r--test/060_transform/191_LBm_U.out1
-rw-r--r--test/060_transform/192_LBr_R.in2
-rw-r--r--test/060_transform/192_LBr_R.out1
-rw-r--r--test/060_transform/193_LBm_R.in2
-rw-r--r--test/060_transform/193_LBm_R.out1
-rw-r--r--test/060_transform/194_LBr_F.in2
-rw-r--r--test/060_transform/194_LBr_F.out1
-rw-r--r--test/060_transform/195_LBm_F.in2
-rw-r--r--test/060_transform/195_LBm_F.out1
-rw-r--r--test/060_transform/196_FUr_U.in2
-rw-r--r--test/060_transform/196_FUr_U.out1
-rw-r--r--test/060_transform/197_FUm_U.in2
-rw-r--r--test/060_transform/197_FUm_U.out1
-rw-r--r--test/060_transform/198_FUr_R.in2
-rw-r--r--test/060_transform/198_FUr_R.out1
-rw-r--r--test/060_transform/199_FUm_R.in2
-rw-r--r--test/060_transform/199_FUm_R.out1
-rw-r--r--test/060_transform/200_FUr_F.in2
-rw-r--r--test/060_transform/200_FUr_F.out1
-rw-r--r--test/060_transform/201_FUm_F.in2
-rw-r--r--test/060_transform/201_FUm_F.out1
-rw-r--r--test/060_transform/202_FRr_U.in2
-rw-r--r--test/060_transform/202_FRr_U.out1
-rw-r--r--test/060_transform/203_FRm_U.in2
-rw-r--r--test/060_transform/203_FRm_U.out1
-rw-r--r--test/060_transform/204_FRr_R.in2
-rw-r--r--test/060_transform/204_FRr_R.out1
-rw-r--r--test/060_transform/205_FRm_R.in2
-rw-r--r--test/060_transform/205_FRm_R.out1
-rw-r--r--test/060_transform/206_FRr_F.in2
-rw-r--r--test/060_transform/206_FRr_F.out1
-rw-r--r--test/060_transform/207_FRm_F.in2
-rw-r--r--test/060_transform/207_FRm_F.out1
-rw-r--r--test/060_transform/208_FDr_U.in2
-rw-r--r--test/060_transform/208_FDr_U.out1
-rw-r--r--test/060_transform/209_FDm_U.in2
-rw-r--r--test/060_transform/209_FDm_U.out1
-rw-r--r--test/060_transform/210_FDr_R.in2
-rw-r--r--test/060_transform/210_FDr_R.out1
-rw-r--r--test/060_transform/211_FDm_R.in2
-rw-r--r--test/060_transform/211_FDm_R.out1
-rw-r--r--test/060_transform/212_FDr_F.in2
-rw-r--r--test/060_transform/212_FDr_F.out1
-rw-r--r--test/060_transform/213_FDm_F.in2
-rw-r--r--test/060_transform/213_FDm_F.out1
-rw-r--r--test/060_transform/214_FLr_U.in2
-rw-r--r--test/060_transform/214_FLr_U.out1
-rw-r--r--test/060_transform/215_FLm_U.in2
-rw-r--r--test/060_transform/215_FLm_U.out1
-rw-r--r--test/060_transform/216_FLr_R.in2
-rw-r--r--test/060_transform/216_FLr_R.out1
-rw-r--r--test/060_transform/217_FLm_R.in2
-rw-r--r--test/060_transform/217_FLm_R.out1
-rw-r--r--test/060_transform/218_FLr_F.in2
-rw-r--r--test/060_transform/218_FLr_F.out1
-rw-r--r--test/060_transform/219_FLm_F.in2
-rw-r--r--test/060_transform/219_FLm_F.out1
-rw-r--r--test/060_transform/220_BUr_U.in2
-rw-r--r--test/060_transform/220_BUr_U.out1
-rw-r--r--test/060_transform/221_BUm_U.in2
-rw-r--r--test/060_transform/221_BUm_U.out1
-rw-r--r--test/060_transform/222_BUr_R.in2
-rw-r--r--test/060_transform/222_BUr_R.out1
-rw-r--r--test/060_transform/223_BUm_R.in2
-rw-r--r--test/060_transform/223_BUm_R.out1
-rw-r--r--test/060_transform/224_BUr_F.in2
-rw-r--r--test/060_transform/224_BUr_F.out1
-rw-r--r--test/060_transform/225_BUm_F.in2
-rw-r--r--test/060_transform/225_BUm_F.out1
-rw-r--r--test/060_transform/226_BRr_U.in2
-rw-r--r--test/060_transform/226_BRr_U.out1
-rw-r--r--test/060_transform/227_BRm_U.in2
-rw-r--r--test/060_transform/227_BRm_U.out1
-rw-r--r--test/060_transform/228_BRr_R.in2
-rw-r--r--test/060_transform/228_BRr_R.out1
-rw-r--r--test/060_transform/229_BRm_R.in2
-rw-r--r--test/060_transform/229_BRm_R.out1
-rw-r--r--test/060_transform/230_BRr_F.in2
-rw-r--r--test/060_transform/230_BRr_F.out1
-rw-r--r--test/060_transform/231_BRm_F.in2
-rw-r--r--test/060_transform/231_BRm_F.out1
-rw-r--r--test/060_transform/232_BDr_U.in2
-rw-r--r--test/060_transform/232_BDr_U.out1
-rw-r--r--test/060_transform/233_BDm_U.in2
-rw-r--r--test/060_transform/233_BDm_U.out1
-rw-r--r--test/060_transform/234_BDr_R.in2
-rw-r--r--test/060_transform/234_BDr_R.out1
-rw-r--r--test/060_transform/235_BDm_R.in2
-rw-r--r--test/060_transform/235_BDm_R.out1
-rw-r--r--test/060_transform/236_BDr_F.in2
-rw-r--r--test/060_transform/236_BDr_F.out1
-rw-r--r--test/060_transform/237_BDm_F.in2
-rw-r--r--test/060_transform/237_BDm_F.out1
-rw-r--r--test/060_transform/238_BLr_U.in2
-rw-r--r--test/060_transform/238_BLr_U.out1
-rw-r--r--test/060_transform/239_BLm_U.in2
-rw-r--r--test/060_transform/239_BLm_U.out1
-rw-r--r--test/060_transform/240_BLr_R.in2
-rw-r--r--test/060_transform/240_BLr_R.out1
-rw-r--r--test/060_transform/241_BLm_R.in2
-rw-r--r--test/060_transform/241_BLm_R.out1
-rw-r--r--test/060_transform/242_BLr_F.in2
-rw-r--r--test/060_transform/242_BLr_F.out1
-rw-r--r--test/060_transform/243_BLm_F.in2
-rw-r--r--test/060_transform/243_BLm_F.out1
-rw-r--r--test/060_transform/transform_tests.c25
-rw-r--r--test/061_inverse_trans/00_all.in0
-rw-r--r--test/061_inverse_trans/00_all.out0
-rw-r--r--test/061_inverse_trans/inverse_trans_tests.c38
-rw-r--r--test/071_coord_eo/00_solved.in1
-rw-r--r--test/071_coord_eo/00_solved.out1
-rw-r--r--test/071_coord_eo/01_U.in1
-rw-r--r--test/071_coord_eo/01_U.out1
-rw-r--r--test/071_coord_eo/02_U2.in1
-rw-r--r--test/071_coord_eo/02_U2.out1
-rw-r--r--test/071_coord_eo/03_U3.in1
-rw-r--r--test/071_coord_eo/03_U3.out1
-rw-r--r--test/071_coord_eo/04_D.in1
-rw-r--r--test/071_coord_eo/04_D.out1
-rw-r--r--test/071_coord_eo/07_R.in1
-rw-r--r--test/071_coord_eo/07_R.out1
-rw-r--r--test/071_coord_eo/08_R2.in1
-rw-r--r--test/071_coord_eo/08_R2.out1
-rw-r--r--test/071_coord_eo/10_L.in1
-rw-r--r--test/071_coord_eo/10_L.out1
-rw-r--r--test/071_coord_eo/13_F.in1
-rw-r--r--test/071_coord_eo/13_F.out1
-rw-r--r--test/071_coord_eo/14_F2.in1
-rw-r--r--test/071_coord_eo/14_F2.out1
-rw-r--r--test/071_coord_eo/15_F3.in1
-rw-r--r--test/071_coord_eo/15_F3.out1
-rw-r--r--test/071_coord_eo/16_B.in1
-rw-r--r--test/071_coord_eo/16_B.out1
-rw-r--r--test/071_coord_eo/17_B2.in1
-rw-r--r--test/071_coord_eo/17_B2.out1
-rw-r--r--test/071_coord_eo/18_B3.in1
-rw-r--r--test/071_coord_eo/18_B3.out1
-rw-r--r--test/071_coord_eo/20_scrambled.in3
-rw-r--r--test/071_coord_eo/20_scrambled.out1
-rw-r--r--test/071_coord_eo/coord_eo_tests.c21
-rw-r--r--test/072_coord_co/00_solved.in1
-rw-r--r--test/072_coord_co/00_solved.out1
-rw-r--r--test/072_coord_co/01_U.in1
-rw-r--r--test/072_coord_co/01_U.out1
-rw-r--r--test/072_coord_co/02_U2.in1
-rw-r--r--test/072_coord_co/02_U2.out1
-rw-r--r--test/072_coord_co/03_U3.in1
-rw-r--r--test/072_coord_co/03_U3.out1
-rw-r--r--test/072_coord_co/04_D.in1
-rw-r--r--test/072_coord_co/04_D.out1
-rw-r--r--test/072_coord_co/07_R.in1
-rw-r--r--test/072_coord_co/07_R.out1
-rw-r--r--test/072_coord_co/08_R2.in1
-rw-r--r--test/072_coord_co/08_R2.out1
-rw-r--r--test/072_coord_co/10_L.in1
-rw-r--r--test/072_coord_co/10_L.out1
-rw-r--r--test/072_coord_co/13_F.in1
-rw-r--r--test/072_coord_co/13_F.out1
-rw-r--r--test/072_coord_co/14_F2.in1
-rw-r--r--test/072_coord_co/14_F2.out1
-rw-r--r--test/072_coord_co/16_B.in1
-rw-r--r--test/072_coord_co/16_B.out1
-rw-r--r--test/072_coord_co/17_B2.in1
-rw-r--r--test/072_coord_co/17_B2.out1
-rw-r--r--test/072_coord_co/20_scrambled.in3
-rw-r--r--test/072_coord_co/20_scrambled.out1
-rw-r--r--test/072_coord_co/coord_co_tests.c21
-rw-r--r--test/test.h27
-rwxr-xr-xtest/test.sh39
507 files changed, 1158 insertions, 0 deletions
diff --git a/test/000_basic/all.in b/test/000_basic/all.in
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/000_basic/all.in
diff --git a/test/000_basic/all.out b/test/000_basic/all.out
new file mode 100644
index 0000000..892ad22
--- /dev/null
+++ b/test/000_basic/all.out
@@ -0,0 +1,7 @@
1Solved is solvable
2Solved is solved
3Zero is NOT solvable
4Zero is NOT solved
5Solved and Solved are equal
6Solved and Zero are NOT equal
7Zero and Solved are NOT equal
diff --git a/test/000_basic/basic_tests.c b/test/000_basic/basic_tests.c
new file mode 100644
index 0000000..c4434c5
--- /dev/null
+++ b/test/000_basic/basic_tests.c
@@ -0,0 +1,33 @@
1#include "../test.h"
2
3bool issolved(cube_t);
4bool equal(cube_t, cube_t);
5
6void
7check(cube_t cube, char *name)
8{
9 printf("%s is%s solvable\n", name, issolvable(cube) ? "" : " NOT");
10 printf("%s is%s solved\n", name, issolved(cube) ? "" : " NOT");
11}
12
13void
14check2(cube_t cube1, char *name1, cube_t cube2, char *name2)
15{
16 printf("%s and %s are%s equal\n", name1, name2,
17 equal(cube1, cube2) ? "" : " NOT");
18}
19
20int main(void) {
21 cube_t zero, solved;
22
23 memset(&zero, 0, sizeof(cube_t));
24 solved = solvedcube();
25 check(solved, "Solved");
26 check(zero, "Zero");
27
28 check2(solved, "Solved", solved, "Solved");
29 check2(solved, "Solved", zero, "Zero");
30 check2(zero, "Zero", solved, "Solved");
31
32 return 0;
33}
diff --git a/test/001_cube_conversion/00_solved.in b/test/001_cube_conversion/00_solved.in
new file mode 100644
index 0000000..dff224d
--- /dev/null
+++ b/test/001_cube_conversion/00_solved.in
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/001_cube_conversion/00_solved.out b/test/001_cube_conversion/00_solved.out
new file mode 100644
index 0000000..dff224d
--- /dev/null
+++ b/test/001_cube_conversion/00_solved.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/001_cube_conversion/01_scrambled.in b/test/001_cube_conversion/01_scrambled.in
new file mode 100644
index 0000000..453cc8a
--- /dev/null
+++ b/test/001_cube_conversion/01_scrambled.in
@@ -0,0 +1 @@
BL1 DB0 UL1 DF0 BR1 UF1 DL0 FL1 UB0 DR1 FR1 UR1 UBR2 UBL1 DFR2 DBL2 DBR0 DFL0 UFR0 UFL2
diff --git a/test/001_cube_conversion/01_scrambled.out b/test/001_cube_conversion/01_scrambled.out
new file mode 100644
index 0000000..453cc8a
--- /dev/null
+++ b/test/001_cube_conversion/01_scrambled.out
@@ -0,0 +1 @@
BL1 DB0 UL1 DF0 BR1 UF1 DL0 FL1 UB0 DR1 FR1 UR1 UBR2 UBL1 DFR2 DBL2 DBR0 DFL0 UFR0 UFL2
diff --git a/test/001_cube_conversion/cube_conversion_tests.c b/test/001_cube_conversion/cube_conversion_tests.c
new file mode 100644
index 0000000..589eb82
--- /dev/null
+++ b/test/001_cube_conversion/cube_conversion_tests.c
@@ -0,0 +1,27 @@
1#include "../test.h"
2
3cube_fast_t cubetofast(cube_t);
4cube_t fasttocube(cube_fast_t);
5bool equal(cube_t, cube_t);
6
7int main(void) {
8 char cubestr[STRLENMAX];
9 cube_t cube, cube2;
10 cube_fast_t fast;
11
12 fgets(cubestr, STRLENMAX, stdin);
13 cube = readcube("H48", cubestr);
14 fast = cubetofast(cube);
15 cube2 = fasttocube(fast);
16
17 if (iserror(cube)) {
18 printf("Error reading cube\n");
19 } else if (iserror(cube2)) {
20 printf("Error converting cube\n");
21 } else {
22 writecube("H48", cube2, cubestr);
23 printf("%s\n", cubestr);
24 }
25
26 return 0;
27}
diff --git a/test/010_math_permsign/00_solved.in b/test/010_math_permsign/00_solved.in
new file mode 100644
index 0000000..54b5db0
--- /dev/null
+++ b/test/010_math_permsign/00_solved.in
@@ -0,0 +1,8 @@
17
20
31
42
53
64
75
86
diff --git a/test/010_math_permsign/00_solved.out b/test/010_math_permsign/00_solved.out
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/test/010_math_permsign/00_solved.out
@@ -0,0 +1 @@
0
diff --git a/test/010_math_permsign/01_3cycle.in b/test/010_math_permsign/01_3cycle.in
new file mode 100644
index 0000000..bfabfd6
--- /dev/null
+++ b/test/010_math_permsign/01_3cycle.in
@@ -0,0 +1,6 @@
15
20
34
41
53
62
diff --git a/test/010_math_permsign/01_3cycle.out b/test/010_math_permsign/01_3cycle.out
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/test/010_math_permsign/01_3cycle.out
@@ -0,0 +1 @@
0
diff --git a/test/010_math_permsign/02_22swap.in b/test/010_math_permsign/02_22swap.in
new file mode 100644
index 0000000..d0b0921
--- /dev/null
+++ b/test/010_math_permsign/02_22swap.in
@@ -0,0 +1,13 @@
112
20
31
48
53
65
74
86
97
102
119
1210
1311
diff --git a/test/010_math_permsign/02_22swap.out b/test/010_math_permsign/02_22swap.out
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/test/010_math_permsign/02_22swap.out
@@ -0,0 +1 @@
0
diff --git a/test/010_math_permsign/03_singleswap.in b/test/010_math_permsign/03_singleswap.in
new file mode 100644
index 0000000..42a584b
--- /dev/null
+++ b/test/010_math_permsign/03_singleswap.in
@@ -0,0 +1,7 @@
16
24
31
42
53
60
75
diff --git a/test/010_math_permsign/03_singleswap.out b/test/010_math_permsign/03_singleswap.out
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/test/010_math_permsign/03_singleswap.out
@@ -0,0 +1 @@
1
diff --git a/test/010_math_permsign/04_5ycle.in b/test/010_math_permsign/04_5ycle.in
new file mode 100644
index 0000000..630f6fa
--- /dev/null
+++ b/test/010_math_permsign/04_5ycle.in
@@ -0,0 +1,11 @@
110
20
31
46
52
63
74
85
97
108
119
diff --git a/test/010_math_permsign/04_5ycle.out b/test/010_math_permsign/04_5ycle.out
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/test/010_math_permsign/04_5ycle.out
@@ -0,0 +1 @@
0
diff --git a/test/010_math_permsign/05_6ycle.in b/test/010_math_permsign/05_6ycle.in
new file mode 100644
index 0000000..a226bae
--- /dev/null
+++ b/test/010_math_permsign/05_6ycle.in
@@ -0,0 +1,9 @@
18
26
30
41
53
62
74
85
97
diff --git a/test/010_math_permsign/05_6ycle.out b/test/010_math_permsign/05_6ycle.out
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/test/010_math_permsign/05_6ycle.out
@@ -0,0 +1 @@
1
diff --git a/test/010_math_permsign/permsgn_tests.c b/test/010_math_permsign/permsgn_tests.c
new file mode 100644
index 0000000..46c7377
--- /dev/null
+++ b/test/010_math_permsign/permsgn_tests.c
@@ -0,0 +1,22 @@
1#include "../test.h"
2
3int permsign(uint8_t *, int);
4
5int main(void) {
6 char str[STRLENMAX];
7 uint8_t a[100];
8 int n, i, p;
9
10 fgets(str, STRLENMAX, stdin);
11 n = atoi(str);
12
13 for (i = 0; i < n; i++) {
14 fgets(str, STRLENMAX, stdin);
15 a[i] = atoi(str);
16 }
17
18 p = permsign(a, n);
19 printf("%d\n", p);
20
21 return 0;
22}
diff --git a/test/020_io_H48_read_write/00_garbage.in b/test/020_io_H48_read_write/00_garbage.in
new file mode 100644
index 0000000..9ac203a
--- /dev/null
+++ b/test/020_io_H48_read_write/00_garbage.in
@@ -0,0 +1,3 @@
1FUF0 UBBBR2 k4
2hello
3garbage
diff --git a/test/020_io_H48_read_write/00_garbage.out b/test/020_io_H48_read_write/00_garbage.out
new file mode 100644
index 0000000..5b9114e
--- /dev/null
+++ b/test/020_io_H48_read_write/00_garbage.out
@@ -0,0 +1 @@
Error reading cube
diff --git a/test/020_io_H48_read_write/01_solved_oneline.in b/test/020_io_H48_read_write/01_solved_oneline.in
new file mode 100644
index 0000000..dff224d
--- /dev/null
+++ b/test/020_io_H48_read_write/01_solved_oneline.in
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/020_io_H48_read_write/01_solved_oneline.out b/test/020_io_H48_read_write/01_solved_oneline.out
new file mode 100644
index 0000000..dff224d
--- /dev/null
+++ b/test/020_io_H48_read_write/01_solved_oneline.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/020_io_H48_read_write/02_solved_oneline_whitespace.in b/test/020_io_H48_read_write/02_solved_oneline_whitespace.in
new file mode 100644
index 0000000..5d10368
--- /dev/null
+++ b/test/020_io_H48_read_write/02_solved_oneline_whitespace.in
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/020_io_H48_read_write/02_solved_oneline_whitespace.out b/test/020_io_H48_read_write/02_solved_oneline_whitespace.out
new file mode 100644
index 0000000..dff224d
--- /dev/null
+++ b/test/020_io_H48_read_write/02_solved_oneline_whitespace.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/020_io_H48_read_write/03_solved_multiline.in b/test/020_io_H48_read_write/03_solved_multiline.in
new file mode 100644
index 0000000..9f9652b
--- /dev/null
+++ b/test/020_io_H48_read_write/03_solved_multiline.in
@@ -0,0 +1,9 @@
1UF0 UB0
2DB0 DF0 UR0 UL0 DL0
3DR0 FR0 FL0 BL0 BR0 UFR0
4
5UBL0 DFL0 DBR0
6
7
8UFL0 UBR0 DFR0
9 DBL0
diff --git a/test/020_io_H48_read_write/03_solved_multiline.out b/test/020_io_H48_read_write/03_solved_multiline.out
new file mode 100644
index 0000000..dff224d
--- /dev/null
+++ b/test/020_io_H48_read_write/03_solved_multiline.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/020_io_H48_read_write/04_unsolvable_ep.in b/test/020_io_H48_read_write/04_unsolvable_ep.in
new file mode 100644
index 0000000..8483962
--- /dev/null
+++ b/test/020_io_H48_read_write/04_unsolvable_ep.in
@@ -0,0 +1 @@
UB0 UF0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/020_io_H48_read_write/04_unsolvable_ep.out b/test/020_io_H48_read_write/04_unsolvable_ep.out
new file mode 100644
index 0000000..e35c6e4
--- /dev/null
+++ b/test/020_io_H48_read_write/04_unsolvable_ep.out
@@ -0,0 +1 @@
Cube is not solvable
diff --git a/test/020_io_H48_read_write/05_unsolvable_eo.in b/test/020_io_H48_read_write/05_unsolvable_eo.in
new file mode 100644
index 0000000..a92089d
--- /dev/null
+++ b/test/020_io_H48_read_write/05_unsolvable_eo.in
@@ -0,0 +1 @@
UF1 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/020_io_H48_read_write/05_unsolvable_eo.out b/test/020_io_H48_read_write/05_unsolvable_eo.out
new file mode 100644
index 0000000..e35c6e4
--- /dev/null
+++ b/test/020_io_H48_read_write/05_unsolvable_eo.out
@@ -0,0 +1 @@
Cube is not solvable
diff --git a/test/020_io_H48_read_write/06_unsolvable_cp.in b/test/020_io_H48_read_write/06_unsolvable_cp.in
new file mode 100644
index 0000000..2085dd5
--- /dev/null
+++ b/test/020_io_H48_read_write/06_unsolvable_cp.in
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UBL0 UFR0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/020_io_H48_read_write/06_unsolvable_cp.out b/test/020_io_H48_read_write/06_unsolvable_cp.out
new file mode 100644
index 0000000..e35c6e4
--- /dev/null
+++ b/test/020_io_H48_read_write/06_unsolvable_cp.out
@@ -0,0 +1 @@
Cube is not solvable
diff --git a/test/020_io_H48_read_write/07_unsolvable_co.in b/test/020_io_H48_read_write/07_unsolvable_co.in
new file mode 100644
index 0000000..abd74e2
--- /dev/null
+++ b/test/020_io_H48_read_write/07_unsolvable_co.in
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR1 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/020_io_H48_read_write/07_unsolvable_co.out b/test/020_io_H48_read_write/07_unsolvable_co.out
new file mode 100644
index 0000000..e35c6e4
--- /dev/null
+++ b/test/020_io_H48_read_write/07_unsolvable_co.out
@@ -0,0 +1 @@
Cube is not solvable
diff --git a/test/020_io_H48_read_write/08_unsolved.in b/test/020_io_H48_read_write/08_unsolved.in
new file mode 100644
index 0000000..c992ce7
--- /dev/null
+++ b/test/020_io_H48_read_write/08_unsolved.in
@@ -0,0 +1,6 @@
1UL1 DR0 UB0 DL1
2UR0 FR1 DB0 BR0
3UF1 DF0 BL0 FL0
4
5UBL0 DLF1 DBR2 UFR1
6DFR1 UBR1 UFL0 DBL0
diff --git a/test/020_io_H48_read_write/08_unsolved.out b/test/020_io_H48_read_write/08_unsolved.out
new file mode 100644
index 0000000..8c132cf
--- /dev/null
+++ b/test/020_io_H48_read_write/08_unsolved.out
@@ -0,0 +1 @@
UL1 DR0 UB0 DL1 UR0 FR1 DB0 BR0 UF1 DF0 BL0 FL0 UBL0 DFL1 DBR2 UFR1 DFR1 UBR1 UFL0 DBL0
diff --git a/test/020_io_H48_read_write/io_H48_tests.c b/test/020_io_H48_read_write/io_H48_tests.c
new file mode 100644
index 0000000..705356c
--- /dev/null
+++ b/test/020_io_H48_read_write/io_H48_tests.c
@@ -0,0 +1,24 @@
1#include "../test.h"
2
3int main(void) {
4 char str[STRLENMAX], *aux;
5 cube_t cube;
6
7 aux = str;
8 while (fgets(aux, STRLENMAX, stdin) != NULL)
9 while (*aux != '\n')
10 aux++;
11
12 cube = readcube("H48", str);
13
14 if (iserror(cube)) {
15 printf("Error reading cube\n");
16 } else if (!issolvable(cube)) {
17 printf("Cube is not solvable\n");
18 } else {
19 writecube("H48", cube, str);
20 printf("%s\n", str);
21 }
22
23 return 0;
24}
diff --git a/test/023_io_LST_write/01_solved.in b/test/023_io_LST_write/01_solved.in
new file mode 100644
index 0000000..dff224d
--- /dev/null
+++ b/test/023_io_LST_write/01_solved.in
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/023_io_LST_write/01_solved.out b/test/023_io_LST_write/01_solved.out
new file mode 100644
index 0000000..c5b394b
--- /dev/null
+++ b/test/023_io_LST_write/01_solved.out
@@ -0,0 +1 @@
0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
diff --git a/test/023_io_LST_write/02_scrambled.in b/test/023_io_LST_write/02_scrambled.in
new file mode 100644
index 0000000..6a05bbc
--- /dev/null
+++ b/test/023_io_LST_write/02_scrambled.in
@@ -0,0 +1 @@
FL0 DB0 UB1 FR0 UR0 DF0 UF0 BR1 UL1 BL1 DL0 DR0 DFR1 UFR1 UBR1 UFL2 DBR2 DFL0 DBL2 UBL0
diff --git a/test/023_io_LST_write/02_scrambled.out b/test/023_io_LST_write/02_scrambled.out
new file mode 100644
index 0000000..9fcb603
--- /dev/null
+++ b/test/023_io_LST_write/02_scrambled.out
@@ -0,0 +1 @@
38, 32, 37, 68, 67, 2, 71, 1, 9, 2, 17, 8, 4, 3, 0, 27, 21, 26, 6, 7
diff --git a/test/023_io_LST_write/io_LST_tests.c b/test/023_io_LST_write/io_LST_tests.c
new file mode 100644
index 0000000..df35632
--- /dev/null
+++ b/test/023_io_LST_write/io_LST_tests.c
@@ -0,0 +1,24 @@
1#include "../test.h"
2
3int main(void) {
4 char str[STRLENMAX], *aux;
5 cube_t cube;
6
7 aux = str;
8 while (fgets(aux, STRLENMAX, stdin) != NULL)
9 while (*aux != '\n')
10 aux++;
11
12 cube = readcube("H48", str);
13
14 if (iserror(cube)) {
15 printf("Error reading cube\n");
16 } else if (!issolvable(cube)) {
17 printf("Cube is not solvable\n");
18 } else {
19 writecube("LST", cube, str);
20 printf("%s\n", str);
21 }
22
23 return 0;
24}
diff --git a/test/024_io_LST_read/01_solved.in b/test/024_io_LST_read/01_solved.in
new file mode 100644
index 0000000..c5b394b
--- /dev/null
+++ b/test/024_io_LST_read/01_solved.in
@@ -0,0 +1 @@
0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
diff --git a/test/024_io_LST_read/01_solved.out b/test/024_io_LST_read/01_solved.out
new file mode 100644
index 0000000..dff224d
--- /dev/null
+++ b/test/024_io_LST_read/01_solved.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/024_io_LST_read/02_scrambled.in b/test/024_io_LST_read/02_scrambled.in
new file mode 100644
index 0000000..9fcb603
--- /dev/null
+++ b/test/024_io_LST_read/02_scrambled.in
@@ -0,0 +1 @@
38, 32, 37, 68, 67, 2, 71, 1, 9, 2, 17, 8, 4, 3, 0, 27, 21, 26, 6, 7
diff --git a/test/024_io_LST_read/02_scrambled.out b/test/024_io_LST_read/02_scrambled.out
new file mode 100644
index 0000000..6a05bbc
--- /dev/null
+++ b/test/024_io_LST_read/02_scrambled.out
@@ -0,0 +1 @@
FL0 DB0 UB1 FR0 UR0 DF0 UF0 BR1 UL1 BL1 DL0 DR0 DFR1 UFR1 UBR1 UFL2 DBR2 DFL0 DBL2 UBL0
diff --git a/test/024_io_LST_read/io_LST_tests.c b/test/024_io_LST_read/io_LST_tests.c
new file mode 100644
index 0000000..506a23d
--- /dev/null
+++ b/test/024_io_LST_read/io_LST_tests.c
@@ -0,0 +1,24 @@
1#include "../test.h"
2
3int main(void) {
4 char str[STRLENMAX], *aux;
5 cube_t cube;
6
7 aux = str;
8 while (fgets(aux, STRLENMAX, stdin) != NULL)
9 while (*aux != '\n')
10 aux++;
11
12 cube = readcube("LST", str);
13
14 if (iserror(cube)) {
15 printf("Error reading cube\n");
16 } else if (!issolvable(cube)) {
17 printf("Cube is not solvable\n");
18 } else {
19 writecube("H48", cube, str);
20 printf("%s\n", str);
21 }
22
23 return 0;
24}
diff --git a/test/030_move/000_nomove_solved.in b/test/030_move/000_nomove_solved.in
new file mode 100644
index 0000000..07cf178
--- /dev/null
+++ b/test/030_move/000_nomove_solved.in
@@ -0,0 +1,2 @@
1
2UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/030_move/000_nomove_solved.out b/test/030_move/000_nomove_solved.out
new file mode 100644
index 0000000..dff224d
--- /dev/null
+++ b/test/030_move/000_nomove_solved.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/030_move/001_nomove_scrambled.in b/test/030_move/001_nomove_scrambled.in
new file mode 100644
index 0000000..fd1d23c
--- /dev/null
+++ b/test/030_move/001_nomove_scrambled.in
@@ -0,0 +1,2 @@
1
2BR0 DF1 DL1 FR0 UB1 DR1 UF0 UR0 UL0 FL1 BL0 DB1 UBL0 DBR1 UFL1 DFR2 UFR0 UBR1 DBL1 DFL0
diff --git a/test/030_move/001_nomove_scrambled.out b/test/030_move/001_nomove_scrambled.out
new file mode 100644
index 0000000..bd2cca0
--- /dev/null
+++ b/test/030_move/001_nomove_scrambled.out
@@ -0,0 +1 @@
BR0 DF1 DL1 FR0 UB1 DR1 UF0 UR0 UL0 FL1 BL0 DB1 UBL0 DBR1 UFL1 DFR2 UFR0 UBR1 DBL1 DFL0
diff --git a/test/030_move/010_U_solved.in b/test/030_move/010_U_solved.in
new file mode 100644
index 0000000..62495cb
--- /dev/null
+++ b/test/030_move/010_U_solved.in
@@ -0,0 +1,2 @@
1U
2UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/030_move/010_U_solved.out b/test/030_move/010_U_solved.out
new file mode 100644
index 0000000..b5b36ad
--- /dev/null
+++ b/test/030_move/010_U_solved.out
@@ -0,0 +1 @@
UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/030_move/011_U_scrambled.in b/test/030_move/011_U_scrambled.in
new file mode 100644
index 0000000..012faaf
--- /dev/null
+++ b/test/030_move/011_U_scrambled.in
@@ -0,0 +1,2 @@
1U
2BR0 DF1 DL1 FR0 UB1 DR1 UF0 UR0 UL0 FL1 BL0 DB1 UBL0 DBR1 UFL1 DFR2 UFR0 UBR1 DBL1 DFL0
diff --git a/test/030_move/011_U_scrambled.out b/test/030_move/011_U_scrambled.out
new file mode 100644
index 0000000..46d2ef7
--- /dev/null
+++ b/test/030_move/011_U_scrambled.out
@@ -0,0 +1 @@
UB1 DR1 DL1 FR0 DF1 BR0 UF0 UR0 UL0 FL1 BL0 DB1 UBR1 UFR0 UFL1 DFR2 UBL0 DBR1 DBL1 DFL0
diff --git a/test/030_move/012_U_inverse.in b/test/030_move/012_U_inverse.in
new file mode 100644
index 0000000..2aa7ffa
--- /dev/null
+++ b/test/030_move/012_U_inverse.in
@@ -0,0 +1,2 @@
1U
2UL0 UR0 DB0 DF0 UF0 UB0 DL0 DR0 FR0 FL0 BL0 BR0 UFL0 UBR0 DFL0 DBR0 UBL0 UFR0 DFR0 DBL0
diff --git a/test/030_move/012_U_inverse.out b/test/030_move/012_U_inverse.out
new file mode 100644
index 0000000..dff224d
--- /dev/null
+++ b/test/030_move/012_U_inverse.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/030_move/020_U2_solved.in b/test/030_move/020_U2_solved.in
new file mode 100644
index 0000000..ccc84ef
--- /dev/null
+++ b/test/030_move/020_U2_solved.in
@@ -0,0 +1,2 @@
1U2
2UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/030_move/020_U2_solved.out b/test/030_move/020_U2_solved.out
new file mode 100644
index 0000000..316ad57
--- /dev/null
+++ b/test/030_move/020_U2_solved.out
@@ -0,0 +1 @@
UB0 UF0 DB0 DF0 UL0 UR0 DL0 DR0 FR0 FL0 BL0 BR0 UBL0 UFR0 DFL0 DBR0 UBR0 UFL0 DFR0 DBL0
diff --git a/test/030_move/021_U2_scrambled.in b/test/030_move/021_U2_scrambled.in
new file mode 100644
index 0000000..bdc034e
--- /dev/null
+++ b/test/030_move/021_U2_scrambled.in
@@ -0,0 +1,2 @@
1U2
2BR0 DF1 DL1 FR0 UB1 DR1 UF0 UR0 UL0 FL1 BL0 DB1 UBL0 DBR1 UFL1 DFR2 UFR0 UBR1 DBL1 DFL0
diff --git a/test/030_move/021_U2_scrambled.out b/test/030_move/021_U2_scrambled.out
new file mode 100644
index 0000000..c89ca1f
--- /dev/null
+++ b/test/030_move/021_U2_scrambled.out
@@ -0,0 +1 @@
DF1 BR0 DL1 FR0 DR1 UB1 UF0 UR0 UL0 FL1 BL0 DB1 DBR1 UBL0 UFL1 DFR2 UBR1 UFR0 DBL1 DFL0
diff --git a/test/030_move/022_U2_inverse.in b/test/030_move/022_U2_inverse.in
new file mode 100644
index 0000000..8ace160
--- /dev/null
+++ b/test/030_move/022_U2_inverse.in
@@ -0,0 +1,2 @@
1U2
2UB0 UF0 DB0 DF0 UL0 UR0 DL0 DR0 FR0 FL0 BL0 BR0 UBL0 UFR0 DFL0 DBR0 UBR0 UFL0 DFR0 DBL0
diff --git a/test/030_move/022_U2_inverse.out b/test/030_move/022_U2_inverse.out
new file mode 100644
index 0000000..dff224d
--- /dev/null
+++ b/test/030_move/022_U2_inverse.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/030_move/030_U3_solved.in b/test/030_move/030_U3_solved.in
new file mode 100644
index 0000000..49a8847
--- /dev/null
+++ b/test/030_move/030_U3_solved.in
@@ -0,0 +1,2 @@
1U3
2UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/030_move/030_U3_solved.out b/test/030_move/030_U3_solved.out
new file mode 100644
index 0000000..7721ab5
--- /dev/null
+++ b/test/030_move/030_U3_solved.out
@@ -0,0 +1 @@
UL0 UR0 DB0 DF0 UF0 UB0 DL0 DR0 FR0 FL0 BL0 BR0 UFL0 UBR0 DFL0 DBR0 UBL0 UFR0 DFR0 DBL0
diff --git a/test/030_move/031_U3_inverse.in b/test/030_move/031_U3_inverse.in
new file mode 100644
index 0000000..44b6ce3
--- /dev/null
+++ b/test/030_move/031_U3_inverse.in
@@ -0,0 +1,2 @@
1U3
2UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/030_move/031_U3_inverse.out b/test/030_move/031_U3_inverse.out
new file mode 100644
index 0000000..dff224d
--- /dev/null
+++ b/test/030_move/031_U3_inverse.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/030_move/032_U3_scrambled.in b/test/030_move/032_U3_scrambled.in
new file mode 100644
index 0000000..a00608c
--- /dev/null
+++ b/test/030_move/032_U3_scrambled.in
@@ -0,0 +1,2 @@
1U3
2UF1 BR0 DL1 UR1 FR1 FL0 UL0 BL1 DR0 DF1 DB0 UB0 UBR2 DFL1 UFL0 DBR1 UBL2 DFR0 DBL2 UFR1
diff --git a/test/030_move/032_U3_scrambled.out b/test/030_move/032_U3_scrambled.out
new file mode 100644
index 0000000..7d1e8cd
--- /dev/null
+++ b/test/030_move/032_U3_scrambled.out
@@ -0,0 +1 @@
FL0 FR1 DL1 UR1 UF1 BR0 UL0 BL1 DR0 DF1 DB0 UB0 UBL2 DFR0 UFL0 DBR1 DFL1 UBR2 DBL2 UFR1
diff --git a/test/030_move/033_U3_with_prime.in b/test/030_move/033_U3_with_prime.in
new file mode 100644
index 0000000..95e5405
--- /dev/null
+++ b/test/030_move/033_U3_with_prime.in
@@ -0,0 +1,2 @@
1U'
2UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/030_move/033_U3_with_prime.out b/test/030_move/033_U3_with_prime.out
new file mode 100644
index 0000000..7721ab5
--- /dev/null
+++ b/test/030_move/033_U3_with_prime.out
@@ -0,0 +1 @@
UL0 UR0 DB0 DF0 UF0 UB0 DL0 DR0 FR0 FL0 BL0 BR0 UFL0 UBR0 DFL0 DBR0 UBL0 UFR0 DFR0 DBL0
diff --git a/test/030_move/040_D_solved.in b/test/030_move/040_D_solved.in
new file mode 100644
index 0000000..cb5edb7
--- /dev/null
+++ b/test/030_move/040_D_solved.in
@@ -0,0 +1,2 @@
1D
2UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/030_move/040_D_solved.out b/test/030_move/040_D_solved.out
new file mode 100644
index 0000000..cf4f816
--- /dev/null
+++ b/test/030_move/040_D_solved.out
@@ -0,0 +1 @@
UF0 UB0 DR0 DL0 UR0 UL0 DB0 DF0 FR0 FL0 BL0 BR0 UFR0 UBL0 DBL0 DFR0 UFL0 UBR0 DFL0 DBR0
diff --git a/test/030_move/050_D2_solved.in b/test/030_move/050_D2_solved.in
new file mode 100644
index 0000000..56f47cd
--- /dev/null
+++ b/test/030_move/050_D2_solved.in
@@ -0,0 +1,2 @@
1D2
2UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/030_move/050_D2_solved.out b/test/030_move/050_D2_solved.out
new file mode 100644
index 0000000..13b229e
--- /dev/null
+++ b/test/030_move/050_D2_solved.out
@@ -0,0 +1 @@
UF0 UB0 DF0 DB0 UR0 UL0 DR0 DL0 FR0 FL0 BL0 BR0 UFR0 UBL0 DBR0 DFL0 UFL0 UBR0 DBL0 DFR0
diff --git a/test/030_move/060_D3_solved.in b/test/030_move/060_D3_solved.in
new file mode 100644
index 0000000..64d1dd8
--- /dev/null
+++ b/test/030_move/060_D3_solved.in
@@ -0,0 +1,2 @@
1D3
2UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/030_move/060_D3_solved.out b/test/030_move/060_D3_solved.out
new file mode 100644
index 0000000..2864f5b
--- /dev/null
+++ b/test/030_move/060_D3_solved.out
@@ -0,0 +1 @@
UF0 UB0 DL0 DR0 UR0 UL0 DF0 DB0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFR0 DBL0 UFL0 UBR0 DBR0 DFL0
diff --git a/test/030_move/070_R_solved.in b/test/030_move/070_R_solved.in
new file mode 100644
index 0000000..108538a
--- /dev/null
+++ b/test/030_move/070_R_solved.in
@@ -0,0 +1,2 @@
1R
2UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/030_move/070_R_solved.out b/test/030_move/070_R_solved.out
new file mode 100644
index 0000000..8c8fcb3
--- /dev/null
+++ b/test/030_move/070_R_solved.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/030_move/071_R_scrambled.in b/test/030_move/071_R_scrambled.in
new file mode 100644
index 0000000..0c9dcaf
--- /dev/null
+++ b/test/030_move/071_R_scrambled.in
@@ -0,0 +1,2 @@
1R
2UF1 BR0 DL1 UR1 FR1 FL0 UL0 BL1 DR0 DF1 DB0 UB0 UBR2 DFL1 UFL0 DBR1 UBL2 DFR0 DBL2 UFR1
diff --git a/test/030_move/071_R_scrambled.out b/test/030_move/071_R_scrambled.out
new file mode 100644
index 0000000..650bcc8
--- /dev/null
+++ b/test/030_move/071_R_scrambled.out
@@ -0,0 +1 @@
UF1 BR0 DL1 UR1 DR0 FL0 UL0 UB0 BL1 DF1 DB0 FR1 DBL1 DFL1 UFL0 DFR2 UBL2 UBR0 DBR2 UFR1
diff --git a/test/030_move/080_R2_solved.in b/test/030_move/080_R2_solved.in
new file mode 100644
index 0000000..554a084
--- /dev/null
+++ b/test/030_move/080_R2_solved.in
@@ -0,0 +1,2 @@
1R2
2UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/030_move/080_R2_solved.out b/test/030_move/080_R2_solved.out
new file mode 100644
index 0000000..90765e2
--- /dev/null
+++ b/test/030_move/080_R2_solved.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 DR0 UL0 DL0 UR0 BR0 FL0 BL0 FR0 DBR0 UBL0 DFL0 UFR0 UFL0 DFR0 UBR0 DBL0
diff --git a/test/030_move/090_R3_solved.in b/test/030_move/090_R3_solved.in
new file mode 100644
index 0000000..ca6cfd8
--- /dev/null
+++ b/test/030_move/090_R3_solved.in
@@ -0,0 +1,2 @@
1R3
2UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/030_move/090_R3_solved.out b/test/030_move/090_R3_solved.out
new file mode 100644
index 0000000..d4abffc
--- /dev/null
+++ b/test/030_move/090_R3_solved.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 BR0 UL0 DL0 FR0 UR0 FL0 BL0 DR0 UBR2 UBL0 DFL0 DFR2 UFL0 DBR1 UFR1 DBL0
diff --git a/test/030_move/100_L_solved.in b/test/030_move/100_L_solved.in
new file mode 100644
index 0000000..14ebb5f
--- /dev/null
+++ b/test/030_move/100_L_solved.in
@@ -0,0 +1,2 @@
1L
2UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/030_move/100_L_solved.out b/test/030_move/100_L_solved.out
new file mode 100644
index 0000000..0b0565c
--- /dev/null
+++ b/test/030_move/100_L_solved.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 BL0 FL0 DR0 FR0 UL0 DL0 BR0 UFR0 DBL2 UFL2 DBR0 UBL1 UBR0 DFR0 DFL1
diff --git a/test/030_move/110_L2_solved.in b/test/030_move/110_L2_solved.in
new file mode 100644
index 0000000..8224bcd
--- /dev/null
+++ b/test/030_move/110_L2_solved.in
@@ -0,0 +1,2 @@
1L2
2UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/030_move/110_L2_solved.out b/test/030_move/110_L2_solved.out
new file mode 100644
index 0000000..2498c87
--- /dev/null
+++ b/test/030_move/110_L2_solved.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 DL0 UL0 DR0 FR0 BL0 FL0 BR0 UFR0 DFL0 UBL0 DBR0 DBL0 UBR0 DFR0 UFL0
diff --git a/test/030_move/120_L3_solved.in b/test/030_move/120_L3_solved.in
new file mode 100644
index 0000000..552d319
--- /dev/null
+++ b/test/030_move/120_L3_solved.in
@@ -0,0 +1,2 @@
1L3
2UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/030_move/120_L3_solved.out b/test/030_move/120_L3_solved.out
new file mode 100644
index 0000000..2ac2912
--- /dev/null
+++ b/test/030_move/120_L3_solved.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 FL0 BL0 DR0 FR0 DL0 UL0 BR0 UFR0 UFL2 DBL2 DBR0 DFL1 UBR0 DFR0 UBL1
diff --git a/test/030_move/130_F_solved.in b/test/030_move/130_F_solved.in
new file mode 100644
index 0000000..abdbd35
--- /dev/null
+++ b/test/030_move/130_F_solved.in
@@ -0,0 +1,2 @@
1F
2UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/030_move/130_F_solved.out b/test/030_move/130_F_solved.out
new file mode 100644
index 0000000..e805af8
--- /dev/null
+++ b/test/030_move/130_F_solved.out
@@ -0,0 +1 @@
FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/030_move/132_F_scrambled.in b/test/030_move/132_F_scrambled.in
new file mode 100644
index 0000000..8b15575
--- /dev/null
+++ b/test/030_move/132_F_scrambled.in
@@ -0,0 +1,2 @@
1F
2DL1 BR0 DR0 UR1 DF0 FL1 BL0 UL0 FR0 UF0 DB1 UB0 UFR0 DBL1 DBR0 UFL1 DFR1 DFL1 UBL2 UBR0
diff --git a/test/030_move/132_F_scrambled.out b/test/030_move/132_F_scrambled.out
new file mode 100644
index 0000000..3aea663
--- /dev/null
+++ b/test/030_move/132_F_scrambled.out
@@ -0,0 +1 @@
UF1 BR0 DR0 FR1 DF0 FL1 BL0 UL0 DL0 UR0 DB1 UB0 DFR2 DBL1 UBL0 UFL1 DBR2 DFL1 UFR2 UBR0
diff --git a/test/030_move/133_F_scrambled_2.in b/test/030_move/133_F_scrambled_2.in
new file mode 100644
index 0000000..fdd5139
--- /dev/null
+++ b/test/030_move/133_F_scrambled_2.in
@@ -0,0 +1,2 @@
1F
2BL1 DB0 UL1 DF0 BR1 UF1 DL0 FL1 UB0 DR1 FR1 UR1 UBR2 UBL1 DFR2 DBL2 DBR0 DFL0 UFR0 UFL2
diff --git a/test/030_move/133_F_scrambled_2.out b/test/030_move/133_F_scrambled_2.out
new file mode 100644
index 0000000..3546894
--- /dev/null
+++ b/test/030_move/133_F_scrambled_2.out
@@ -0,0 +1 @@
DR0 DB0 UL1 UB1 BR1 UF1 DL0 FL1 BL0 DF1 FR1 UR1 DBR1 UBL1 UFR1 DBL2 DFR1 DFL0 UBR1 UFL2
diff --git a/test/030_move/140_F2_solved.in b/test/030_move/140_F2_solved.in
new file mode 100644
index 0000000..83aab30
--- /dev/null
+++ b/test/030_move/140_F2_solved.in
@@ -0,0 +1,2 @@
1F2
2UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/030_move/140_F2_solved.out b/test/030_move/140_F2_solved.out
new file mode 100644
index 0000000..8aa701f
--- /dev/null
+++ b/test/030_move/140_F2_solved.out
@@ -0,0 +1 @@
DF0 UB0 DB0 UF0 UR0 UL0 DL0 DR0 FL0 FR0 BL0 BR0 DFL0 UBL0 UFR0 DBR0 DFR0 UBR0 UFL0 DBL0
diff --git a/test/030_move/150_F3_solved.in b/test/030_move/150_F3_solved.in
new file mode 100644
index 0000000..2c766c1
--- /dev/null
+++ b/test/030_move/150_F3_solved.in
@@ -0,0 +1,2 @@
1F3
2UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/030_move/150_F3_solved.out b/test/030_move/150_F3_solved.out
new file mode 100644
index 0000000..40f1260
--- /dev/null
+++ b/test/030_move/150_F3_solved.out
@@ -0,0 +1 @@
FR1 UB0 DB0 FL1 UR0 UL0 DL0 DR0 DF1 UF1 BL0 BR0 DFR1 UBL0 UFL1 DBR0 UFR2 UBR0 DFL2 DBL0
diff --git a/test/030_move/160_B_solved.in b/test/030_move/160_B_solved.in
new file mode 100644
index 0000000..6062e45
--- /dev/null
+++ b/test/030_move/160_B_solved.in
@@ -0,0 +1,2 @@
1B
2UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/030_move/160_B_solved.out b/test/030_move/160_B_solved.out
new file mode 100644
index 0000000..f7fb13c
--- /dev/null
+++ b/test/030_move/160_B_solved.out
@@ -0,0 +1 @@
UF0 BR1 BL1 DF0 UR0 UL0 DL0 DR0 FR0 FL0 UB1 DB1 UFR0 UBR1 DFL0 DBL1 UFL0 DBR2 DFR0 UBL2
diff --git a/test/030_move/170_B2_solved.in b/test/030_move/170_B2_solved.in
new file mode 100644
index 0000000..0ff1190
--- /dev/null
+++ b/test/030_move/170_B2_solved.in
@@ -0,0 +1,2 @@
1B2
2UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/030_move/170_B2_solved.out b/test/030_move/170_B2_solved.out
new file mode 100644
index 0000000..9b33e35
--- /dev/null
+++ b/test/030_move/170_B2_solved.out
@@ -0,0 +1 @@
UF0 DB0 UB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BR0 BL0 UFR0 DBR0 DFL0 UBL0 UFL0 DBL0 DFR0 UBR0
diff --git a/test/030_move/180_B3_solved.in b/test/030_move/180_B3_solved.in
new file mode 100644
index 0000000..c59636f
--- /dev/null
+++ b/test/030_move/180_B3_solved.in
@@ -0,0 +1,2 @@
1B3
2UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/030_move/180_B3_solved.out b/test/030_move/180_B3_solved.out
new file mode 100644
index 0000000..1367517
--- /dev/null
+++ b/test/030_move/180_B3_solved.out
@@ -0,0 +1 @@
UF0 BL1 BR1 DF0 UR0 UL0 DL0 DR0 FR0 FL0 DB1 UB1 UFR0 DBL1 DFL0 UBR1 UFL0 UBL2 DFR0 DBR2
diff --git a/test/030_move/200_scramble_solved.in b/test/030_move/200_scramble_solved.in
new file mode 100644
index 0000000..939d876
--- /dev/null
+++ b/test/030_move/200_scramble_solved.in
@@ -0,0 +1,2 @@
1B' D' B' R2 B' R F D F2 U2 B D2 F R2 F2 L2 F L2 U2
2UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/030_move/200_scramble_solved.out b/test/030_move/200_scramble_solved.out
new file mode 100644
index 0000000..690ff6b
--- /dev/null
+++ b/test/030_move/200_scramble_solved.out
@@ -0,0 +1 @@
BR0 DF0 FL1 UB0 BL0 FR1 UR1 UL0 DR1 DB0 UF1 DL1 DFL0 DFR0 UFL1 UBL2 DBR1 DBL0 UFR1 UBR1
diff --git a/test/030_move/201_solution_scrambled.in b/test/030_move/201_solution_scrambled.in
new file mode 100644
index 0000000..a838b4c
--- /dev/null
+++ b/test/030_move/201_solution_scrambled.in
@@ -0,0 +1,2 @@
1F' B' D2 U2 F2 U' L' U D B D' R2 B' L' R' D' R D L2 U' L' B L L U F U' F' U F U' F2 L' F U F U' F' U2 F2 R2 L2 B2
2BR0 DF0 FL1 UB0 BL0 FR1 UR1 UL0 DR1 DB0 UF1 DL1 DFL0 DFR0 UFL1 UBL2 DBR1 DBL0 UFR1 UBR1
diff --git a/test/030_move/201_solution_scrambled.out b/test/030_move/201_solution_scrambled.out
new file mode 100644
index 0000000..dff224d
--- /dev/null
+++ b/test/030_move/201_solution_scrambled.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/030_move/300_multimove_solved.in b/test/030_move/300_multimove_solved.in
new file mode 100644
index 0000000..e084353
--- /dev/null
+++ b/test/030_move/300_multimove_solved.in
@@ -0,0 +1,2 @@
1B2 D' L2 D' B2 D B2 R2 B2 D U2 R D R2 B L' B' L2 U B2 U
2UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/030_move/300_multimove_solved.out b/test/030_move/300_multimove_solved.out
new file mode 100644
index 0000000..6c52430
--- /dev/null
+++ b/test/030_move/300_multimove_solved.out
@@ -0,0 +1 @@
UB1 UL0 UF1 DL0 FL0 DB0 BR0 BL0 DF0 FR0 DR0 UR0 UBR1 DFR1 UBL0 DFL2 DBR1 DBL2 UFR1 UFL1
diff --git a/test/030_move/301_multimove_scrambled.in b/test/030_move/301_multimove_scrambled.in
new file mode 100644
index 0000000..cc649c0
--- /dev/null
+++ b/test/030_move/301_multimove_scrambled.in
@@ -0,0 +1,2 @@
1D2 B2 L U2 B2 L' B2 R' D2 R D2 B F L U F2 L' R' B2 U B2
2UB1 UL0 UF1 DL0 FL0 DB0 BR0 BL0 DF0 FR0 DR0 UR0 UBR1 DFR1 UBL0 DFL2 DBR1 DBL2 UFR1 UFL1
diff --git a/test/030_move/301_multimove_scrambled.out b/test/030_move/301_multimove_scrambled.out
new file mode 100644
index 0000000..102ac1b
--- /dev/null
+++ b/test/030_move/301_multimove_scrambled.out
@@ -0,0 +1 @@
UL1 UB0 DL1 UR0 BL1 DR1 BR0 DB0 FL1 UF0 FR1 DF0 DFR2 DFL0 DBL0 UFL0 UBR1 UBL0 UFR2 DBR1
diff --git a/test/030_move/move_tests.c b/test/030_move/move_tests.c
new file mode 100644
index 0000000..73e9dbe
--- /dev/null
+++ b/test/030_move/move_tests.c
@@ -0,0 +1,25 @@
1#include "../test.h"
2
3cube_t applymoves(cube_t, char *);
4
5int main(void) {
6 char movestr[STRLENMAX], cubestr[STRLENMAX];
7 cube_t cube;
8
9 fgets(movestr, STRLENMAX, stdin);
10 fgets(cubestr, STRLENMAX, stdin);
11 cube = readcube("H48", cubestr);
12
13 cube = applymoves(cube, movestr);
14
15 if (iserror(cube)) {
16 printf("Error moving cube\n");
17 } else if (!issolvable(cube)) {
18 printf("Moved cube is not solvable\n");
19 } else {
20 writecube("H48", cube, cubestr);
21 printf("%s\n", cubestr);
22 }
23
24 return 0;
25}
diff --git a/test/040_inverse_cube/00_solved.in b/test/040_inverse_cube/00_solved.in
new file mode 100644
index 0000000..dff224d
--- /dev/null
+++ b/test/040_inverse_cube/00_solved.in
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/040_inverse_cube/00_solved.out b/test/040_inverse_cube/00_solved.out
new file mode 100644
index 0000000..dff224d
--- /dev/null
+++ b/test/040_inverse_cube/00_solved.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/040_inverse_cube/01_scrambled.in b/test/040_inverse_cube/01_scrambled.in
new file mode 100644
index 0000000..263213b
--- /dev/null
+++ b/test/040_inverse_cube/01_scrambled.in
@@ -0,0 +1 @@
DR0 DB0 BL0 DF1 UB0 UR1 FR1 UF0 FL1 DL0 BR1 UL1 DBL2 DFL0 UBR1 DFR2 UFR0 DBR1 UBL0 UFL0
diff --git a/test/040_inverse_cube/01_scrambled.out b/test/040_inverse_cube/01_scrambled.out
new file mode 100644
index 0000000..25089c6
--- /dev/null
+++ b/test/040_inverse_cube/01_scrambled.out
@@ -0,0 +1 @@
DR0 UR0 UB0 DF1 UL1 BR1 FL0 UF0 DL1 FR1 DB0 BL1 UFL0 DFR0 UBL0 UBR2 DBL0 DFL2 DBR1 UFR1
diff --git a/test/040_inverse_cube/inverse_tests.c b/test/040_inverse_cube/inverse_tests.c
new file mode 100644
index 0000000..2ff3bc7
--- /dev/null
+++ b/test/040_inverse_cube/inverse_tests.c
@@ -0,0 +1,23 @@
1#include "../test.h"
2
3cube_t inverse(cube_t);
4
5int main(void) {
6 char str[STRLENMAX];
7 cube_t cube, inv;
8
9 fgets(str, STRLENMAX, stdin);
10 cube = readcube("H48", str);
11 inv = inverse(cube);
12
13 if (iserror(inv)) {
14 printf("Error inverting cube\n");
15 } else if (!issolvable(inv)) {
16 printf("Inverted cube is not solvable\n");
17 } else {
18 writecube("H48", inv, str);
19 printf("%s\n", str);
20 }
21
22 return 0;
23}
diff --git a/test/050_compose/00_solved_solved.in b/test/050_compose/00_solved_solved.in
new file mode 100644
index 0000000..4ccdb6e
--- /dev/null
+++ b/test/050_compose/00_solved_solved.in
@@ -0,0 +1,2 @@
1UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
2UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/050_compose/00_solved_solved.out b/test/050_compose/00_solved_solved.out
new file mode 100644
index 0000000..dff224d
--- /dev/null
+++ b/test/050_compose/00_solved_solved.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/050_compose/01_solved_U.in b/test/050_compose/01_solved_U.in
new file mode 100644
index 0000000..e0559dd
--- /dev/null
+++ b/test/050_compose/01_solved_U.in
@@ -0,0 +1,2 @@
1UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
2UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/050_compose/01_solved_U.out b/test/050_compose/01_solved_U.out
new file mode 100644
index 0000000..b5b36ad
--- /dev/null
+++ b/test/050_compose/01_solved_U.out
@@ -0,0 +1 @@
UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/050_compose/02_solved_scrambled.in b/test/050_compose/02_solved_scrambled.in
new file mode 100644
index 0000000..ad36258
--- /dev/null
+++ b/test/050_compose/02_solved_scrambled.in
@@ -0,0 +1,2 @@
1UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
2DR0 DB0 BL0 DF1 UB0 UR1 FR1 UF0 FL1 DL0 BR1 UL1 DBL2 DFL0 UBR1 DFR2 UFR0 DBR1 UBL0 UFL0
diff --git a/test/050_compose/02_solved_scrambled.out b/test/050_compose/02_solved_scrambled.out
new file mode 100644
index 0000000..263213b
--- /dev/null
+++ b/test/050_compose/02_solved_scrambled.out
@@ -0,0 +1 @@
DR0 DB0 BL0 DF1 UB0 UR1 FR1 UF0 FL1 DL0 BR1 UL1 DBL2 DFL0 UBR1 DFR2 UFR0 DBR1 UBL0 UFL0
diff --git a/test/050_compose/11_U_solved.in b/test/050_compose/11_U_solved.in
new file mode 100644
index 0000000..5993795
--- /dev/null
+++ b/test/050_compose/11_U_solved.in
@@ -0,0 +1,2 @@
1UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
2UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/050_compose/11_U_solved.out b/test/050_compose/11_U_solved.out
new file mode 100644
index 0000000..b5b36ad
--- /dev/null
+++ b/test/050_compose/11_U_solved.out
@@ -0,0 +1 @@
UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/050_compose/12_scrambled_solved.in b/test/050_compose/12_scrambled_solved.in
new file mode 100644
index 0000000..3efd52c
--- /dev/null
+++ b/test/050_compose/12_scrambled_solved.in
@@ -0,0 +1,2 @@
1DR0 DB0 BL0 DF1 UB0 UR1 FR1 UF0 FL1 DL0 BR1 UL1 DBL2 DFL0 UBR1 DFR2 UFR0 DBR1 UBL0 UFL0
2UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/050_compose/12_scrambled_solved.out b/test/050_compose/12_scrambled_solved.out
new file mode 100644
index 0000000..263213b
--- /dev/null
+++ b/test/050_compose/12_scrambled_solved.out
@@ -0,0 +1 @@
DR0 DB0 BL0 DF1 UB0 UR1 FR1 UF0 FL1 DL0 BR1 UL1 DBL2 DFL0 UBR1 DFR2 UFR0 DBR1 UBL0 UFL0
diff --git a/test/050_compose/20_U_U.in b/test/050_compose/20_U_U.in
new file mode 100644
index 0000000..2778e82
--- /dev/null
+++ b/test/050_compose/20_U_U.in
@@ -0,0 +1,2 @@
1UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
2UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/050_compose/20_U_U.out b/test/050_compose/20_U_U.out
new file mode 100644
index 0000000..316ad57
--- /dev/null
+++ b/test/050_compose/20_U_U.out
@@ -0,0 +1 @@
UB0 UF0 DB0 DF0 UL0 UR0 DL0 DR0 FR0 FL0 BL0 BR0 UBL0 UFR0 DFL0 DBR0 UBR0 UFL0 DFR0 DBL0
diff --git a/test/050_compose/21_U_Uinverse.in b/test/050_compose/21_U_Uinverse.in
new file mode 100644
index 0000000..495220e
--- /dev/null
+++ b/test/050_compose/21_U_Uinverse.in
@@ -0,0 +1,2 @@
1UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
2UL0 UR0 DB0 DF0 UF0 UB0 DL0 DR0 FR0 FL0 BL0 BR0 UFL0 UBR0 DFL0 DBR0 UBL0 UFR0 DFR0 DBL0
diff --git a/test/050_compose/21_U_Uinverse.out b/test/050_compose/21_U_Uinverse.out
new file mode 100644
index 0000000..dff224d
--- /dev/null
+++ b/test/050_compose/21_U_Uinverse.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/050_compose/22_F_Finverse.in b/test/050_compose/22_F_Finverse.in
new file mode 100644
index 0000000..4a2f1e6
--- /dev/null
+++ b/test/050_compose/22_F_Finverse.in
@@ -0,0 +1,2 @@
1FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
2FR1 UB0 DB0 FL1 UR0 UL0 DL0 DR0 DF1 UF1 BL0 BR0 DFR1 UBL0 UFL1 DBR0 UFR2 UBR0 DFL2 DBL0
diff --git a/test/050_compose/22_F_Finverse.out b/test/050_compose/22_F_Finverse.out
new file mode 100644
index 0000000..dff224d
--- /dev/null
+++ b/test/050_compose/22_F_Finverse.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/050_compose/23_F2_F2.in b/test/050_compose/23_F2_F2.in
new file mode 100644
index 0000000..5fd1081
--- /dev/null
+++ b/test/050_compose/23_F2_F2.in
@@ -0,0 +1,2 @@
1DF0 UB0 DB0 UF0 UR0 UL0 DL0 DR0 FL0 FR0 BL0 BR0 DFL0 UBL0 UFR0 DBR0 DFR0 UBR0 UFL0 DBL0
2DF0 UB0 DB0 UF0 UR0 UL0 DL0 DR0 FL0 FR0 BL0 BR0 DFL0 UBL0 UFR0 DBR0 DFR0 UBR0 UFL0 DBL0
diff --git a/test/050_compose/23_F2_F2.out b/test/050_compose/23_F2_F2.out
new file mode 100644
index 0000000..dff224d
--- /dev/null
+++ b/test/050_compose/23_F2_F2.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/050_compose/24_U_F.in b/test/050_compose/24_U_F.in
new file mode 100644
index 0000000..d353f95
--- /dev/null
+++ b/test/050_compose/24_U_F.in
@@ -0,0 +1,2 @@
1UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
2FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/050_compose/24_U_F.out b/test/050_compose/24_U_F.out
new file mode 100644
index 0000000..4fda397
--- /dev/null
+++ b/test/050_compose/24_U_F.out
@@ -0,0 +1 @@
FL1 UL0 DB0 FR1 UB0 UF0 DL0 DR0 UR1 DF1 BL0 BR0 UFR1 UFL0 DFR1 DBR0 DFL2 UBL0 UBR2 DBL0
diff --git a/test/050_compose/25_F_R.in b/test/050_compose/25_F_R.in
new file mode 100644
index 0000000..2cb5455
--- /dev/null
+++ b/test/050_compose/25_F_R.in
@@ -0,0 +1,2 @@
1FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
2UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/050_compose/25_F_R.out b/test/050_compose/25_F_R.out
new file mode 100644
index 0000000..2119f37
--- /dev/null
+++ b/test/050_compose/25_F_R.out
@@ -0,0 +1 @@
FL1 UB0 DB0 FR1 UF1 UL0 DL0 BR0 DR0 DF1 BL0 UR0 UFR1 UBL0 DFR1 UBR2 DFL2 UFL2 DBR1 DBL0
diff --git a/test/050_compose/30_scrambled_inverse.in b/test/050_compose/30_scrambled_inverse.in
new file mode 100644
index 0000000..abf72e2
--- /dev/null
+++ b/test/050_compose/30_scrambled_inverse.in
@@ -0,0 +1,4 @@
1UL0 BL0 BR1 DL0 FR0 DF0 DB1 DR1 UB0 FL0 UF0 UR1 DFL0 UFR1 DBR1 UBR2 DBL2 DFR0 UFL1 UBL2
2BL0 FR0 DL1 UL0 BR1 UF0 DF0 DR1 UR0 FL0 UB0 DB1 UBL2 DBL1 UFR0 DFL2 DFR2 DBR1 UBR0 UFL1
3
4// Scramble: U R D' L D' F L2 D L F B D2 B' L2 F U2 L2 D2 R2 L2 B'
diff --git a/test/050_compose/30_scrambled_inverse.out b/test/050_compose/30_scrambled_inverse.out
new file mode 100644
index 0000000..dff224d
--- /dev/null
+++ b/test/050_compose/30_scrambled_inverse.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/050_compose/31_scrambled_scrambled.in b/test/050_compose/31_scrambled_scrambled.in
new file mode 100644
index 0000000..7fe874c
--- /dev/null
+++ b/test/050_compose/31_scrambled_scrambled.in
@@ -0,0 +1,4 @@
1UL0 BL0 BR1 DL0 FR0 DF0 DB1 DR1 UB0 FL0 UF0 UR1 DFL0 UFR1 DBR1 UBR2 DBL2 DFR0 UFL1 UBL2
2FL1 BR0 DB0 UR1 UF0 UB0 DL0 FR0 UL1 DF1 BL0 DR0 UBL1 DBR1 UFR2 DFR2 DFL2 UBR2 UFL2 DBL0
3// Scramble: U R D' L D' F L2 D L F B D2 B' L2 F U2 L2 D2 R2 L2 B'
4// Followed by R' U' F
diff --git a/test/050_compose/31_scrambled_scrambled.out b/test/050_compose/31_scrambled_scrambled.out
new file mode 100644
index 0000000..353fb49
--- /dev/null
+++ b/test/050_compose/31_scrambled_scrambled.out
@@ -0,0 +1 @@
FL1 UR1 BR1 FR1 UL0 BL0 DB1 UB0 DF1 DL1 UF0 DR1 UFR2 UBR0 DFL2 UFL0 DBR0 DFR2 DBL1 UBL2
diff --git a/test/050_compose/compose_tests.c b/test/050_compose/compose_tests.c
new file mode 100644
index 0000000..0ea4eff
--- /dev/null
+++ b/test/050_compose/compose_tests.c
@@ -0,0 +1,26 @@
1#include "../test.h"
2
3cube_t compose(cube_t, cube_t);
4
5int main(void) {
6 char str[STRLENMAX];
7 cube_t c1, c2, c3;
8
9 fgets(str, STRLENMAX, stdin);
10 c1 = readcube("H48", str);
11 fgets(str, STRLENMAX, stdin);
12 c2 = readcube("H48", str);
13
14 c3 = compose(c1, c2);
15
16 if (iserror(c3)) {
17 printf("Error composing cubes\n");
18 } else if (!issolvable(c3)) {
19 printf("Composed cube is not solvable\n");
20 } else {
21 writecube("H48", c3, str);
22 printf("%s\n", str);
23 }
24
25 return 0;
26}
diff --git a/test/060_transform/000_solved_UFr.in b/test/060_transform/000_solved_UFr.in
new file mode 100644
index 0000000..aa89e85
--- /dev/null
+++ b/test/060_transform/000_solved_UFr.in
@@ -0,0 +1,2 @@
1rotation UF
2UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/060_transform/000_solved_UFr.out b/test/060_transform/000_solved_UFr.out
new file mode 100644
index 0000000..dff224d
--- /dev/null
+++ b/test/060_transform/000_solved_UFr.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/060_transform/001_solved_BLm.in b/test/060_transform/001_solved_BLm.in
new file mode 100644
index 0000000..43aadb8
--- /dev/null
+++ b/test/060_transform/001_solved_BLm.in
@@ -0,0 +1,2 @@
1mirrored BL
2UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/060_transform/001_solved_BLm.out b/test/060_transform/001_solved_BLm.out
new file mode 100644
index 0000000..dff224d
--- /dev/null
+++ b/test/060_transform/001_solved_BLm.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/060_transform/100_UFr_U.in b/test/060_transform/100_UFr_U.in
new file mode 100644
index 0000000..80d7af7
--- /dev/null
+++ b/test/060_transform/100_UFr_U.in
@@ -0,0 +1,2 @@
1rotation UF
2UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/100_UFr_U.out b/test/060_transform/100_UFr_U.out
new file mode 100644
index 0000000..b5b36ad
--- /dev/null
+++ b/test/060_transform/100_UFr_U.out
@@ -0,0 +1 @@
UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/101_UFm_U.in b/test/060_transform/101_UFm_U.in
new file mode 100644
index 0000000..17d110e
--- /dev/null
+++ b/test/060_transform/101_UFm_U.in
@@ -0,0 +1,2 @@
1mirrored UF
2UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/101_UFm_U.out b/test/060_transform/101_UFm_U.out
new file mode 100644
index 0000000..7721ab5
--- /dev/null
+++ b/test/060_transform/101_UFm_U.out
@@ -0,0 +1 @@
UL0 UR0 DB0 DF0 UF0 UB0 DL0 DR0 FR0 FL0 BL0 BR0 UFL0 UBR0 DFL0 DBR0 UBL0 UFR0 DFR0 DBL0
diff --git a/test/060_transform/102_UFr_R.in b/test/060_transform/102_UFr_R.in
new file mode 100644
index 0000000..96099d6
--- /dev/null
+++ b/test/060_transform/102_UFr_R.in
@@ -0,0 +1,2 @@
1rotation UF
2UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/102_UFr_R.out b/test/060_transform/102_UFr_R.out
new file mode 100644
index 0000000..8c8fcb3
--- /dev/null
+++ b/test/060_transform/102_UFr_R.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/103_UFm_R.in b/test/060_transform/103_UFm_R.in
new file mode 100644
index 0000000..c70a8b5
--- /dev/null
+++ b/test/060_transform/103_UFm_R.in
@@ -0,0 +1,2 @@
1mirrored UF
2UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/103_UFm_R.out b/test/060_transform/103_UFm_R.out
new file mode 100644
index 0000000..2ac2912
--- /dev/null
+++ b/test/060_transform/103_UFm_R.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 FL0 BL0 DR0 FR0 DL0 UL0 BR0 UFR0 UFL2 DBL2 DBR0 DFL1 UBR0 DFR0 UBL1
diff --git a/test/060_transform/104_UFr_F.in b/test/060_transform/104_UFr_F.in
new file mode 100644
index 0000000..0f3585b
--- /dev/null
+++ b/test/060_transform/104_UFr_F.in
@@ -0,0 +1,2 @@
1rotation UF
2FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/104_UFr_F.out b/test/060_transform/104_UFr_F.out
new file mode 100644
index 0000000..e805af8
--- /dev/null
+++ b/test/060_transform/104_UFr_F.out
@@ -0,0 +1 @@
FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/105_UFm_F.in b/test/060_transform/105_UFm_F.in
new file mode 100644
index 0000000..e7647bc
--- /dev/null
+++ b/test/060_transform/105_UFm_F.in
@@ -0,0 +1,2 @@
1mirrored UF
2FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/105_UFm_F.out b/test/060_transform/105_UFm_F.out
new file mode 100644
index 0000000..40f1260
--- /dev/null
+++ b/test/060_transform/105_UFm_F.out
@@ -0,0 +1 @@
FR1 UB0 DB0 FL1 UR0 UL0 DL0 DR0 DF1 UF1 BL0 BR0 DFR1 UBL0 UFL1 DBR0 UFR2 UBR0 DFL2 DBL0
diff --git a/test/060_transform/106_ULr_U.in b/test/060_transform/106_ULr_U.in
new file mode 100644
index 0000000..a02f9c3
--- /dev/null
+++ b/test/060_transform/106_ULr_U.in
@@ -0,0 +1,2 @@
1rotation UL
2UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/106_ULr_U.out b/test/060_transform/106_ULr_U.out
new file mode 100644
index 0000000..b5b36ad
--- /dev/null
+++ b/test/060_transform/106_ULr_U.out
@@ -0,0 +1 @@
UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/107_ULm_U.in b/test/060_transform/107_ULm_U.in
new file mode 100644
index 0000000..73bc6a1
--- /dev/null
+++ b/test/060_transform/107_ULm_U.in
@@ -0,0 +1,2 @@
1mirrored UL
2UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/107_ULm_U.out b/test/060_transform/107_ULm_U.out
new file mode 100644
index 0000000..7721ab5
--- /dev/null
+++ b/test/060_transform/107_ULm_U.out
@@ -0,0 +1 @@
UL0 UR0 DB0 DF0 UF0 UB0 DL0 DR0 FR0 FL0 BL0 BR0 UFL0 UBR0 DFL0 DBR0 UBL0 UFR0 DFR0 DBL0
diff --git a/test/060_transform/108_ULr_R.in b/test/060_transform/108_ULr_R.in
new file mode 100644
index 0000000..a7cbbb8
--- /dev/null
+++ b/test/060_transform/108_ULr_R.in
@@ -0,0 +1,2 @@
1rotation UL
2UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/108_ULr_R.out b/test/060_transform/108_ULr_R.out
new file mode 100644
index 0000000..e805af8
--- /dev/null
+++ b/test/060_transform/108_ULr_R.out
@@ -0,0 +1 @@
FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/109_ULm_R.in b/test/060_transform/109_ULm_R.in
new file mode 100644
index 0000000..7ecf097
--- /dev/null
+++ b/test/060_transform/109_ULm_R.in
@@ -0,0 +1,2 @@
1mirrored UL
2UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/109_ULm_R.out b/test/060_transform/109_ULm_R.out
new file mode 100644
index 0000000..40f1260
--- /dev/null
+++ b/test/060_transform/109_ULm_R.out
@@ -0,0 +1 @@
FR1 UB0 DB0 FL1 UR0 UL0 DL0 DR0 DF1 UF1 BL0 BR0 DFR1 UBL0 UFL1 DBR0 UFR2 UBR0 DFL2 DBL0
diff --git a/test/060_transform/110_ULr_F.in b/test/060_transform/110_ULr_F.in
new file mode 100644
index 0000000..09a5a9a
--- /dev/null
+++ b/test/060_transform/110_ULr_F.in
@@ -0,0 +1,2 @@
1rotation UL
2FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/110_ULr_F.out b/test/060_transform/110_ULr_F.out
new file mode 100644
index 0000000..0b0565c
--- /dev/null
+++ b/test/060_transform/110_ULr_F.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 BL0 FL0 DR0 FR0 UL0 DL0 BR0 UFR0 DBL2 UFL2 DBR0 UBL1 UBR0 DFR0 DFL1
diff --git a/test/060_transform/111_ULm_F.in b/test/060_transform/111_ULm_F.in
new file mode 100644
index 0000000..711de44
--- /dev/null
+++ b/test/060_transform/111_ULm_F.in
@@ -0,0 +1,2 @@
1mirrored UL
2FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/111_ULm_F.out b/test/060_transform/111_ULm_F.out
new file mode 100644
index 0000000..d4abffc
--- /dev/null
+++ b/test/060_transform/111_ULm_F.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 BR0 UL0 DL0 FR0 UR0 FL0 BL0 DR0 UBR2 UBL0 DFL0 DFR2 UFL0 DBR1 UFR1 DBL0
diff --git a/test/060_transform/112_UBr_U.in b/test/060_transform/112_UBr_U.in
new file mode 100644
index 0000000..ce39549
--- /dev/null
+++ b/test/060_transform/112_UBr_U.in
@@ -0,0 +1,2 @@
1rotation UB
2UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/112_UBr_U.out b/test/060_transform/112_UBr_U.out
new file mode 100644
index 0000000..b5b36ad
--- /dev/null
+++ b/test/060_transform/112_UBr_U.out
@@ -0,0 +1 @@
UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/113_UBm_U.in b/test/060_transform/113_UBm_U.in
new file mode 100644
index 0000000..14ca42a
--- /dev/null
+++ b/test/060_transform/113_UBm_U.in
@@ -0,0 +1,2 @@
1mirrored UB
2UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/113_UBm_U.out b/test/060_transform/113_UBm_U.out
new file mode 100644
index 0000000..7721ab5
--- /dev/null
+++ b/test/060_transform/113_UBm_U.out
@@ -0,0 +1 @@
UL0 UR0 DB0 DF0 UF0 UB0 DL0 DR0 FR0 FL0 BL0 BR0 UFL0 UBR0 DFL0 DBR0 UBL0 UFR0 DFR0 DBL0
diff --git a/test/060_transform/114_UBr_R.in b/test/060_transform/114_UBr_R.in
new file mode 100644
index 0000000..5a878d8
--- /dev/null
+++ b/test/060_transform/114_UBr_R.in
@@ -0,0 +1,2 @@
1rotation UB
2UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/114_UBr_R.out b/test/060_transform/114_UBr_R.out
new file mode 100644
index 0000000..0b0565c
--- /dev/null
+++ b/test/060_transform/114_UBr_R.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 BL0 FL0 DR0 FR0 UL0 DL0 BR0 UFR0 DBL2 UFL2 DBR0 UBL1 UBR0 DFR0 DFL1
diff --git a/test/060_transform/115_UBm_R.in b/test/060_transform/115_UBm_R.in
new file mode 100644
index 0000000..a4e3aa8
--- /dev/null
+++ b/test/060_transform/115_UBm_R.in
@@ -0,0 +1,2 @@
1mirrored UB
2UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/115_UBm_R.out b/test/060_transform/115_UBm_R.out
new file mode 100644
index 0000000..d4abffc
--- /dev/null
+++ b/test/060_transform/115_UBm_R.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 BR0 UL0 DL0 FR0 UR0 FL0 BL0 DR0 UBR2 UBL0 DFL0 DFR2 UFL0 DBR1 UFR1 DBL0
diff --git a/test/060_transform/116_UBr_F.in b/test/060_transform/116_UBr_F.in
new file mode 100644
index 0000000..fc34148
--- /dev/null
+++ b/test/060_transform/116_UBr_F.in
@@ -0,0 +1,2 @@
1rotation UB
2FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/116_UBr_F.out b/test/060_transform/116_UBr_F.out
new file mode 100644
index 0000000..f7fb13c
--- /dev/null
+++ b/test/060_transform/116_UBr_F.out
@@ -0,0 +1 @@
UF0 BR1 BL1 DF0 UR0 UL0 DL0 DR0 FR0 FL0 UB1 DB1 UFR0 UBR1 DFL0 DBL1 UFL0 DBR2 DFR0 UBL2
diff --git a/test/060_transform/117_UBm_F.in b/test/060_transform/117_UBm_F.in
new file mode 100644
index 0000000..79433a7
--- /dev/null
+++ b/test/060_transform/117_UBm_F.in
@@ -0,0 +1,2 @@
1mirrored UB
2FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/117_UBm_F.out b/test/060_transform/117_UBm_F.out
new file mode 100644
index 0000000..1367517
--- /dev/null
+++ b/test/060_transform/117_UBm_F.out
@@ -0,0 +1 @@
UF0 BL1 BR1 DF0 UR0 UL0 DL0 DR0 FR0 FL0 DB1 UB1 UFR0 DBL1 DFL0 UBR1 UFL0 UBL2 DFR0 DBR2
diff --git a/test/060_transform/118_URr_U.in b/test/060_transform/118_URr_U.in
new file mode 100644
index 0000000..79ca262
--- /dev/null
+++ b/test/060_transform/118_URr_U.in
@@ -0,0 +1,2 @@
1rotation UR
2UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/118_URr_U.out b/test/060_transform/118_URr_U.out
new file mode 100644
index 0000000..b5b36ad
--- /dev/null
+++ b/test/060_transform/118_URr_U.out
@@ -0,0 +1 @@
UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/119_URm_U.in b/test/060_transform/119_URm_U.in
new file mode 100644
index 0000000..4581c22
--- /dev/null
+++ b/test/060_transform/119_URm_U.in
@@ -0,0 +1,2 @@
1mirrored UR
2UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/119_URm_U.out b/test/060_transform/119_URm_U.out
new file mode 100644
index 0000000..7721ab5
--- /dev/null
+++ b/test/060_transform/119_URm_U.out
@@ -0,0 +1 @@
UL0 UR0 DB0 DF0 UF0 UB0 DL0 DR0 FR0 FL0 BL0 BR0 UFL0 UBR0 DFL0 DBR0 UBL0 UFR0 DFR0 DBL0
diff --git a/test/060_transform/120_URr_R.in b/test/060_transform/120_URr_R.in
new file mode 100644
index 0000000..4803ca4
--- /dev/null
+++ b/test/060_transform/120_URr_R.in
@@ -0,0 +1,2 @@
1rotation UR
2UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/120_URr_R.out b/test/060_transform/120_URr_R.out
new file mode 100644
index 0000000..f7fb13c
--- /dev/null
+++ b/test/060_transform/120_URr_R.out
@@ -0,0 +1 @@
UF0 BR1 BL1 DF0 UR0 UL0 DL0 DR0 FR0 FL0 UB1 DB1 UFR0 UBR1 DFL0 DBL1 UFL0 DBR2 DFR0 UBL2
diff --git a/test/060_transform/121_URm_R.in b/test/060_transform/121_URm_R.in
new file mode 100644
index 0000000..df12fd4
--- /dev/null
+++ b/test/060_transform/121_URm_R.in
@@ -0,0 +1,2 @@
1mirrored UR
2UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/121_URm_R.out b/test/060_transform/121_URm_R.out
new file mode 100644
index 0000000..1367517
--- /dev/null
+++ b/test/060_transform/121_URm_R.out
@@ -0,0 +1 @@
UF0 BL1 BR1 DF0 UR0 UL0 DL0 DR0 FR0 FL0 DB1 UB1 UFR0 DBL1 DFL0 UBR1 UFL0 UBL2 DFR0 DBR2
diff --git a/test/060_transform/122_URr_F.in b/test/060_transform/122_URr_F.in
new file mode 100644
index 0000000..7d06199
--- /dev/null
+++ b/test/060_transform/122_URr_F.in
@@ -0,0 +1,2 @@
1rotation UR
2FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/122_URr_F.out b/test/060_transform/122_URr_F.out
new file mode 100644
index 0000000..8c8fcb3
--- /dev/null
+++ b/test/060_transform/122_URr_F.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/123_URm_F.in b/test/060_transform/123_URm_F.in
new file mode 100644
index 0000000..8bc2c20
--- /dev/null
+++ b/test/060_transform/123_URm_F.in
@@ -0,0 +1,2 @@
1mirrored UR
2FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/123_URm_F.out b/test/060_transform/123_URm_F.out
new file mode 100644
index 0000000..2ac2912
--- /dev/null
+++ b/test/060_transform/123_URm_F.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 FL0 BL0 DR0 FR0 DL0 UL0 BR0 UFR0 UFL2 DBL2 DBR0 DFL1 UBR0 DFR0 UBL1
diff --git a/test/060_transform/124_DFr_U.in b/test/060_transform/124_DFr_U.in
new file mode 100644
index 0000000..67200ec
--- /dev/null
+++ b/test/060_transform/124_DFr_U.in
@@ -0,0 +1,2 @@
1rotation DF
2UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/124_DFr_U.out b/test/060_transform/124_DFr_U.out
new file mode 100644
index 0000000..cf4f816
--- /dev/null
+++ b/test/060_transform/124_DFr_U.out
@@ -0,0 +1 @@
UF0 UB0 DR0 DL0 UR0 UL0 DB0 DF0 FR0 FL0 BL0 BR0 UFR0 UBL0 DBL0 DFR0 UFL0 UBR0 DFL0 DBR0
diff --git a/test/060_transform/125_DFm_U.in b/test/060_transform/125_DFm_U.in
new file mode 100644
index 0000000..33ae235
--- /dev/null
+++ b/test/060_transform/125_DFm_U.in
@@ -0,0 +1,2 @@
1mirrored DF
2UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/125_DFm_U.out b/test/060_transform/125_DFm_U.out
new file mode 100644
index 0000000..2864f5b
--- /dev/null
+++ b/test/060_transform/125_DFm_U.out
@@ -0,0 +1 @@
UF0 UB0 DL0 DR0 UR0 UL0 DF0 DB0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFR0 DBL0 UFL0 UBR0 DBR0 DFL0
diff --git a/test/060_transform/126_DFr_R.in b/test/060_transform/126_DFr_R.in
new file mode 100644
index 0000000..f74ba46
--- /dev/null
+++ b/test/060_transform/126_DFr_R.in
@@ -0,0 +1,2 @@
1rotation DF
2UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/126_DFr_R.out b/test/060_transform/126_DFr_R.out
new file mode 100644
index 0000000..0b0565c
--- /dev/null
+++ b/test/060_transform/126_DFr_R.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 BL0 FL0 DR0 FR0 UL0 DL0 BR0 UFR0 DBL2 UFL2 DBR0 UBL1 UBR0 DFR0 DFL1
diff --git a/test/060_transform/127_DFm_R.in b/test/060_transform/127_DFm_R.in
new file mode 100644
index 0000000..5d930d2
--- /dev/null
+++ b/test/060_transform/127_DFm_R.in
@@ -0,0 +1,2 @@
1mirrored DF
2UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/127_DFm_R.out b/test/060_transform/127_DFm_R.out
new file mode 100644
index 0000000..d4abffc
--- /dev/null
+++ b/test/060_transform/127_DFm_R.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 BR0 UL0 DL0 FR0 UR0 FL0 BL0 DR0 UBR2 UBL0 DFL0 DFR2 UFL0 DBR1 UFR1 DBL0
diff --git a/test/060_transform/128_DFr_F.in b/test/060_transform/128_DFr_F.in
new file mode 100644
index 0000000..eb04f3b
--- /dev/null
+++ b/test/060_transform/128_DFr_F.in
@@ -0,0 +1,2 @@
1rotation DF
2FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/128_DFr_F.out b/test/060_transform/128_DFr_F.out
new file mode 100644
index 0000000..e805af8
--- /dev/null
+++ b/test/060_transform/128_DFr_F.out
@@ -0,0 +1 @@
FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/129_DFm_F.in b/test/060_transform/129_DFm_F.in
new file mode 100644
index 0000000..ccd60a7
--- /dev/null
+++ b/test/060_transform/129_DFm_F.in
@@ -0,0 +1,2 @@
1mirrored DF
2FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/129_DFm_F.out b/test/060_transform/129_DFm_F.out
new file mode 100644
index 0000000..40f1260
--- /dev/null
+++ b/test/060_transform/129_DFm_F.out
@@ -0,0 +1 @@
FR1 UB0 DB0 FL1 UR0 UL0 DL0 DR0 DF1 UF1 BL0 BR0 DFR1 UBL0 UFL1 DBR0 UFR2 UBR0 DFL2 DBL0
diff --git a/test/060_transform/130_DLr_U.in b/test/060_transform/130_DLr_U.in
new file mode 100644
index 0000000..4aa7b90
--- /dev/null
+++ b/test/060_transform/130_DLr_U.in
@@ -0,0 +1,2 @@
1rotation DL
2UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/130_DLr_U.out b/test/060_transform/130_DLr_U.out
new file mode 100644
index 0000000..cf4f816
--- /dev/null
+++ b/test/060_transform/130_DLr_U.out
@@ -0,0 +1 @@
UF0 UB0 DR0 DL0 UR0 UL0 DB0 DF0 FR0 FL0 BL0 BR0 UFR0 UBL0 DBL0 DFR0 UFL0 UBR0 DFL0 DBR0
diff --git a/test/060_transform/131_DLm_U.in b/test/060_transform/131_DLm_U.in
new file mode 100644
index 0000000..6097c66
--- /dev/null
+++ b/test/060_transform/131_DLm_U.in
@@ -0,0 +1,2 @@
1mirrored DL
2UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/131_DLm_U.out b/test/060_transform/131_DLm_U.out
new file mode 100644
index 0000000..2864f5b
--- /dev/null
+++ b/test/060_transform/131_DLm_U.out
@@ -0,0 +1 @@
UF0 UB0 DL0 DR0 UR0 UL0 DF0 DB0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFR0 DBL0 UFL0 UBR0 DBR0 DFL0
diff --git a/test/060_transform/132_DLr_R.in b/test/060_transform/132_DLr_R.in
new file mode 100644
index 0000000..60f1ede
--- /dev/null
+++ b/test/060_transform/132_DLr_R.in
@@ -0,0 +1,2 @@
1rotation DL
2UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/132_DLr_R.out b/test/060_transform/132_DLr_R.out
new file mode 100644
index 0000000..f7fb13c
--- /dev/null
+++ b/test/060_transform/132_DLr_R.out
@@ -0,0 +1 @@
UF0 BR1 BL1 DF0 UR0 UL0 DL0 DR0 FR0 FL0 UB1 DB1 UFR0 UBR1 DFL0 DBL1 UFL0 DBR2 DFR0 UBL2
diff --git a/test/060_transform/133_DLm_R.in b/test/060_transform/133_DLm_R.in
new file mode 100644
index 0000000..018921c
--- /dev/null
+++ b/test/060_transform/133_DLm_R.in
@@ -0,0 +1,2 @@
1mirrored DL
2UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/133_DLm_R.out b/test/060_transform/133_DLm_R.out
new file mode 100644
index 0000000..1367517
--- /dev/null
+++ b/test/060_transform/133_DLm_R.out
@@ -0,0 +1 @@
UF0 BL1 BR1 DF0 UR0 UL0 DL0 DR0 FR0 FL0 DB1 UB1 UFR0 DBL1 DFL0 UBR1 UFL0 UBL2 DFR0 DBR2
diff --git a/test/060_transform/134_DLr_F.in b/test/060_transform/134_DLr_F.in
new file mode 100644
index 0000000..5254f1f
--- /dev/null
+++ b/test/060_transform/134_DLr_F.in
@@ -0,0 +1,2 @@
1rotation DL
2FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/134_DLr_F.out b/test/060_transform/134_DLr_F.out
new file mode 100644
index 0000000..0b0565c
--- /dev/null
+++ b/test/060_transform/134_DLr_F.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 BL0 FL0 DR0 FR0 UL0 DL0 BR0 UFR0 DBL2 UFL2 DBR0 UBL1 UBR0 DFR0 DFL1
diff --git a/test/060_transform/135_DLm_F.in b/test/060_transform/135_DLm_F.in
new file mode 100644
index 0000000..57c8406
--- /dev/null
+++ b/test/060_transform/135_DLm_F.in
@@ -0,0 +1,2 @@
1mirrored DL
2FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/135_DLm_F.out b/test/060_transform/135_DLm_F.out
new file mode 100644
index 0000000..d4abffc
--- /dev/null
+++ b/test/060_transform/135_DLm_F.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 BR0 UL0 DL0 FR0 UR0 FL0 BL0 DR0 UBR2 UBL0 DFL0 DFR2 UFL0 DBR1 UFR1 DBL0
diff --git a/test/060_transform/136_DBr_U.in b/test/060_transform/136_DBr_U.in
new file mode 100644
index 0000000..34f37cb
--- /dev/null
+++ b/test/060_transform/136_DBr_U.in
@@ -0,0 +1,2 @@
1rotation DB
2UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/136_DBr_U.out b/test/060_transform/136_DBr_U.out
new file mode 100644
index 0000000..cf4f816
--- /dev/null
+++ b/test/060_transform/136_DBr_U.out
@@ -0,0 +1 @@
UF0 UB0 DR0 DL0 UR0 UL0 DB0 DF0 FR0 FL0 BL0 BR0 UFR0 UBL0 DBL0 DFR0 UFL0 UBR0 DFL0 DBR0
diff --git a/test/060_transform/137_DBm_U.in b/test/060_transform/137_DBm_U.in
new file mode 100644
index 0000000..5425205
--- /dev/null
+++ b/test/060_transform/137_DBm_U.in
@@ -0,0 +1,2 @@
1mirrored DB
2UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/137_DBm_U.out b/test/060_transform/137_DBm_U.out
new file mode 100644
index 0000000..2864f5b
--- /dev/null
+++ b/test/060_transform/137_DBm_U.out
@@ -0,0 +1 @@
UF0 UB0 DL0 DR0 UR0 UL0 DF0 DB0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFR0 DBL0 UFL0 UBR0 DBR0 DFL0
diff --git a/test/060_transform/138_DBr_R.in b/test/060_transform/138_DBr_R.in
new file mode 100644
index 0000000..99974cd
--- /dev/null
+++ b/test/060_transform/138_DBr_R.in
@@ -0,0 +1,2 @@
1rotation DB
2UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/138_DBr_R.out b/test/060_transform/138_DBr_R.out
new file mode 100644
index 0000000..8c8fcb3
--- /dev/null
+++ b/test/060_transform/138_DBr_R.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/139_DBm_R.in b/test/060_transform/139_DBm_R.in
new file mode 100644
index 0000000..cb84382
--- /dev/null
+++ b/test/060_transform/139_DBm_R.in
@@ -0,0 +1,2 @@
1mirrored DB
2UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/139_DBm_R.out b/test/060_transform/139_DBm_R.out
new file mode 100644
index 0000000..2ac2912
--- /dev/null
+++ b/test/060_transform/139_DBm_R.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 FL0 BL0 DR0 FR0 DL0 UL0 BR0 UFR0 UFL2 DBL2 DBR0 DFL1 UBR0 DFR0 UBL1
diff --git a/test/060_transform/140_DBr_F.in b/test/060_transform/140_DBr_F.in
new file mode 100644
index 0000000..1342ce5
--- /dev/null
+++ b/test/060_transform/140_DBr_F.in
@@ -0,0 +1,2 @@
1rotation DB
2FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/140_DBr_F.out b/test/060_transform/140_DBr_F.out
new file mode 100644
index 0000000..f7fb13c
--- /dev/null
+++ b/test/060_transform/140_DBr_F.out
@@ -0,0 +1 @@
UF0 BR1 BL1 DF0 UR0 UL0 DL0 DR0 FR0 FL0 UB1 DB1 UFR0 UBR1 DFL0 DBL1 UFL0 DBR2 DFR0 UBL2
diff --git a/test/060_transform/141_DBm_F.in b/test/060_transform/141_DBm_F.in
new file mode 100644
index 0000000..a7fb608
--- /dev/null
+++ b/test/060_transform/141_DBm_F.in
@@ -0,0 +1,2 @@
1mirrored DB
2FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/141_DBm_F.out b/test/060_transform/141_DBm_F.out
new file mode 100644
index 0000000..1367517
--- /dev/null
+++ b/test/060_transform/141_DBm_F.out
@@ -0,0 +1 @@
UF0 BL1 BR1 DF0 UR0 UL0 DL0 DR0 FR0 FL0 DB1 UB1 UFR0 DBL1 DFL0 UBR1 UFL0 UBL2 DFR0 DBR2
diff --git a/test/060_transform/142_DRr_U.in b/test/060_transform/142_DRr_U.in
new file mode 100644
index 0000000..c24b8a3
--- /dev/null
+++ b/test/060_transform/142_DRr_U.in
@@ -0,0 +1,2 @@
1rotation DR
2UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/142_DRr_U.out b/test/060_transform/142_DRr_U.out
new file mode 100644
index 0000000..cf4f816
--- /dev/null
+++ b/test/060_transform/142_DRr_U.out
@@ -0,0 +1 @@
UF0 UB0 DR0 DL0 UR0 UL0 DB0 DF0 FR0 FL0 BL0 BR0 UFR0 UBL0 DBL0 DFR0 UFL0 UBR0 DFL0 DBR0
diff --git a/test/060_transform/143_DRm_U.in b/test/060_transform/143_DRm_U.in
new file mode 100644
index 0000000..27d922f
--- /dev/null
+++ b/test/060_transform/143_DRm_U.in
@@ -0,0 +1,2 @@
1mirrored DR
2UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/143_DRm_U.out b/test/060_transform/143_DRm_U.out
new file mode 100644
index 0000000..2864f5b
--- /dev/null
+++ b/test/060_transform/143_DRm_U.out
@@ -0,0 +1 @@
UF0 UB0 DL0 DR0 UR0 UL0 DF0 DB0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFR0 DBL0 UFL0 UBR0 DBR0 DFL0
diff --git a/test/060_transform/144_DRr_R.in b/test/060_transform/144_DRr_R.in
new file mode 100644
index 0000000..ed38629
--- /dev/null
+++ b/test/060_transform/144_DRr_R.in
@@ -0,0 +1,2 @@
1rotation DR
2UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/144_DRr_R.out b/test/060_transform/144_DRr_R.out
new file mode 100644
index 0000000..e805af8
--- /dev/null
+++ b/test/060_transform/144_DRr_R.out
@@ -0,0 +1 @@
FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/145_DRm_R.in b/test/060_transform/145_DRm_R.in
new file mode 100644
index 0000000..e973e52
--- /dev/null
+++ b/test/060_transform/145_DRm_R.in
@@ -0,0 +1,2 @@
1mirrored DR
2UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/145_DRm_R.out b/test/060_transform/145_DRm_R.out
new file mode 100644
index 0000000..40f1260
--- /dev/null
+++ b/test/060_transform/145_DRm_R.out
@@ -0,0 +1 @@
FR1 UB0 DB0 FL1 UR0 UL0 DL0 DR0 DF1 UF1 BL0 BR0 DFR1 UBL0 UFL1 DBR0 UFR2 UBR0 DFL2 DBL0
diff --git a/test/060_transform/146_DRr_F.in b/test/060_transform/146_DRr_F.in
new file mode 100644
index 0000000..03b1d5b
--- /dev/null
+++ b/test/060_transform/146_DRr_F.in
@@ -0,0 +1,2 @@
1rotation DR
2FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/146_DRr_F.out b/test/060_transform/146_DRr_F.out
new file mode 100644
index 0000000..8c8fcb3
--- /dev/null
+++ b/test/060_transform/146_DRr_F.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/147_DRm_F.in b/test/060_transform/147_DRm_F.in
new file mode 100644
index 0000000..25992d6
--- /dev/null
+++ b/test/060_transform/147_DRm_F.in
@@ -0,0 +1,2 @@
1mirrored DR
2FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/147_DRm_F.out b/test/060_transform/147_DRm_F.out
new file mode 100644
index 0000000..2ac2912
--- /dev/null
+++ b/test/060_transform/147_DRm_F.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 FL0 BL0 DR0 FR0 DL0 UL0 BR0 UFR0 UFL2 DBL2 DBR0 DFL1 UBR0 DFR0 UBL1
diff --git a/test/060_transform/148_RUr_U.in b/test/060_transform/148_RUr_U.in
new file mode 100644
index 0000000..b808fc6
--- /dev/null
+++ b/test/060_transform/148_RUr_U.in
@@ -0,0 +1,2 @@
1rotation RU
2UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/148_RUr_U.out b/test/060_transform/148_RUr_U.out
new file mode 100644
index 0000000..8c8fcb3
--- /dev/null
+++ b/test/060_transform/148_RUr_U.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/149_RUm_U.in b/test/060_transform/149_RUm_U.in
new file mode 100644
index 0000000..55665cb
--- /dev/null
+++ b/test/060_transform/149_RUm_U.in
@@ -0,0 +1,2 @@
1mirrored RU
2UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/149_RUm_U.out b/test/060_transform/149_RUm_U.out
new file mode 100644
index 0000000..2ac2912
--- /dev/null
+++ b/test/060_transform/149_RUm_U.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 FL0 BL0 DR0 FR0 DL0 UL0 BR0 UFR0 UFL2 DBL2 DBR0 DFL1 UBR0 DFR0 UBL1
diff --git a/test/060_transform/150_RUr_R.in b/test/060_transform/150_RUr_R.in
new file mode 100644
index 0000000..94895e0
--- /dev/null
+++ b/test/060_transform/150_RUr_R.in
@@ -0,0 +1,2 @@
1rotation RU
2UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/150_RUr_R.out b/test/060_transform/150_RUr_R.out
new file mode 100644
index 0000000..e805af8
--- /dev/null
+++ b/test/060_transform/150_RUr_R.out
@@ -0,0 +1 @@
FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/151_RUm_R.in b/test/060_transform/151_RUm_R.in
new file mode 100644
index 0000000..442548e
--- /dev/null
+++ b/test/060_transform/151_RUm_R.in
@@ -0,0 +1,2 @@
1mirrored RU
2UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/151_RUm_R.out b/test/060_transform/151_RUm_R.out
new file mode 100644
index 0000000..40f1260
--- /dev/null
+++ b/test/060_transform/151_RUm_R.out
@@ -0,0 +1 @@
FR1 UB0 DB0 FL1 UR0 UL0 DL0 DR0 DF1 UF1 BL0 BR0 DFR1 UBL0 UFL1 DBR0 UFR2 UBR0 DFL2 DBL0
diff --git a/test/060_transform/152_RUr_F.in b/test/060_transform/152_RUr_F.in
new file mode 100644
index 0000000..07bb28e
--- /dev/null
+++ b/test/060_transform/152_RUr_F.in
@@ -0,0 +1,2 @@
1rotation RU
2FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/152_RUr_F.out b/test/060_transform/152_RUr_F.out
new file mode 100644
index 0000000..b5b36ad
--- /dev/null
+++ b/test/060_transform/152_RUr_F.out
@@ -0,0 +1 @@
UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/153_RUm_F.in b/test/060_transform/153_RUm_F.in
new file mode 100644
index 0000000..d3364d0
--- /dev/null
+++ b/test/060_transform/153_RUm_F.in
@@ -0,0 +1,2 @@
1mirrored RU
2FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/153_RUm_F.out b/test/060_transform/153_RUm_F.out
new file mode 100644
index 0000000..7721ab5
--- /dev/null
+++ b/test/060_transform/153_RUm_F.out
@@ -0,0 +1 @@
UL0 UR0 DB0 DF0 UF0 UB0 DL0 DR0 FR0 FL0 BL0 BR0 UFL0 UBR0 DFL0 DBR0 UBL0 UFR0 DFR0 DBL0
diff --git a/test/060_transform/154_RFr_U.in b/test/060_transform/154_RFr_U.in
new file mode 100644
index 0000000..ddec358
--- /dev/null
+++ b/test/060_transform/154_RFr_U.in
@@ -0,0 +1,2 @@
1rotation RF
2UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/154_RFr_U.out b/test/060_transform/154_RFr_U.out
new file mode 100644
index 0000000..8c8fcb3
--- /dev/null
+++ b/test/060_transform/154_RFr_U.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/155_RFm_U.in b/test/060_transform/155_RFm_U.in
new file mode 100644
index 0000000..bd4b0e5
--- /dev/null
+++ b/test/060_transform/155_RFm_U.in
@@ -0,0 +1,2 @@
1mirrored RF
2UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/155_RFm_U.out b/test/060_transform/155_RFm_U.out
new file mode 100644
index 0000000..2ac2912
--- /dev/null
+++ b/test/060_transform/155_RFm_U.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 FL0 BL0 DR0 FR0 DL0 UL0 BR0 UFR0 UFL2 DBL2 DBR0 DFL1 UBR0 DFR0 UBL1
diff --git a/test/060_transform/156_RFr_R.in b/test/060_transform/156_RFr_R.in
new file mode 100644
index 0000000..5263302
--- /dev/null
+++ b/test/060_transform/156_RFr_R.in
@@ -0,0 +1,2 @@
1rotation RF
2UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/156_RFr_R.out b/test/060_transform/156_RFr_R.out
new file mode 100644
index 0000000..cf4f816
--- /dev/null
+++ b/test/060_transform/156_RFr_R.out
@@ -0,0 +1 @@
UF0 UB0 DR0 DL0 UR0 UL0 DB0 DF0 FR0 FL0 BL0 BR0 UFR0 UBL0 DBL0 DFR0 UFL0 UBR0 DFL0 DBR0
diff --git a/test/060_transform/157_RFm_R.in b/test/060_transform/157_RFm_R.in
new file mode 100644
index 0000000..42c4e14
--- /dev/null
+++ b/test/060_transform/157_RFm_R.in
@@ -0,0 +1,2 @@
1mirrored RF
2UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/157_RFm_R.out b/test/060_transform/157_RFm_R.out
new file mode 100644
index 0000000..2864f5b
--- /dev/null
+++ b/test/060_transform/157_RFm_R.out
@@ -0,0 +1 @@
UF0 UB0 DL0 DR0 UR0 UL0 DF0 DB0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFR0 DBL0 UFL0 UBR0 DBR0 DFL0
diff --git a/test/060_transform/158_RFr_F.in b/test/060_transform/158_RFr_F.in
new file mode 100644
index 0000000..dc60055
--- /dev/null
+++ b/test/060_transform/158_RFr_F.in
@@ -0,0 +1,2 @@
1rotation RF
2FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/158_RFr_F.out b/test/060_transform/158_RFr_F.out
new file mode 100644
index 0000000..e805af8
--- /dev/null
+++ b/test/060_transform/158_RFr_F.out
@@ -0,0 +1 @@
FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/159_RFm_F.in b/test/060_transform/159_RFm_F.in
new file mode 100644
index 0000000..046926a
--- /dev/null
+++ b/test/060_transform/159_RFm_F.in
@@ -0,0 +1,2 @@
1mirrored RF
2FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/159_RFm_F.out b/test/060_transform/159_RFm_F.out
new file mode 100644
index 0000000..40f1260
--- /dev/null
+++ b/test/060_transform/159_RFm_F.out
@@ -0,0 +1 @@
FR1 UB0 DB0 FL1 UR0 UL0 DL0 DR0 DF1 UF1 BL0 BR0 DFR1 UBL0 UFL1 DBR0 UFR2 UBR0 DFL2 DBL0
diff --git a/test/060_transform/160_RDr_U.in b/test/060_transform/160_RDr_U.in
new file mode 100644
index 0000000..3bac222
--- /dev/null
+++ b/test/060_transform/160_RDr_U.in
@@ -0,0 +1,2 @@
1rotation RD
2UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/160_RDr_U.out b/test/060_transform/160_RDr_U.out
new file mode 100644
index 0000000..8c8fcb3
--- /dev/null
+++ b/test/060_transform/160_RDr_U.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/161_RDm_U.in b/test/060_transform/161_RDm_U.in
new file mode 100644
index 0000000..e5e4bba
--- /dev/null
+++ b/test/060_transform/161_RDm_U.in
@@ -0,0 +1,2 @@
1mirrored RD
2UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/161_RDm_U.out b/test/060_transform/161_RDm_U.out
new file mode 100644
index 0000000..2ac2912
--- /dev/null
+++ b/test/060_transform/161_RDm_U.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 FL0 BL0 DR0 FR0 DL0 UL0 BR0 UFR0 UFL2 DBL2 DBR0 DFL1 UBR0 DFR0 UBL1
diff --git a/test/060_transform/162_RDr_R.in b/test/060_transform/162_RDr_R.in
new file mode 100644
index 0000000..d1e5f31
--- /dev/null
+++ b/test/060_transform/162_RDr_R.in
@@ -0,0 +1,2 @@
1rotation RD
2UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/162_RDr_R.out b/test/060_transform/162_RDr_R.out
new file mode 100644
index 0000000..f7fb13c
--- /dev/null
+++ b/test/060_transform/162_RDr_R.out
@@ -0,0 +1 @@
UF0 BR1 BL1 DF0 UR0 UL0 DL0 DR0 FR0 FL0 UB1 DB1 UFR0 UBR1 DFL0 DBL1 UFL0 DBR2 DFR0 UBL2
diff --git a/test/060_transform/163_RDm_R.in b/test/060_transform/163_RDm_R.in
new file mode 100644
index 0000000..8b1ee98
--- /dev/null
+++ b/test/060_transform/163_RDm_R.in
@@ -0,0 +1,2 @@
1mirrored RD
2UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/163_RDm_R.out b/test/060_transform/163_RDm_R.out
new file mode 100644
index 0000000..1367517
--- /dev/null
+++ b/test/060_transform/163_RDm_R.out
@@ -0,0 +1 @@
UF0 BL1 BR1 DF0 UR0 UL0 DL0 DR0 FR0 FL0 DB1 UB1 UFR0 DBL1 DFL0 UBR1 UFL0 UBL2 DFR0 DBR2
diff --git a/test/060_transform/164_RDr_F.in b/test/060_transform/164_RDr_F.in
new file mode 100644
index 0000000..4b49b13
--- /dev/null
+++ b/test/060_transform/164_RDr_F.in
@@ -0,0 +1,2 @@
1rotation RD
2FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/164_RDr_F.out b/test/060_transform/164_RDr_F.out
new file mode 100644
index 0000000..cf4f816
--- /dev/null
+++ b/test/060_transform/164_RDr_F.out
@@ -0,0 +1 @@
UF0 UB0 DR0 DL0 UR0 UL0 DB0 DF0 FR0 FL0 BL0 BR0 UFR0 UBL0 DBL0 DFR0 UFL0 UBR0 DFL0 DBR0
diff --git a/test/060_transform/165_RDm_F.in b/test/060_transform/165_RDm_F.in
new file mode 100644
index 0000000..db4f4ee
--- /dev/null
+++ b/test/060_transform/165_RDm_F.in
@@ -0,0 +1,2 @@
1mirrored RD
2FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/165_RDm_F.out b/test/060_transform/165_RDm_F.out
new file mode 100644
index 0000000..2864f5b
--- /dev/null
+++ b/test/060_transform/165_RDm_F.out
@@ -0,0 +1 @@
UF0 UB0 DL0 DR0 UR0 UL0 DF0 DB0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFR0 DBL0 UFL0 UBR0 DBR0 DFL0
diff --git a/test/060_transform/166_RBr_U.in b/test/060_transform/166_RBr_U.in
new file mode 100644
index 0000000..48f85f1
--- /dev/null
+++ b/test/060_transform/166_RBr_U.in
@@ -0,0 +1,2 @@
1rotation RB
2UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/166_RBr_U.out b/test/060_transform/166_RBr_U.out
new file mode 100644
index 0000000..8c8fcb3
--- /dev/null
+++ b/test/060_transform/166_RBr_U.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/167_RBm_U.in b/test/060_transform/167_RBm_U.in
new file mode 100644
index 0000000..036bb07
--- /dev/null
+++ b/test/060_transform/167_RBm_U.in
@@ -0,0 +1,2 @@
1mirrored RB
2UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/167_RBm_U.out b/test/060_transform/167_RBm_U.out
new file mode 100644
index 0000000..2ac2912
--- /dev/null
+++ b/test/060_transform/167_RBm_U.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 FL0 BL0 DR0 FR0 DL0 UL0 BR0 UFR0 UFL2 DBL2 DBR0 DFL1 UBR0 DFR0 UBL1
diff --git a/test/060_transform/168_RBr_R.in b/test/060_transform/168_RBr_R.in
new file mode 100644
index 0000000..94f799c
--- /dev/null
+++ b/test/060_transform/168_RBr_R.in
@@ -0,0 +1,2 @@
1rotation RB
2UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/168_RBr_R.out b/test/060_transform/168_RBr_R.out
new file mode 100644
index 0000000..b5b36ad
--- /dev/null
+++ b/test/060_transform/168_RBr_R.out
@@ -0,0 +1 @@
UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/169_RBm_R.in b/test/060_transform/169_RBm_R.in
new file mode 100644
index 0000000..46cce80
--- /dev/null
+++ b/test/060_transform/169_RBm_R.in
@@ -0,0 +1,2 @@
1mirrored RB
2UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/169_RBm_R.out b/test/060_transform/169_RBm_R.out
new file mode 100644
index 0000000..7721ab5
--- /dev/null
+++ b/test/060_transform/169_RBm_R.out
@@ -0,0 +1 @@
UL0 UR0 DB0 DF0 UF0 UB0 DL0 DR0 FR0 FL0 BL0 BR0 UFL0 UBR0 DFL0 DBR0 UBL0 UFR0 DFR0 DBL0
diff --git a/test/060_transform/170_RBr_F.in b/test/060_transform/170_RBr_F.in
new file mode 100644
index 0000000..54b6b57
--- /dev/null
+++ b/test/060_transform/170_RBr_F.in
@@ -0,0 +1,2 @@
1rotation RB
2FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/170_RBr_F.out b/test/060_transform/170_RBr_F.out
new file mode 100644
index 0000000..f7fb13c
--- /dev/null
+++ b/test/060_transform/170_RBr_F.out
@@ -0,0 +1 @@
UF0 BR1 BL1 DF0 UR0 UL0 DL0 DR0 FR0 FL0 UB1 DB1 UFR0 UBR1 DFL0 DBL1 UFL0 DBR2 DFR0 UBL2
diff --git a/test/060_transform/171_RBm_F.in b/test/060_transform/171_RBm_F.in
new file mode 100644
index 0000000..b0b4c04
--- /dev/null
+++ b/test/060_transform/171_RBm_F.in
@@ -0,0 +1,2 @@
1mirrored RB
2FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/171_RBm_F.out b/test/060_transform/171_RBm_F.out
new file mode 100644
index 0000000..1367517
--- /dev/null
+++ b/test/060_transform/171_RBm_F.out
@@ -0,0 +1 @@
UF0 BL1 BR1 DF0 UR0 UL0 DL0 DR0 FR0 FL0 DB1 UB1 UFR0 DBL1 DFL0 UBR1 UFL0 UBL2 DFR0 DBR2
diff --git a/test/060_transform/172_LUr_U.in b/test/060_transform/172_LUr_U.in
new file mode 100644
index 0000000..d4de425
--- /dev/null
+++ b/test/060_transform/172_LUr_U.in
@@ -0,0 +1,2 @@
1rotation LU
2UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/172_LUr_U.out b/test/060_transform/172_LUr_U.out
new file mode 100644
index 0000000..0b0565c
--- /dev/null
+++ b/test/060_transform/172_LUr_U.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 BL0 FL0 DR0 FR0 UL0 DL0 BR0 UFR0 DBL2 UFL2 DBR0 UBL1 UBR0 DFR0 DFL1
diff --git a/test/060_transform/173_LUm_U.in b/test/060_transform/173_LUm_U.in
new file mode 100644
index 0000000..7530802
--- /dev/null
+++ b/test/060_transform/173_LUm_U.in
@@ -0,0 +1,2 @@
1mirrored LU
2UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/173_LUm_U.out b/test/060_transform/173_LUm_U.out
new file mode 100644
index 0000000..d4abffc
--- /dev/null
+++ b/test/060_transform/173_LUm_U.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 BR0 UL0 DL0 FR0 UR0 FL0 BL0 DR0 UBR2 UBL0 DFL0 DFR2 UFL0 DBR1 UFR1 DBL0
diff --git a/test/060_transform/174_LUr_R.in b/test/060_transform/174_LUr_R.in
new file mode 100644
index 0000000..ac3b675
--- /dev/null
+++ b/test/060_transform/174_LUr_R.in
@@ -0,0 +1,2 @@
1rotation LU
2UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/174_LUr_R.out b/test/060_transform/174_LUr_R.out
new file mode 100644
index 0000000..f7fb13c
--- /dev/null
+++ b/test/060_transform/174_LUr_R.out
@@ -0,0 +1 @@
UF0 BR1 BL1 DF0 UR0 UL0 DL0 DR0 FR0 FL0 UB1 DB1 UFR0 UBR1 DFL0 DBL1 UFL0 DBR2 DFR0 UBL2
diff --git a/test/060_transform/175_LUm_R.in b/test/060_transform/175_LUm_R.in
new file mode 100644
index 0000000..42168b5
--- /dev/null
+++ b/test/060_transform/175_LUm_R.in
@@ -0,0 +1,2 @@
1mirrored LU
2UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/175_LUm_R.out b/test/060_transform/175_LUm_R.out
new file mode 100644
index 0000000..1367517
--- /dev/null
+++ b/test/060_transform/175_LUm_R.out
@@ -0,0 +1 @@
UF0 BL1 BR1 DF0 UR0 UL0 DL0 DR0 FR0 FL0 DB1 UB1 UFR0 DBL1 DFL0 UBR1 UFL0 UBL2 DFR0 DBR2
diff --git a/test/060_transform/176_LUr_F.in b/test/060_transform/176_LUr_F.in
new file mode 100644
index 0000000..65f37e9
--- /dev/null
+++ b/test/060_transform/176_LUr_F.in
@@ -0,0 +1,2 @@
1rotation LU
2FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/176_LUr_F.out b/test/060_transform/176_LUr_F.out
new file mode 100644
index 0000000..b5b36ad
--- /dev/null
+++ b/test/060_transform/176_LUr_F.out
@@ -0,0 +1 @@
UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/177_LUm_F.in b/test/060_transform/177_LUm_F.in
new file mode 100644
index 0000000..c4428a7
--- /dev/null
+++ b/test/060_transform/177_LUm_F.in
@@ -0,0 +1,2 @@
1mirrored LU
2FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/177_LUm_F.out b/test/060_transform/177_LUm_F.out
new file mode 100644
index 0000000..7721ab5
--- /dev/null
+++ b/test/060_transform/177_LUm_F.out
@@ -0,0 +1 @@
UL0 UR0 DB0 DF0 UF0 UB0 DL0 DR0 FR0 FL0 BL0 BR0 UFL0 UBR0 DFL0 DBR0 UBL0 UFR0 DFR0 DBL0
diff --git a/test/060_transform/178_LFr_U.in b/test/060_transform/178_LFr_U.in
new file mode 100644
index 0000000..9d20035
--- /dev/null
+++ b/test/060_transform/178_LFr_U.in
@@ -0,0 +1,2 @@
1rotation LF
2UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/178_LFr_U.out b/test/060_transform/178_LFr_U.out
new file mode 100644
index 0000000..0b0565c
--- /dev/null
+++ b/test/060_transform/178_LFr_U.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 BL0 FL0 DR0 FR0 UL0 DL0 BR0 UFR0 DBL2 UFL2 DBR0 UBL1 UBR0 DFR0 DFL1
diff --git a/test/060_transform/179_LFm_U.in b/test/060_transform/179_LFm_U.in
new file mode 100644
index 0000000..c773f71
--- /dev/null
+++ b/test/060_transform/179_LFm_U.in
@@ -0,0 +1,2 @@
1mirrored LF
2UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/179_LFm_U.out b/test/060_transform/179_LFm_U.out
new file mode 100644
index 0000000..d4abffc
--- /dev/null
+++ b/test/060_transform/179_LFm_U.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 BR0 UL0 DL0 FR0 UR0 FL0 BL0 DR0 UBR2 UBL0 DFL0 DFR2 UFL0 DBR1 UFR1 DBL0
diff --git a/test/060_transform/180_LFr_R.in b/test/060_transform/180_LFr_R.in
new file mode 100644
index 0000000..059725a
--- /dev/null
+++ b/test/060_transform/180_LFr_R.in
@@ -0,0 +1,2 @@
1rotation LF
2UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/180_LFr_R.out b/test/060_transform/180_LFr_R.out
new file mode 100644
index 0000000..b5b36ad
--- /dev/null
+++ b/test/060_transform/180_LFr_R.out
@@ -0,0 +1 @@
UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/181_LFm_R.in b/test/060_transform/181_LFm_R.in
new file mode 100644
index 0000000..23d26dc
--- /dev/null
+++ b/test/060_transform/181_LFm_R.in
@@ -0,0 +1,2 @@
1mirrored LF
2UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/181_LFm_R.out b/test/060_transform/181_LFm_R.out
new file mode 100644
index 0000000..7721ab5
--- /dev/null
+++ b/test/060_transform/181_LFm_R.out
@@ -0,0 +1 @@
UL0 UR0 DB0 DF0 UF0 UB0 DL0 DR0 FR0 FL0 BL0 BR0 UFL0 UBR0 DFL0 DBR0 UBL0 UFR0 DFR0 DBL0
diff --git a/test/060_transform/182_LFr_F.in b/test/060_transform/182_LFr_F.in
new file mode 100644
index 0000000..94d3342
--- /dev/null
+++ b/test/060_transform/182_LFr_F.in
@@ -0,0 +1,2 @@
1rotation LF
2FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/182_LFr_F.out b/test/060_transform/182_LFr_F.out
new file mode 100644
index 0000000..e805af8
--- /dev/null
+++ b/test/060_transform/182_LFr_F.out
@@ -0,0 +1 @@
FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/183_LFm_F.in b/test/060_transform/183_LFm_F.in
new file mode 100644
index 0000000..4170885
--- /dev/null
+++ b/test/060_transform/183_LFm_F.in
@@ -0,0 +1,2 @@
1mirrored LF
2FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/183_LFm_F.out b/test/060_transform/183_LFm_F.out
new file mode 100644
index 0000000..40f1260
--- /dev/null
+++ b/test/060_transform/183_LFm_F.out
@@ -0,0 +1 @@
FR1 UB0 DB0 FL1 UR0 UL0 DL0 DR0 DF1 UF1 BL0 BR0 DFR1 UBL0 UFL1 DBR0 UFR2 UBR0 DFL2 DBL0
diff --git a/test/060_transform/184_LDr_U.in b/test/060_transform/184_LDr_U.in
new file mode 100644
index 0000000..d8a9460
--- /dev/null
+++ b/test/060_transform/184_LDr_U.in
@@ -0,0 +1,2 @@
1rotation LD
2UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/184_LDr_U.out b/test/060_transform/184_LDr_U.out
new file mode 100644
index 0000000..0b0565c
--- /dev/null
+++ b/test/060_transform/184_LDr_U.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 BL0 FL0 DR0 FR0 UL0 DL0 BR0 UFR0 DBL2 UFL2 DBR0 UBL1 UBR0 DFR0 DFL1
diff --git a/test/060_transform/185_LDm_U.in b/test/060_transform/185_LDm_U.in
new file mode 100644
index 0000000..692a72b
--- /dev/null
+++ b/test/060_transform/185_LDm_U.in
@@ -0,0 +1,2 @@
1mirrored LD
2UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/185_LDm_U.out b/test/060_transform/185_LDm_U.out
new file mode 100644
index 0000000..d4abffc
--- /dev/null
+++ b/test/060_transform/185_LDm_U.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 BR0 UL0 DL0 FR0 UR0 FL0 BL0 DR0 UBR2 UBL0 DFL0 DFR2 UFL0 DBR1 UFR1 DBL0
diff --git a/test/060_transform/186_LDr_R.in b/test/060_transform/186_LDr_R.in
new file mode 100644
index 0000000..e303013
--- /dev/null
+++ b/test/060_transform/186_LDr_R.in
@@ -0,0 +1,2 @@
1rotation LD
2UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/186_LDr_R.out b/test/060_transform/186_LDr_R.out
new file mode 100644
index 0000000..e805af8
--- /dev/null
+++ b/test/060_transform/186_LDr_R.out
@@ -0,0 +1 @@
FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/187_LDm_R.in b/test/060_transform/187_LDm_R.in
new file mode 100644
index 0000000..b09a13c
--- /dev/null
+++ b/test/060_transform/187_LDm_R.in
@@ -0,0 +1,2 @@
1mirrored LD
2UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/187_LDm_R.out b/test/060_transform/187_LDm_R.out
new file mode 100644
index 0000000..40f1260
--- /dev/null
+++ b/test/060_transform/187_LDm_R.out
@@ -0,0 +1 @@
FR1 UB0 DB0 FL1 UR0 UL0 DL0 DR0 DF1 UF1 BL0 BR0 DFR1 UBL0 UFL1 DBR0 UFR2 UBR0 DFL2 DBL0
diff --git a/test/060_transform/188_LDr_F.in b/test/060_transform/188_LDr_F.in
new file mode 100644
index 0000000..9af43b3
--- /dev/null
+++ b/test/060_transform/188_LDr_F.in
@@ -0,0 +1,2 @@
1rotation LD
2FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/188_LDr_F.out b/test/060_transform/188_LDr_F.out
new file mode 100644
index 0000000..cf4f816
--- /dev/null
+++ b/test/060_transform/188_LDr_F.out
@@ -0,0 +1 @@
UF0 UB0 DR0 DL0 UR0 UL0 DB0 DF0 FR0 FL0 BL0 BR0 UFR0 UBL0 DBL0 DFR0 UFL0 UBR0 DFL0 DBR0
diff --git a/test/060_transform/189_LDm_F.in b/test/060_transform/189_LDm_F.in
new file mode 100644
index 0000000..97d8e51
--- /dev/null
+++ b/test/060_transform/189_LDm_F.in
@@ -0,0 +1,2 @@
1mirrored LD
2FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/189_LDm_F.out b/test/060_transform/189_LDm_F.out
new file mode 100644
index 0000000..2864f5b
--- /dev/null
+++ b/test/060_transform/189_LDm_F.out
@@ -0,0 +1 @@
UF0 UB0 DL0 DR0 UR0 UL0 DF0 DB0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFR0 DBL0 UFL0 UBR0 DBR0 DFL0
diff --git a/test/060_transform/190_LBr_U.in b/test/060_transform/190_LBr_U.in
new file mode 100644
index 0000000..2003378
--- /dev/null
+++ b/test/060_transform/190_LBr_U.in
@@ -0,0 +1,2 @@
1rotation LB
2UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/190_LBr_U.out b/test/060_transform/190_LBr_U.out
new file mode 100644
index 0000000..0b0565c
--- /dev/null
+++ b/test/060_transform/190_LBr_U.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 BL0 FL0 DR0 FR0 UL0 DL0 BR0 UFR0 DBL2 UFL2 DBR0 UBL1 UBR0 DFR0 DFL1
diff --git a/test/060_transform/191_LBm_U.in b/test/060_transform/191_LBm_U.in
new file mode 100644
index 0000000..c3e7251
--- /dev/null
+++ b/test/060_transform/191_LBm_U.in
@@ -0,0 +1,2 @@
1mirrored LB
2UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/191_LBm_U.out b/test/060_transform/191_LBm_U.out
new file mode 100644
index 0000000..d4abffc
--- /dev/null
+++ b/test/060_transform/191_LBm_U.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 BR0 UL0 DL0 FR0 UR0 FL0 BL0 DR0 UBR2 UBL0 DFL0 DFR2 UFL0 DBR1 UFR1 DBL0
diff --git a/test/060_transform/192_LBr_R.in b/test/060_transform/192_LBr_R.in
new file mode 100644
index 0000000..67bdd40
--- /dev/null
+++ b/test/060_transform/192_LBr_R.in
@@ -0,0 +1,2 @@
1rotation LB
2UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/192_LBr_R.out b/test/060_transform/192_LBr_R.out
new file mode 100644
index 0000000..cf4f816
--- /dev/null
+++ b/test/060_transform/192_LBr_R.out
@@ -0,0 +1 @@
UF0 UB0 DR0 DL0 UR0 UL0 DB0 DF0 FR0 FL0 BL0 BR0 UFR0 UBL0 DBL0 DFR0 UFL0 UBR0 DFL0 DBR0
diff --git a/test/060_transform/193_LBm_R.in b/test/060_transform/193_LBm_R.in
new file mode 100644
index 0000000..b8f4b6f
--- /dev/null
+++ b/test/060_transform/193_LBm_R.in
@@ -0,0 +1,2 @@
1mirrored LB
2UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/193_LBm_R.out b/test/060_transform/193_LBm_R.out
new file mode 100644
index 0000000..2864f5b
--- /dev/null
+++ b/test/060_transform/193_LBm_R.out
@@ -0,0 +1 @@
UF0 UB0 DL0 DR0 UR0 UL0 DF0 DB0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFR0 DBL0 UFL0 UBR0 DBR0 DFL0
diff --git a/test/060_transform/194_LBr_F.in b/test/060_transform/194_LBr_F.in
new file mode 100644
index 0000000..3ff9823
--- /dev/null
+++ b/test/060_transform/194_LBr_F.in
@@ -0,0 +1,2 @@
1rotation LB
2FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/194_LBr_F.out b/test/060_transform/194_LBr_F.out
new file mode 100644
index 0000000..f7fb13c
--- /dev/null
+++ b/test/060_transform/194_LBr_F.out
@@ -0,0 +1 @@
UF0 BR1 BL1 DF0 UR0 UL0 DL0 DR0 FR0 FL0 UB1 DB1 UFR0 UBR1 DFL0 DBL1 UFL0 DBR2 DFR0 UBL2
diff --git a/test/060_transform/195_LBm_F.in b/test/060_transform/195_LBm_F.in
new file mode 100644
index 0000000..35cb55f
--- /dev/null
+++ b/test/060_transform/195_LBm_F.in
@@ -0,0 +1,2 @@
1mirrored LB
2FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/195_LBm_F.out b/test/060_transform/195_LBm_F.out
new file mode 100644
index 0000000..1367517
--- /dev/null
+++ b/test/060_transform/195_LBm_F.out
@@ -0,0 +1 @@
UF0 BL1 BR1 DF0 UR0 UL0 DL0 DR0 FR0 FL0 DB1 UB1 UFR0 DBL1 DFL0 UBR1 UFL0 UBL2 DFR0 DBR2
diff --git a/test/060_transform/196_FUr_U.in b/test/060_transform/196_FUr_U.in
new file mode 100644
index 0000000..489b248
--- /dev/null
+++ b/test/060_transform/196_FUr_U.in
@@ -0,0 +1,2 @@
1rotation FU
2UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/196_FUr_U.out b/test/060_transform/196_FUr_U.out
new file mode 100644
index 0000000..e805af8
--- /dev/null
+++ b/test/060_transform/196_FUr_U.out
@@ -0,0 +1 @@
FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/197_FUm_U.in b/test/060_transform/197_FUm_U.in
new file mode 100644
index 0000000..e11003f
--- /dev/null
+++ b/test/060_transform/197_FUm_U.in
@@ -0,0 +1,2 @@
1mirrored FU
2UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/197_FUm_U.out b/test/060_transform/197_FUm_U.out
new file mode 100644
index 0000000..40f1260
--- /dev/null
+++ b/test/060_transform/197_FUm_U.out
@@ -0,0 +1 @@
FR1 UB0 DB0 FL1 UR0 UL0 DL0 DR0 DF1 UF1 BL0 BR0 DFR1 UBL0 UFL1 DBR0 UFR2 UBR0 DFL2 DBL0
diff --git a/test/060_transform/198_FUr_R.in b/test/060_transform/198_FUr_R.in
new file mode 100644
index 0000000..d44ba29
--- /dev/null
+++ b/test/060_transform/198_FUr_R.in
@@ -0,0 +1,2 @@
1rotation FU
2UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/198_FUr_R.out b/test/060_transform/198_FUr_R.out
new file mode 100644
index 0000000..0b0565c
--- /dev/null
+++ b/test/060_transform/198_FUr_R.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 BL0 FL0 DR0 FR0 UL0 DL0 BR0 UFR0 DBL2 UFL2 DBR0 UBL1 UBR0 DFR0 DFL1
diff --git a/test/060_transform/199_FUm_R.in b/test/060_transform/199_FUm_R.in
new file mode 100644
index 0000000..a803843
--- /dev/null
+++ b/test/060_transform/199_FUm_R.in
@@ -0,0 +1,2 @@
1mirrored FU
2UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/199_FUm_R.out b/test/060_transform/199_FUm_R.out
new file mode 100644
index 0000000..d4abffc
--- /dev/null
+++ b/test/060_transform/199_FUm_R.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 BR0 UL0 DL0 FR0 UR0 FL0 BL0 DR0 UBR2 UBL0 DFL0 DFR2 UFL0 DBR1 UFR1 DBL0
diff --git a/test/060_transform/200_FUr_F.in b/test/060_transform/200_FUr_F.in
new file mode 100644
index 0000000..beaac09
--- /dev/null
+++ b/test/060_transform/200_FUr_F.in
@@ -0,0 +1,2 @@
1rotation FU
2FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/200_FUr_F.out b/test/060_transform/200_FUr_F.out
new file mode 100644
index 0000000..b5b36ad
--- /dev/null
+++ b/test/060_transform/200_FUr_F.out
@@ -0,0 +1 @@
UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/201_FUm_F.in b/test/060_transform/201_FUm_F.in
new file mode 100644
index 0000000..802b0b3
--- /dev/null
+++ b/test/060_transform/201_FUm_F.in
@@ -0,0 +1,2 @@
1mirrored FU
2FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/201_FUm_F.out b/test/060_transform/201_FUm_F.out
new file mode 100644
index 0000000..7721ab5
--- /dev/null
+++ b/test/060_transform/201_FUm_F.out
@@ -0,0 +1 @@
UL0 UR0 DB0 DF0 UF0 UB0 DL0 DR0 FR0 FL0 BL0 BR0 UFL0 UBR0 DFL0 DBR0 UBL0 UFR0 DFR0 DBL0
diff --git a/test/060_transform/202_FRr_U.in b/test/060_transform/202_FRr_U.in
new file mode 100644
index 0000000..ac903a9
--- /dev/null
+++ b/test/060_transform/202_FRr_U.in
@@ -0,0 +1,2 @@
1rotation FR
2UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/202_FRr_U.out b/test/060_transform/202_FRr_U.out
new file mode 100644
index 0000000..e805af8
--- /dev/null
+++ b/test/060_transform/202_FRr_U.out
@@ -0,0 +1 @@
FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/203_FRm_U.in b/test/060_transform/203_FRm_U.in
new file mode 100644
index 0000000..e11a81e
--- /dev/null
+++ b/test/060_transform/203_FRm_U.in
@@ -0,0 +1,2 @@
1mirrored FR
2UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/203_FRm_U.out b/test/060_transform/203_FRm_U.out
new file mode 100644
index 0000000..40f1260
--- /dev/null
+++ b/test/060_transform/203_FRm_U.out
@@ -0,0 +1 @@
FR1 UB0 DB0 FL1 UR0 UL0 DL0 DR0 DF1 UF1 BL0 BR0 DFR1 UBL0 UFL1 DBR0 UFR2 UBR0 DFL2 DBL0
diff --git a/test/060_transform/204_FRr_R.in b/test/060_transform/204_FRr_R.in
new file mode 100644
index 0000000..1a06d75
--- /dev/null
+++ b/test/060_transform/204_FRr_R.in
@@ -0,0 +1,2 @@
1rotation FR
2UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/204_FRr_R.out b/test/060_transform/204_FRr_R.out
new file mode 100644
index 0000000..b5b36ad
--- /dev/null
+++ b/test/060_transform/204_FRr_R.out
@@ -0,0 +1 @@
UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/205_FRm_R.in b/test/060_transform/205_FRm_R.in
new file mode 100644
index 0000000..cd0caf6
--- /dev/null
+++ b/test/060_transform/205_FRm_R.in
@@ -0,0 +1,2 @@
1mirrored FR
2UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/205_FRm_R.out b/test/060_transform/205_FRm_R.out
new file mode 100644
index 0000000..7721ab5
--- /dev/null
+++ b/test/060_transform/205_FRm_R.out
@@ -0,0 +1 @@
UL0 UR0 DB0 DF0 UF0 UB0 DL0 DR0 FR0 FL0 BL0 BR0 UFL0 UBR0 DFL0 DBR0 UBL0 UFR0 DFR0 DBL0
diff --git a/test/060_transform/206_FRr_F.in b/test/060_transform/206_FRr_F.in
new file mode 100644
index 0000000..1afb42b
--- /dev/null
+++ b/test/060_transform/206_FRr_F.in
@@ -0,0 +1,2 @@
1rotation FR
2FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/206_FRr_F.out b/test/060_transform/206_FRr_F.out
new file mode 100644
index 0000000..8c8fcb3
--- /dev/null
+++ b/test/060_transform/206_FRr_F.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/207_FRm_F.in b/test/060_transform/207_FRm_F.in
new file mode 100644
index 0000000..e2f75d0
--- /dev/null
+++ b/test/060_transform/207_FRm_F.in
@@ -0,0 +1,2 @@
1mirrored FR
2FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/207_FRm_F.out b/test/060_transform/207_FRm_F.out
new file mode 100644
index 0000000..2ac2912
--- /dev/null
+++ b/test/060_transform/207_FRm_F.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 FL0 BL0 DR0 FR0 DL0 UL0 BR0 UFR0 UFL2 DBL2 DBR0 DFL1 UBR0 DFR0 UBL1
diff --git a/test/060_transform/208_FDr_U.in b/test/060_transform/208_FDr_U.in
new file mode 100644
index 0000000..f18744e
--- /dev/null
+++ b/test/060_transform/208_FDr_U.in
@@ -0,0 +1,2 @@
1rotation FD
2UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/208_FDr_U.out b/test/060_transform/208_FDr_U.out
new file mode 100644
index 0000000..e805af8
--- /dev/null
+++ b/test/060_transform/208_FDr_U.out
@@ -0,0 +1 @@
FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/209_FDm_U.in b/test/060_transform/209_FDm_U.in
new file mode 100644
index 0000000..5ac46b4
--- /dev/null
+++ b/test/060_transform/209_FDm_U.in
@@ -0,0 +1,2 @@
1mirrored FD
2UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/209_FDm_U.out b/test/060_transform/209_FDm_U.out
new file mode 100644
index 0000000..40f1260
--- /dev/null
+++ b/test/060_transform/209_FDm_U.out
@@ -0,0 +1 @@
FR1 UB0 DB0 FL1 UR0 UL0 DL0 DR0 DF1 UF1 BL0 BR0 DFR1 UBL0 UFL1 DBR0 UFR2 UBR0 DFL2 DBL0
diff --git a/test/060_transform/210_FDr_R.in b/test/060_transform/210_FDr_R.in
new file mode 100644
index 0000000..26b394c
--- /dev/null
+++ b/test/060_transform/210_FDr_R.in
@@ -0,0 +1,2 @@
1rotation FD
2UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/210_FDr_R.out b/test/060_transform/210_FDr_R.out
new file mode 100644
index 0000000..8c8fcb3
--- /dev/null
+++ b/test/060_transform/210_FDr_R.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/211_FDm_R.in b/test/060_transform/211_FDm_R.in
new file mode 100644
index 0000000..5a10ec6
--- /dev/null
+++ b/test/060_transform/211_FDm_R.in
@@ -0,0 +1,2 @@
1mirrored FD
2UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/211_FDm_R.out b/test/060_transform/211_FDm_R.out
new file mode 100644
index 0000000..2ac2912
--- /dev/null
+++ b/test/060_transform/211_FDm_R.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 FL0 BL0 DR0 FR0 DL0 UL0 BR0 UFR0 UFL2 DBL2 DBR0 DFL1 UBR0 DFR0 UBL1
diff --git a/test/060_transform/212_FDr_F.in b/test/060_transform/212_FDr_F.in
new file mode 100644
index 0000000..2382615
--- /dev/null
+++ b/test/060_transform/212_FDr_F.in
@@ -0,0 +1,2 @@
1rotation FD
2FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/212_FDr_F.out b/test/060_transform/212_FDr_F.out
new file mode 100644
index 0000000..cf4f816
--- /dev/null
+++ b/test/060_transform/212_FDr_F.out
@@ -0,0 +1 @@
UF0 UB0 DR0 DL0 UR0 UL0 DB0 DF0 FR0 FL0 BL0 BR0 UFR0 UBL0 DBL0 DFR0 UFL0 UBR0 DFL0 DBR0
diff --git a/test/060_transform/213_FDm_F.in b/test/060_transform/213_FDm_F.in
new file mode 100644
index 0000000..0515b51
--- /dev/null
+++ b/test/060_transform/213_FDm_F.in
@@ -0,0 +1,2 @@
1mirrored FD
2FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/213_FDm_F.out b/test/060_transform/213_FDm_F.out
new file mode 100644
index 0000000..2864f5b
--- /dev/null
+++ b/test/060_transform/213_FDm_F.out
@@ -0,0 +1 @@
UF0 UB0 DL0 DR0 UR0 UL0 DF0 DB0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFR0 DBL0 UFL0 UBR0 DBR0 DFL0
diff --git a/test/060_transform/214_FLr_U.in b/test/060_transform/214_FLr_U.in
new file mode 100644
index 0000000..da3f3a4
--- /dev/null
+++ b/test/060_transform/214_FLr_U.in
@@ -0,0 +1,2 @@
1rotation FL
2UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/214_FLr_U.out b/test/060_transform/214_FLr_U.out
new file mode 100644
index 0000000..e805af8
--- /dev/null
+++ b/test/060_transform/214_FLr_U.out
@@ -0,0 +1 @@
FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/215_FLm_U.in b/test/060_transform/215_FLm_U.in
new file mode 100644
index 0000000..0dd99c3
--- /dev/null
+++ b/test/060_transform/215_FLm_U.in
@@ -0,0 +1,2 @@
1mirrored FL
2UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/215_FLm_U.out b/test/060_transform/215_FLm_U.out
new file mode 100644
index 0000000..40f1260
--- /dev/null
+++ b/test/060_transform/215_FLm_U.out
@@ -0,0 +1 @@
FR1 UB0 DB0 FL1 UR0 UL0 DL0 DR0 DF1 UF1 BL0 BR0 DFR1 UBL0 UFL1 DBR0 UFR2 UBR0 DFL2 DBL0
diff --git a/test/060_transform/216_FLr_R.in b/test/060_transform/216_FLr_R.in
new file mode 100644
index 0000000..b8488d1
--- /dev/null
+++ b/test/060_transform/216_FLr_R.in
@@ -0,0 +1,2 @@
1rotation FL
2UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/216_FLr_R.out b/test/060_transform/216_FLr_R.out
new file mode 100644
index 0000000..cf4f816
--- /dev/null
+++ b/test/060_transform/216_FLr_R.out
@@ -0,0 +1 @@
UF0 UB0 DR0 DL0 UR0 UL0 DB0 DF0 FR0 FL0 BL0 BR0 UFR0 UBL0 DBL0 DFR0 UFL0 UBR0 DFL0 DBR0
diff --git a/test/060_transform/217_FLm_R.in b/test/060_transform/217_FLm_R.in
new file mode 100644
index 0000000..624882c
--- /dev/null
+++ b/test/060_transform/217_FLm_R.in
@@ -0,0 +1,2 @@
1mirrored FL
2UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/217_FLm_R.out b/test/060_transform/217_FLm_R.out
new file mode 100644
index 0000000..2864f5b
--- /dev/null
+++ b/test/060_transform/217_FLm_R.out
@@ -0,0 +1 @@
UF0 UB0 DL0 DR0 UR0 UL0 DF0 DB0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFR0 DBL0 UFL0 UBR0 DBR0 DFL0
diff --git a/test/060_transform/218_FLr_F.in b/test/060_transform/218_FLr_F.in
new file mode 100644
index 0000000..03950c5
--- /dev/null
+++ b/test/060_transform/218_FLr_F.in
@@ -0,0 +1,2 @@
1rotation FL
2FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/218_FLr_F.out b/test/060_transform/218_FLr_F.out
new file mode 100644
index 0000000..0b0565c
--- /dev/null
+++ b/test/060_transform/218_FLr_F.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 BL0 FL0 DR0 FR0 UL0 DL0 BR0 UFR0 DBL2 UFL2 DBR0 UBL1 UBR0 DFR0 DFL1
diff --git a/test/060_transform/219_FLm_F.in b/test/060_transform/219_FLm_F.in
new file mode 100644
index 0000000..ff909bf
--- /dev/null
+++ b/test/060_transform/219_FLm_F.in
@@ -0,0 +1,2 @@
1mirrored FL
2FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/219_FLm_F.out b/test/060_transform/219_FLm_F.out
new file mode 100644
index 0000000..d4abffc
--- /dev/null
+++ b/test/060_transform/219_FLm_F.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 BR0 UL0 DL0 FR0 UR0 FL0 BL0 DR0 UBR2 UBL0 DFL0 DFR2 UFL0 DBR1 UFR1 DBL0
diff --git a/test/060_transform/220_BUr_U.in b/test/060_transform/220_BUr_U.in
new file mode 100644
index 0000000..c923f4d
--- /dev/null
+++ b/test/060_transform/220_BUr_U.in
@@ -0,0 +1,2 @@
1rotation BU
2UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/220_BUr_U.out b/test/060_transform/220_BUr_U.out
new file mode 100644
index 0000000..f7fb13c
--- /dev/null
+++ b/test/060_transform/220_BUr_U.out
@@ -0,0 +1 @@
UF0 BR1 BL1 DF0 UR0 UL0 DL0 DR0 FR0 FL0 UB1 DB1 UFR0 UBR1 DFL0 DBL1 UFL0 DBR2 DFR0 UBL2
diff --git a/test/060_transform/221_BUm_U.in b/test/060_transform/221_BUm_U.in
new file mode 100644
index 0000000..d939385
--- /dev/null
+++ b/test/060_transform/221_BUm_U.in
@@ -0,0 +1,2 @@
1mirrored BU
2UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/221_BUm_U.out b/test/060_transform/221_BUm_U.out
new file mode 100644
index 0000000..1367517
--- /dev/null
+++ b/test/060_transform/221_BUm_U.out
@@ -0,0 +1 @@
UF0 BL1 BR1 DF0 UR0 UL0 DL0 DR0 FR0 FL0 DB1 UB1 UFR0 DBL1 DFL0 UBR1 UFL0 UBL2 DFR0 DBR2
diff --git a/test/060_transform/222_BUr_R.in b/test/060_transform/222_BUr_R.in
new file mode 100644
index 0000000..89a46f4
--- /dev/null
+++ b/test/060_transform/222_BUr_R.in
@@ -0,0 +1,2 @@
1rotation BU
2UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/222_BUr_R.out b/test/060_transform/222_BUr_R.out
new file mode 100644
index 0000000..8c8fcb3
--- /dev/null
+++ b/test/060_transform/222_BUr_R.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/223_BUm_R.in b/test/060_transform/223_BUm_R.in
new file mode 100644
index 0000000..2f5d234
--- /dev/null
+++ b/test/060_transform/223_BUm_R.in
@@ -0,0 +1,2 @@
1mirrored BU
2UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/223_BUm_R.out b/test/060_transform/223_BUm_R.out
new file mode 100644
index 0000000..2ac2912
--- /dev/null
+++ b/test/060_transform/223_BUm_R.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 FL0 BL0 DR0 FR0 DL0 UL0 BR0 UFR0 UFL2 DBL2 DBR0 DFL1 UBR0 DFR0 UBL1
diff --git a/test/060_transform/224_BUr_F.in b/test/060_transform/224_BUr_F.in
new file mode 100644
index 0000000..0ad8995
--- /dev/null
+++ b/test/060_transform/224_BUr_F.in
@@ -0,0 +1,2 @@
1rotation BU
2FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/224_BUr_F.out b/test/060_transform/224_BUr_F.out
new file mode 100644
index 0000000..b5b36ad
--- /dev/null
+++ b/test/060_transform/224_BUr_F.out
@@ -0,0 +1 @@
UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/225_BUm_F.in b/test/060_transform/225_BUm_F.in
new file mode 100644
index 0000000..3ff7e4d
--- /dev/null
+++ b/test/060_transform/225_BUm_F.in
@@ -0,0 +1,2 @@
1mirrored BU
2FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/225_BUm_F.out b/test/060_transform/225_BUm_F.out
new file mode 100644
index 0000000..7721ab5
--- /dev/null
+++ b/test/060_transform/225_BUm_F.out
@@ -0,0 +1 @@
UL0 UR0 DB0 DF0 UF0 UB0 DL0 DR0 FR0 FL0 BL0 BR0 UFL0 UBR0 DFL0 DBR0 UBL0 UFR0 DFR0 DBL0
diff --git a/test/060_transform/226_BRr_U.in b/test/060_transform/226_BRr_U.in
new file mode 100644
index 0000000..46ebe30
--- /dev/null
+++ b/test/060_transform/226_BRr_U.in
@@ -0,0 +1,2 @@
1rotation BR
2UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/226_BRr_U.out b/test/060_transform/226_BRr_U.out
new file mode 100644
index 0000000..f7fb13c
--- /dev/null
+++ b/test/060_transform/226_BRr_U.out
@@ -0,0 +1 @@
UF0 BR1 BL1 DF0 UR0 UL0 DL0 DR0 FR0 FL0 UB1 DB1 UFR0 UBR1 DFL0 DBL1 UFL0 DBR2 DFR0 UBL2
diff --git a/test/060_transform/227_BRm_U.in b/test/060_transform/227_BRm_U.in
new file mode 100644
index 0000000..63897c9
--- /dev/null
+++ b/test/060_transform/227_BRm_U.in
@@ -0,0 +1,2 @@
1mirrored BR
2UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/227_BRm_U.out b/test/060_transform/227_BRm_U.out
new file mode 100644
index 0000000..1367517
--- /dev/null
+++ b/test/060_transform/227_BRm_U.out
@@ -0,0 +1 @@
UF0 BL1 BR1 DF0 UR0 UL0 DL0 DR0 FR0 FL0 DB1 UB1 UFR0 DBL1 DFL0 UBR1 UFL0 UBL2 DFR0 DBR2
diff --git a/test/060_transform/228_BRr_R.in b/test/060_transform/228_BRr_R.in
new file mode 100644
index 0000000..7e2de76
--- /dev/null
+++ b/test/060_transform/228_BRr_R.in
@@ -0,0 +1,2 @@
1rotation BR
2UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/228_BRr_R.out b/test/060_transform/228_BRr_R.out
new file mode 100644
index 0000000..cf4f816
--- /dev/null
+++ b/test/060_transform/228_BRr_R.out
@@ -0,0 +1 @@
UF0 UB0 DR0 DL0 UR0 UL0 DB0 DF0 FR0 FL0 BL0 BR0 UFR0 UBL0 DBL0 DFR0 UFL0 UBR0 DFL0 DBR0
diff --git a/test/060_transform/229_BRm_R.in b/test/060_transform/229_BRm_R.in
new file mode 100644
index 0000000..c9e6e82
--- /dev/null
+++ b/test/060_transform/229_BRm_R.in
@@ -0,0 +1,2 @@
1mirrored BR
2UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/229_BRm_R.out b/test/060_transform/229_BRm_R.out
new file mode 100644
index 0000000..2864f5b
--- /dev/null
+++ b/test/060_transform/229_BRm_R.out
@@ -0,0 +1 @@
UF0 UB0 DL0 DR0 UR0 UL0 DF0 DB0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFR0 DBL0 UFL0 UBR0 DBR0 DFL0
diff --git a/test/060_transform/230_BRr_F.in b/test/060_transform/230_BRr_F.in
new file mode 100644
index 0000000..fe288dc
--- /dev/null
+++ b/test/060_transform/230_BRr_F.in
@@ -0,0 +1,2 @@
1rotation BR
2FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/230_BRr_F.out b/test/060_transform/230_BRr_F.out
new file mode 100644
index 0000000..8c8fcb3
--- /dev/null
+++ b/test/060_transform/230_BRr_F.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/231_BRm_F.in b/test/060_transform/231_BRm_F.in
new file mode 100644
index 0000000..5411345
--- /dev/null
+++ b/test/060_transform/231_BRm_F.in
@@ -0,0 +1,2 @@
1mirrored BR
2FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/231_BRm_F.out b/test/060_transform/231_BRm_F.out
new file mode 100644
index 0000000..2ac2912
--- /dev/null
+++ b/test/060_transform/231_BRm_F.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 FL0 BL0 DR0 FR0 DL0 UL0 BR0 UFR0 UFL2 DBL2 DBR0 DFL1 UBR0 DFR0 UBL1
diff --git a/test/060_transform/232_BDr_U.in b/test/060_transform/232_BDr_U.in
new file mode 100644
index 0000000..1a8f5d3
--- /dev/null
+++ b/test/060_transform/232_BDr_U.in
@@ -0,0 +1,2 @@
1rotation BD
2UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/232_BDr_U.out b/test/060_transform/232_BDr_U.out
new file mode 100644
index 0000000..f7fb13c
--- /dev/null
+++ b/test/060_transform/232_BDr_U.out
@@ -0,0 +1 @@
UF0 BR1 BL1 DF0 UR0 UL0 DL0 DR0 FR0 FL0 UB1 DB1 UFR0 UBR1 DFL0 DBL1 UFL0 DBR2 DFR0 UBL2
diff --git a/test/060_transform/233_BDm_U.in b/test/060_transform/233_BDm_U.in
new file mode 100644
index 0000000..b6b1ec4
--- /dev/null
+++ b/test/060_transform/233_BDm_U.in
@@ -0,0 +1,2 @@
1mirrored BD
2UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/233_BDm_U.out b/test/060_transform/233_BDm_U.out
new file mode 100644
index 0000000..1367517
--- /dev/null
+++ b/test/060_transform/233_BDm_U.out
@@ -0,0 +1 @@
UF0 BL1 BR1 DF0 UR0 UL0 DL0 DR0 FR0 FL0 DB1 UB1 UFR0 DBL1 DFL0 UBR1 UFL0 UBL2 DFR0 DBR2
diff --git a/test/060_transform/234_BDr_R.in b/test/060_transform/234_BDr_R.in
new file mode 100644
index 0000000..f12b7bb
--- /dev/null
+++ b/test/060_transform/234_BDr_R.in
@@ -0,0 +1,2 @@
1rotation BD
2UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/234_BDr_R.out b/test/060_transform/234_BDr_R.out
new file mode 100644
index 0000000..0b0565c
--- /dev/null
+++ b/test/060_transform/234_BDr_R.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 BL0 FL0 DR0 FR0 UL0 DL0 BR0 UFR0 DBL2 UFL2 DBR0 UBL1 UBR0 DFR0 DFL1
diff --git a/test/060_transform/235_BDm_R.in b/test/060_transform/235_BDm_R.in
new file mode 100644
index 0000000..a281b6c
--- /dev/null
+++ b/test/060_transform/235_BDm_R.in
@@ -0,0 +1,2 @@
1mirrored BD
2UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/235_BDm_R.out b/test/060_transform/235_BDm_R.out
new file mode 100644
index 0000000..d4abffc
--- /dev/null
+++ b/test/060_transform/235_BDm_R.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 BR0 UL0 DL0 FR0 UR0 FL0 BL0 DR0 UBR2 UBL0 DFL0 DFR2 UFL0 DBR1 UFR1 DBL0
diff --git a/test/060_transform/236_BDr_F.in b/test/060_transform/236_BDr_F.in
new file mode 100644
index 0000000..68a3262
--- /dev/null
+++ b/test/060_transform/236_BDr_F.in
@@ -0,0 +1,2 @@
1rotation BD
2FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/236_BDr_F.out b/test/060_transform/236_BDr_F.out
new file mode 100644
index 0000000..cf4f816
--- /dev/null
+++ b/test/060_transform/236_BDr_F.out
@@ -0,0 +1 @@
UF0 UB0 DR0 DL0 UR0 UL0 DB0 DF0 FR0 FL0 BL0 BR0 UFR0 UBL0 DBL0 DFR0 UFL0 UBR0 DFL0 DBR0
diff --git a/test/060_transform/237_BDm_F.in b/test/060_transform/237_BDm_F.in
new file mode 100644
index 0000000..9200d9a
--- /dev/null
+++ b/test/060_transform/237_BDm_F.in
@@ -0,0 +1,2 @@
1mirrored BD
2FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/237_BDm_F.out b/test/060_transform/237_BDm_F.out
new file mode 100644
index 0000000..2864f5b
--- /dev/null
+++ b/test/060_transform/237_BDm_F.out
@@ -0,0 +1 @@
UF0 UB0 DL0 DR0 UR0 UL0 DF0 DB0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFR0 DBL0 UFL0 UBR0 DBR0 DFL0
diff --git a/test/060_transform/238_BLr_U.in b/test/060_transform/238_BLr_U.in
new file mode 100644
index 0000000..ae1bb2e
--- /dev/null
+++ b/test/060_transform/238_BLr_U.in
@@ -0,0 +1,2 @@
1rotation BL
2UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/238_BLr_U.out b/test/060_transform/238_BLr_U.out
new file mode 100644
index 0000000..f7fb13c
--- /dev/null
+++ b/test/060_transform/238_BLr_U.out
@@ -0,0 +1 @@
UF0 BR1 BL1 DF0 UR0 UL0 DL0 DR0 FR0 FL0 UB1 DB1 UFR0 UBR1 DFL0 DBL1 UFL0 DBR2 DFR0 UBL2
diff --git a/test/060_transform/239_BLm_U.in b/test/060_transform/239_BLm_U.in
new file mode 100644
index 0000000..82eef50
--- /dev/null
+++ b/test/060_transform/239_BLm_U.in
@@ -0,0 +1,2 @@
1mirrored BL
2UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/239_BLm_U.out b/test/060_transform/239_BLm_U.out
new file mode 100644
index 0000000..1367517
--- /dev/null
+++ b/test/060_transform/239_BLm_U.out
@@ -0,0 +1 @@
UF0 BL1 BR1 DF0 UR0 UL0 DL0 DR0 FR0 FL0 DB1 UB1 UFR0 DBL1 DFL0 UBR1 UFL0 UBL2 DFR0 DBR2
diff --git a/test/060_transform/240_BLr_R.in b/test/060_transform/240_BLr_R.in
new file mode 100644
index 0000000..5aeee46
--- /dev/null
+++ b/test/060_transform/240_BLr_R.in
@@ -0,0 +1,2 @@
1rotation BL
2UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/240_BLr_R.out b/test/060_transform/240_BLr_R.out
new file mode 100644
index 0000000..b5b36ad
--- /dev/null
+++ b/test/060_transform/240_BLr_R.out
@@ -0,0 +1 @@
UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/060_transform/241_BLm_R.in b/test/060_transform/241_BLm_R.in
new file mode 100644
index 0000000..4aff162
--- /dev/null
+++ b/test/060_transform/241_BLm_R.in
@@ -0,0 +1,2 @@
1mirrored BL
2UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/060_transform/241_BLm_R.out b/test/060_transform/241_BLm_R.out
new file mode 100644
index 0000000..7721ab5
--- /dev/null
+++ b/test/060_transform/241_BLm_R.out
@@ -0,0 +1 @@
UL0 UR0 DB0 DF0 UF0 UB0 DL0 DR0 FR0 FL0 BL0 BR0 UFL0 UBR0 DFL0 DBR0 UBL0 UFR0 DFR0 DBL0
diff --git a/test/060_transform/242_BLr_F.in b/test/060_transform/242_BLr_F.in
new file mode 100644
index 0000000..a621e5e
--- /dev/null
+++ b/test/060_transform/242_BLr_F.in
@@ -0,0 +1,2 @@
1rotation BL
2FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/242_BLr_F.out b/test/060_transform/242_BLr_F.out
new file mode 100644
index 0000000..0b0565c
--- /dev/null
+++ b/test/060_transform/242_BLr_F.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 BL0 FL0 DR0 FR0 UL0 DL0 BR0 UFR0 DBL2 UFL2 DBR0 UBL1 UBR0 DFR0 DFL1
diff --git a/test/060_transform/243_BLm_F.in b/test/060_transform/243_BLm_F.in
new file mode 100644
index 0000000..6aa4a5a
--- /dev/null
+++ b/test/060_transform/243_BLm_F.in
@@ -0,0 +1,2 @@
1mirrored BL
2FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/060_transform/243_BLm_F.out b/test/060_transform/243_BLm_F.out
new file mode 100644
index 0000000..d4abffc
--- /dev/null
+++ b/test/060_transform/243_BLm_F.out
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 BR0 UL0 DL0 FR0 UR0 FL0 BL0 DR0 UBR2 UBL0 DFL0 DFR2 UFL0 DBR1 UFR1 DBL0
diff --git a/test/060_transform/transform_tests.c b/test/060_transform/transform_tests.c
new file mode 100644
index 0000000..f95ad67
--- /dev/null
+++ b/test/060_transform/transform_tests.c
@@ -0,0 +1,25 @@
1#include "../test.h"
2
3cube_t applytrans(cube_t, char *);
4
5int main(void) {
6 char cubestr[STRLENMAX], transtr[STRLENMAX];
7 cube_t cube;
8
9 fgets(transtr, STRLENMAX, stdin);
10 fgets(cubestr, STRLENMAX, stdin);
11 cube = readcube("H48", cubestr);
12
13 cube = applytrans(cube, transtr);
14
15 if (iserror(cube)) {
16 printf("Error transforming cube\n");
17 } else if (!issolvable(cube)) {
18 printf("Transformed cube is not solvable\n");
19 } else {
20 writecube("H48", cube, cubestr);
21 printf("%s\n", cubestr);
22 }
23
24 return 0;
25}
diff --git a/test/061_inverse_trans/00_all.in b/test/061_inverse_trans/00_all.in
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/061_inverse_trans/00_all.in
diff --git a/test/061_inverse_trans/00_all.out b/test/061_inverse_trans/00_all.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/061_inverse_trans/00_all.out
diff --git a/test/061_inverse_trans/inverse_trans_tests.c b/test/061_inverse_trans/inverse_trans_tests.c
new file mode 100644
index 0000000..77bd40b
--- /dev/null
+++ b/test/061_inverse_trans/inverse_trans_tests.c
@@ -0,0 +1,38 @@
1#include "../test.h"
2
3uint8_t readtrans(char *);
4uint8_t inverse_trans(uint8_t);
5cube_t applymoves(cube_t, char *);
6cube_t applytrans(cube_t, char *);
7extern char *transstr[];
8
9int main(void) {
10 uint8_t t, tinv;
11 cube_t cube;
12
13 for (t = 0; t < 48; t++) {
14 cube = solvedcube();
15 cube = applymoves(cube, "R");
16 cube = applymoves(cube, "U");
17 cube = applymoves(cube, "F");
18
19 cube = applytrans(cube, transstr[t]);
20 tinv = inverse_trans(t);
21 cube = applytrans(cube, transstr[tinv]);
22
23 if (iserror(cube)) {
24 printf("Error transforming cube\n");
25 } else if (!issolvable(cube)) {
26 printf("Transformed cube is not solvable\n");
27 } else {
28 cube = applymoves(cube, "F'");
29 cube = applymoves(cube, "U'");
30 cube = applymoves(cube, "R'");
31 if (!issolved(cube))
32 printf("%s: Error! Got %" PRIu8 "\n",
33 transstr[t], tinv);
34 }
35 }
36
37 return 0;
38}
diff --git a/test/071_coord_eo/00_solved.in b/test/071_coord_eo/00_solved.in
new file mode 100644
index 0000000..dff224d
--- /dev/null
+++ b/test/071_coord_eo/00_solved.in
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/071_coord_eo/00_solved.out b/test/071_coord_eo/00_solved.out
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/test/071_coord_eo/00_solved.out
@@ -0,0 +1 @@
0
diff --git a/test/071_coord_eo/01_U.in b/test/071_coord_eo/01_U.in
new file mode 100644
index 0000000..b5b36ad
--- /dev/null
+++ b/test/071_coord_eo/01_U.in
@@ -0,0 +1 @@
UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/071_coord_eo/01_U.out b/test/071_coord_eo/01_U.out
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/test/071_coord_eo/01_U.out
@@ -0,0 +1 @@
0
diff --git a/test/071_coord_eo/02_U2.in b/test/071_coord_eo/02_U2.in
new file mode 100644
index 0000000..316ad57
--- /dev/null
+++ b/test/071_coord_eo/02_U2.in
@@ -0,0 +1 @@
UB0 UF0 DB0 DF0 UL0 UR0 DL0 DR0 FR0 FL0 BL0 BR0 UBL0 UFR0 DFL0 DBR0 UBR0 UFL0 DFR0 DBL0
diff --git a/test/071_coord_eo/02_U2.out b/test/071_coord_eo/02_U2.out
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/test/071_coord_eo/02_U2.out
@@ -0,0 +1 @@
0
diff --git a/test/071_coord_eo/03_U3.in b/test/071_coord_eo/03_U3.in
new file mode 100644
index 0000000..7721ab5
--- /dev/null
+++ b/test/071_coord_eo/03_U3.in
@@ -0,0 +1 @@
UL0 UR0 DB0 DF0 UF0 UB0 DL0 DR0 FR0 FL0 BL0 BR0 UFL0 UBR0 DFL0 DBR0 UBL0 UFR0 DFR0 DBL0
diff --git a/test/071_coord_eo/03_U3.out b/test/071_coord_eo/03_U3.out
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/test/071_coord_eo/03_U3.out
@@ -0,0 +1 @@
0
diff --git a/test/071_coord_eo/04_D.in b/test/071_coord_eo/04_D.in
new file mode 100644
index 0000000..cf4f816
--- /dev/null
+++ b/test/071_coord_eo/04_D.in
@@ -0,0 +1 @@
UF0 UB0 DR0 DL0 UR0 UL0 DB0 DF0 FR0 FL0 BL0 BR0 UFR0 UBL0 DBL0 DFR0 UFL0 UBR0 DFL0 DBR0
diff --git a/test/071_coord_eo/04_D.out b/test/071_coord_eo/04_D.out
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/test/071_coord_eo/04_D.out
@@ -0,0 +1 @@
0
diff --git a/test/071_coord_eo/07_R.in b/test/071_coord_eo/07_R.in
new file mode 100644
index 0000000..8c8fcb3
--- /dev/null
+++ b/test/071_coord_eo/07_R.in
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/071_coord_eo/07_R.out b/test/071_coord_eo/07_R.out
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/test/071_coord_eo/07_R.out
@@ -0,0 +1 @@
0
diff --git a/test/071_coord_eo/08_R2.in b/test/071_coord_eo/08_R2.in
new file mode 100644
index 0000000..90765e2
--- /dev/null
+++ b/test/071_coord_eo/08_R2.in
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 DR0 UL0 DL0 UR0 BR0 FL0 BL0 FR0 DBR0 UBL0 DFL0 UFR0 UFL0 DFR0 UBR0 DBL0
diff --git a/test/071_coord_eo/08_R2.out b/test/071_coord_eo/08_R2.out
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/test/071_coord_eo/08_R2.out
@@ -0,0 +1 @@
0
diff --git a/test/071_coord_eo/10_L.in b/test/071_coord_eo/10_L.in
new file mode 100644
index 0000000..0b0565c
--- /dev/null
+++ b/test/071_coord_eo/10_L.in
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 BL0 FL0 DR0 FR0 UL0 DL0 BR0 UFR0 DBL2 UFL2 DBR0 UBL1 UBR0 DFR0 DFL1
diff --git a/test/071_coord_eo/10_L.out b/test/071_coord_eo/10_L.out
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/test/071_coord_eo/10_L.out
@@ -0,0 +1 @@
0
diff --git a/test/071_coord_eo/13_F.in b/test/071_coord_eo/13_F.in
new file mode 100644
index 0000000..e805af8
--- /dev/null
+++ b/test/071_coord_eo/13_F.in
@@ -0,0 +1 @@
FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/071_coord_eo/13_F.out b/test/071_coord_eo/13_F.out
new file mode 100644
index 0000000..2c60641
--- /dev/null
+++ b/test/071_coord_eo/13_F.out
@@ -0,0 +1 @@
388
diff --git a/test/071_coord_eo/14_F2.in b/test/071_coord_eo/14_F2.in
new file mode 100644
index 0000000..8aa701f
--- /dev/null
+++ b/test/071_coord_eo/14_F2.in
@@ -0,0 +1 @@
DF0 UB0 DB0 UF0 UR0 UL0 DL0 DR0 FL0 FR0 BL0 BR0 DFL0 UBL0 UFR0 DBR0 DFR0 UBR0 UFL0 DBL0
diff --git a/test/071_coord_eo/14_F2.out b/test/071_coord_eo/14_F2.out
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/test/071_coord_eo/14_F2.out
@@ -0,0 +1 @@
0
diff --git a/test/071_coord_eo/15_F3.in b/test/071_coord_eo/15_F3.in
new file mode 100644
index 0000000..40f1260
--- /dev/null
+++ b/test/071_coord_eo/15_F3.in
@@ -0,0 +1 @@
FR1 UB0 DB0 FL1 UR0 UL0 DL0 DR0 DF1 UF1 BL0 BR0 DFR1 UBL0 UFL1 DBR0 UFR2 UBR0 DFL2 DBL0
diff --git a/test/071_coord_eo/15_F3.out b/test/071_coord_eo/15_F3.out
new file mode 100644
index 0000000..2c60641
--- /dev/null
+++ b/test/071_coord_eo/15_F3.out
@@ -0,0 +1 @@
388
diff --git a/test/071_coord_eo/16_B.in b/test/071_coord_eo/16_B.in
new file mode 100644
index 0000000..f7fb13c
--- /dev/null
+++ b/test/071_coord_eo/16_B.in
@@ -0,0 +1 @@
UF0 BR1 BL1 DF0 UR0 UL0 DL0 DR0 FR0 FL0 UB1 DB1 UFR0 UBR1 DFL0 DBL1 UFL0 DBR2 DFR0 UBL2
diff --git a/test/071_coord_eo/16_B.out b/test/071_coord_eo/16_B.out
new file mode 100644
index 0000000..1fd9918
--- /dev/null
+++ b/test/071_coord_eo/16_B.out
@@ -0,0 +1 @@
1539
diff --git a/test/071_coord_eo/17_B2.in b/test/071_coord_eo/17_B2.in
new file mode 100644
index 0000000..9b33e35
--- /dev/null
+++ b/test/071_coord_eo/17_B2.in
@@ -0,0 +1 @@
UF0 DB0 UB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BR0 BL0 UFR0 DBR0 DFL0 UBL0 UFL0 DBL0 DFR0 UBR0
diff --git a/test/071_coord_eo/17_B2.out b/test/071_coord_eo/17_B2.out
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/test/071_coord_eo/17_B2.out
@@ -0,0 +1 @@
0
diff --git a/test/071_coord_eo/18_B3.in b/test/071_coord_eo/18_B3.in
new file mode 100644
index 0000000..1367517
--- /dev/null
+++ b/test/071_coord_eo/18_B3.in
@@ -0,0 +1 @@
UF0 BL1 BR1 DF0 UR0 UL0 DL0 DR0 FR0 FL0 DB1 UB1 UFR0 DBL1 DFL0 UBR1 UFL0 UBL2 DFR0 DBR2
diff --git a/test/071_coord_eo/18_B3.out b/test/071_coord_eo/18_B3.out
new file mode 100644
index 0000000..1fd9918
--- /dev/null
+++ b/test/071_coord_eo/18_B3.out
@@ -0,0 +1 @@
1539
diff --git a/test/071_coord_eo/20_scrambled.in b/test/071_coord_eo/20_scrambled.in
new file mode 100644
index 0000000..274d30b
--- /dev/null
+++ b/test/071_coord_eo/20_scrambled.in
@@ -0,0 +1,3 @@
1UL0 BL0 BR1 DL0 FR0 DF0 DB1 DR1 UB0 FL0 UF0 UR1 DFL0 UFR1 DBR1 UBR2 DBL2 DFR0 UFL1 UBL2
2
3// Scramble: U R D' L D' F L2 D L F B D2 B' L2 F U2 L2 D2 R2 L2 B'
diff --git a/test/071_coord_eo/20_scrambled.out b/test/071_coord_eo/20_scrambled.out
new file mode 100644
index 0000000..aa309cc
--- /dev/null
+++ b/test/071_coord_eo/20_scrambled.out
@@ -0,0 +1 @@
1122
diff --git a/test/071_coord_eo/coord_eo_tests.c b/test/071_coord_eo/coord_eo_tests.c
new file mode 100644
index 0000000..85128e0
--- /dev/null
+++ b/test/071_coord_eo/coord_eo_tests.c
@@ -0,0 +1,21 @@
1#include "../test.h"
2
3int64_t coord_fast_eo(cube_fast_t);
4cube_fast_t cubetofast(cube_t);
5
6int main(void) {
7 char str[STRLENMAX];
8 cube_t cube;
9 cube_fast_t fast;
10 int64_t result;
11
12 fgets(str, STRLENMAX, stdin);
13 cube = readcube("H48", str);
14 fast = cubetofast(cube);
15
16 result = coord_fast_eo(fast);
17
18 printf("%" PRId64 "\n", result);
19
20 return 0;
21}
diff --git a/test/072_coord_co/00_solved.in b/test/072_coord_co/00_solved.in
new file mode 100644
index 0000000..dff224d
--- /dev/null
+++ b/test/072_coord_co/00_solved.in
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0
diff --git a/test/072_coord_co/00_solved.out b/test/072_coord_co/00_solved.out
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/test/072_coord_co/00_solved.out
@@ -0,0 +1 @@
0
diff --git a/test/072_coord_co/01_U.in b/test/072_coord_co/01_U.in
new file mode 100644
index 0000000..b5b36ad
--- /dev/null
+++ b/test/072_coord_co/01_U.in
@@ -0,0 +1 @@
UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0
diff --git a/test/072_coord_co/01_U.out b/test/072_coord_co/01_U.out
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/test/072_coord_co/01_U.out
@@ -0,0 +1 @@
0
diff --git a/test/072_coord_co/02_U2.in b/test/072_coord_co/02_U2.in
new file mode 100644
index 0000000..316ad57
--- /dev/null
+++ b/test/072_coord_co/02_U2.in
@@ -0,0 +1 @@
UB0 UF0 DB0 DF0 UL0 UR0 DL0 DR0 FR0 FL0 BL0 BR0 UBL0 UFR0 DFL0 DBR0 UBR0 UFL0 DFR0 DBL0
diff --git a/test/072_coord_co/02_U2.out b/test/072_coord_co/02_U2.out
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/test/072_coord_co/02_U2.out
@@ -0,0 +1 @@
0
diff --git a/test/072_coord_co/03_U3.in b/test/072_coord_co/03_U3.in
new file mode 100644
index 0000000..7721ab5
--- /dev/null
+++ b/test/072_coord_co/03_U3.in
@@ -0,0 +1 @@
UL0 UR0 DB0 DF0 UF0 UB0 DL0 DR0 FR0 FL0 BL0 BR0 UFL0 UBR0 DFL0 DBR0 UBL0 UFR0 DFR0 DBL0
diff --git a/test/072_coord_co/03_U3.out b/test/072_coord_co/03_U3.out
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/test/072_coord_co/03_U3.out
@@ -0,0 +1 @@
0
diff --git a/test/072_coord_co/04_D.in b/test/072_coord_co/04_D.in
new file mode 100644
index 0000000..cf4f816
--- /dev/null
+++ b/test/072_coord_co/04_D.in
@@ -0,0 +1 @@
UF0 UB0 DR0 DL0 UR0 UL0 DB0 DF0 FR0 FL0 BL0 BR0 UFR0 UBL0 DBL0 DFR0 UFL0 UBR0 DFL0 DBR0
diff --git a/test/072_coord_co/04_D.out b/test/072_coord_co/04_D.out
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/test/072_coord_co/04_D.out
@@ -0,0 +1 @@
0
diff --git a/test/072_coord_co/07_R.in b/test/072_coord_co/07_R.in
new file mode 100644
index 0000000..8c8fcb3
--- /dev/null
+++ b/test/072_coord_co/07_R.in
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0
diff --git a/test/072_coord_co/07_R.out b/test/072_coord_co/07_R.out
new file mode 100644
index 0000000..1f3d8a7
--- /dev/null
+++ b/test/072_coord_co/07_R.out
@@ -0,0 +1 @@
1028
diff --git a/test/072_coord_co/08_R2.in b/test/072_coord_co/08_R2.in
new file mode 100644
index 0000000..90765e2
--- /dev/null
+++ b/test/072_coord_co/08_R2.in
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 DR0 UL0 DL0 UR0 BR0 FL0 BL0 FR0 DBR0 UBL0 DFL0 UFR0 UFL0 DFR0 UBR0 DBL0
diff --git a/test/072_coord_co/08_R2.out b/test/072_coord_co/08_R2.out
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/test/072_coord_co/08_R2.out
@@ -0,0 +1 @@
0
diff --git a/test/072_coord_co/10_L.in b/test/072_coord_co/10_L.in
new file mode 100644
index 0000000..0b0565c
--- /dev/null
+++ b/test/072_coord_co/10_L.in
@@ -0,0 +1 @@
UF0 UB0 DB0 DF0 UR0 BL0 FL0 DR0 FR0 UL0 DL0 BR0 UFR0 DBL2 UFL2 DBR0 UBL1 UBR0 DFR0 DFL1
diff --git a/test/072_coord_co/10_L.out b/test/072_coord_co/10_L.out
new file mode 100644
index 0000000..f96ac06
--- /dev/null
+++ b/test/072_coord_co/10_L.out
@@ -0,0 +1 @@
105
diff --git a/test/072_coord_co/13_F.in b/test/072_coord_co/13_F.in
new file mode 100644
index 0000000..e805af8
--- /dev/null
+++ b/test/072_coord_co/13_F.in
@@ -0,0 +1 @@
FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0
diff --git a/test/072_coord_co/13_F.out b/test/072_coord_co/13_F.out
new file mode 100644
index 0000000..86868c5
--- /dev/null
+++ b/test/072_coord_co/13_F.out
@@ -0,0 +1 @@
1630
diff --git a/test/072_coord_co/14_F2.in b/test/072_coord_co/14_F2.in
new file mode 100644
index 0000000..8aa701f
--- /dev/null
+++ b/test/072_coord_co/14_F2.in
@@ -0,0 +1 @@
DF0 UB0 DB0 UF0 UR0 UL0 DL0 DR0 FL0 FR0 BL0 BR0 DFL0 UBL0 UFR0 DBR0 DFR0 UBR0 UFL0 DBL0
diff --git a/test/072_coord_co/14_F2.out b/test/072_coord_co/14_F2.out
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/test/072_coord_co/14_F2.out
@@ -0,0 +1 @@
0
diff --git a/test/072_coord_co/16_B.in b/test/072_coord_co/16_B.in
new file mode 100644
index 0000000..f7fb13c
--- /dev/null
+++ b/test/072_coord_co/16_B.in
@@ -0,0 +1 @@
UF0 BR1 BL1 DF0 UR0 UL0 DL0 DR0 FR0 FL0 UB1 DB1 UFR0 UBR1 DFL0 DBL1 UFL0 DBR2 DFR0 UBL2
diff --git a/test/072_coord_co/16_B.out b/test/072_coord_co/16_B.out
new file mode 100644
index 0000000..1c599d4
--- /dev/null
+++ b/test/072_coord_co/16_B.out
@@ -0,0 +1 @@
516
diff --git a/test/072_coord_co/17_B2.in b/test/072_coord_co/17_B2.in
new file mode 100644
index 0000000..9b33e35
--- /dev/null
+++ b/test/072_coord_co/17_B2.in
@@ -0,0 +1 @@
UF0 DB0 UB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BR0 BL0 UFR0 DBR0 DFL0 UBL0 UFL0 DBL0 DFR0 UBR0
diff --git a/test/072_coord_co/17_B2.out b/test/072_coord_co/17_B2.out
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/test/072_coord_co/17_B2.out
@@ -0,0 +1 @@
0
diff --git a/test/072_coord_co/20_scrambled.in b/test/072_coord_co/20_scrambled.in
new file mode 100644
index 0000000..274d30b
--- /dev/null
+++ b/test/072_coord_co/20_scrambled.in
@@ -0,0 +1,3 @@
1UL0 BL0 BR1 DL0 FR0 DF0 DB1 DR1 UB0 FL0 UF0 UR1 DFL0 UFR1 DBR1 UBR2 DBL2 DFR0 UFL1 UBL2
2
3// Scramble: U R D' L D' F L2 D L F B D2 B' L2 F U2 L2 D2 R2 L2 B'
diff --git a/test/072_coord_co/20_scrambled.out b/test/072_coord_co/20_scrambled.out
new file mode 100644
index 0000000..6943e4d
--- /dev/null
+++ b/test/072_coord_co/20_scrambled.out
@@ -0,0 +1 @@
957
diff --git a/test/072_coord_co/coord_co_tests.c b/test/072_coord_co/coord_co_tests.c
new file mode 100644
index 0000000..bb061e5
--- /dev/null
+++ b/test/072_coord_co/coord_co_tests.c
@@ -0,0 +1,21 @@
1#include "../test.h"
2
3int64_t coord_fast_co(cube_fast_t);
4cube_fast_t cubetofast(cube_t);
5
6int main(void) {
7 char str[STRLENMAX];
8 cube_t cube;
9 cube_fast_t fast;
10 int64_t result;
11
12 fgets(str, STRLENMAX, stdin);
13 cube = readcube("H48", str);
14 fast = cubetofast(cube);
15
16 result = coord_fast_co(fast);
17
18 printf("%" PRId64 "\n", result);
19
20 return 0;
21}
diff --git a/test/test.h b/test/test.h
new file mode 100644
index 0000000..3cbfd10
--- /dev/null
+++ b/test/test.h
@@ -0,0 +1,27 @@
1#include <inttypes.h>
2#include <stdbool.h>
3#include <stdio.h>
4#include <stdlib.h>
5#include <string.h>
6
7#define STRLENMAX 10000
8
9typedef struct {
10 uint8_t corner[8];
11 uint8_t edge[12];
12} cube_t;
13
14#ifdef CUBE_AVX2
15#include <immintrin.h>
16typedef __m256i cube_fast_t;
17#else
18typedef cube_t cube_fast_t;
19#endif
20
21/* Basic functions used in most tests */
22cube_t solvedcube(void);
23bool iserror(cube_t);
24bool issolvable(cube_t);
25bool issolved(cube_t);
26cube_t readcube(char *, char *);
27void writecube(char *, cube_t, char *);
diff --git a/test/test.sh b/test/test.sh
new file mode 100755
index 0000000..77bd8ca
--- /dev/null
+++ b/test/test.sh
@@ -0,0 +1,39 @@
1#!/bin/sh
2
3detectsan() { cc -fsanitize=$1 -dM -E -x c - </dev/null | grep "SANITIZE"; }
4
5re="${TEST:-$@}"
6
7CC="cc -DDEBUG -std=c99 -pedantic -Wall -Wextra -g3"
8
9[ -n "$(detectsan address)" ] && CC="$CC -fsanitize=address"
10[ -n "$(detectsan undefined)" ] && CC="$CC -fsanitize=undefined"
11
12TESTBIN="test/run"
13TESTOUT="test/last.out"
14TESTERR="test/last.err"
15CUBEOBJ="debugcube.o"
16
17for t in test/*; do
18 if [ -n "$re" ] && [ -z "$(echo "$t" | grep "$re")" ]; then
19 continue
20 fi
21 if [ ! -d $t ]; then continue; fi
22 $CC -o $TESTBIN $t/*.c $CUBEOBJ || exit 1;
23 for cin in $t/*.in; do
24 c=$(echo "$cin" | sed 's/\.in//')
25 cout=$c.out
26 printf "$c: "
27 $TESTBIN < "$cin" > $TESTOUT 2> $TESTERR
28 if diff $cout $TESTOUT; then
29 printf "OK\n"
30 else
31 printf "Test failed! stderr:\n"
32 cat $TESTERR
33 exit 1
34 fi
35 done
36done
37
38echo "All tests passed!"
39rm -rf $TESTBIN $TESTOUT $TESTERR $CUBEOBJ

Generated with cgit - Back to sebastiano.tronto.net