commit 99fabe8592a4022313b1cb0581881ee1bc6b1c99 parent 7e702c3387d702374158c61ac6da4b3cb2452186 Author: Sebastiano Tronto <sebastiano@tronto.net> Date: Wed, 20 Sep 2023 21:48:04 +0200 Added tests for compose Diffstat:
34 files changed, 100 insertions(+), 4 deletions(-)
diff --git a/README.md b/README.md @@ -4,7 +4,7 @@ Work in progress. TODO: -* transformations (internal only, not in cube.h) +* transformations * coordinates: co, eo, epsep, cpsep_sym, cocpsep_sym, cphtr_sym, cocphtr_sym * pruning tables (1 bit per entry + fallback) * solve.c diff --git a/src/cube.h b/src/cube.h @@ -1,9 +1,18 @@ typedef enum { - U, U2, U3, D, D2, D3, + U = 0, U2, U3, D, D2, D3, R, R2, R3, L, L2, L3, F, F2, F3, B, B2, B3 } move_t; +typedef enum { + UF_i = 0, UL_i, UB_i, UR_i, DF_i, DL_i, DB_i, DR_i, + UF_m, UL_m, UB_m, UR_m, DF_m, DL_m, DB_m, DR_m, + RU_i, RF_i, RD_i, RB_i, LU_i, LF_i, LD_i, LB_i, + RU_m, RF_m, RD_m, RB_m, LU_m, LF_m, LD_m, LB_m, + FU_i, FR_i, FD_i, FL_i, BU_i, BR_i, BD_i, BL_i, + FU_m, FR_m, FD_m, FL_m, BU_m, BR_m, BD_m, BL_m +} trans_t; + typedef struct { uint8_t c[8]; uint8_t e[12]; @@ -51,3 +60,5 @@ void writemoves(move_t *, int, char *); cube_t move(cube_t, move_t); cube_t inverse(cube_t); +cube_t compose(cube_t, cube_t); +cube_t transform(cube_t, trans_t); diff --git a/src/cube_array.c b/src/cube_array.c @@ -155,7 +155,6 @@ static uint8_t readep(char *); static uint8_t readmove(char); static uint8_t readmodifier(char); static int permsign(uint8_t *, int); -static cube_t compose(cube_t, cube_t); static uint8_t readco(char *str) @@ -710,3 +709,15 @@ inverse_inconsistent: fprintf(stderr, "inverse error, inconsistent cube\n"); return errorcube; } + +cube_t +compose(cube_t c1, cube_t c2) +{ + return errorcube; +} + +cube_t +transform(cube_t c, trans_t t) +{ + return errorcube; +} diff --git a/test/04_compose/00_solved_solved.in b/test/04_compose/00_solved_solved.in @@ -0,0 +1,2 @@ +UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0 +UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0 diff --git a/test/04_compose/00_solved_solved.out b/test/04_compose/00_solved_solved.out @@ -0,0 +1 @@ +UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0 diff --git a/test/04_compose/01_solved_U.in b/test/04_compose/01_solved_U.in @@ -0,0 +1,2 @@ +UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0 +UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0 diff --git a/test/04_compose/01_solved_U.out b/test/04_compose/01_solved_U.out @@ -0,0 +1 @@ +UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0 diff --git a/test/04_compose/02_solved_scrambled.in b/test/04_compose/02_solved_scrambled.in @@ -0,0 +1,2 @@ +UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0 +DR0 DB0 BL0 DF1 UB0 UR1 FR1 UF0 FL1 DL0 BR1 UL1 DBL2 DFL0 UBR1 DFR2 UFR0 DBR1 UBL0 UFL0 diff --git a/test/04_compose/02_solved_scrambled.out b/test/04_compose/02_solved_scrambled.out @@ -0,0 +1 @@ +DR0 DB0 BL0 DF1 UB0 UR1 FR1 UF0 FL1 DL0 BR1 UL1 DBL2 DFL0 UBR1 DFR2 UFR0 DBR1 UBL0 UFL0 diff --git a/test/04_compose/11_U_solved.in b/test/04_compose/11_U_solved.in @@ -0,0 +1,2 @@ +UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0 +UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0 diff --git a/test/04_compose/11_U_solved.out b/test/04_compose/11_U_solved.out @@ -0,0 +1 @@ +UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0 diff --git a/test/04_compose/12_scrambled_solved.in b/test/04_compose/12_scrambled_solved.in @@ -0,0 +1,2 @@ +DR0 DB0 BL0 DF1 UB0 UR1 FR1 UF0 FL1 DL0 BR1 UL1 DBL2 DFL0 UBR1 DFR2 UFR0 DBR1 UBL0 UFL0 +UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0 diff --git a/test/04_compose/12_scrambled_solved.out b/test/04_compose/12_scrambled_solved.out @@ -0,0 +1 @@ +DR0 DB0 BL0 DF1 UB0 UR1 FR1 UF0 FL1 DL0 BR1 UL1 DBL2 DFL0 UBR1 DFR2 UFR0 DBR1 UBL0 UFL0 diff --git a/test/04_compose/20_U_U.in b/test/04_compose/20_U_U.in @@ -0,0 +1,2 @@ +UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0 +UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0 diff --git a/test/04_compose/20_U_U.out b/test/04_compose/20_U_U.out @@ -0,0 +1 @@ +UB0 UF0 DB0 DF0 UL0 UR0 DL0 DR0 FR0 FL0 BL0 BR0 UBL0 UFR0 DFL0 DBR0 UBR0 UFL0 DFR0 DBL0 diff --git a/test/04_compose/21_U_Uinverse.in b/test/04_compose/21_U_Uinverse.in @@ -0,0 +1,2 @@ +UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0 +UL0 UR0 DB0 DF0 UF0 UB0 DL0 DR0 FR0 FL0 BL0 BR0 UFL0 UBR0 DFL0 DBR0 UBL0 UFR0 DFR0 DBL0 diff --git a/test/04_compose/21_U_Uinverse.out b/test/04_compose/21_U_Uinverse.out @@ -0,0 +1 @@ +UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0 diff --git a/test/04_compose/22_F_Finverse.in b/test/04_compose/22_F_Finverse.in @@ -0,0 +1,2 @@ +FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0 +FR1 UB0 DB0 FL1 UR0 UL0 DL0 DR0 DF1 UF1 BL0 BR0 DFR1 UBL0 UFL1 DBR0 UFR2 UBR0 DFL2 DBL0 diff --git a/test/04_compose/22_F_Finverse.out b/test/04_compose/22_F_Finverse.out @@ -0,0 +1 @@ +UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0 diff --git a/test/04_compose/23_F2_F2.in b/test/04_compose/23_F2_F2.in @@ -0,0 +1,2 @@ +DF0 UB0 DB0 UF0 UR0 UL0 DL0 DR0 FL0 FR0 BL0 BR0 DFL0 UBL0 UFR0 DBR0 DFR0 UBR0 UFL0 DBL0 +DF0 UB0 DB0 UF0 UR0 UL0 DL0 DR0 FL0 FR0 BL0 BR0 DFL0 UBL0 UFR0 DBR0 DFR0 UBR0 UFL0 DBL0 diff --git a/test/04_compose/23_F2_F2.out b/test/04_compose/23_F2_F2.out @@ -0,0 +1 @@ +UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0 diff --git a/test/04_compose/24_U_F.in b/test/04_compose/24_U_F.in @@ -0,0 +1,2 @@ +UR0 UL0 DB0 DF0 UB0 UF0 DL0 DR0 FR0 FL0 BL0 BR0 UBR0 UFL0 DFL0 DBR0 UFR0 UBL0 DFR0 DBL0 +FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0 diff --git a/test/04_compose/24_U_F.out b/test/04_compose/24_U_F.out @@ -0,0 +1 @@ +FL1 UL0 DB0 FR1 UB0 UF0 DL0 DR0 UR1 DF1 BL0 BR0 UFR1 UFL0 DFR1 DBR0 DFL2 UBL0 UBR2 DBL0 diff --git a/test/04_compose/25_F_R.in b/test/04_compose/25_F_R.in @@ -0,0 +1,2 @@ +FL1 UB0 DB0 FR1 UR0 UL0 DL0 DR0 UF1 DF1 BL0 BR0 UFL1 UBL0 DFR1 DBR0 DFL2 UBR0 UFR2 DBL0 +UF0 UB0 DB0 DF0 FR0 UL0 DL0 BR0 DR0 FL0 BL0 UR0 DFR2 UBL0 DFL0 UBR2 UFL0 UFR1 DBR1 DBL0 diff --git a/test/04_compose/25_F_R.out b/test/04_compose/25_F_R.out @@ -0,0 +1 @@ +FL1 UB0 DB0 FR1 UF1 UL0 DL0 BR0 DR0 DF1 BL0 UR0 UFR1 UBL0 DFR1 UBR2 DFL2 UFL2 DBR1 DBL0 diff --git a/test/04_compose/30_scrambled_inverse.in b/test/04_compose/30_scrambled_inverse.in @@ -0,0 +1,4 @@ +UL0 BL0 BR1 DL0 FR0 DF0 DB1 DR1 UB0 FL0 UF0 UR1 DFL0 UFR1 DBR1 UBR2 DBL2 DFR0 UFL1 UBL2 +BL0 FR0 DL1 UL0 BR1 UF0 DF0 DR1 UR0 FL0 UB0 DB1 UBL2 DBL1 UFR0 DFL2 DFR2 DBR1 UBR0 UFL1 + +// Scramble: U R D' L D' F L2 D L F B D2 B' L2 F U2 L2 D2 R2 L2 B' diff --git a/test/04_compose/30_scrambled_inverse.out b/test/04_compose/30_scrambled_inverse.out @@ -0,0 +1 @@ +UF0 UB0 DB0 DF0 UR0 UL0 DL0 DR0 FR0 FL0 BL0 BR0 UFR0 UBL0 DFL0 DBR0 UFL0 UBR0 DFR0 DBL0 diff --git a/test/04_compose/31_scrambled_scrambled.in b/test/04_compose/31_scrambled_scrambled.in @@ -0,0 +1,4 @@ +UL0 BL0 BR1 DL0 FR0 DF0 DB1 DR1 UB0 FL0 UF0 UR1 DFL0 UFR1 DBR1 UBR2 DBL2 DFR0 UFL1 UBL2 +FL1 BR0 DB0 UR1 UF0 UB0 DL0 FR0 UL1 DF1 BL0 DR0 UBL1 DBR1 UFR2 DFR2 DFL2 UBR2 UFL2 DBL0 +// Scramble: U R D' L D' F L2 D L F B D2 B' L2 F U2 L2 D2 R2 L2 B' +// Followed by R' U' F diff --git a/test/04_compose/31_scrambled_scrambled.out b/test/04_compose/31_scrambled_scrambled.out @@ -0,0 +1 @@ +FL1 UR2 BR1 FR1 UL0 BL0 DB1 UB0 DF1 DL1 UF0 DR1 UFR2 UBR0 DFL2 UFL0 DBR0 DFR2 DBL1 UBL2 diff --git a/test/04_compose/compose_tests.c b/test/04_compose/compose_tests.c @@ -0,0 +1,30 @@ +#include <stdbool.h> +#include <stdint.h> +#include <stdio.h> + +#include "../../src/cube.h" + +#define STRLENMAX 10000 + +int main() { + char str[STRLENMAX]; + cube_t c1, c2, c3; + + fgets(str, STRLENMAX, stdin); + c1 = readcube(str); + fgets(str, STRLENMAX, stdin); + c2 = readcube(str); + + c3 = compose(c1, c2); + + if (iserror(c3)) { + printf("Error composing cubes\n"); + } else if (!isconsistent(c3)) { + printf("Composed cube is inconsistent\n"); + } else { + writecube(c3, str); + printf("%s\n", str); + } + + return 0; +} diff --git a/test/last.err b/test/last.err diff --git a/test/last.out b/test/last.out @@ -0,0 +1 @@ +Error composing cubes diff --git a/test/run b/test/run Binary files differ. diff --git a/test/test.sh b/test/test.sh @@ -5,7 +5,7 @@ CC="cc -DDEBUG -std=c99 -pthread -pedantic -Wall -Wextra \ if [ $(uname) != "OpenBSD" ]; then CC="$CC -fsanitize=address -fsanitize=undefined" fi -SRC="src/array_cube.c" +SRC="src/cube_array.c" TESTBIN="test/run" TESTOUT="test/last.out" TESTERR="test/last.err"