commit 80ec600701aae54350679bbf5e0ce874c915506e parent f2dd7feb819fe4a8a4181dd1d04488e31f4b63a1 Author: Sebastiano Tronto <sebastiano@tronto.net> Date: Sun, 29 Oct 2023 10:29:27 +0100 AVX2 compiles, fails all tests; + some renaming Diffstat:
399 files changed, 141 insertions(+), 113 deletions(-)
diff --git a/README.md b/README.md @@ -11,11 +11,16 @@ $ make test ## TODO: +### Tests + +* inverse_move +* inverse_trans + ### AVX2 -* static `solvedcube` and co don't work, turn into functions? +* fix base get_ and set_ macros (constant arguments?) * implement missing stuff (moves, transform) -* optimize things that use _base functions +* optimize things that use get_ and set_ ### More features diff --git a/benchmark/bench.c b/benchmark/bench.c @@ -53,7 +53,7 @@ setup_cubes(void) move_t m; for (i = 0; i < GEN_CUBES; i++) { - gen_cubes[i] = solvedcube; + gen_cubes[i] = solvedcube(); for (j = 0; j < 30; j++) { m = (move_t)rand() % 18; gen_cubes[i] = move(gen_cubes[i], m); @@ -68,7 +68,7 @@ run_moves(void) cube_t c; char str[1000]; - c = solvedcube; + c = solvedcube(); for (i = 0; i < MOVES; i++) c = move(c, gen_moves[i % GEN_MOVES]); @@ -85,7 +85,7 @@ run_trans(void) cube_t c; char str[1000]; - c = solvedcube; + c = solvedcube(); for (i = 0; i < TRANS; i++) c = transform(c, gen_trans[i % GEN_TRANS]); @@ -102,7 +102,7 @@ run_comp(void) cube_t c; char str[1000]; - c = solvedcube; + c = solvedcube(); for (i = 0; i < COMP; i++) c = compose(c, gen_cubes[i % GEN_CUBES]); diff --git a/src/_base_arr.c b/src/_base_arr.c @@ -1,30 +0,0 @@ -cube_t solvedcube = { - .c = {0, 1, 2, 3, 4, 5, 6, 7}, - .e = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11} -}; -static cube_t errorcube = { .e = {0}, .c = {0} }; -static cube_t zerocube = { .e = {0}, .c = {0} }; - -static uint8_t -get_edge(cube_t c, uint8_t i) -{ - return c.e[i]; -} - -static uint8_t -get_corner(cube_t c, uint8_t i) -{ - return c.c[i]; -} - -static void -set_edge(cube_t *c, uint8_t i, uint8_t p) -{ - c->e[i] = p; -} - -static void -set_corner(cube_t *c, uint8_t i, uint8_t p) -{ - c->c[i] = p; -} diff --git a/src/_base_avx2.c b/src/_base_avx2.c @@ -1,28 +0,0 @@ -#define solvedcube _mm256_set_epi8( \ - 0, 0, 0, 0, 0, 0, 0, 0, 7, 6, 5, 4, 3, 2, 1, 0, /* Corners */ \ - 0, 0, 0, 0, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 /* Edges */ \ -) -#define errorcube _mm256_setzero_si256() -#define zerocube _mm256_setzero_si256() - -static uint8_t -get_edge(cube_t c, uint8_t i) -{ - return 0; -} - -static uint8_t -get_corner(cube_t c, uint8_t i) -{ - return 0; -} - -static void -set_edge(cube_t *c, uint8_t i, uint8_t p) -{ -} - -static void -set_corner(cube_t *c, uint8_t i, uint8_t p) -{ -} diff --git a/src/_constants.c b/src/_constants.c @@ -32,7 +32,7 @@ #define _eflip 0x10U #define _error 0xFFU -move_t inverse_move[] = { +static move_t inverse_move_arr[] = { [U] = U3, [U2] = U2, [U3] = U, @@ -53,7 +53,7 @@ move_t inverse_move[] = { [B3] = B, }; -trans_t inverse_trans[] = { +static trans_t inverse_trans_arr[] = { [UFr] = UFr, [ULr] = URr, [UBr] = UBr, diff --git a/src/_move_logic_avx2.c b/src/_move_logic_avx2.c @@ -1,3 +1,6 @@ -static cube_t move_cube[18]; /* TODO */ - +/* TODO: +static cube_t move_cube[18]; return compose(move_cube[m], c); +*/ + +goto move_error; diff --git a/src/cube.c b/src/cube.c @@ -14,10 +14,38 @@ #include "_constants.c" +cube_arr_t solvedcube_arr = { + .c = {0, 1, 2, 3, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0}, + .e = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 0, 0, 0} +}; +cube_arr_t zerocube_arr = { .e = {0}, .c = {0} }; + #ifdef CUBE_AVX2 -#include "_base_avx2.c" + +#define setsolved(cube) cube = _mm256_loadu_si256((__m256i_u *)&solvedcube_arr) +#define setzero(cube) cube = _mm256_setzero_si256() +#define _c _mm256_set_epi64x(0, 0, 0, 0xFF) +#define _e _mm256_set_epi64x(0, 0xFF, 0, 0) +/* TODO: in the next 4 macros, all 0 should be i, but must be constant! */ +#define get_edge(cube, i) _mm256_extract_epi8(cube, 0+16) +#define get_corner(cube, i) _mm256_extract_epi8(cube, 0) +#define set_edge(cube, i, p) _mm256_or_si256( \ + _mm256_andnot_si256(cube, _mm256_slli_si256(_e, 0)), \ + _mm256_and_si256(_mm256_set1_epi8(p), _mm256_slli_si256(_e, 0))) +#define set_corner(cube, i, p) _mm256_or_si256( \ + _mm256_andnot_si256(cube, _mm256_slli_si256(_c, 0)), \ + _mm256_and_si256(_mm256_set1_epi8(p), _mm256_slli_si256(_c, 0))) + #else -#include "_base_arr.c" + +#define setsolved(cube) cube = solvedcube_arr +#define setzero(cube) cube = zerocube_arr +#define _c _mm256_set_epi64x(0, 0, 0, 0xFF) +#define get_edge(cube, i) (cube).e[(i)] +#define get_corner(cube, i) (cube).c[(i)] +#define set_edge(cube, i, p) (cube).e[(i)] = (p) +#define set_corner(cube, i, p) (cube).c[(i)] = (p) + #endif static bool isconsistent(cube_t); @@ -34,6 +62,22 @@ static int writepiece_SRC(uint8_t, char *); static void writecube_SRC(cube_t, char *); static int permsign(uint8_t *, int); +cube_t +solvedcube(void) +{ + cube_t solved; + setsolved(solved); + return solved; +} + +cube_t +zerocube(void) +{ + cube_t solved; + setzero(solved); + return solved; +} + static uint8_t readco(char *str) { @@ -100,30 +144,34 @@ readcube_H48(char *buf) { int i; uint8_t piece, orient; - cube_t ret = zerocube; - char *b = buf; + cube_t ret, err; + char *b; + + setzero(ret); + setzero(err); + b = buf; for (i = 0; i < 12; i++) { while (*b == ' ' || *b == '\t' || *b == '\n') b++; if ((piece = readep(b)) == _error) - return errorcube; + return err; b += 2; if ((orient = readeo(b)) == _error) - return errorcube; + return err; b++; - set_edge(&ret, i, piece | orient); + set_edge(ret, i, piece | orient); } for (i = 0; i < 8; i++) { while (*b == ' ' || *b == '\t' || *b == '\n') b++; if ((piece = readcp(b)) == _error) - return errorcube; + return err; b += 3; if ((orient = readco(b)) == _error) - return errorcube; + return err; b++; - set_corner(&ret, i, piece | orient); + set_corner(ret, i, piece | orient); } return ret; @@ -142,7 +190,7 @@ readcube(format_t format, char *buf) #ifdef DEBUG fprintf(stderr, "Cannot read cube in the given format\n"); #endif - ret = errorcube; + setzero(ret); } #ifdef DEBUG @@ -373,6 +421,18 @@ writetrans(trans_t t, char *buf) buf[11] = '\0'; } +move_t +inverse_move(move_t m) +{ + return inverse_move_arr[m]; +} + +trans_t +inverse_trans(trans_t t) +{ + return inverse_trans_arr[t]; +} + static int permsign(uint8_t *a, int n) { @@ -532,18 +592,24 @@ equal(cube_t cube1, cube_t cube2) bool issolved(cube_t cube) { - return equal(cube, solvedcube); + cube_t solved; + setsolved(solved); + return equal(cube, solved); } bool iserror(cube_t cube) { - return equal(cube, errorcube); + cube_t err; + setzero(err); + return equal(cube, err); } cube_t move(cube_t c, move_t m) { + cube_t err; + #ifdef DEBUG if (!isconsistent(c)) { fprintf(stderr, "move error, inconsistent cube\n"); @@ -558,7 +624,8 @@ move(cube_t c, move_t m) #endif move_error: - return errorcube; + setzero(err); + return err; } cube_t @@ -566,25 +633,27 @@ inverse(cube_t c) { /* TODO: optimize for avx2 */ uint8_t i, piece, orien; - cube_t ret = zerocube; + cube_t ret; + + setzero(ret); #ifdef DEBUG if (!isconsistent(c)) { fprintf(stderr, "inverse error, inconsistent cube\n"); - return errorcube; + return ret; } #endif for (i = 0; i < 12; i++) { piece = get_edge(c, i); orien = piece & _eobit; - set_edge(&ret, piece & _pbits, i | orien); + set_edge(ret, piece & _pbits, i | orien); } for (i = 0; i < 8; i++) { piece = get_corner(c, i); orien = ((piece << 1) | (piece >> 1)) & _cobits2; - set_corner(&ret, piece & _pbits, i | orien); + set_corner(ret, piece & _pbits, i | orien); } return ret; @@ -595,12 +664,14 @@ compose(cube_t c1, cube_t c2) { /* TODO: optimize for avx2 */ uint8_t i, piece1, piece2, p, orien, aux, auy; - cube_t ret = zerocube; + cube_t ret; + + setzero(ret); #ifdef DEBUG if (!isconsistent(c1) || !isconsistent(c2)) { fprintf(stderr, "compose error, inconsistent cube\n"); - return errorcube; + return ret; } #endif @@ -609,7 +680,7 @@ compose(cube_t c1, cube_t c2) p = piece2 & _pbits; piece1 = get_edge(c1, p); orien = (piece2 ^ piece1) & _eobit; - set_edge(&ret, i, (piece1 & _pbits) | orien); + set_edge(ret, i, (piece1 & _pbits) | orien); } for (i = 0; i < 8; i++) { @@ -619,7 +690,7 @@ compose(cube_t c1, cube_t c2) aux = (piece2 & _cobits) + (piece1 & _cobits); auy = (aux + _ctwist_cw) >> 2U; orien = (aux + auy) & _cobits2; - set_corner(&ret, i, (piece1 & _pbits) | orien); + set_corner(ret, i, (piece1 & _pbits) | orien); } return ret; @@ -637,7 +708,7 @@ flipallcorners(cube_t c) for (i = 0; i < 8; i++) { piece = get_corner(c, i); orien = ((piece << 1) | (piece >> 1)) & _cobits2; - set_corner(&ret, i, (piece & _pbits) | orien); + set_corner(ret, i, (piece & _pbits) | orien); } return ret; @@ -646,16 +717,17 @@ flipallcorners(cube_t c) cube_t transform(cube_t c, trans_t t) { - cube_t ret; + cube_t ret, solved; #ifdef DEBUG + setzero(ret); if (!isconsistent(c)) { fprintf(stderr, "transform error, inconsistent cube\n"); - return errorcube; + return ret; } if (t >= 48) { fprintf(stderr, "transform error, unknown transformation\n"); - return errorcube; + return ret; } #endif @@ -665,7 +737,9 @@ transform(cube_t c, trans_t t) #include "_trans_move_arr.c" #endif - ret = compose(solvedcube, trans_move_cube[t]); + setsolved(solved); + + ret = compose(solved, trans_move_cube[t]); ret = compose(ret, c); ret = compose(ret, trans_move_cube_inverse[t]); diff --git a/src/cube.h b/src/cube.h @@ -1,43 +1,45 @@ /* Types *********************************************************************/ /* See doc/CUBE_INTERNAL.md for a description of the cube format */ +typedef struct { + uint8_t c[16]; + uint8_t e[16]; +} cube_arr_t; #ifdef CUBE_AVX2 typedef __m256i cube_t; #else -typedef struct { uint8_t c[8]; uint8_t e[12]; } cube_t; +typedef cube_arr_t cube_t; #endif typedef uint8_t move_t; typedef uint8_t trans_t; -extern move_t inverse_move[]; -extern trans_t inverse_trans[]; -extern cube_t solvedcube; - /* Functions *****************************************************************/ +int readmoves(char *, move_t *); +void writemoves(move_t *, int, char *); +trans_t readtrans(char *); +void writetrans(trans_t, char *); + +move_t inverse_move(move_t); +trans_t inverse_trans(trans_t); + /* Not all formats are supported for both read and write. */ /* See doc/CUBE_TEXT.md for details. */ typedef enum {H48, SRC} format_t; cube_t readcube(format_t, char *); void writecube(format_t, cube_t, char *); +cube_t solvedcube(void); +cube_t zerocube(void); bool issolvable(cube_t); bool equal(cube_t, cube_t); bool issolved(cube_t); bool iserror(cube_t); -int readmoves(char *, move_t *); -void writemoves(move_t *, int, char *); - -trans_t readtrans(char *); -void writetrans(trans_t, char *); - cube_t move(cube_t, move_t); cube_t inverse(cube_t); cube_t compose(cube_t, cube_t); - -/* See doc/TRANSFORMATIONS.md for how transformations are applied */ cube_t transform(cube_t, trans_t); /* Constants for moves and transformations ***********************************/ diff --git a/test/00_basic/basic_tests.c b/test/00_basic/basic_tests.c @@ -19,14 +19,16 @@ check2(cube_t cube1, char *name1, cube_t cube2, char *name2) } int main() { - cube_t zero = (cube_t){0}; + cube_t zero, solved; - check(solvedcube, "Solved"); + zero = zerocube(); + solved = solvedcube(); + check(solved, "Solved"); check(zero, "Zero"); - check2(solvedcube, "Solved", solvedcube, "Solved"); - check2(solvedcube, "Solved", zero, "Zero"); - check2(zero, "Zero", solvedcube, "Solved"); + check2(solved, "Solved", solved, "Solved"); + check2(solved, "Solved", zero, "Zero"); + check2(zero, "Zero", solved, "Solved"); return 0; } diff --git a/test/02_move/000_nomove_solved.in b/test/020_move/000_nomove_solved.in diff --git a/test/02_move/000_nomove_solved.out b/test/020_move/000_nomove_solved.out diff --git a/test/02_move/001_nomove_scrambled.in b/test/020_move/001_nomove_scrambled.in diff --git a/test/02_move/001_nomove_scrambled.out b/test/020_move/001_nomove_scrambled.out diff --git a/test/02_move/010_U_solved.in b/test/020_move/010_U_solved.in diff --git a/test/02_move/010_U_solved.out b/test/020_move/010_U_solved.out diff --git a/test/02_move/011_U_scrambled.in b/test/020_move/011_U_scrambled.in diff --git a/test/02_move/011_U_scrambled.out b/test/020_move/011_U_scrambled.out diff --git a/test/02_move/012_U_inverse.in b/test/020_move/012_U_inverse.in diff --git a/test/02_move/012_U_inverse.out b/test/020_move/012_U_inverse.out diff --git a/test/02_move/020_U2_solved.in b/test/020_move/020_U2_solved.in diff --git a/test/02_move/020_U2_solved.out b/test/020_move/020_U2_solved.out diff --git a/test/02_move/021_U2_scrambled.in b/test/020_move/021_U2_scrambled.in diff --git a/test/02_move/021_U2_scrambled.out b/test/020_move/021_U2_scrambled.out diff --git a/test/02_move/022_U2_inverse.in b/test/020_move/022_U2_inverse.in diff --git a/test/02_move/022_U2_inverse.out b/test/020_move/022_U2_inverse.out diff --git a/test/02_move/030_U3_solved.in b/test/020_move/030_U3_solved.in diff --git a/test/02_move/030_U3_solved.out b/test/020_move/030_U3_solved.out diff --git a/test/02_move/031_U3_inverse.in b/test/020_move/031_U3_inverse.in diff --git a/test/02_move/031_U3_inverse.out b/test/020_move/031_U3_inverse.out diff --git a/test/02_move/032_U3_scrambled.in b/test/020_move/032_U3_scrambled.in diff --git a/test/02_move/032_U3_scrambled.out b/test/020_move/032_U3_scrambled.out diff --git a/test/02_move/033_U3_with_prime.in b/test/020_move/033_U3_with_prime.in diff --git a/test/02_move/033_U3_with_prime.out b/test/020_move/033_U3_with_prime.out diff --git a/test/02_move/040_D_solved.in b/test/020_move/040_D_solved.in diff --git a/test/02_move/040_D_solved.out b/test/020_move/040_D_solved.out diff --git a/test/02_move/050_D2_solved.in b/test/020_move/050_D2_solved.in diff --git a/test/02_move/050_D2_solved.out b/test/020_move/050_D2_solved.out diff --git a/test/02_move/060_D3_solved.in b/test/020_move/060_D3_solved.in diff --git a/test/02_move/060_D3_solved.out b/test/020_move/060_D3_solved.out diff --git a/test/02_move/070_R_solved.in b/test/020_move/070_R_solved.in diff --git a/test/02_move/070_R_solved.out b/test/020_move/070_R_solved.out diff --git a/test/02_move/071_R_scrambled.in b/test/020_move/071_R_scrambled.in diff --git a/test/02_move/071_R_scrambled.out b/test/020_move/071_R_scrambled.out diff --git a/test/02_move/080_R2_solved.in b/test/020_move/080_R2_solved.in diff --git a/test/02_move/080_R2_solved.out b/test/020_move/080_R2_solved.out diff --git a/test/02_move/090_R3_solved.in b/test/020_move/090_R3_solved.in diff --git a/test/02_move/090_R3_solved.out b/test/020_move/090_R3_solved.out diff --git a/test/02_move/100_L_solved.in b/test/020_move/100_L_solved.in diff --git a/test/02_move/100_L_solved.out b/test/020_move/100_L_solved.out diff --git a/test/02_move/110_L2_solved.in b/test/020_move/110_L2_solved.in diff --git a/test/02_move/110_L2_solved.out b/test/020_move/110_L2_solved.out diff --git a/test/02_move/120_L3_solved.in b/test/020_move/120_L3_solved.in diff --git a/test/02_move/120_L3_solved.out b/test/020_move/120_L3_solved.out diff --git a/test/02_move/130_F_solved.in b/test/020_move/130_F_solved.in diff --git a/test/02_move/130_F_solved.out b/test/020_move/130_F_solved.out diff --git a/test/02_move/132_F_scrambled.in b/test/020_move/132_F_scrambled.in diff --git a/test/02_move/132_F_scrambled.out b/test/020_move/132_F_scrambled.out diff --git a/test/02_move/133_F_scrambled_2.in b/test/020_move/133_F_scrambled_2.in diff --git a/test/02_move/133_F_scrambled_2.out b/test/020_move/133_F_scrambled_2.out diff --git a/test/02_move/140_F2_solved.in b/test/020_move/140_F2_solved.in diff --git a/test/02_move/140_F2_solved.out b/test/020_move/140_F2_solved.out diff --git a/test/02_move/150_F3_solved.in b/test/020_move/150_F3_solved.in diff --git a/test/02_move/150_F3_solved.out b/test/020_move/150_F3_solved.out diff --git a/test/02_move/160_B_solved.in b/test/020_move/160_B_solved.in diff --git a/test/02_move/160_B_solved.out b/test/020_move/160_B_solved.out diff --git a/test/02_move/170_B2_solved.in b/test/020_move/170_B2_solved.in diff --git a/test/02_move/170_B2_solved.out b/test/020_move/170_B2_solved.out diff --git a/test/02_move/180_B3_solved.in b/test/020_move/180_B3_solved.in diff --git a/test/02_move/180_B3_solved.out b/test/020_move/180_B3_solved.out diff --git a/test/02_move/200_scramble_solved.in b/test/020_move/200_scramble_solved.in diff --git a/test/02_move/200_scramble_solved.out b/test/020_move/200_scramble_solved.out diff --git a/test/02_move/201_solution_scrambled.in b/test/020_move/201_solution_scrambled.in diff --git a/test/02_move/201_solution_scrambled.out b/test/020_move/201_solution_scrambled.out diff --git a/test/02_move/move_tests.c b/test/020_move/move_tests.c diff --git a/test/03_inverse/00_solved.in b/test/030_inverse_cube/00_solved.in diff --git a/test/03_inverse/00_solved.out b/test/030_inverse_cube/00_solved.out diff --git a/test/03_inverse/01_scrambled.in b/test/030_inverse_cube/01_scrambled.in diff --git a/test/03_inverse/01_scrambled.out b/test/030_inverse_cube/01_scrambled.out diff --git a/test/03_inverse/inverse_tests.c b/test/030_inverse_cube/inverse_tests.c diff --git a/test/04_compose/00_solved_solved.in b/test/040_compose/00_solved_solved.in diff --git a/test/04_compose/00_solved_solved.out b/test/040_compose/00_solved_solved.out diff --git a/test/04_compose/01_solved_U.in b/test/040_compose/01_solved_U.in diff --git a/test/04_compose/01_solved_U.out b/test/040_compose/01_solved_U.out diff --git a/test/04_compose/02_solved_scrambled.in b/test/040_compose/02_solved_scrambled.in diff --git a/test/04_compose/02_solved_scrambled.out b/test/040_compose/02_solved_scrambled.out diff --git a/test/04_compose/11_U_solved.in b/test/040_compose/11_U_solved.in diff --git a/test/04_compose/11_U_solved.out b/test/040_compose/11_U_solved.out diff --git a/test/04_compose/12_scrambled_solved.in b/test/040_compose/12_scrambled_solved.in diff --git a/test/04_compose/12_scrambled_solved.out b/test/040_compose/12_scrambled_solved.out diff --git a/test/04_compose/20_U_U.in b/test/040_compose/20_U_U.in diff --git a/test/04_compose/20_U_U.out b/test/040_compose/20_U_U.out diff --git a/test/04_compose/21_U_Uinverse.in b/test/040_compose/21_U_Uinverse.in diff --git a/test/04_compose/21_U_Uinverse.out b/test/040_compose/21_U_Uinverse.out diff --git a/test/04_compose/22_F_Finverse.in b/test/040_compose/22_F_Finverse.in diff --git a/test/04_compose/22_F_Finverse.out b/test/040_compose/22_F_Finverse.out diff --git a/test/04_compose/23_F2_F2.in b/test/040_compose/23_F2_F2.in diff --git a/test/04_compose/23_F2_F2.out b/test/040_compose/23_F2_F2.out diff --git a/test/04_compose/24_U_F.in b/test/040_compose/24_U_F.in diff --git a/test/04_compose/24_U_F.out b/test/040_compose/24_U_F.out diff --git a/test/04_compose/25_F_R.in b/test/040_compose/25_F_R.in diff --git a/test/04_compose/25_F_R.out b/test/040_compose/25_F_R.out diff --git a/test/04_compose/30_scrambled_inverse.in b/test/040_compose/30_scrambled_inverse.in diff --git a/test/04_compose/30_scrambled_inverse.out b/test/040_compose/30_scrambled_inverse.out diff --git a/test/04_compose/31_scrambled_scrambled.in b/test/040_compose/31_scrambled_scrambled.in diff --git a/test/04_compose/31_scrambled_scrambled.out b/test/040_compose/31_scrambled_scrambled.out diff --git a/test/04_compose/compose_tests.c b/test/040_compose/compose_tests.c diff --git a/test/05_transform/000_solved_UFr.in b/test/050_transform/000_solved_UFr.in diff --git a/test/05_transform/000_solved_UFr.out b/test/050_transform/000_solved_UFr.out diff --git a/test/05_transform/001_solved_BLm.in b/test/050_transform/001_solved_BLm.in diff --git a/test/05_transform/001_solved_BLm.out b/test/050_transform/001_solved_BLm.out diff --git a/test/05_transform/100_UFr_U.in b/test/050_transform/100_UFr_U.in diff --git a/test/05_transform/100_UFr_U.out b/test/050_transform/100_UFr_U.out diff --git a/test/05_transform/101_UFm_U.in b/test/050_transform/101_UFm_U.in diff --git a/test/05_transform/101_UFm_U.out b/test/050_transform/101_UFm_U.out diff --git a/test/05_transform/102_UFr_R.in b/test/050_transform/102_UFr_R.in diff --git a/test/05_transform/102_UFr_R.out b/test/050_transform/102_UFr_R.out diff --git a/test/05_transform/103_UFm_R.in b/test/050_transform/103_UFm_R.in diff --git a/test/05_transform/103_UFm_R.out b/test/050_transform/103_UFm_R.out diff --git a/test/05_transform/104_UFr_F.in b/test/050_transform/104_UFr_F.in diff --git a/test/05_transform/104_UFr_F.out b/test/050_transform/104_UFr_F.out diff --git a/test/05_transform/105_UFm_F.in b/test/050_transform/105_UFm_F.in diff --git a/test/05_transform/105_UFm_F.out b/test/050_transform/105_UFm_F.out diff --git a/test/05_transform/106_ULr_U.in b/test/050_transform/106_ULr_U.in diff --git a/test/05_transform/106_ULr_U.out b/test/050_transform/106_ULr_U.out diff --git a/test/05_transform/107_ULm_U.in b/test/050_transform/107_ULm_U.in diff --git a/test/05_transform/107_ULm_U.out b/test/050_transform/107_ULm_U.out diff --git a/test/05_transform/108_ULr_R.in b/test/050_transform/108_ULr_R.in diff --git a/test/05_transform/108_ULr_R.out b/test/050_transform/108_ULr_R.out diff --git a/test/05_transform/109_ULm_R.in b/test/050_transform/109_ULm_R.in diff --git a/test/05_transform/109_ULm_R.out b/test/050_transform/109_ULm_R.out diff --git a/test/05_transform/110_ULr_F.in b/test/050_transform/110_ULr_F.in diff --git a/test/05_transform/110_ULr_F.out b/test/050_transform/110_ULr_F.out diff --git a/test/05_transform/111_ULm_F.in b/test/050_transform/111_ULm_F.in diff --git a/test/05_transform/111_ULm_F.out b/test/050_transform/111_ULm_F.out diff --git a/test/05_transform/112_UBr_U.in b/test/050_transform/112_UBr_U.in diff --git a/test/05_transform/112_UBr_U.out b/test/050_transform/112_UBr_U.out diff --git a/test/05_transform/113_UBm_U.in b/test/050_transform/113_UBm_U.in diff --git a/test/05_transform/113_UBm_U.out b/test/050_transform/113_UBm_U.out diff --git a/test/05_transform/114_UBr_R.in b/test/050_transform/114_UBr_R.in diff --git a/test/05_transform/114_UBr_R.out b/test/050_transform/114_UBr_R.out diff --git a/test/05_transform/115_UBm_R.in b/test/050_transform/115_UBm_R.in diff --git a/test/05_transform/115_UBm_R.out b/test/050_transform/115_UBm_R.out diff --git a/test/05_transform/116_UBr_F.in b/test/050_transform/116_UBr_F.in diff --git a/test/05_transform/116_UBr_F.out b/test/050_transform/116_UBr_F.out diff --git a/test/05_transform/117_UBm_F.in b/test/050_transform/117_UBm_F.in diff --git a/test/05_transform/117_UBm_F.out b/test/050_transform/117_UBm_F.out diff --git a/test/05_transform/118_URr_U.in b/test/050_transform/118_URr_U.in diff --git a/test/05_transform/118_URr_U.out b/test/050_transform/118_URr_U.out diff --git a/test/05_transform/119_URm_U.in b/test/050_transform/119_URm_U.in diff --git a/test/05_transform/119_URm_U.out b/test/050_transform/119_URm_U.out diff --git a/test/05_transform/120_URr_R.in b/test/050_transform/120_URr_R.in diff --git a/test/05_transform/120_URr_R.out b/test/050_transform/120_URr_R.out diff --git a/test/05_transform/121_URm_R.in b/test/050_transform/121_URm_R.in diff --git a/test/05_transform/121_URm_R.out b/test/050_transform/121_URm_R.out diff --git a/test/05_transform/122_URr_F.in b/test/050_transform/122_URr_F.in diff --git a/test/05_transform/122_URr_F.out b/test/050_transform/122_URr_F.out diff --git a/test/05_transform/123_URm_F.in b/test/050_transform/123_URm_F.in diff --git a/test/05_transform/123_URm_F.out b/test/050_transform/123_URm_F.out diff --git a/test/05_transform/124_DFr_U.in b/test/050_transform/124_DFr_U.in diff --git a/test/05_transform/124_DFr_U.out b/test/050_transform/124_DFr_U.out diff --git a/test/05_transform/125_DFm_U.in b/test/050_transform/125_DFm_U.in diff --git a/test/05_transform/125_DFm_U.out b/test/050_transform/125_DFm_U.out diff --git a/test/05_transform/126_DFr_R.in b/test/050_transform/126_DFr_R.in diff --git a/test/05_transform/126_DFr_R.out b/test/050_transform/126_DFr_R.out diff --git a/test/05_transform/127_DFm_R.in b/test/050_transform/127_DFm_R.in diff --git a/test/05_transform/127_DFm_R.out b/test/050_transform/127_DFm_R.out diff --git a/test/05_transform/128_DFr_F.in b/test/050_transform/128_DFr_F.in diff --git a/test/05_transform/128_DFr_F.out b/test/050_transform/128_DFr_F.out diff --git a/test/05_transform/129_DFm_F.in b/test/050_transform/129_DFm_F.in diff --git a/test/05_transform/129_DFm_F.out b/test/050_transform/129_DFm_F.out diff --git a/test/05_transform/130_DLr_U.in b/test/050_transform/130_DLr_U.in diff --git a/test/05_transform/130_DLr_U.out b/test/050_transform/130_DLr_U.out diff --git a/test/05_transform/131_DLm_U.in b/test/050_transform/131_DLm_U.in diff --git a/test/05_transform/131_DLm_U.out b/test/050_transform/131_DLm_U.out diff --git a/test/05_transform/132_DLr_R.in b/test/050_transform/132_DLr_R.in diff --git a/test/05_transform/132_DLr_R.out b/test/050_transform/132_DLr_R.out diff --git a/test/05_transform/133_DLm_R.in b/test/050_transform/133_DLm_R.in diff --git a/test/05_transform/133_DLm_R.out b/test/050_transform/133_DLm_R.out diff --git a/test/05_transform/134_DLr_F.in b/test/050_transform/134_DLr_F.in diff --git a/test/05_transform/134_DLr_F.out b/test/050_transform/134_DLr_F.out diff --git a/test/05_transform/135_DLm_F.in b/test/050_transform/135_DLm_F.in diff --git a/test/05_transform/135_DLm_F.out b/test/050_transform/135_DLm_F.out diff --git a/test/05_transform/136_DBr_U.in b/test/050_transform/136_DBr_U.in diff --git a/test/05_transform/136_DBr_U.out b/test/050_transform/136_DBr_U.out diff --git a/test/05_transform/137_DBm_U.in b/test/050_transform/137_DBm_U.in diff --git a/test/05_transform/137_DBm_U.out b/test/050_transform/137_DBm_U.out diff --git a/test/05_transform/138_DBr_R.in b/test/050_transform/138_DBr_R.in diff --git a/test/05_transform/138_DBr_R.out b/test/050_transform/138_DBr_R.out diff --git a/test/05_transform/139_DBm_R.in b/test/050_transform/139_DBm_R.in diff --git a/test/05_transform/139_DBm_R.out b/test/050_transform/139_DBm_R.out diff --git a/test/05_transform/140_DBr_F.in b/test/050_transform/140_DBr_F.in diff --git a/test/05_transform/140_DBr_F.out b/test/050_transform/140_DBr_F.out diff --git a/test/05_transform/141_DBm_F.in b/test/050_transform/141_DBm_F.in diff --git a/test/05_transform/141_DBm_F.out b/test/050_transform/141_DBm_F.out diff --git a/test/05_transform/142_DRr_U.in b/test/050_transform/142_DRr_U.in diff --git a/test/05_transform/142_DRr_U.out b/test/050_transform/142_DRr_U.out diff --git a/test/05_transform/143_DRm_U.in b/test/050_transform/143_DRm_U.in diff --git a/test/05_transform/143_DRm_U.out b/test/050_transform/143_DRm_U.out diff --git a/test/05_transform/144_DRr_R.in b/test/050_transform/144_DRr_R.in diff --git a/test/05_transform/144_DRr_R.out b/test/050_transform/144_DRr_R.out diff --git a/test/05_transform/145_DRm_R.in b/test/050_transform/145_DRm_R.in diff --git a/test/05_transform/145_DRm_R.out b/test/050_transform/145_DRm_R.out diff --git a/test/05_transform/146_DRr_F.in b/test/050_transform/146_DRr_F.in diff --git a/test/05_transform/146_DRr_F.out b/test/050_transform/146_DRr_F.out diff --git a/test/05_transform/147_DRm_F.in b/test/050_transform/147_DRm_F.in diff --git a/test/05_transform/147_DRm_F.out b/test/050_transform/147_DRm_F.out diff --git a/test/05_transform/148_RUr_U.in b/test/050_transform/148_RUr_U.in diff --git a/test/05_transform/148_RUr_U.out b/test/050_transform/148_RUr_U.out diff --git a/test/05_transform/149_RUm_U.in b/test/050_transform/149_RUm_U.in diff --git a/test/05_transform/149_RUm_U.out b/test/050_transform/149_RUm_U.out diff --git a/test/05_transform/150_RUr_R.in b/test/050_transform/150_RUr_R.in diff --git a/test/05_transform/150_RUr_R.out b/test/050_transform/150_RUr_R.out diff --git a/test/05_transform/151_RUm_R.in b/test/050_transform/151_RUm_R.in diff --git a/test/05_transform/151_RUm_R.out b/test/050_transform/151_RUm_R.out diff --git a/test/05_transform/152_RUr_F.in b/test/050_transform/152_RUr_F.in diff --git a/test/05_transform/152_RUr_F.out b/test/050_transform/152_RUr_F.out diff --git a/test/05_transform/153_RUm_F.in b/test/050_transform/153_RUm_F.in diff --git a/test/05_transform/153_RUm_F.out b/test/050_transform/153_RUm_F.out diff --git a/test/05_transform/154_RFr_U.in b/test/050_transform/154_RFr_U.in diff --git a/test/05_transform/154_RFr_U.out b/test/050_transform/154_RFr_U.out diff --git a/test/05_transform/155_RFm_U.in b/test/050_transform/155_RFm_U.in diff --git a/test/05_transform/155_RFm_U.out b/test/050_transform/155_RFm_U.out diff --git a/test/05_transform/156_RFr_R.in b/test/050_transform/156_RFr_R.in diff --git a/test/05_transform/156_RFr_R.out b/test/050_transform/156_RFr_R.out diff --git a/test/05_transform/157_RFm_R.in b/test/050_transform/157_RFm_R.in diff --git a/test/05_transform/157_RFm_R.out b/test/050_transform/157_RFm_R.out diff --git a/test/05_transform/158_RFr_F.in b/test/050_transform/158_RFr_F.in diff --git a/test/05_transform/158_RFr_F.out b/test/050_transform/158_RFr_F.out diff --git a/test/05_transform/159_RFm_F.in b/test/050_transform/159_RFm_F.in diff --git a/test/05_transform/159_RFm_F.out b/test/050_transform/159_RFm_F.out diff --git a/test/05_transform/160_RDr_U.in b/test/050_transform/160_RDr_U.in diff --git a/test/05_transform/160_RDr_U.out b/test/050_transform/160_RDr_U.out diff --git a/test/05_transform/161_RDm_U.in b/test/050_transform/161_RDm_U.in diff --git a/test/05_transform/161_RDm_U.out b/test/050_transform/161_RDm_U.out diff --git a/test/05_transform/162_RDr_R.in b/test/050_transform/162_RDr_R.in diff --git a/test/05_transform/162_RDr_R.out b/test/050_transform/162_RDr_R.out diff --git a/test/05_transform/163_RDm_R.in b/test/050_transform/163_RDm_R.in diff --git a/test/05_transform/163_RDm_R.out b/test/050_transform/163_RDm_R.out diff --git a/test/05_transform/164_RDr_F.in b/test/050_transform/164_RDr_F.in diff --git a/test/05_transform/164_RDr_F.out b/test/050_transform/164_RDr_F.out diff --git a/test/05_transform/165_RDm_F.in b/test/050_transform/165_RDm_F.in diff --git a/test/05_transform/165_RDm_F.out b/test/050_transform/165_RDm_F.out diff --git a/test/05_transform/166_RBr_U.in b/test/050_transform/166_RBr_U.in diff --git a/test/05_transform/166_RBr_U.out b/test/050_transform/166_RBr_U.out diff --git a/test/05_transform/167_RBm_U.in b/test/050_transform/167_RBm_U.in diff --git a/test/05_transform/167_RBm_U.out b/test/050_transform/167_RBm_U.out diff --git a/test/05_transform/168_RBr_R.in b/test/050_transform/168_RBr_R.in diff --git a/test/05_transform/168_RBr_R.out b/test/050_transform/168_RBr_R.out diff --git a/test/05_transform/169_RBm_R.in b/test/050_transform/169_RBm_R.in diff --git a/test/05_transform/169_RBm_R.out b/test/050_transform/169_RBm_R.out diff --git a/test/05_transform/170_RBr_F.in b/test/050_transform/170_RBr_F.in diff --git a/test/05_transform/170_RBr_F.out b/test/050_transform/170_RBr_F.out diff --git a/test/05_transform/171_RBm_F.in b/test/050_transform/171_RBm_F.in diff --git a/test/05_transform/171_RBm_F.out b/test/050_transform/171_RBm_F.out diff --git a/test/05_transform/172_LUr_U.in b/test/050_transform/172_LUr_U.in diff --git a/test/05_transform/172_LUr_U.out b/test/050_transform/172_LUr_U.out diff --git a/test/05_transform/173_LUm_U.in b/test/050_transform/173_LUm_U.in diff --git a/test/05_transform/173_LUm_U.out b/test/050_transform/173_LUm_U.out diff --git a/test/05_transform/174_LUr_R.in b/test/050_transform/174_LUr_R.in diff --git a/test/05_transform/174_LUr_R.out b/test/050_transform/174_LUr_R.out diff --git a/test/05_transform/175_LUm_R.in b/test/050_transform/175_LUm_R.in diff --git a/test/05_transform/175_LUm_R.out b/test/050_transform/175_LUm_R.out diff --git a/test/05_transform/176_LUr_F.in b/test/050_transform/176_LUr_F.in diff --git a/test/05_transform/176_LUr_F.out b/test/050_transform/176_LUr_F.out diff --git a/test/05_transform/177_LUm_F.in b/test/050_transform/177_LUm_F.in diff --git a/test/05_transform/177_LUm_F.out b/test/050_transform/177_LUm_F.out diff --git a/test/05_transform/178_LFr_U.in b/test/050_transform/178_LFr_U.in diff --git a/test/05_transform/178_LFr_U.out b/test/050_transform/178_LFr_U.out diff --git a/test/05_transform/179_LFm_U.in b/test/050_transform/179_LFm_U.in diff --git a/test/05_transform/179_LFm_U.out b/test/050_transform/179_LFm_U.out diff --git a/test/05_transform/180_LFr_R.in b/test/050_transform/180_LFr_R.in diff --git a/test/05_transform/180_LFr_R.out b/test/050_transform/180_LFr_R.out diff --git a/test/05_transform/181_LFm_R.in b/test/050_transform/181_LFm_R.in diff --git a/test/05_transform/181_LFm_R.out b/test/050_transform/181_LFm_R.out diff --git a/test/05_transform/182_LFr_F.in b/test/050_transform/182_LFr_F.in diff --git a/test/05_transform/182_LFr_F.out b/test/050_transform/182_LFr_F.out diff --git a/test/05_transform/183_LFm_F.in b/test/050_transform/183_LFm_F.in diff --git a/test/05_transform/183_LFm_F.out b/test/050_transform/183_LFm_F.out diff --git a/test/05_transform/184_LDr_U.in b/test/050_transform/184_LDr_U.in diff --git a/test/05_transform/184_LDr_U.out b/test/050_transform/184_LDr_U.out diff --git a/test/05_transform/185_LDm_U.in b/test/050_transform/185_LDm_U.in diff --git a/test/05_transform/185_LDm_U.out b/test/050_transform/185_LDm_U.out diff --git a/test/05_transform/186_LDr_R.in b/test/050_transform/186_LDr_R.in diff --git a/test/05_transform/186_LDr_R.out b/test/050_transform/186_LDr_R.out diff --git a/test/05_transform/187_LDm_R.in b/test/050_transform/187_LDm_R.in diff --git a/test/05_transform/187_LDm_R.out b/test/050_transform/187_LDm_R.out diff --git a/test/05_transform/188_LDr_F.in b/test/050_transform/188_LDr_F.in diff --git a/test/05_transform/188_LDr_F.out b/test/050_transform/188_LDr_F.out diff --git a/test/05_transform/189_LDm_F.in b/test/050_transform/189_LDm_F.in diff --git a/test/05_transform/189_LDm_F.out b/test/050_transform/189_LDm_F.out diff --git a/test/05_transform/190_LBr_U.in b/test/050_transform/190_LBr_U.in diff --git a/test/05_transform/190_LBr_U.out b/test/050_transform/190_LBr_U.out diff --git a/test/05_transform/191_LBm_U.in b/test/050_transform/191_LBm_U.in diff --git a/test/05_transform/191_LBm_U.out b/test/050_transform/191_LBm_U.out diff --git a/test/05_transform/192_LBr_R.in b/test/050_transform/192_LBr_R.in diff --git a/test/05_transform/192_LBr_R.out b/test/050_transform/192_LBr_R.out diff --git a/test/05_transform/193_LBm_R.in b/test/050_transform/193_LBm_R.in diff --git a/test/05_transform/193_LBm_R.out b/test/050_transform/193_LBm_R.out diff --git a/test/05_transform/194_LBr_F.in b/test/050_transform/194_LBr_F.in diff --git a/test/05_transform/194_LBr_F.out b/test/050_transform/194_LBr_F.out diff --git a/test/05_transform/195_LBm_F.in b/test/050_transform/195_LBm_F.in diff --git a/test/05_transform/195_LBm_F.out b/test/050_transform/195_LBm_F.out diff --git a/test/05_transform/196_FUr_U.in b/test/050_transform/196_FUr_U.in diff --git a/test/05_transform/196_FUr_U.out b/test/050_transform/196_FUr_U.out diff --git a/test/05_transform/197_FUm_U.in b/test/050_transform/197_FUm_U.in diff --git a/test/05_transform/197_FUm_U.out b/test/050_transform/197_FUm_U.out diff --git a/test/05_transform/198_FUr_R.in b/test/050_transform/198_FUr_R.in diff --git a/test/05_transform/198_FUr_R.out b/test/050_transform/198_FUr_R.out diff --git a/test/05_transform/199_FUm_R.in b/test/050_transform/199_FUm_R.in diff --git a/test/05_transform/199_FUm_R.out b/test/050_transform/199_FUm_R.out diff --git a/test/05_transform/200_FUr_F.in b/test/050_transform/200_FUr_F.in diff --git a/test/05_transform/200_FUr_F.out b/test/050_transform/200_FUr_F.out diff --git a/test/05_transform/201_FUm_F.in b/test/050_transform/201_FUm_F.in diff --git a/test/05_transform/201_FUm_F.out b/test/050_transform/201_FUm_F.out diff --git a/test/05_transform/202_FRr_U.in b/test/050_transform/202_FRr_U.in diff --git a/test/05_transform/202_FRr_U.out b/test/050_transform/202_FRr_U.out diff --git a/test/05_transform/203_FRm_U.in b/test/050_transform/203_FRm_U.in diff --git a/test/05_transform/203_FRm_U.out b/test/050_transform/203_FRm_U.out diff --git a/test/05_transform/204_FRr_R.in b/test/050_transform/204_FRr_R.in diff --git a/test/05_transform/204_FRr_R.out b/test/050_transform/204_FRr_R.out diff --git a/test/05_transform/205_FRm_R.in b/test/050_transform/205_FRm_R.in diff --git a/test/05_transform/205_FRm_R.out b/test/050_transform/205_FRm_R.out diff --git a/test/05_transform/206_FRr_F.in b/test/050_transform/206_FRr_F.in diff --git a/test/05_transform/206_FRr_F.out b/test/050_transform/206_FRr_F.out diff --git a/test/05_transform/207_FRm_F.in b/test/050_transform/207_FRm_F.in diff --git a/test/05_transform/207_FRm_F.out b/test/050_transform/207_FRm_F.out diff --git a/test/05_transform/208_FDr_U.in b/test/050_transform/208_FDr_U.in diff --git a/test/05_transform/208_FDr_U.out b/test/050_transform/208_FDr_U.out diff --git a/test/05_transform/209_FDm_U.in b/test/050_transform/209_FDm_U.in diff --git a/test/05_transform/209_FDm_U.out b/test/050_transform/209_FDm_U.out diff --git a/test/05_transform/210_FDr_R.in b/test/050_transform/210_FDr_R.in diff --git a/test/05_transform/210_FDr_R.out b/test/050_transform/210_FDr_R.out diff --git a/test/05_transform/211_FDm_R.in b/test/050_transform/211_FDm_R.in diff --git a/test/05_transform/211_FDm_R.out b/test/050_transform/211_FDm_R.out diff --git a/test/05_transform/212_FDr_F.in b/test/050_transform/212_FDr_F.in diff --git a/test/05_transform/212_FDr_F.out b/test/050_transform/212_FDr_F.out diff --git a/test/05_transform/213_FDm_F.in b/test/050_transform/213_FDm_F.in diff --git a/test/05_transform/213_FDm_F.out b/test/050_transform/213_FDm_F.out diff --git a/test/05_transform/214_FLr_U.in b/test/050_transform/214_FLr_U.in diff --git a/test/05_transform/214_FLr_U.out b/test/050_transform/214_FLr_U.out diff --git a/test/05_transform/215_FLm_U.in b/test/050_transform/215_FLm_U.in diff --git a/test/05_transform/215_FLm_U.out b/test/050_transform/215_FLm_U.out diff --git a/test/05_transform/216_FLr_R.in b/test/050_transform/216_FLr_R.in diff --git a/test/05_transform/216_FLr_R.out b/test/050_transform/216_FLr_R.out diff --git a/test/05_transform/217_FLm_R.in b/test/050_transform/217_FLm_R.in diff --git a/test/05_transform/217_FLm_R.out b/test/050_transform/217_FLm_R.out diff --git a/test/05_transform/218_FLr_F.in b/test/050_transform/218_FLr_F.in diff --git a/test/05_transform/218_FLr_F.out b/test/050_transform/218_FLr_F.out diff --git a/test/05_transform/219_FLm_F.in b/test/050_transform/219_FLm_F.in diff --git a/test/05_transform/219_FLm_F.out b/test/050_transform/219_FLm_F.out diff --git a/test/05_transform/220_BUr_U.in b/test/050_transform/220_BUr_U.in diff --git a/test/05_transform/220_BUr_U.out b/test/050_transform/220_BUr_U.out diff --git a/test/05_transform/221_BUm_U.in b/test/050_transform/221_BUm_U.in diff --git a/test/05_transform/221_BUm_U.out b/test/050_transform/221_BUm_U.out diff --git a/test/05_transform/222_BUr_R.in b/test/050_transform/222_BUr_R.in diff --git a/test/05_transform/222_BUr_R.out b/test/050_transform/222_BUr_R.out diff --git a/test/05_transform/223_BUm_R.in b/test/050_transform/223_BUm_R.in diff --git a/test/05_transform/223_BUm_R.out b/test/050_transform/223_BUm_R.out diff --git a/test/05_transform/224_BUr_F.in b/test/050_transform/224_BUr_F.in diff --git a/test/05_transform/224_BUr_F.out b/test/050_transform/224_BUr_F.out diff --git a/test/05_transform/225_BUm_F.in b/test/050_transform/225_BUm_F.in diff --git a/test/05_transform/225_BUm_F.out b/test/050_transform/225_BUm_F.out diff --git a/test/05_transform/226_BRr_U.in b/test/050_transform/226_BRr_U.in diff --git a/test/05_transform/226_BRr_U.out b/test/050_transform/226_BRr_U.out diff --git a/test/05_transform/227_BRm_U.in b/test/050_transform/227_BRm_U.in diff --git a/test/05_transform/227_BRm_U.out b/test/050_transform/227_BRm_U.out diff --git a/test/05_transform/228_BRr_R.in b/test/050_transform/228_BRr_R.in diff --git a/test/05_transform/228_BRr_R.out b/test/050_transform/228_BRr_R.out diff --git a/test/05_transform/229_BRm_R.in b/test/050_transform/229_BRm_R.in diff --git a/test/05_transform/229_BRm_R.out b/test/050_transform/229_BRm_R.out diff --git a/test/05_transform/230_BRr_F.in b/test/050_transform/230_BRr_F.in diff --git a/test/05_transform/230_BRr_F.out b/test/050_transform/230_BRr_F.out diff --git a/test/05_transform/231_BRm_F.in b/test/050_transform/231_BRm_F.in diff --git a/test/05_transform/231_BRm_F.out b/test/050_transform/231_BRm_F.out diff --git a/test/05_transform/232_BDr_U.in b/test/050_transform/232_BDr_U.in diff --git a/test/05_transform/232_BDr_U.out b/test/050_transform/232_BDr_U.out diff --git a/test/05_transform/233_BDm_U.in b/test/050_transform/233_BDm_U.in diff --git a/test/05_transform/233_BDm_U.out b/test/050_transform/233_BDm_U.out diff --git a/test/05_transform/234_BDr_R.in b/test/050_transform/234_BDr_R.in diff --git a/test/05_transform/234_BDr_R.out b/test/050_transform/234_BDr_R.out diff --git a/test/05_transform/235_BDm_R.in b/test/050_transform/235_BDm_R.in diff --git a/test/05_transform/235_BDm_R.out b/test/050_transform/235_BDm_R.out diff --git a/test/05_transform/236_BDr_F.in b/test/050_transform/236_BDr_F.in diff --git a/test/05_transform/236_BDr_F.out b/test/050_transform/236_BDr_F.out diff --git a/test/05_transform/237_BDm_F.in b/test/050_transform/237_BDm_F.in diff --git a/test/05_transform/237_BDm_F.out b/test/050_transform/237_BDm_F.out diff --git a/test/05_transform/238_BLr_U.in b/test/050_transform/238_BLr_U.in diff --git a/test/05_transform/238_BLr_U.out b/test/050_transform/238_BLr_U.out diff --git a/test/05_transform/239_BLm_U.in b/test/050_transform/239_BLm_U.in diff --git a/test/05_transform/239_BLm_U.out b/test/050_transform/239_BLm_U.out diff --git a/test/05_transform/240_BLr_R.in b/test/050_transform/240_BLr_R.in diff --git a/test/05_transform/240_BLr_R.out b/test/050_transform/240_BLr_R.out diff --git a/test/05_transform/241_BLm_R.in b/test/050_transform/241_BLm_R.in diff --git a/test/05_transform/241_BLm_R.out b/test/050_transform/241_BLm_R.out diff --git a/test/05_transform/242_BLr_F.in b/test/050_transform/242_BLr_F.in diff --git a/test/05_transform/242_BLr_F.out b/test/050_transform/242_BLr_F.out diff --git a/test/05_transform/243_BLm_F.in b/test/050_transform/243_BLm_F.in diff --git a/test/05_transform/243_BLm_F.out b/test/050_transform/243_BLm_F.out diff --git a/test/05_transform/transform_tests.c b/test/050_transform/transform_tests.c