aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/core/constants.h118
-rw-r--r--src/core/moves.h97
-rw-r--r--src/core/transform.h18
-rw-r--r--test/030_move/500_Uw_solved.in2
-rw-r--r--test/030_move/500_Uw_solved.out1
-rw-r--r--test/030_move/501_Uw2_solved.in2
-rw-r--r--test/030_move/501_Uw2_solved.out1
-rw-r--r--test/030_move/502_Uw3_solved.in2
-rw-r--r--test/030_move/502_Uw3_solved.out1
-rw-r--r--test/030_move/503_Dw_solved.in2
-rw-r--r--test/030_move/503_Dw_solved.out1
-rw-r--r--test/030_move/504_Dw2_solved.in2
-rw-r--r--test/030_move/504_Dw2_solved.out1
-rw-r--r--test/030_move/505_Dw3_solved.in2
-rw-r--r--test/030_move/505_Dw3_solved.out1
-rw-r--r--test/030_move/506_Rw_solved.in2
-rw-r--r--test/030_move/506_Rw_solved.out1
-rw-r--r--test/030_move/507_Rw2_solved.in2
-rw-r--r--test/030_move/507_Rw2_solved.out1
-rw-r--r--test/030_move/508_Rw3_solved.in2
-rw-r--r--test/030_move/508_Rw3_solved.out1
-rw-r--r--test/030_move/509_Lw_solved.in2
-rw-r--r--test/030_move/509_Lw_solved.out1
-rw-r--r--test/030_move/510_Lw2_solved.in2
-rw-r--r--test/030_move/510_Lw2_solved.out1
-rw-r--r--test/030_move/511_Lw3_solved.in2
-rw-r--r--test/030_move/511_Lw3_solved.out1
-rw-r--r--test/030_move/512_Fw_solved.in2
-rw-r--r--test/030_move/512_Fw_solved.out1
-rw-r--r--test/030_move/513_Fw2_solved.in2
-rw-r--r--test/030_move/513_Fw2_solved.out1
-rw-r--r--test/030_move/514_Fw3_solved.in2
-rw-r--r--test/030_move/514_Fw3_solved.out1
-rw-r--r--test/030_move/515_Bw_solved.in2
-rw-r--r--test/030_move/515_Bw_solved.out1
-rw-r--r--test/030_move/516_Bw2_solved.in2
-rw-r--r--test/030_move/516_Bw2_solved.out1
-rw-r--r--test/030_move/517_Bw3_solved.in2
-rw-r--r--test/030_move/517_Bw3_solved.out1
-rw-r--r--test/030_move/518_M_solved.in2
-rw-r--r--test/030_move/518_M_solved.out1
-rw-r--r--test/030_move/519_M2_solved.in2
-rw-r--r--test/030_move/519_M2_solved.out1
-rw-r--r--test/030_move/520_M3_solved.in2
-rw-r--r--test/030_move/520_M3_solved.out1
-rw-r--r--test/030_move/521_S_solved.in2
-rw-r--r--test/030_move/521_S_solved.out1
-rw-r--r--test/030_move/522_S2_solved.in2
-rw-r--r--test/030_move/522_S2_solved.out1
-rw-r--r--test/030_move/523_S3_solved.in2
-rw-r--r--test/030_move/523_S3_solved.out1
-rw-r--r--test/030_move/524_E_solved.in2
-rw-r--r--test/030_move/524_E_solved.out1
-rw-r--r--test/030_move/525_E2_solved.in2
-rw-r--r--test/030_move/525_E2_solved.out1
-rw-r--r--test/030_move/526_E3_solved.in2
-rw-r--r--test/030_move/526_E3_solved.out1
-rw-r--r--test/030_move/527_x_solved.in2
-rw-r--r--test/030_move/527_x_solved.out1
-rw-r--r--test/030_move/528_x2_solved.in2
-rw-r--r--test/030_move/528_x2_solved.out1
-rw-r--r--test/030_move/529_x3_solved.in2
-rw-r--r--test/030_move/529_x3_solved.out1
-rw-r--r--test/030_move/530_y_solved.in2
-rw-r--r--test/030_move/530_y_solved.out1
-rw-r--r--test/030_move/531_y2_solved.in2
-rw-r--r--test/030_move/531_y2_solved.out1
-rw-r--r--test/030_move/532_y3_solved.in2
-rw-r--r--test/030_move/532_y3_solved.out1
-rw-r--r--test/030_move/533_z_solved.in2
-rw-r--r--test/030_move/533_z_solved.out1
-rw-r--r--test/030_move/534_z2_solved.in2
-rw-r--r--test/030_move/534_z2_solved.out1
-rw-r--r--test/030_move/535_z3_solved.in2
-rw-r--r--test/030_move/535_z3_solved.out1
-rw-r--r--test/030_move/550_scrambled_random.in2
-rw-r--r--test/030_move/550_scrambled_random.out1
-rw-r--r--test/032_countmoves/00_empty.in1
-rw-r--r--test/032_countmoves/00_empty.out1
-rw-r--r--test/032_countmoves/01_U.in1
-rw-r--r--test/032_countmoves/01_U.out1
-rw-r--r--test/032_countmoves/02_Fw3.in1
-rw-r--r--test/032_countmoves/02_Fw3.out1
-rw-r--r--test/032_countmoves/03_S2.in1
-rw-r--r--test/032_countmoves/03_S2.out1
-rw-r--r--test/032_countmoves/04_y3.in1
-rw-r--r--test/032_countmoves/04_y3.out1
-rw-r--r--test/032_countmoves/countmoves_tests.c11
-rw-r--r--test/062_transform_move/transform_move_tests.c4
-rw-r--r--utils/cubes/move_18_Uw.txt1
-rw-r--r--utils/cubes/move_19_Uw2.txt1
-rw-r--r--utils/cubes/move_20_Uw3.txt1
-rw-r--r--utils/cubes/move_21_Dw.txt1
-rw-r--r--utils/cubes/move_22_Dw2.txt1
-rw-r--r--utils/cubes/move_23_Dw3.txt1
-rw-r--r--utils/cubes/move_24_Rw.txt1
-rw-r--r--utils/cubes/move_25_Rw2.txt1
-rw-r--r--utils/cubes/move_26_Rw3.txt1
-rw-r--r--utils/cubes/move_27_Lw.txt1
-rw-r--r--utils/cubes/move_28_Lw2.txt1
-rw-r--r--utils/cubes/move_29_Lw3.txt1
-rw-r--r--utils/cubes/move_30_Fw.txt1
-rw-r--r--utils/cubes/move_31_Fw2.txt1
-rw-r--r--utils/cubes/move_32_Fw3.txt1
-rw-r--r--utils/cubes/move_33_Bw.txt1
-rw-r--r--utils/cubes/move_34_Bw2.txt1
-rw-r--r--utils/cubes/move_35_Bw3.txt1
-rw-r--r--utils/cubes/move_36_M.txt1
-rw-r--r--utils/cubes/move_37_M2.txt1
-rw-r--r--utils/cubes/move_38_M3.txt1
-rw-r--r--utils/cubes/move_39_S.txt1
-rw-r--r--utils/cubes/move_40_S2.txt1
-rw-r--r--utils/cubes/move_41_S3.txt1
-rw-r--r--utils/cubes/move_42_E.txt1
-rw-r--r--utils/cubes/move_43_E2.txt1
-rw-r--r--utils/cubes/move_44_E3.txt1
-rw-r--r--utils/cubes/move_45_x.txt1
-rw-r--r--utils/cubes/move_46_x2.txt1
-rw-r--r--utils/cubes/move_47_x3.txt1
-rw-r--r--utils/cubes/move_48_y.txt1
-rw-r--r--utils/cubes/move_49_y2.txt1
-rw-r--r--utils/cubes/move_50_y3.txt1
-rw-r--r--utils/cubes/move_51_z.txt1
-rw-r--r--utils/cubes/move_52_z2.txt1
-rw-r--r--utils/cubes/move_53_z3.txt1
-rw-r--r--utils/extended_trans/500_DLr_Uw.in2
-rw-r--r--utils/extended_trans/500_DLr_Uw.out1
-rw-r--r--utils/extended_trans/501_RBr_Lw3.in2
-rw-r--r--utils/extended_trans/501_RBr_Lw3.out1
-rw-r--r--utils/extended_trans/502_FLm_Fw.in2
-rw-r--r--utils/extended_trans/502_FLm_Fw.out1
-rw-r--r--utils/extended_trans/600_BDr_M3.in2
-rw-r--r--utils/extended_trans/600_BDr_M3.out1
-rw-r--r--utils/extended_trans/601_LDm_E.in2
-rw-r--r--utils/extended_trans/601_LDm_E.out1
-rw-r--r--utils/extended_trans/602_FDm_S.in2
-rw-r--r--utils/extended_trans/602_FDm_S.out1
-rw-r--r--utils/extended_trans/700_FRr_x.in2
-rw-r--r--utils/extended_trans/700_FRr_x.out1
-rw-r--r--utils/extended_trans/701_BDm_z3.in2
-rw-r--r--utils/extended_trans/701_BDm_z3.out1
-rw-r--r--utils/extended_trans/README3
142 files changed, 382 insertions, 50 deletions
diff --git a/src/core/constants.h b/src/core/constants.h
index e8b80ae..6505689 100644
--- a/src/core/constants.h
+++ b/src/core/constants.h
@@ -580,7 +580,7 @@ STATIC const char *transstr[] = {
580 [TRANS_BLm] = "mirrored BL", 580 [TRANS_BLm] = "mirrored BL",
581}; 581};
582 582
583static uint8_t inverse_trans_table[] = { 583STATIC uint8_t inverse_trans_table[] = {
584 [TRANS_UFr] = TRANS_UFr, 584 [TRANS_UFr] = TRANS_UFr,
585 [TRANS_UFm] = TRANS_UFm, 585 [TRANS_UFm] = TRANS_UFm,
586 [TRANS_ULr] = TRANS_URr, 586 [TRANS_ULr] = TRANS_URr,
@@ -631,7 +631,7 @@ static uint8_t inverse_trans_table[] = {
631 [TRANS_BLm] = TRANS_LDm, 631 [TRANS_BLm] = TRANS_LDm,
632}; 632};
633 633
634static uint8_t trans_move_table[][3] = { 634STATIC uint8_t trans_move_table[][3] = {
635 [TRANS_UFr] = { MOVE_U, MOVE_R, MOVE_F }, 635 [TRANS_UFr] = { MOVE_U, MOVE_R, MOVE_F },
636 [TRANS_UFm] = { MOVE_U, MOVE_L, MOVE_F }, 636 [TRANS_UFm] = { MOVE_U, MOVE_L, MOVE_F },
637 [TRANS_ULr] = { MOVE_U, MOVE_F, MOVE_L }, 637 [TRANS_ULr] = { MOVE_U, MOVE_F, MOVE_L },
@@ -682,7 +682,7 @@ static uint8_t trans_move_table[][3] = {
682 [TRANS_BLm] = { MOVE_B, MOVE_U, MOVE_R }, 682 [TRANS_BLm] = { MOVE_B, MOVE_U, MOVE_R },
683}; 683};
684 684
685static uint8_t orientation_transition_table[][3] = { 685STATIC uint8_t orientation_transition_table[][3] = {
686 [ORIENTATION_UF] = { ORIENTATION_FD, ORIENTATION_UR, ORIENTATION_LF }, 686 [ORIENTATION_UF] = { ORIENTATION_FD, ORIENTATION_UR, ORIENTATION_LF },
687 [ORIENTATION_UR] = { ORIENTATION_RD, ORIENTATION_UB, ORIENTATION_FR }, 687 [ORIENTATION_UR] = { ORIENTATION_RD, ORIENTATION_UB, ORIENTATION_FR },
688 [ORIENTATION_UB] = { ORIENTATION_BD, ORIENTATION_UL, ORIENTATION_RB }, 688 [ORIENTATION_UB] = { ORIENTATION_BD, ORIENTATION_UL, ORIENTATION_RB },
@@ -709,26 +709,94 @@ static uint8_t orientation_transition_table[][3] = {
709 [ORIENTATION_BL] = { ORIENTATION_LF, ORIENTATION_BD, ORIENTATION_DL }, 709 [ORIENTATION_BL] = { ORIENTATION_LF, ORIENTATION_BD, ORIENTATION_DL },
710}; 710};
711 711
712static struct { 712STATIC uint8_t orientation_trans[] = {
713 uint8_t moves[3]; 713 [ORIENTATION_UF] = TRANS_UFr,
714 uint8_t rotations[6]; 714 [ORIENTATION_UR] = TRANS_URr,
715} equivalent_move_table[] = { 715 [ORIENTATION_UB] = TRANS_UBr,
716 [MOVE_U] = { { MOVE_U, UINT8_MAX }, {UINT8_MAX} }, 716 [ORIENTATION_UL] = TRANS_ULr,
717 [MOVE_U2] = { { MOVE_U2, UINT8_MAX }, {UINT8_MAX} }, 717 [ORIENTATION_DF] = TRANS_DFr,
718 [MOVE_U3] = { { MOVE_U3, UINT8_MAX }, {UINT8_MAX} }, 718 [ORIENTATION_DR] = TRANS_DRr,
719 [MOVE_D] = { { MOVE_D, UINT8_MAX }, {UINT8_MAX} }, 719 [ORIENTATION_DB] = TRANS_DBr,
720 [MOVE_D2] = { { MOVE_D2, UINT8_MAX }, {UINT8_MAX} }, 720 [ORIENTATION_DL] = TRANS_DLr,
721 [MOVE_D3] = { { MOVE_D3, UINT8_MAX }, {UINT8_MAX} }, 721 [ORIENTATION_RF] = TRANS_RFr,
722 [MOVE_R] = { { MOVE_R, UINT8_MAX }, {UINT8_MAX} }, 722 [ORIENTATION_RD] = TRANS_RDr,
723 [MOVE_R2] = { { MOVE_R2, UINT8_MAX }, {UINT8_MAX} }, 723 [ORIENTATION_RB] = TRANS_RBr,
724 [MOVE_R3] = { { MOVE_R3, UINT8_MAX }, {UINT8_MAX} }, 724 [ORIENTATION_RU] = TRANS_RUr,
725 [MOVE_L] = { { MOVE_L, UINT8_MAX }, {UINT8_MAX} }, 725 [ORIENTATION_LF] = TRANS_LFr,
726 [MOVE_L2] = { { MOVE_L2, UINT8_MAX }, {UINT8_MAX} }, 726 [ORIENTATION_LD] = TRANS_LDr,
727 [MOVE_L3] = { { MOVE_L3, UINT8_MAX }, {UINT8_MAX} }, 727 [ORIENTATION_LB] = TRANS_LBr,
728 [MOVE_F] = { { MOVE_F, UINT8_MAX }, {UINT8_MAX} }, 728 [ORIENTATION_LU] = TRANS_LUr,
729 [MOVE_F2] = { { MOVE_F2, UINT8_MAX }, {UINT8_MAX} }, 729 [ORIENTATION_FD] = TRANS_FDr,
730 [MOVE_F3] = { { MOVE_F3, UINT8_MAX }, {UINT8_MAX} }, 730 [ORIENTATION_FR] = TRANS_FRr,
731 [MOVE_B] = { { MOVE_B, UINT8_MAX }, {UINT8_MAX} }, 731 [ORIENTATION_FU] = TRANS_FUr,
732 [MOVE_B2] = { { MOVE_B2, UINT8_MAX }, {UINT8_MAX} }, 732 [ORIENTATION_FL] = TRANS_FLr,
733 [MOVE_B3] = { { MOVE_B3, UINT8_MAX }, {UINT8_MAX} }, 733 [ORIENTATION_BD] = TRANS_BDr,
734 [ORIENTATION_BR] = TRANS_BRr,
735 [ORIENTATION_BU] = TRANS_BUr,
736 [ORIENTATION_BL] = TRANS_BLr,
737};
738
739typedef struct {
740 uint8_t move[3];
741 uint8_t rotation[4];
742} equivalent_moves_t;
743
744STATIC equivalent_moves_t equivalent_moves_table[] = {
745 [MOVE_U] = {{MOVE_U, UINT8_MAX}, {UINT8_MAX}},
746 [MOVE_U2] = {{MOVE_U2, UINT8_MAX}, {UINT8_MAX}},
747 [MOVE_U3] = {{MOVE_U3, UINT8_MAX}, {UINT8_MAX}},
748 [MOVE_D] = {{MOVE_D, UINT8_MAX}, {UINT8_MAX}},
749 [MOVE_D2] = {{MOVE_D2, UINT8_MAX}, {UINT8_MAX}},
750 [MOVE_D3] = {{MOVE_D3, UINT8_MAX}, {UINT8_MAX}},
751 [MOVE_R] = {{MOVE_R, UINT8_MAX}, {UINT8_MAX}},
752 [MOVE_R2] = {{MOVE_R2, UINT8_MAX}, {UINT8_MAX}},
753 [MOVE_R3] = {{MOVE_R3, UINT8_MAX}, {UINT8_MAX}},
754 [MOVE_L] = {{MOVE_L, UINT8_MAX}, {UINT8_MAX}},
755 [MOVE_L2] = {{MOVE_L2, UINT8_MAX}, {UINT8_MAX}},
756 [MOVE_L3] = {{MOVE_L3, UINT8_MAX}, {UINT8_MAX}},
757 [MOVE_F] = {{MOVE_F, UINT8_MAX}, {UINT8_MAX}},
758 [MOVE_F2] = {{MOVE_F2, UINT8_MAX}, {UINT8_MAX}},
759 [MOVE_F3] = {{MOVE_F3, UINT8_MAX}, {UINT8_MAX}},
760 [MOVE_B] = {{MOVE_B, UINT8_MAX}, {UINT8_MAX}},
761 [MOVE_B2] = {{MOVE_B2, UINT8_MAX}, {UINT8_MAX}},
762 [MOVE_B3] = {{MOVE_B3, UINT8_MAX}, {UINT8_MAX}},
763
764 [MOVE_Uw] = {{MOVE_D, UINT8_MAX}, {1, UINT8_MAX}},
765 [MOVE_Uw2] = {{MOVE_D2, UINT8_MAX}, {1, 1, UINT8_MAX}},
766 [MOVE_Uw3] = {{MOVE_D3, UINT8_MAX}, {1, 1, 1, UINT8_MAX}},
767 [MOVE_Dw] = {{MOVE_U, UINT8_MAX}, {1, 1, 1, UINT8_MAX}},
768 [MOVE_Dw2] = {{MOVE_U2, UINT8_MAX}, {1, 1, UINT8_MAX}},
769 [MOVE_Dw3] = {{MOVE_U3, UINT8_MAX}, {1, UINT8_MAX}},
770 [MOVE_Rw] = {{MOVE_L, UINT8_MAX}, {0, UINT8_MAX}},
771 [MOVE_Rw2] = {{MOVE_L2, UINT8_MAX}, {0, 0, UINT8_MAX}},
772 [MOVE_Rw3] = {{MOVE_L3, UINT8_MAX}, {0, 0, 0, UINT8_MAX}},
773 [MOVE_Lw] = {{MOVE_R, UINT8_MAX}, {0, 0, 0, UINT8_MAX}},
774 [MOVE_Lw2] = {{MOVE_R2, UINT8_MAX}, {0, 0, UINT8_MAX}},
775 [MOVE_Lw3] = {{MOVE_R3, UINT8_MAX}, {0, UINT8_MAX}},
776 [MOVE_Fw] = {{MOVE_B, UINT8_MAX}, {2, UINT8_MAX}},
777 [MOVE_Fw2] = {{MOVE_B2, UINT8_MAX}, {2, 2, UINT8_MAX}},
778 [MOVE_Fw3] = {{MOVE_B3, UINT8_MAX}, {2, 2, 2, UINT8_MAX}},
779 [MOVE_Bw] = {{MOVE_F, UINT8_MAX}, {2, 2, 2, UINT8_MAX}},
780 [MOVE_Bw2] = {{MOVE_F2, UINT8_MAX}, {2, 2, UINT8_MAX}},
781 [MOVE_Bw3] = {{MOVE_F3, UINT8_MAX}, {2, UINT8_MAX}},
782
783 [MOVE_M] = {{MOVE_R, MOVE_L3, UINT8_MAX}, {0, 0, 0, UINT8_MAX}},
784 [MOVE_M2] = {{MOVE_R2, MOVE_L2, UINT8_MAX}, {0, 0, UINT8_MAX}},
785 [MOVE_M3] = {{MOVE_R3, MOVE_L, UINT8_MAX}, {0, UINT8_MAX}},
786 [MOVE_S] = {{MOVE_F3, MOVE_B, UINT8_MAX}, {2, UINT8_MAX}},
787 [MOVE_S2] = {{MOVE_F2, MOVE_B2, UINT8_MAX}, {2, 2, UINT8_MAX}},
788 [MOVE_S3] = {{MOVE_F, MOVE_B3, UINT8_MAX}, {2, 2, 2, UINT8_MAX}},
789 [MOVE_E] = {{MOVE_U, MOVE_D3, UINT8_MAX}, {1, 1, 1, UINT8_MAX}},
790 [MOVE_E2] = {{MOVE_U2, MOVE_D2, UINT8_MAX}, {1, 1, UINT8_MAX}},
791 [MOVE_E3] = {{MOVE_U3, MOVE_D, UINT8_MAX}, {1, UINT8_MAX}},
792
793 [MOVE_x] = {{UINT8_MAX}, {0, UINT8_MAX}},
794 [MOVE_x2] = {{UINT8_MAX}, {0, 0, UINT8_MAX}},
795 [MOVE_x3] = {{UINT8_MAX}, {0, 0, 0, UINT8_MAX}},
796 [MOVE_y] = {{UINT8_MAX}, {1, UINT8_MAX}},
797 [MOVE_y2] = {{UINT8_MAX}, {1, 1, UINT8_MAX}},
798 [MOVE_y3] = {{UINT8_MAX}, {1, 1, 1, UINT8_MAX}},
799 [MOVE_z] = {{UINT8_MAX}, {2, UINT8_MAX}},
800 [MOVE_z2] = {{UINT8_MAX}, {2, 2, UINT8_MAX}},
801 [MOVE_z3] = {{UINT8_MAX}, {2, 2, 2, UINT8_MAX}},
734}; 802};
diff --git a/src/core/moves.h b/src/core/moves.h
index 8ed267d..20544a3 100644
--- a/src/core/moves.h
+++ b/src/core/moves.h
@@ -14,8 +14,13 @@ STATIC_INLINE uint8_t movebase(uint8_t);
14STATIC_INLINE uint8_t moveaxis(uint8_t); 14STATIC_INLINE uint8_t moveaxis(uint8_t);
15STATIC_INLINE bool isbase(uint8_t); 15STATIC_INLINE bool isbase(uint8_t);
16STATIC_INLINE bool parallel(uint8_t, uint8_t); 16STATIC_INLINE bool parallel(uint8_t, uint8_t);
17STATIC_INLINE uint8_t moveopposite(uint8_t);
18STATIC_INLINE uint8_t reorient_move(uint8_t, uint8_t);
19STATIC_INLINE uint8_t movefollow(uint8_t);
20STATIC uint8_t transform_move(uint8_t, uint8_t);
17 21
18STATIC cube_t move(cube_t, uint8_t); 22STATIC cube_t move(cube_t, uint8_t);
23STATIC oriented_cube_t move_extended(oriented_cube_t, uint8_t);
19STATIC cube_t premove(cube_t, uint8_t); 24STATIC cube_t premove(cube_t, uint8_t);
20STATIC uint8_t inverse_move(uint8_t); 25STATIC uint8_t inverse_move(uint8_t);
21STATIC void sortparallel_moves(size_t n, uint8_t [n]); 26STATIC void sortparallel_moves(size_t n, uint8_t [n]);
@@ -112,14 +117,14 @@ countmoves(const char *buf)
112{ 117{
113 uint8_t m; 118 uint8_t m;
114 uint64_t c; 119 uint64_t c;
120 int64_t count;
115 121
122 count = 0;
116 FOREACH_READMOVE(buf, m, c, INT_MAX, NISSY_ERROR_INVALID_MOVES, 123 FOREACH_READMOVE(buf, m, c, INT_MAX, NISSY_ERROR_INVALID_MOVES,
117 {} 124 count += m <= MOVE_Bw3 ? 1 : (m <= MOVE_E3 ? 2 : 0);
118 ) 125 )
119 126
120 (void)m; /* Ignore "variable set but not used" warning */ 127 return count;
121
122 return (int64_t)c;
123} 128}
124 129
125STATIC int64_t 130STATIC int64_t
@@ -188,6 +193,9 @@ movebase(uint8_t move)
188STATIC_INLINE uint8_t 193STATIC_INLINE uint8_t
189moveaxis(uint8_t move) 194moveaxis(uint8_t move)
190{ 195{
196 if (move > MOVE_B3)
197 return UINT8_ERROR;
198
191 return move / 6; 199 return move / 6;
192} 200}
193 201
@@ -209,6 +217,44 @@ moveopposite(uint8_t move)
209 return movebase(move) == 2 * moveaxis(move) ? move + 3 : move - 3; 217 return movebase(move) == 2 * moveaxis(move) ? move + 3 : move - 3;
210} 218}
211 219
220STATIC_INLINE uint8_t
221reorient_move(uint8_t m, uint8_t or)
222{
223 return transform_move(m, orientation_trans[or]);
224}
225
226/* This is currently unused, but it may turn out to be useful at some point */
227STATIC_INLINE uint8_t
228movefollow(uint8_t move)
229{
230 uint8_t b, m;
231
232 if (move <= MOVE_B3)
233 return move;
234
235 if (move <= MOVE_Bw3)
236 return move - MOVE_Uw;
237
238 b = UINT8_C(3) * (move / UINT8_C(3));
239 m = move - b;
240 switch (b) {
241 case MOVE_M:
242 return MOVE_L + m;
243 case MOVE_S:
244 return MOVE_F + m;
245 case MOVE_E:
246 return MOVE_D + m;
247 case MOVE_x:
248 return MOVE_R + m;
249 case MOVE_y:
250 return MOVE_U + m;
251 case MOVE_z:
252 return MOVE_F + m;
253 default:
254 return UINT8_ERROR;
255 }
256}
257
212STATIC cube_t 258STATIC cube_t
213move(cube_t c, uint8_t m) 259move(cube_t c, uint8_t m)
214{ 260{
@@ -255,6 +301,47 @@ move(cube_t c, uint8_t m)
255 } 301 }
256} 302}
257 303
304STATIC uint8_t
305transform_move(uint8_t m, uint8_t t)
306{
307 uint8_t a, base, modifier;
308
309 a = moveaxis(m);
310 if (a == UINT8_ERROR)
311 return UINT8_ERROR;
312
313 base = trans_move_table[t][a];
314 if (movebase(m) != 2 * a)
315 base = moveopposite(base);
316
317 modifier = m % 3;
318 if (t >= TRANS_UFm)
319 modifier = 2 - modifier;
320
321 return base + modifier;
322}
323
324STATIC oriented_cube_t
325move_extended(oriented_cube_t c, uint8_t m)
326{
327 int i;
328 equivalent_moves_t eqm;
329 oriented_cube_t ret;
330
331 eqm = equivalent_moves_table[m];
332 ret = c;
333
334 for (i = 0; eqm.move[i] != UINT8_MAX; i++)
335 ret.cube = move(
336 ret.cube, reorient_move(eqm.move[i], ret.orientation));
337
338 for (i = 0; eqm.rotation[i] != UINT8_MAX; i++)
339 ret.orientation = orientation_transition_table[
340 ret.orientation][eqm.rotation[i]];
341
342 return ret;
343}
344
258/* Applies the INVERSE of m BEFORE the scramble corresponding to c */ 345/* Applies the INVERSE of m BEFORE the scramble corresponding to c */
259STATIC cube_t 346STATIC cube_t
260premove(cube_t c, uint8_t m) 347premove(cube_t c, uint8_t m)
@@ -345,7 +432,7 @@ applymoves(oriented_cube_t cube, const char *buf)
345 "move error: inconsistent cube\n"); 432 "move error: inconsistent cube\n");
346 433
347 FOREACH_READMOVE(buf, m, c, -1, ZERO_ORIENTED_CUBE, 434 FOREACH_READMOVE(buf, m, c, -1, ZERO_ORIENTED_CUBE,
348 cube.cube = move(cube.cube, m); 435 cube = move_extended(cube, m);
349 ) 436 )
350 437
351 return cube; 438 return cube;
diff --git a/src/core/transform.h b/src/core/transform.h
index 763a4ae..d1d2931 100644
--- a/src/core/transform.h
+++ b/src/core/transform.h
@@ -25,7 +25,6 @@ STATIC cube_t transform_corners(cube_t, uint8_t);
25STATIC cube_t transform(cube_t, uint8_t); 25STATIC cube_t transform(cube_t, uint8_t);
26STATIC oriented_cube_t applytrans(oriented_cube_t, const char *); 26STATIC oriented_cube_t applytrans(oriented_cube_t, const char *);
27STATIC_INLINE uint8_t inverse_trans(uint8_t); 27STATIC_INLINE uint8_t inverse_trans(uint8_t);
28STATIC uint8_t transform_move(uint8_t, uint8_t);
29STATIC uint64_t symmetry_mask(cube_t); 28STATIC uint64_t symmetry_mask(cube_t);
30 29
31STATIC uint8_t 30STATIC uint8_t
@@ -392,23 +391,6 @@ inverse_trans(uint8_t t)
392 return inverse_trans_table[t]; 391 return inverse_trans_table[t];
393} 392}
394 393
395STATIC uint8_t
396transform_move(uint8_t m, uint8_t t)
397{
398 uint8_t a, base, modifier;
399
400 a = moveaxis(m);
401 base = trans_move_table[t][a];
402 if (movebase(m) != 2 * a)
403 base = moveopposite(base);
404
405 modifier = m % 3;
406 if (t >= TRANS_UFm)
407 modifier = 2 - modifier;
408
409 return base + modifier;
410}
411
412STATIC uint64_t 394STATIC uint64_t
413symmetry_mask(cube_t cube) 395symmetry_mask(cube_t cube)
414{ 396{
diff --git a/test/030_move/500_Uw_solved.in b/test/030_move/500_Uw_solved.in
new file mode 100644
index 0000000..3e79076
--- /dev/null
+++ b/test/030_move/500_Uw_solved.in
@@ -0,0 +1,2 @@
1Uw
2ABCDEFGH=ABCDEFGHIJKL=A
diff --git a/test/030_move/500_Uw_solved.out b/test/030_move/500_Uw_solved.out
new file mode 100644
index 0000000..fc08019
--- /dev/null
+++ b/test/030_move/500_Uw_solved.out
@@ -0,0 +1 @@
ABHGEFCD=ABHGEFCDIJKL=B
diff --git a/test/030_move/501_Uw2_solved.in b/test/030_move/501_Uw2_solved.in
new file mode 100644
index 0000000..fb0cf4b
--- /dev/null
+++ b/test/030_move/501_Uw2_solved.in
@@ -0,0 +1,2 @@
1Uw2
2ABCDEFGH=ABCDEFGHIJKL=A
diff --git a/test/030_move/501_Uw2_solved.out b/test/030_move/501_Uw2_solved.out
new file mode 100644
index 0000000..eb734e6
--- /dev/null
+++ b/test/030_move/501_Uw2_solved.out
@@ -0,0 +1 @@
ABDCEFHG=ABDCEFHGIJKL=C
diff --git a/test/030_move/502_Uw3_solved.in b/test/030_move/502_Uw3_solved.in
new file mode 100644
index 0000000..3b4ebf6
--- /dev/null
+++ b/test/030_move/502_Uw3_solved.in
@@ -0,0 +1,2 @@
1Uw3
2ABCDEFGH=ABCDEFGHIJKL=A
diff --git a/test/030_move/502_Uw3_solved.out b/test/030_move/502_Uw3_solved.out
new file mode 100644
index 0000000..6724a49
--- /dev/null
+++ b/test/030_move/502_Uw3_solved.out
@@ -0,0 +1 @@
ABGHEFDC=ABGHEFDCIJKL=D
diff --git a/test/030_move/503_Dw_solved.in b/test/030_move/503_Dw_solved.in
new file mode 100644
index 0000000..da4009e
--- /dev/null
+++ b/test/030_move/503_Dw_solved.in
@@ -0,0 +1,2 @@
1Dw
2ABCDEFGH=ABCDEFGHIJKL=A
diff --git a/test/030_move/503_Dw_solved.out b/test/030_move/503_Dw_solved.out
new file mode 100644
index 0000000..f554f31
--- /dev/null
+++ b/test/030_move/503_Dw_solved.out
@@ -0,0 +1 @@
FECDABGH=EFCDBAGHIJKL=D
diff --git a/test/030_move/504_Dw2_solved.in b/test/030_move/504_Dw2_solved.in
new file mode 100644
index 0000000..5e403a4
--- /dev/null
+++ b/test/030_move/504_Dw2_solved.in
@@ -0,0 +1,2 @@
1Dw2
2ABCDEFGH=ABCDEFGHIJKL=A
diff --git a/test/030_move/504_Dw2_solved.out b/test/030_move/504_Dw2_solved.out
new file mode 100644
index 0000000..51c13ad
--- /dev/null
+++ b/test/030_move/504_Dw2_solved.out
@@ -0,0 +1 @@
BACDFEGH=BACDFEGHIJKL=C
diff --git a/test/030_move/505_Dw3_solved.in b/test/030_move/505_Dw3_solved.in
new file mode 100644
index 0000000..d4a9fbb
--- /dev/null
+++ b/test/030_move/505_Dw3_solved.in
@@ -0,0 +1,2 @@
1Dw3
2ABCDEFGH=ABCDEFGHIJKL=A
diff --git a/test/030_move/505_Dw3_solved.out b/test/030_move/505_Dw3_solved.out
new file mode 100644
index 0000000..b842e86
--- /dev/null
+++ b/test/030_move/505_Dw3_solved.out
@@ -0,0 +1 @@
EFCDBAGH=FECDABGHIJKL=B
diff --git a/test/030_move/506_Rw_solved.in b/test/030_move/506_Rw_solved.in
new file mode 100644
index 0000000..4387d10
--- /dev/null
+++ b/test/030_move/506_Rw_solved.in
@@ -0,0 +1,2 @@
1Rw
2ABCDEFGH=ABCDEFGHIJKL=A
diff --git a/test/030_move/506_Rw_solved.out b/test/030_move/506_Rw_solved.out
new file mode 100644
index 0000000..853c85d
--- /dev/null
+++ b/test/030_move/506_Rw_solved.out
@@ -0,0 +1 @@
AXUDJFGK=ABCDEKJHIFGL=Q
diff --git a/test/030_move/507_Rw2_solved.in b/test/030_move/507_Rw2_solved.in
new file mode 100644
index 0000000..3510315
--- /dev/null
+++ b/test/030_move/507_Rw2_solved.in
@@ -0,0 +1,2 @@
1Rw2
2ABCDEFGH=ABCDEFGHIJKL=A
diff --git a/test/030_move/507_Rw2_solved.out b/test/030_move/507_Rw2_solved.out
new file mode 100644
index 0000000..f89caca
--- /dev/null
+++ b/test/030_move/507_Rw2_solved.out
@@ -0,0 +1 @@
ACBDHFGE=ABCDEGFHIKJL=G
diff --git a/test/030_move/508_Rw3_solved.in b/test/030_move/508_Rw3_solved.in
new file mode 100644
index 0000000..69cb0b2
--- /dev/null
+++ b/test/030_move/508_Rw3_solved.in
@@ -0,0 +1,2 @@
1Rw3
2ABCDEFGH=ABCDEFGHIJKL=A
diff --git a/test/030_move/508_Rw3_solved.out b/test/030_move/508_Rw3_solved.out
new file mode 100644
index 0000000..38ae9a9
--- /dev/null
+++ b/test/030_move/508_Rw3_solved.out
@@ -0,0 +1 @@
AUXDKFGJ=ABCDEJKHIGFL=W
diff --git a/test/030_move/509_Lw_solved.in b/test/030_move/509_Lw_solved.in
new file mode 100644
index 0000000..ddd8aea
--- /dev/null
+++ b/test/030_move/509_Lw_solved.in
@@ -0,0 +1,2 @@
1Lw
2ABCDEFGH=ABCDEFGHIJKL=A
diff --git a/test/030_move/509_Lw_solved.out b/test/030_move/509_Lw_solved.out
new file mode 100644
index 0000000..b588134
--- /dev/null
+++ b/test/030_move/509_Lw_solved.out
@@ -0,0 +1 @@
WBCVEILH=ABCDIFGLHJKE=W
diff --git a/test/030_move/510_Lw2_solved.in b/test/030_move/510_Lw2_solved.in
new file mode 100644
index 0000000..c0a00b3
--- /dev/null
+++ b/test/030_move/510_Lw2_solved.in
@@ -0,0 +1,2 @@
1Lw2
2ABCDEFGH=ABCDEFGHIJKL=A
diff --git a/test/030_move/510_Lw2_solved.out b/test/030_move/510_Lw2_solved.out
new file mode 100644
index 0000000..9d468db
--- /dev/null
+++ b/test/030_move/510_Lw2_solved.out
@@ -0,0 +1 @@
DBCAEGFH=ABCDHFGELJKI=G
diff --git a/test/030_move/511_Lw3_solved.in b/test/030_move/511_Lw3_solved.in
new file mode 100644
index 0000000..94b1333
--- /dev/null
+++ b/test/030_move/511_Lw3_solved.in
@@ -0,0 +1,2 @@
1Lw3
2ABCDEFGH=ABCDEFGHIJKL=A
diff --git a/test/030_move/511_Lw3_solved.out b/test/030_move/511_Lw3_solved.out
new file mode 100644
index 0000000..d4f17bb
--- /dev/null
+++ b/test/030_move/511_Lw3_solved.out
@@ -0,0 +1 @@
VBCWELIH=ABCDLFGIEJKH=Q
diff --git a/test/030_move/512_Fw_solved.in b/test/030_move/512_Fw_solved.in
new file mode 100644
index 0000000..179dab4
--- /dev/null
+++ b/test/030_move/512_Fw_solved.in
@@ -0,0 +1,2 @@
1Fw
2ABCDEFGH=ABCDEFGHIJKL=A
diff --git a/test/030_move/512_Fw_solved.out b/test/030_move/512_Fw_solved.out
new file mode 100644
index 0000000..966f275
--- /dev/null
+++ b/test/030_move/512_Fw_solved.out
@@ -0,0 +1 @@
ANCPETGR=AbaDEFGHIJRS=M
diff --git a/test/030_move/513_Fw2_solved.in b/test/030_move/513_Fw2_solved.in
new file mode 100644
index 0000000..94fd724
--- /dev/null
+++ b/test/030_move/513_Fw2_solved.in
@@ -0,0 +1,2 @@
1Fw2
2ABCDEFGH=ABCDEFGHIJKL=A
diff --git a/test/030_move/513_Fw2_solved.out b/test/030_move/513_Fw2_solved.out
new file mode 100644
index 0000000..06c3560
--- /dev/null
+++ b/test/030_move/513_Fw2_solved.out
@@ -0,0 +1 @@
ADCBEHGF=ACBDEFGHIJLK=E
diff --git a/test/030_move/514_Fw3_solved.in b/test/030_move/514_Fw3_solved.in
new file mode 100644
index 0000000..5287f6a
--- /dev/null
+++ b/test/030_move/514_Fw3_solved.in
@@ -0,0 +1,2 @@
1Fw3
2ABCDEFGH=ABCDEFGHIJKL=A
diff --git a/test/030_move/514_Fw3_solved.out b/test/030_move/514_Fw3_solved.out
new file mode 100644
index 0000000..659a09e
--- /dev/null
+++ b/test/030_move/514_Fw3_solved.out
@@ -0,0 +1 @@
APCNERGT=AabDEFGHIJSR=I
diff --git a/test/030_move/515_Bw_solved.in b/test/030_move/515_Bw_solved.in
new file mode 100644
index 0000000..13eac57
--- /dev/null
+++ b/test/030_move/515_Bw_solved.in
@@ -0,0 +1,2 @@
1Bw
2ABCDEFGH=ABCDEFGHIJKL=A
diff --git a/test/030_move/515_Bw_solved.out b/test/030_move/515_Bw_solved.out
new file mode 100644
index 0000000..28af170
--- /dev/null
+++ b/test/030_move/515_Bw_solved.out
@@ -0,0 +1 @@
MBODSFQH=ZBCYEFGHQTKL=I
diff --git a/test/030_move/516_Bw2_solved.in b/test/030_move/516_Bw2_solved.in
new file mode 100644
index 0000000..989ad7c
--- /dev/null
+++ b/test/030_move/516_Bw2_solved.in
@@ -0,0 +1,2 @@
1Bw2
2ABCDEFGH=ABCDEFGHIJKL=A
diff --git a/test/030_move/516_Bw2_solved.out b/test/030_move/516_Bw2_solved.out
new file mode 100644
index 0000000..43b400d
--- /dev/null
+++ b/test/030_move/516_Bw2_solved.out
@@ -0,0 +1 @@
CBADGFEH=DBCAEFGHJIKL=E
diff --git a/test/030_move/517_Bw3_solved.in b/test/030_move/517_Bw3_solved.in
new file mode 100644
index 0000000..a53c4e9
--- /dev/null
+++ b/test/030_move/517_Bw3_solved.in
@@ -0,0 +1,2 @@
1Bw3
2ABCDEFGH=ABCDEFGHIJKL=A
diff --git a/test/030_move/517_Bw3_solved.out b/test/030_move/517_Bw3_solved.out
new file mode 100644
index 0000000..e10aaf5
--- /dev/null
+++ b/test/030_move/517_Bw3_solved.out
@@ -0,0 +1 @@
OBMDQFSH=YBCZEFGHTQKL=M
diff --git a/test/030_move/518_M_solved.in b/test/030_move/518_M_solved.in
new file mode 100644
index 0000000..599d8ff
--- /dev/null
+++ b/test/030_move/518_M_solved.in
@@ -0,0 +1,2 @@
1M
2ABCDEFGH=ABCDEFGHIJKL=A
diff --git a/test/030_move/518_M_solved.out b/test/030_move/518_M_solved.out
new file mode 100644
index 0000000..6b28216
--- /dev/null
+++ b/test/030_move/518_M_solved.out
@@ -0,0 +1 @@
WUXVKILJ=ABCDIJKLHGFE=W
diff --git a/test/030_move/519_M2_solved.in b/test/030_move/519_M2_solved.in
new file mode 100644
index 0000000..d0479b8
--- /dev/null
+++ b/test/030_move/519_M2_solved.in
@@ -0,0 +1,2 @@
1M2
2ABCDEFGH=ABCDEFGHIJKL=A
diff --git a/test/030_move/519_M2_solved.out b/test/030_move/519_M2_solved.out
new file mode 100644
index 0000000..e28cb4e
--- /dev/null
+++ b/test/030_move/519_M2_solved.out
@@ -0,0 +1 @@
DCBAHGFE=ABCDHGFELKJI=G
diff --git a/test/030_move/520_M3_solved.in b/test/030_move/520_M3_solved.in
new file mode 100644
index 0000000..32bff5a
--- /dev/null
+++ b/test/030_move/520_M3_solved.in
@@ -0,0 +1,2 @@
1M3
2ABCDEFGH=ABCDEFGHIJKL=A
diff --git a/test/030_move/520_M3_solved.out b/test/030_move/520_M3_solved.out
new file mode 100644
index 0000000..1d47a15
--- /dev/null
+++ b/test/030_move/520_M3_solved.out
@@ -0,0 +1 @@
VXUWJLIK=ABCDLKJIEFGH=Q
diff --git a/test/030_move/521_S_solved.in b/test/030_move/521_S_solved.in
new file mode 100644
index 0000000..9e08bff
--- /dev/null
+++ b/test/030_move/521_S_solved.in
@@ -0,0 +1,2 @@
1S
2ABCDEFGH=ABCDEFGHIJKL=A
diff --git a/test/030_move/521_S_solved.out b/test/030_move/521_S_solved.out
new file mode 100644
index 0000000..74b55a2
--- /dev/null
+++ b/test/030_move/521_S_solved.out
@@ -0,0 +1 @@
ONMPQTSR=YbaZEFGHTQRS=M
diff --git a/test/030_move/522_S2_solved.in b/test/030_move/522_S2_solved.in
new file mode 100644
index 0000000..49818d0
--- /dev/null
+++ b/test/030_move/522_S2_solved.in
@@ -0,0 +1,2 @@
1S2
2ABCDEFGH=ABCDEFGHIJKL=A
diff --git a/test/030_move/522_S2_solved.out b/test/030_move/522_S2_solved.out
new file mode 100644
index 0000000..85245c3
--- /dev/null
+++ b/test/030_move/522_S2_solved.out
@@ -0,0 +1 @@
CDABGHEF=DCBAEFGHJILK=E
diff --git a/test/030_move/523_S3_solved.in b/test/030_move/523_S3_solved.in
new file mode 100644
index 0000000..3cdc3d6
--- /dev/null
+++ b/test/030_move/523_S3_solved.in
@@ -0,0 +1,2 @@
1S3
2ABCDEFGH=ABCDEFGHIJKL=A
diff --git a/test/030_move/523_S3_solved.out b/test/030_move/523_S3_solved.out
new file mode 100644
index 0000000..ac53534
--- /dev/null
+++ b/test/030_move/523_S3_solved.out
@@ -0,0 +1 @@
MPONSRQT=ZabYEFGHQTSR=I
diff --git a/test/030_move/524_E_solved.in b/test/030_move/524_E_solved.in
new file mode 100644
index 0000000..03b48ef
--- /dev/null
+++ b/test/030_move/524_E_solved.in
@@ -0,0 +1,2 @@
1E
2ABCDEFGH=ABCDEFGHIJKL=A
diff --git a/test/030_move/524_E_solved.out b/test/030_move/524_E_solved.out
new file mode 100644
index 0000000..54fcf98
--- /dev/null
+++ b/test/030_move/524_E_solved.out
@@ -0,0 +1 @@
FEGHABDC=EFGHBADCIJKL=D
diff --git a/test/030_move/525_E2_solved.in b/test/030_move/525_E2_solved.in
new file mode 100644
index 0000000..faee27c
--- /dev/null
+++ b/test/030_move/525_E2_solved.in
@@ -0,0 +1,2 @@
1E2
2ABCDEFGH=ABCDEFGHIJKL=A
diff --git a/test/030_move/525_E2_solved.out b/test/030_move/525_E2_solved.out
new file mode 100644
index 0000000..330a390
--- /dev/null
+++ b/test/030_move/525_E2_solved.out
@@ -0,0 +1 @@
BADCFEHG=BADCFEHGIJKL=C
diff --git a/test/030_move/526_E3_solved.in b/test/030_move/526_E3_solved.in
new file mode 100644
index 0000000..17fa78d
--- /dev/null
+++ b/test/030_move/526_E3_solved.in
@@ -0,0 +1,2 @@
1E3
2ABCDEFGH=ABCDEFGHIJKL=A
diff --git a/test/030_move/526_E3_solved.out b/test/030_move/526_E3_solved.out
new file mode 100644
index 0000000..cb55358
--- /dev/null
+++ b/test/030_move/526_E3_solved.out
@@ -0,0 +1 @@
EFHGBACD=FEHGABCDIJKL=B
diff --git a/test/030_move/527_x_solved.in b/test/030_move/527_x_solved.in
new file mode 100644
index 0000000..f26b8c5
--- /dev/null
+++ b/test/030_move/527_x_solved.in
@@ -0,0 +1,2 @@
1x
2ABCDEFGH=ABCDEFGHIJKL=A
diff --git a/test/030_move/527_x_solved.out b/test/030_move/527_x_solved.out
new file mode 100644
index 0000000..29fefad
--- /dev/null
+++ b/test/030_move/527_x_solved.out
@@ -0,0 +1 @@
ABCDEFGH=ABCDEFGHIJKL=Q
diff --git a/test/030_move/528_x2_solved.in b/test/030_move/528_x2_solved.in
new file mode 100644
index 0000000..c538316
--- /dev/null
+++ b/test/030_move/528_x2_solved.in
@@ -0,0 +1,2 @@
1x2
2ABCDEFGH=ABCDEFGHIJKL=A
diff --git a/test/030_move/528_x2_solved.out b/test/030_move/528_x2_solved.out
new file mode 100644
index 0000000..cebf79a
--- /dev/null
+++ b/test/030_move/528_x2_solved.out
@@ -0,0 +1 @@
ABCDEFGH=ABCDEFGHIJKL=G
diff --git a/test/030_move/529_x3_solved.in b/test/030_move/529_x3_solved.in
new file mode 100644
index 0000000..cc314b4
--- /dev/null
+++ b/test/030_move/529_x3_solved.in
@@ -0,0 +1,2 @@
1x3
2ABCDEFGH=ABCDEFGHIJKL=A
diff --git a/test/030_move/529_x3_solved.out b/test/030_move/529_x3_solved.out
new file mode 100644
index 0000000..2449874
--- /dev/null
+++ b/test/030_move/529_x3_solved.out
@@ -0,0 +1 @@
ABCDEFGH=ABCDEFGHIJKL=W
diff --git a/test/030_move/530_y_solved.in b/test/030_move/530_y_solved.in
new file mode 100644
index 0000000..07ec332
--- /dev/null
+++ b/test/030_move/530_y_solved.in
@@ -0,0 +1,2 @@
1y
2ABCDEFGH=ABCDEFGHIJKL=A
diff --git a/test/030_move/530_y_solved.out b/test/030_move/530_y_solved.out
new file mode 100644
index 0000000..4749dd6
--- /dev/null
+++ b/test/030_move/530_y_solved.out
@@ -0,0 +1 @@
ABCDEFGH=ABCDEFGHIJKL=B
diff --git a/test/030_move/531_y2_solved.in b/test/030_move/531_y2_solved.in
new file mode 100644
index 0000000..a77c990
--- /dev/null
+++ b/test/030_move/531_y2_solved.in
@@ -0,0 +1,2 @@
1y2
2ABCDEFGH=ABCDEFGHIJKL=A
diff --git a/test/030_move/531_y2_solved.out b/test/030_move/531_y2_solved.out
new file mode 100644
index 0000000..c876a74
--- /dev/null
+++ b/test/030_move/531_y2_solved.out
@@ -0,0 +1 @@
ABCDEFGH=ABCDEFGHIJKL=C
diff --git a/test/030_move/532_y3_solved.in b/test/030_move/532_y3_solved.in
new file mode 100644
index 0000000..d52024c
--- /dev/null
+++ b/test/030_move/532_y3_solved.in
@@ -0,0 +1,2 @@
1y3
2ABCDEFGH=ABCDEFGHIJKL=A
diff --git a/test/030_move/532_y3_solved.out b/test/030_move/532_y3_solved.out
new file mode 100644
index 0000000..3a5afc2
--- /dev/null
+++ b/test/030_move/532_y3_solved.out
@@ -0,0 +1 @@
ABCDEFGH=ABCDEFGHIJKL=D
diff --git a/test/030_move/533_z_solved.in b/test/030_move/533_z_solved.in
new file mode 100644
index 0000000..af78379
--- /dev/null
+++ b/test/030_move/533_z_solved.in
@@ -0,0 +1,2 @@
1z
2ABCDEFGH=ABCDEFGHIJKL=A
diff --git a/test/030_move/533_z_solved.out b/test/030_move/533_z_solved.out
new file mode 100644
index 0000000..9267695
--- /dev/null
+++ b/test/030_move/533_z_solved.out
@@ -0,0 +1 @@
ABCDEFGH=ABCDEFGHIJKL=M
diff --git a/test/030_move/534_z2_solved.in b/test/030_move/534_z2_solved.in
new file mode 100644
index 0000000..2f702a1
--- /dev/null
+++ b/test/030_move/534_z2_solved.in
@@ -0,0 +1,2 @@
1z2
2ABCDEFGH=ABCDEFGHIJKL=A
diff --git a/test/030_move/534_z2_solved.out b/test/030_move/534_z2_solved.out
new file mode 100644
index 0000000..94daec7
--- /dev/null
+++ b/test/030_move/534_z2_solved.out
@@ -0,0 +1 @@
ABCDEFGH=ABCDEFGHIJKL=E
diff --git a/test/030_move/535_z3_solved.in b/test/030_move/535_z3_solved.in
new file mode 100644
index 0000000..f697279
--- /dev/null
+++ b/test/030_move/535_z3_solved.in
@@ -0,0 +1,2 @@
1z3
2ABCDEFGH=ABCDEFGHIJKL=A
diff --git a/test/030_move/535_z3_solved.out b/test/030_move/535_z3_solved.out
new file mode 100644
index 0000000..fd02d56
--- /dev/null
+++ b/test/030_move/535_z3_solved.out
@@ -0,0 +1 @@
ABCDEFGH=ABCDEFGHIJKL=I
diff --git a/test/030_move/550_scrambled_random.in b/test/030_move/550_scrambled_random.in
new file mode 100644
index 0000000..35cd8bd
--- /dev/null
+++ b/test/030_move/550_scrambled_random.in
@@ -0,0 +1,2 @@
1R2 Uw F x Bw2 M' y2 z S3
2ABCDEFGH=ABCDEFGHIJKL=F
diff --git a/test/030_move/550_scrambled_random.out b/test/030_move/550_scrambled_random.out
new file mode 100644
index 0000000..b3f81b0
--- /dev/null
+++ b/test/030_move/550_scrambled_random.out
@@ -0,0 +1 @@
WTCEAFJP=TXWRLKQUJVIS=C
diff --git a/test/032_countmoves/00_empty.in b/test/032_countmoves/00_empty.in
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/test/032_countmoves/00_empty.in
@@ -0,0 +1 @@
diff --git a/test/032_countmoves/00_empty.out b/test/032_countmoves/00_empty.out
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/test/032_countmoves/00_empty.out
@@ -0,0 +1 @@
0
diff --git a/test/032_countmoves/01_U.in b/test/032_countmoves/01_U.in
new file mode 100644
index 0000000..765140b
--- /dev/null
+++ b/test/032_countmoves/01_U.in
@@ -0,0 +1 @@
U
diff --git a/test/032_countmoves/01_U.out b/test/032_countmoves/01_U.out
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/test/032_countmoves/01_U.out
@@ -0,0 +1 @@
1
diff --git a/test/032_countmoves/02_Fw3.in b/test/032_countmoves/02_Fw3.in
new file mode 100644
index 0000000..699e64c
--- /dev/null
+++ b/test/032_countmoves/02_Fw3.in
@@ -0,0 +1 @@
Fw'
diff --git a/test/032_countmoves/02_Fw3.out b/test/032_countmoves/02_Fw3.out
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/test/032_countmoves/02_Fw3.out
@@ -0,0 +1 @@
1
diff --git a/test/032_countmoves/03_S2.in b/test/032_countmoves/03_S2.in
new file mode 100644
index 0000000..778c8ff
--- /dev/null
+++ b/test/032_countmoves/03_S2.in
@@ -0,0 +1 @@
S2
diff --git a/test/032_countmoves/03_S2.out b/test/032_countmoves/03_S2.out
new file mode 100644
index 0000000..0cfbf08
--- /dev/null
+++ b/test/032_countmoves/03_S2.out
@@ -0,0 +1 @@
2
diff --git a/test/032_countmoves/04_y3.in b/test/032_countmoves/04_y3.in
new file mode 100644
index 0000000..b536014
--- /dev/null
+++ b/test/032_countmoves/04_y3.in
@@ -0,0 +1 @@
y'
diff --git a/test/032_countmoves/04_y3.out b/test/032_countmoves/04_y3.out
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/test/032_countmoves/04_y3.out
@@ -0,0 +1 @@
0
diff --git a/test/032_countmoves/countmoves_tests.c b/test/032_countmoves/countmoves_tests.c
new file mode 100644
index 0000000..b2c9946
--- /dev/null
+++ b/test/032_countmoves/countmoves_tests.c
@@ -0,0 +1,11 @@
1#include "../test.h"
2
3int64_t countmoves(const char *);
4
5void run(void) {
6 char movestr[STRLENMAX];
7
8 fgets(movestr, STRLENMAX, stdin);
9
10 printf("%" PRId64 "\n", countmoves(movestr));
11}
diff --git a/test/062_transform_move/transform_move_tests.c b/test/062_transform_move/transform_move_tests.c
index 4f554c7..39e8619 100644
--- a/test/062_transform_move/transform_move_tests.c
+++ b/test/062_transform_move/transform_move_tests.c
@@ -5,7 +5,7 @@
5cube_t applytrans(cube_t, const char *); 5cube_t applytrans(cube_t, const char *);
6uint8_t transform_move(uint8_t, uint8_t); 6uint8_t transform_move(uint8_t, uint8_t);
7int64_t readmoves(const char *, size_t n, uint8_t [n]); 7int64_t readmoves(const char *, size_t n, uint8_t [n]);
8cube_t move(cube_t, uint8_t); 8oriented_cube_t move_extended(oriented_cube_t, uint8_t);
9oriented_cube_t applymoves(oriented_cube_t, const char *); 9oriented_cube_t applymoves(oriented_cube_t, const char *);
10uint8_t readtrans(const char[static NISSY_SIZE_TRANSFORMATION]); 10uint8_t readtrans(const char[static NISSY_SIZE_TRANSFORMATION]);
11 11
@@ -22,7 +22,7 @@ void run(void) {
22 n = readmoves(movestr, MAXMOVES, moves); 22 n = readmoves(movestr, MAXMOVES, moves);
23 t = readtrans(transtr); 23 t = readtrans(transtr);
24 for (i = 0; i < n; i++) 24 for (i = 0; i < n; i++)
25 cube.cube = move(cube.cube, transform_move(moves[i], t)); 25 cube = move_extended(cube, transform_move(moves[i], t));
26 26
27 writecube(cube, STRLENMAX, cubestr); 27 writecube(cube, STRLENMAX, cubestr);
28 printf("%s\n", cubestr); 28 printf("%s\n", cubestr);
diff --git a/utils/cubes/move_18_Uw.txt b/utils/cubes/move_18_Uw.txt
new file mode 100644
index 0000000..fc08019
--- /dev/null
+++ b/utils/cubes/move_18_Uw.txt
@@ -0,0 +1 @@
ABHGEFCD=ABHGEFCDIJKL=B
diff --git a/utils/cubes/move_19_Uw2.txt b/utils/cubes/move_19_Uw2.txt
new file mode 100644
index 0000000..eb734e6
--- /dev/null
+++ b/utils/cubes/move_19_Uw2.txt
@@ -0,0 +1 @@
ABDCEFHG=ABDCEFHGIJKL=C
diff --git a/utils/cubes/move_20_Uw3.txt b/utils/cubes/move_20_Uw3.txt
new file mode 100644
index 0000000..6724a49
--- /dev/null
+++ b/utils/cubes/move_20_Uw3.txt
@@ -0,0 +1 @@
ABGHEFDC=ABGHEFDCIJKL=D
diff --git a/utils/cubes/move_21_Dw.txt b/utils/cubes/move_21_Dw.txt
new file mode 100644
index 0000000..f554f31
--- /dev/null
+++ b/utils/cubes/move_21_Dw.txt
@@ -0,0 +1 @@
FECDABGH=EFCDBAGHIJKL=D
diff --git a/utils/cubes/move_22_Dw2.txt b/utils/cubes/move_22_Dw2.txt
new file mode 100644
index 0000000..51c13ad
--- /dev/null
+++ b/utils/cubes/move_22_Dw2.txt
@@ -0,0 +1 @@
BACDFEGH=BACDFEGHIJKL=C
diff --git a/utils/cubes/move_23_Dw3.txt b/utils/cubes/move_23_Dw3.txt
new file mode 100644
index 0000000..b842e86
--- /dev/null
+++ b/utils/cubes/move_23_Dw3.txt
@@ -0,0 +1 @@
EFCDBAGH=FECDABGHIJKL=B
diff --git a/utils/cubes/move_24_Rw.txt b/utils/cubes/move_24_Rw.txt
new file mode 100644
index 0000000..853c85d
--- /dev/null
+++ b/utils/cubes/move_24_Rw.txt
@@ -0,0 +1 @@
AXUDJFGK=ABCDEKJHIFGL=Q
diff --git a/utils/cubes/move_25_Rw2.txt b/utils/cubes/move_25_Rw2.txt
new file mode 100644
index 0000000..f89caca
--- /dev/null
+++ b/utils/cubes/move_25_Rw2.txt
@@ -0,0 +1 @@
ACBDHFGE=ABCDEGFHIKJL=G
diff --git a/utils/cubes/move_26_Rw3.txt b/utils/cubes/move_26_Rw3.txt
new file mode 100644
index 0000000..38ae9a9
--- /dev/null
+++ b/utils/cubes/move_26_Rw3.txt
@@ -0,0 +1 @@
AUXDKFGJ=ABCDEJKHIGFL=W
diff --git a/utils/cubes/move_27_Lw.txt b/utils/cubes/move_27_Lw.txt
new file mode 100644
index 0000000..b588134
--- /dev/null
+++ b/utils/cubes/move_27_Lw.txt
@@ -0,0 +1 @@
WBCVEILH=ABCDIFGLHJKE=W
diff --git a/utils/cubes/move_28_Lw2.txt b/utils/cubes/move_28_Lw2.txt
new file mode 100644
index 0000000..9d468db
--- /dev/null
+++ b/utils/cubes/move_28_Lw2.txt
@@ -0,0 +1 @@
DBCAEGFH=ABCDHFGELJKI=G
diff --git a/utils/cubes/move_29_Lw3.txt b/utils/cubes/move_29_Lw3.txt
new file mode 100644
index 0000000..d4f17bb
--- /dev/null
+++ b/utils/cubes/move_29_Lw3.txt
@@ -0,0 +1 @@
VBCWELIH=ABCDLFGIEJKH=Q
diff --git a/utils/cubes/move_30_Fw.txt b/utils/cubes/move_30_Fw.txt
new file mode 100644
index 0000000..966f275
--- /dev/null
+++ b/utils/cubes/move_30_Fw.txt
@@ -0,0 +1 @@
ANCPETGR=AbaDEFGHIJRS=M
diff --git a/utils/cubes/move_31_Fw2.txt b/utils/cubes/move_31_Fw2.txt
new file mode 100644
index 0000000..06c3560
--- /dev/null
+++ b/utils/cubes/move_31_Fw2.txt
@@ -0,0 +1 @@
ADCBEHGF=ACBDEFGHIJLK=E
diff --git a/utils/cubes/move_32_Fw3.txt b/utils/cubes/move_32_Fw3.txt
new file mode 100644
index 0000000..659a09e
--- /dev/null
+++ b/utils/cubes/move_32_Fw3.txt
@@ -0,0 +1 @@
APCNERGT=AabDEFGHIJSR=I
diff --git a/utils/cubes/move_33_Bw.txt b/utils/cubes/move_33_Bw.txt
new file mode 100644
index 0000000..28af170
--- /dev/null
+++ b/utils/cubes/move_33_Bw.txt
@@ -0,0 +1 @@
MBODSFQH=ZBCYEFGHQTKL=I
diff --git a/utils/cubes/move_34_Bw2.txt b/utils/cubes/move_34_Bw2.txt
new file mode 100644
index 0000000..43b400d
--- /dev/null
+++ b/utils/cubes/move_34_Bw2.txt
@@ -0,0 +1 @@
CBADGFEH=DBCAEFGHJIKL=E
diff --git a/utils/cubes/move_35_Bw3.txt b/utils/cubes/move_35_Bw3.txt
new file mode 100644
index 0000000..e10aaf5
--- /dev/null
+++ b/utils/cubes/move_35_Bw3.txt
@@ -0,0 +1 @@
OBMDQFSH=YBCZEFGHTQKL=M
diff --git a/utils/cubes/move_36_M.txt b/utils/cubes/move_36_M.txt
new file mode 100644
index 0000000..6b28216
--- /dev/null
+++ b/utils/cubes/move_36_M.txt
@@ -0,0 +1 @@
WUXVKILJ=ABCDIJKLHGFE=W
diff --git a/utils/cubes/move_37_M2.txt b/utils/cubes/move_37_M2.txt
new file mode 100644
index 0000000..e28cb4e
--- /dev/null
+++ b/utils/cubes/move_37_M2.txt
@@ -0,0 +1 @@
DCBAHGFE=ABCDHGFELKJI=G
diff --git a/utils/cubes/move_38_M3.txt b/utils/cubes/move_38_M3.txt
new file mode 100644
index 0000000..1d47a15
--- /dev/null
+++ b/utils/cubes/move_38_M3.txt
@@ -0,0 +1 @@
VXUWJLIK=ABCDLKJIEFGH=Q
diff --git a/utils/cubes/move_39_S.txt b/utils/cubes/move_39_S.txt
new file mode 100644
index 0000000..e405a29
--- /dev/null
+++ b/utils/cubes/move_39_S.txt
@@ -0,0 +1 @@
ONMPQTSR=YbaZEFGHTQRS=M
diff --git a/utils/cubes/move_40_S2.txt b/utils/cubes/move_40_S2.txt
new file mode 100644
index 0000000..85245c3
--- /dev/null
+++ b/utils/cubes/move_40_S2.txt
@@ -0,0 +1 @@
CDABGHEF=DCBAEFGHJILK=E
diff --git a/utils/cubes/move_41_S3.txt b/utils/cubes/move_41_S3.txt
new file mode 100644
index 0000000..ac53534
--- /dev/null
+++ b/utils/cubes/move_41_S3.txt
@@ -0,0 +1 @@
MPONSRQT=ZabYEFGHQTSR=I
diff --git a/utils/cubes/move_42_E.txt b/utils/cubes/move_42_E.txt
new file mode 100644
index 0000000..54fcf98
--- /dev/null
+++ b/utils/cubes/move_42_E.txt
@@ -0,0 +1 @@
FEGHABDC=EFGHBADCIJKL=D
diff --git a/utils/cubes/move_43_E2.txt b/utils/cubes/move_43_E2.txt
new file mode 100644
index 0000000..330a390
--- /dev/null
+++ b/utils/cubes/move_43_E2.txt
@@ -0,0 +1 @@
BADCFEHG=BADCFEHGIJKL=C
diff --git a/utils/cubes/move_44_E3.txt b/utils/cubes/move_44_E3.txt
new file mode 100644
index 0000000..cb55358
--- /dev/null
+++ b/utils/cubes/move_44_E3.txt
@@ -0,0 +1 @@
EFHGBACD=FEHGABCDIJKL=B
diff --git a/utils/cubes/move_45_x.txt b/utils/cubes/move_45_x.txt
new file mode 100644
index 0000000..29fefad
--- /dev/null
+++ b/utils/cubes/move_45_x.txt
@@ -0,0 +1 @@
ABCDEFGH=ABCDEFGHIJKL=Q
diff --git a/utils/cubes/move_46_x2.txt b/utils/cubes/move_46_x2.txt
new file mode 100644
index 0000000..cebf79a
--- /dev/null
+++ b/utils/cubes/move_46_x2.txt
@@ -0,0 +1 @@
ABCDEFGH=ABCDEFGHIJKL=G
diff --git a/utils/cubes/move_47_x3.txt b/utils/cubes/move_47_x3.txt
new file mode 100644
index 0000000..2449874
--- /dev/null
+++ b/utils/cubes/move_47_x3.txt
@@ -0,0 +1 @@
ABCDEFGH=ABCDEFGHIJKL=W
diff --git a/utils/cubes/move_48_y.txt b/utils/cubes/move_48_y.txt
new file mode 100644
index 0000000..4749dd6
--- /dev/null
+++ b/utils/cubes/move_48_y.txt
@@ -0,0 +1 @@
ABCDEFGH=ABCDEFGHIJKL=B
diff --git a/utils/cubes/move_49_y2.txt b/utils/cubes/move_49_y2.txt
new file mode 100644
index 0000000..c876a74
--- /dev/null
+++ b/utils/cubes/move_49_y2.txt
@@ -0,0 +1 @@
ABCDEFGH=ABCDEFGHIJKL=C
diff --git a/utils/cubes/move_50_y3.txt b/utils/cubes/move_50_y3.txt
new file mode 100644
index 0000000..3a5afc2
--- /dev/null
+++ b/utils/cubes/move_50_y3.txt
@@ -0,0 +1 @@
ABCDEFGH=ABCDEFGHIJKL=D
diff --git a/utils/cubes/move_51_z.txt b/utils/cubes/move_51_z.txt
new file mode 100644
index 0000000..9267695
--- /dev/null
+++ b/utils/cubes/move_51_z.txt
@@ -0,0 +1 @@
ABCDEFGH=ABCDEFGHIJKL=M
diff --git a/utils/cubes/move_52_z2.txt b/utils/cubes/move_52_z2.txt
new file mode 100644
index 0000000..94daec7
--- /dev/null
+++ b/utils/cubes/move_52_z2.txt
@@ -0,0 +1 @@
ABCDEFGH=ABCDEFGHIJKL=E
diff --git a/utils/cubes/move_53_z3.txt b/utils/cubes/move_53_z3.txt
new file mode 100644
index 0000000..fd02d56
--- /dev/null
+++ b/utils/cubes/move_53_z3.txt
@@ -0,0 +1 @@
ABCDEFGH=ABCDEFGHIJKL=I
diff --git a/utils/extended_trans/500_DLr_Uw.in b/utils/extended_trans/500_DLr_Uw.in
new file mode 100644
index 0000000..c35f54e
--- /dev/null
+++ b/utils/extended_trans/500_DLr_Uw.in
@@ -0,0 +1,2 @@
1rotation DL
2Uw
diff --git a/utils/extended_trans/500_DLr_Uw.out b/utils/extended_trans/500_DLr_Uw.out
new file mode 100644
index 0000000..f554f31
--- /dev/null
+++ b/utils/extended_trans/500_DLr_Uw.out
@@ -0,0 +1 @@
FECDABGH=EFCDBAGHIJKL=D
diff --git a/utils/extended_trans/501_RBr_Lw3.in b/utils/extended_trans/501_RBr_Lw3.in
new file mode 100644
index 0000000..37b6387
--- /dev/null
+++ b/utils/extended_trans/501_RBr_Lw3.in
@@ -0,0 +1,2 @@
1rotation RB
2Lw3
diff --git a/utils/extended_trans/501_RBr_Lw3.out b/utils/extended_trans/501_RBr_Lw3.out
new file mode 100644
index 0000000..f554f31
--- /dev/null
+++ b/utils/extended_trans/501_RBr_Lw3.out
@@ -0,0 +1 @@
FECDABGH=EFCDBAGHIJKL=D
diff --git a/utils/extended_trans/502_FLm_Fw.in b/utils/extended_trans/502_FLm_Fw.in
new file mode 100644
index 0000000..a5e9490
--- /dev/null
+++ b/utils/extended_trans/502_FLm_Fw.in
@@ -0,0 +1,2 @@
1mirrored FL
2Fw
diff --git a/utils/extended_trans/502_FLm_Fw.out b/utils/extended_trans/502_FLm_Fw.out
new file mode 100644
index 0000000..38ae9a9
--- /dev/null
+++ b/utils/extended_trans/502_FLm_Fw.out
@@ -0,0 +1 @@
AUXDKFGJ=ABCDEJKHIGFL=W
diff --git a/utils/extended_trans/600_BDr_M3.in b/utils/extended_trans/600_BDr_M3.in
new file mode 100644
index 0000000..d052bb1
--- /dev/null
+++ b/utils/extended_trans/600_BDr_M3.in
@@ -0,0 +1,2 @@
1rotation BD
2M'
diff --git a/utils/extended_trans/600_BDr_M3.out b/utils/extended_trans/600_BDr_M3.out
new file mode 100644
index 0000000..6b28216
--- /dev/null
+++ b/utils/extended_trans/600_BDr_M3.out
@@ -0,0 +1 @@
WUXVKILJ=ABCDIJKLHGFE=W
diff --git a/utils/extended_trans/601_LDm_E.in b/utils/extended_trans/601_LDm_E.in
new file mode 100644
index 0000000..f736905
--- /dev/null
+++ b/utils/extended_trans/601_LDm_E.in
@@ -0,0 +1,2 @@
1mirrored LD
2E
diff --git a/utils/extended_trans/601_LDm_E.out b/utils/extended_trans/601_LDm_E.out
new file mode 100644
index 0000000..1d47a15
--- /dev/null
+++ b/utils/extended_trans/601_LDm_E.out
@@ -0,0 +1 @@
VXUWJLIK=ABCDLKJIEFGH=Q
diff --git a/utils/extended_trans/602_FDm_S.in b/utils/extended_trans/602_FDm_S.in
new file mode 100644
index 0000000..b46af81
--- /dev/null
+++ b/utils/extended_trans/602_FDm_S.in
@@ -0,0 +1,2 @@
1mirrored FD
2S
diff --git a/utils/extended_trans/602_FDm_S.out b/utils/extended_trans/602_FDm_S.out
new file mode 100644
index 0000000..cb55358
--- /dev/null
+++ b/utils/extended_trans/602_FDm_S.out
@@ -0,0 +1 @@
EFHGBACD=FEHGABCDIJKL=B
diff --git a/utils/extended_trans/700_FRr_x.in b/utils/extended_trans/700_FRr_x.in
new file mode 100644
index 0000000..03bfc14
--- /dev/null
+++ b/utils/extended_trans/700_FRr_x.in
@@ -0,0 +1,2 @@
1rotation FR
2x
diff --git a/utils/extended_trans/700_FRr_x.out b/utils/extended_trans/700_FRr_x.out
new file mode 100644
index 0000000..4749dd6
--- /dev/null
+++ b/utils/extended_trans/700_FRr_x.out
@@ -0,0 +1 @@
ABCDEFGH=ABCDEFGHIJKL=B
diff --git a/utils/extended_trans/701_BDm_z3.in b/utils/extended_trans/701_BDm_z3.in
new file mode 100644
index 0000000..2a89815
--- /dev/null
+++ b/utils/extended_trans/701_BDm_z3.in
@@ -0,0 +1,2 @@
1mirrored BD
2z3
diff --git a/utils/extended_trans/701_BDm_z3.out b/utils/extended_trans/701_BDm_z3.out
new file mode 100644
index 0000000..3a5afc2
--- /dev/null
+++ b/utils/extended_trans/701_BDm_z3.out
@@ -0,0 +1 @@
ABCDEFGH=ABCDEFGHIJKL=D
diff --git a/utils/extended_trans/README b/utils/extended_trans/README
new file mode 100644
index 0000000..79af390
--- /dev/null
+++ b/utils/extended_trans/README
@@ -0,0 +1,3 @@
1This folder contains test files for 062_transform_move.
2They are not currently used.
3They have not been tested, so they may be wrong.

Generated with cgit - Back to sebastiano.tronto.net