diff options
| author | Sebastiano Tronto <sebastiano@tronto.net> | 2024-06-17 17:39:06 +0200 |
|---|---|---|
| committer | Sebastiano Tronto <sebastiano@tronto.net> | 2024-06-17 17:39:30 +0200 |
| commit | e986713657bc5f9880e91ed49dd9b0d0227f048d (patch) | |
| tree | 908d371e60546795c4ca1f9a3b67571b964203c5 | |
| parent | 02ce9adf6a9168ec66c322ce9e5a5cb9fe1e60a5 (diff) | |
| download | nissy-core-e986713657bc5f9880e91ed49dd9b0d0227f048d.tar.gz nissy-core-e986713657bc5f9880e91ed49dd9b0d0227f048d.zip | |
Use callback function to log to stderr
38 files changed, 112 insertions, 171 deletions
| @@ -1,20 +1,32 @@ | |||
| 1 | #include <inttypes.h> | 1 | #include <inttypes.h> |
| 2 | #include <stdarg.h> | ||
| 2 | #include <stdbool.h> | 3 | #include <stdbool.h> |
| 3 | #include <string.h> | 4 | #include <string.h> |
| 4 | 5 | ||
| 6 | void (*nissy_log)(const char *, va_list); | ||
| 7 | |||
| 8 | void | ||
| 9 | _log(const char *str, ...) /* TODO: rename */ | ||
| 10 | { | ||
| 11 | va_list args; | ||
| 12 | |||
| 13 | if (nissy_log != NULL) { | ||
| 14 | va_start(args, str); | ||
| 15 | nissy_log(str, args); | ||
| 16 | va_end(args); | ||
| 17 | } | ||
| 18 | } | ||
| 19 | |||
| 5 | #ifdef DEBUG | 20 | #ifdef DEBUG |
| 6 | #include <stdio.h> | ||
| 7 | #define _static | 21 | #define _static |
| 8 | #define _static_inline | 22 | #define _static_inline |
| 9 | #define DBG_LOG(...) fprintf(stderr, __VA_ARGS__) | 23 | #define DBG_WARN(condition, ...) if (!(condition)) _log(__VA_ARGS__); |
| 10 | #define DBG_WARN(condition, ...) if (!(condition)) DBG_LOG(__VA_ARGS__); | ||
| 11 | #define DBG_ASSERT(condition, retval, ...) \ | 24 | #define DBG_ASSERT(condition, retval, ...) \ |
| 12 | if (!(condition)) { DBG_LOG(__VA_ARGS__); return retval; } | 25 | if (!(condition)) { _log(__VA_ARGS__); return retval; } |
| 13 | 26 | ||
| 14 | #else | 27 | #else |
| 15 | #define _static static | 28 | #define _static static |
| 16 | #define _static_inline static inline | 29 | #define _static_inline static inline |
| 17 | #define DBG_LOG(...) | ||
| 18 | #define DBG_WARN(condition, ...) | 30 | #define DBG_WARN(condition, ...) |
| 19 | #define DBG_ASSERT(condition, retval, ...) | 31 | #define DBG_ASSERT(condition, retval, ...) |
| 20 | #endif | 32 | #endif |
| @@ -1,3 +1,5 @@ | |||
| 1 | /* include: inttypes, stdarg, stdbool, string */ | ||
| 2 | |||
| 1 | /* | 3 | /* |
| 2 | All the functions below return 0 in case of success and a positive | 4 | All the functions below return 0 in case of success and a positive |
| 3 | number in case of error, unless otherwise specified. See (TODO: | 5 | number in case of error, unless otherwise specified. See (TODO: |
| @@ -81,3 +83,5 @@ int64_t nissy_solve( | |||
| 81 | const void *data, | 83 | const void *data, |
| 82 | char *solutions | 84 | char *solutions |
| 83 | ); | 85 | ); |
| 86 | |||
| 87 | void nissy_setlogger(void (*logger_function)(const char *, va_list)); | ||
diff --git a/src/cube_generic.h b/src/cube_generic.h index 7ff9992..d3080f7 100644 --- a/src/cube_generic.h +++ b/src/cube_generic.h | |||
| @@ -65,16 +65,16 @@ isconsistent(cube_t cube) | |||
| 65 | return true; | 65 | return true; |
| 66 | 66 | ||
| 67 | inconsistent_ep: | 67 | inconsistent_ep: |
| 68 | DBG_LOG("Inconsistent EP\n"); | 68 | _log("Inconsistent EP\n"); |
| 69 | return false; | 69 | return false; |
| 70 | inconsistent_cp: | 70 | inconsistent_cp: |
| 71 | DBG_LOG("Inconsistent CP\n"); | 71 | _log("Inconsistent CP\n"); |
| 72 | return false; | 72 | return false; |
| 73 | inconsistent_eo: | 73 | inconsistent_eo: |
| 74 | DBG_LOG("Inconsistent EO\n"); | 74 | _log("Inconsistent EO\n"); |
| 75 | return false; | 75 | return false; |
| 76 | inconsistent_co: | 76 | inconsistent_co: |
| 77 | DBG_LOG("Inconsistent CO\n"); | 77 | _log("Inconsistent CO\n"); |
| 78 | return false; | 78 | return false; |
| 79 | } | 79 | } |
| 80 | 80 | ||
| @@ -114,13 +114,13 @@ issolvable(cube_t cube) | |||
| 114 | return true; | 114 | return true; |
| 115 | 115 | ||
| 116 | issolvable_parity: | 116 | issolvable_parity: |
| 117 | DBG_LOG("EP and CP parities are different\n"); | 117 | _log("EP and CP parities are different\n"); |
| 118 | return false; | 118 | return false; |
| 119 | issolvable_eo: | 119 | issolvable_eo: |
| 120 | DBG_LOG("Odd number of flipped edges\n"); | 120 | _log("Odd number of flipped edges\n"); |
| 121 | return false; | 121 | return false; |
| 122 | issolvable_co: | 122 | issolvable_co: |
| 123 | DBG_LOG("Sum of corner orientation is not multiple of 3\n"); | 123 | _log("Sum of corner orientation is not multiple of 3\n"); |
| 124 | return false; | 124 | return false; |
| 125 | } | 125 | } |
| 126 | 126 | ||
| @@ -161,7 +161,7 @@ applymoves_finish: | |||
| 161 | return cube; | 161 | return cube; |
| 162 | 162 | ||
| 163 | applymoves_error: | 163 | applymoves_error: |
| 164 | DBG_LOG("applymoves error\n"); | 164 | _log("applymoves error\n"); |
| 165 | return zero; | 165 | return zero; |
| 166 | } | 166 | } |
| 167 | 167 | ||
| @@ -238,7 +238,7 @@ move(cube_t c, uint8_t m) | |||
| 238 | case _move_B3: | 238 | case _move_B3: |
| 239 | return _move(B3, c); | 239 | return _move(B3, c); |
| 240 | default: | 240 | default: |
| 241 | DBG_LOG("move error, unknown move\n"); | 241 | _log("move error, unknown move\n"); |
| 242 | return zero; | 242 | return zero; |
| 243 | } | 243 | } |
| 244 | } | 244 | } |
diff --git a/src/cube_public.h b/src/cube_public.h index 65d5d54..e2255c5 100644 --- a/src/cube_public.h +++ b/src/cube_public.h | |||
| @@ -166,3 +166,9 @@ nissy_solve( | |||
| 166 | /* TODO: move solve_generic here? */ | 166 | /* TODO: move solve_generic here? */ |
| 167 | return -1; | 167 | return -1; |
| 168 | } | 168 | } |
| 169 | |||
| 170 | void | ||
| 171 | nissy_setlogger(void (*log)(const char *, va_list)) | ||
| 172 | { | ||
| 173 | nissy_log = log; | ||
| 174 | } | ||
diff --git a/src/cube_transform_with_switch.h b/src/cube_transform_with_switch.h index de62bf5..bc066fb 100644 --- a/src/cube_transform_with_switch.h +++ b/src/cube_transform_with_switch.h | |||
| @@ -118,7 +118,7 @@ transform_edges(cube_t c, uint8_t t) | |||
| 118 | case _trans_BLm: | 118 | case _trans_BLm: |
| 119 | return _trans_edges_mirrored(BLm, c); | 119 | return _trans_edges_mirrored(BLm, c); |
| 120 | default: | 120 | default: |
| 121 | DBG_LOG("transform error, unknown transformation\n"); | 121 | _log("transform error, unknown transformation\n"); |
| 122 | return zero; | 122 | return zero; |
| 123 | } | 123 | } |
| 124 | } | 124 | } |
| @@ -224,7 +224,7 @@ transform_corners(cube_t c, uint8_t t) | |||
| 224 | case _trans_BLm: | 224 | case _trans_BLm: |
| 225 | return _trans_corners_mirrored(BLm, c); | 225 | return _trans_corners_mirrored(BLm, c); |
| 226 | default: | 226 | default: |
| 227 | DBG_LOG("transform error, unknown transformation\n"); | 227 | _log("transform error, unknown transformation\n"); |
| 228 | return zero; | 228 | return zero; |
| 229 | } | 229 | } |
| 230 | } | 230 | } |
| @@ -330,7 +330,7 @@ transform(cube_t c, uint8_t t) | |||
| 330 | case _trans_BLm: | 330 | case _trans_BLm: |
| 331 | return _trans_mirrored(BLm, c); | 331 | return _trans_mirrored(BLm, c); |
| 332 | default: | 332 | default: |
| 333 | DBG_LOG("transform error, unknown transformation\n"); | 333 | _log("transform error, unknown transformation\n"); |
| 334 | return zero; | 334 | return zero; |
| 335 | } | 335 | } |
| 336 | } | 336 | } |
diff --git a/src/io_cube.h b/src/io_cube.h index 3e7880e..72113ff 100644 --- a/src/io_cube.h +++ b/src/io_cube.h | |||
| @@ -49,7 +49,7 @@ readcube(const char *format, const char *buf) | |||
| 49 | if (!strcmp(format, ioformat[i].name)) | 49 | if (!strcmp(format, ioformat[i].name)) |
| 50 | return ioformat[i].read(buf); | 50 | return ioformat[i].read(buf); |
| 51 | 51 | ||
| 52 | DBG_LOG("Cannot read cube in the given format\n"); | 52 | _log("Cannot read cube in the given format\n"); |
| 53 | return zero; | 53 | return zero; |
| 54 | } | 54 | } |
| 55 | 55 | ||
| @@ -76,7 +76,7 @@ writecube(const char *format, cube_t cube, char *buf) | |||
| 76 | errormsg = "ERROR: format"; | 76 | errormsg = "ERROR: format"; |
| 77 | 77 | ||
| 78 | writecube_error: | 78 | writecube_error: |
| 79 | DBG_LOG("writecube error, see stdout for details\n"); | 79 | _log("writecube error, see stdout for details\n"); |
| 80 | len = strlen(errormsg); | 80 | len = strlen(errormsg); |
| 81 | memcpy(buf, errormsg, len); | 81 | memcpy(buf, errormsg, len); |
| 82 | buf[len] = '\n'; | 82 | buf[len] = '\n'; |
| @@ -93,7 +93,7 @@ readco(const char *str) | |||
| 93 | if (*str == '2') | 93 | if (*str == '2') |
| 94 | return _ctwist_ccw; | 94 | return _ctwist_ccw; |
| 95 | 95 | ||
| 96 | DBG_LOG("Error reading CO\n"); | 96 | _log("Error reading CO\n"); |
| 97 | return _error; | 97 | return _error; |
| 98 | } | 98 | } |
| 99 | 99 | ||
| @@ -107,7 +107,7 @@ readcp(const char *str) | |||
| 107 | !strncmp(str, cornerstralt[c], 3)) | 107 | !strncmp(str, cornerstralt[c], 3)) |
| 108 | return c; | 108 | return c; |
| 109 | 109 | ||
| 110 | DBG_LOG("Error reading CP\n"); | 110 | _log("Error reading CP\n"); |
| 111 | return _error; | 111 | return _error; |
| 112 | } | 112 | } |
| 113 | 113 | ||
| @@ -119,7 +119,7 @@ readeo(const char *str) | |||
| 119 | if (*str == '1') | 119 | if (*str == '1') |
| 120 | return _eflip; | 120 | return _eflip; |
| 121 | 121 | ||
| 122 | DBG_LOG("Error reading EO\n"); | 122 | _log("Error reading EO\n"); |
| 123 | return _error; | 123 | return _error; |
| 124 | } | 124 | } |
| 125 | 125 | ||
| @@ -132,7 +132,7 @@ readep(const char *str) | |||
| 132 | if (!strncmp(str, edgestr[e], 2)) | 132 | if (!strncmp(str, edgestr[e], 2)) |
| 133 | return e; | 133 | return e; |
| 134 | 134 | ||
| 135 | DBG_LOG("Error reading EP\n"); | 135 | _log("Error reading EP\n"); |
| 136 | return _error; | 136 | return _error; |
| 137 | } | 137 | } |
| 138 | 138 | ||
diff --git a/src/io_move_trans.h b/src/io_move_trans.h index e36b8e5..14130c7 100644 --- a/src/io_move_trans.h +++ b/src/io_move_trans.h | |||
| @@ -49,7 +49,7 @@ readtrans(const char *buf) | |||
| 49 | if (!strncmp(buf, transstr[t], 11)) | 49 | if (!strncmp(buf, transstr[t], 11)) |
| 50 | return t; | 50 | return t; |
| 51 | 51 | ||
| 52 | DBG_LOG("readtrans error\n"); | 52 | _log("readtrans error\n"); |
| 53 | return _error; | 53 | return _error; |
| 54 | } | 54 | } |
| 55 | 55 | ||
diff --git a/src/solve_generic.h b/src/solve_generic.h index 4e7833f..a8d6b39 100644 --- a/src/solve_generic.h +++ b/src/solve_generic.h | |||
| @@ -49,11 +49,11 @@ solve( | |||
| 49 | solutions | 49 | solutions |
| 50 | ); | 50 | ); |
| 51 | } else { | 51 | } else { |
| 52 | DBG_LOG("solve: unknown solver '%s'\n", solver); | 52 | _log("solve: unknown solver '%s'\n", solver); |
| 53 | return -1; | 53 | return -1; |
| 54 | } | 54 | } |
| 55 | 55 | ||
| 56 | DBG_LOG("solve: error\n"); | 56 | _log("solve: error\n"); |
| 57 | return -1; | 57 | return -1; |
| 58 | } | 58 | } |
| 59 | 59 | ||
| @@ -63,7 +63,7 @@ solve_generic_appendsolution(dfsarg_generic_t *arg) | |||
| 63 | int strl; | 63 | int strl; |
| 64 | 64 | ||
| 65 | strl = writemoves(arg->moves, arg->depth, *arg->nextsol); | 65 | strl = writemoves(arg->moves, arg->depth, *arg->nextsol); |
| 66 | DBG_LOG("Solution found: %s\n", *arg->nextsol); | 66 | _log("Solution found: %s\n", *arg->nextsol); |
| 67 | *arg->nextsol += strl; | 67 | *arg->nextsol += strl; |
| 68 | **arg->nextsol = '\n'; | 68 | **arg->nextsol = '\n'; |
| 69 | (*arg->nextsol)++; | 69 | (*arg->nextsol)++; |
| @@ -126,12 +126,12 @@ solve_generic( | |||
| 126 | int64_t ret, tmp, first; | 126 | int64_t ret, tmp, first; |
| 127 | 127 | ||
| 128 | if (!issolvable(cube)) { | 128 | if (!issolvable(cube)) { |
| 129 | DBG_LOG("solve: cube is not solvable\n"); | 129 | _log("solve: cube is not solvable\n"); |
| 130 | return -1; | 130 | return -1; |
| 131 | } | 131 | } |
| 132 | 132 | ||
| 133 | if (issolved(cube)) { | 133 | if (issolved(cube)) { |
| 134 | DBG_LOG("solve: cube is already solved\n"); | 134 | _log("solve: cube is already solved\n"); |
| 135 | sols[0] = '\n'; | 135 | sols[0] = '\n'; |
| 136 | sols[1] = 0; | 136 | sols[1] = 0; |
| 137 | return 1; | 137 | return 1; |
| @@ -141,32 +141,32 @@ solve_generic( | |||
| 141 | "solve: NISS not implemented yet, 'nisstype' ignored\n"); | 141 | "solve: NISS not implemented yet, 'nisstype' ignored\n"); |
| 142 | 142 | ||
| 143 | if (minmoves < 0) { | 143 | if (minmoves < 0) { |
| 144 | DBG_LOG("solve: 'minmoves' is negative, setting to 0\n"); | 144 | _log("solve: 'minmoves' is negative, setting to 0\n"); |
| 145 | minmoves = 0; | 145 | minmoves = 0; |
| 146 | } | 146 | } |
| 147 | 147 | ||
| 148 | if (maxmoves < 0) { | 148 | if (maxmoves < 0) { |
| 149 | DBG_LOG("solve: invalid 'maxmoves', setting to 20\n"); | 149 | _log("solve: invalid 'maxmoves', setting to 20\n"); |
| 150 | maxmoves = 20; | 150 | maxmoves = 20; |
| 151 | } | 151 | } |
| 152 | 152 | ||
| 153 | if (maxsols < 0) { | 153 | if (maxsols < 0) { |
| 154 | DBG_LOG("solve: 'maxsols' is negative\n"); | 154 | _log("solve: 'maxsols' is negative\n"); |
| 155 | return -1; | 155 | return -1; |
| 156 | } | 156 | } |
| 157 | 157 | ||
| 158 | if (maxsols == 0) { | 158 | if (maxsols == 0) { |
| 159 | DBG_LOG("solve: 'maxsols' is 0\n"); | 159 | _log("solve: 'maxsols' is 0\n"); |
| 160 | return 0; | 160 | return 0; |
| 161 | } | 161 | } |
| 162 | 162 | ||
| 163 | if (sols == NULL) { | 163 | if (sols == NULL) { |
| 164 | DBG_LOG("solve: return parameter 'sols' is NULL\n"); | 164 | _log("solve: return parameter 'sols' is NULL\n"); |
| 165 | return -1; | 165 | return -1; |
| 166 | } | 166 | } |
| 167 | 167 | ||
| 168 | if (estimate == NULL) { | 168 | if (estimate == NULL) { |
| 169 | DBG_LOG("solve: 'estimate' is NULL\n"); | 169 | _log("solve: 'estimate' is NULL\n"); |
| 170 | return -1; | 170 | return -1; |
| 171 | } | 171 | } |
| 172 | 172 | ||
| @@ -187,7 +187,7 @@ solve_generic( | |||
| 187 | if (tmp != 0) | 187 | if (tmp != 0) |
| 188 | first = arg.depth; | 188 | first = arg.depth; |
| 189 | 189 | ||
| 190 | DBG_LOG("Found %" PRId64 " solution%s at depth %" PRIu8 "\n", | 190 | _log("Found %" PRId64 " solution%s at depth %" PRIu8 "\n", |
| 191 | tmp, tmp == 1 ? "" : "s", arg.depth); | 191 | tmp, tmp == 1 ? "" : "s", arg.depth); |
| 192 | 192 | ||
| 193 | if (ret >= maxsols) | 193 | if (ret >= maxsols) |
| @@ -248,7 +248,7 @@ gendata(const char *solver, const char *options, void *data) | |||
| 248 | maxdepth = atoi(&options[i+1]); | 248 | maxdepth = atoi(&options[i+1]); |
| 249 | ret = gendata_h48(data, h, maxdepth); | 249 | ret = gendata_h48(data, h, maxdepth); |
| 250 | } else { | 250 | } else { |
| 251 | DBG_LOG("gendata: implemented only for H48 solver\n"); | 251 | _log("gendata: implemented only for H48 solver\n"); |
| 252 | ret = -1; | 252 | ret = -1; |
| 253 | } | 253 | } |
| 254 | 254 | ||
diff --git a/src/solve_h48.h b/src/solve_h48.h index 8be67b6..fc3b9c9 100644 --- a/src/solve_h48.h +++ b/src/solve_h48.h | |||
| @@ -146,13 +146,13 @@ gendata_cocsep(void *buf, uint64_t *selfsim, cube_t *rep) | |||
| 146 | .rep = rep | 146 | .rep = rep |
| 147 | }; | 147 | }; |
| 148 | for (i = 0, n = 0, cc = 0; i < 10; i++) { | 148 | for (i = 0, n = 0, cc = 0; i < 10; i++) { |
| 149 | DBG_LOG("cocsep: generating depth %" PRIu8 "\n", i); | 149 | _log("cocsep: generating depth %" PRIu8 "\n", i); |
| 150 | memset(visited, 0, COCSEP_VISITEDSIZE); | 150 | memset(visited, 0, COCSEP_VISITEDSIZE); |
| 151 | arg.depth = 0; | 151 | arg.depth = 0; |
| 152 | arg.maxdepth = i; | 152 | arg.maxdepth = i; |
| 153 | cc = gendata_cocsep_dfs(&arg); | 153 | cc = gendata_cocsep_dfs(&arg); |
| 154 | info[i+2] = cc; | 154 | info[i+2] = cc; |
| 155 | DBG_LOG("found %" PRIu32 "\n", cc); | 155 | _log("found %" PRIu32 "\n", cc); |
| 156 | } | 156 | } |
| 157 | 157 | ||
| 158 | info[0] = (uint32_t)n; | 158 | info[0] = (uint32_t)n; |
| @@ -161,12 +161,12 @@ gendata_cocsep(void *buf, uint64_t *selfsim, cube_t *rep) | |||
| 161 | "cocsep: computed %" PRIu16 " symmetry classes, " | 161 | "cocsep: computed %" PRIu16 " symmetry classes, " |
| 162 | "expected %zu\n", n, COCSEP_CLASSES); | 162 | "expected %zu\n", n, COCSEP_CLASSES); |
| 163 | 163 | ||
| 164 | DBG_LOG("cocsep data computed\n"); | 164 | _log("cocsep data computed\n"); |
| 165 | DBG_LOG("Symmetry classes: %" PRIu32 "\n", info[0]); | 165 | _log("Symmetry classes: %" PRIu32 "\n", info[0]); |
| 166 | DBG_LOG("Maximum pruning value: %" PRIu32 "\n", info[1]); | 166 | _log("Maximum pruning value: %" PRIu32 "\n", info[1]); |
| 167 | DBG_LOG("Pruning value distribution:\n"); | 167 | _log("Pruning value distribution:\n"); |
| 168 | for (j = 0; j < 10; j++) | 168 | for (j = 0; j < 10; j++) |
| 169 | DBG_LOG("%" PRIu8 ":\t%" PRIu32 "\n", j, info[j+2]); | 169 | _log("%" PRIu8 ":\t%" PRIu32 "\n", j, info[j+2]); |
| 170 | 170 | ||
| 171 | gendata_cocsep_return_size: | 171 | gendata_cocsep_return_size: |
| 172 | return COCSEP_FULLSIZE; | 172 | return COCSEP_FULLSIZE; |
| @@ -264,21 +264,21 @@ gendata_h48(void *buf, uint8_t h, uint8_t maxdepth) | |||
| 264 | tot < esep_max && arg.depth <= maxdepth; | 264 | tot < esep_max && arg.depth <= maxdepth; |
| 265 | arg.depth++ | 265 | arg.depth++ |
| 266 | ) { | 266 | ) { |
| 267 | DBG_LOG("esep: generating depth %" PRIu8 "\n", arg.depth); | 267 | _log("esep: generating depth %" PRIu8 "\n", arg.depth); |
| 268 | cc = gendata_esep_bfs(&arg); | 268 | cc = gendata_esep_bfs(&arg); |
| 269 | tot += cc; | 269 | tot += cc; |
| 270 | info[arg.depth+1] = cc; | 270 | info[arg.depth+1] = cc; |
| 271 | DBG_LOG("found %" PRIu64 "\n", cc); | 271 | _log("found %" PRIu64 "\n", cc); |
| 272 | } | 272 | } |
| 273 | 273 | ||
| 274 | info[0] = arg.depth-1; | 274 | info[0] = arg.depth-1; |
| 275 | infosize = 4 * (size_t)(info[0] + 2); | 275 | infosize = 4 * (size_t)(info[0] + 2); |
| 276 | 276 | ||
| 277 | DBG_LOG("h48 pruning table computed\n"); | 277 | _log("h48 pruning table computed\n"); |
| 278 | DBG_LOG("Maximum pruning value: %" PRIu32 "\n", info[0]); | 278 | _log("Maximum pruning value: %" PRIu32 "\n", info[0]); |
| 279 | DBG_LOG("Pruning value distribution:\n"); | 279 | _log("Pruning value distribution:\n"); |
| 280 | for (j = 0; j <= info[0]; j++) | 280 | for (j = 0; j <= info[0]; j++) |
| 281 | DBG_LOG("%" PRIu8 ":\t%" PRIu32 "\n", j, info[j+1]); | 281 | _log("%" PRIu8 ":\t%" PRIu32 "\n", j, info[j+1]); |
| 282 | 282 | ||
| 283 | gendata_h48_return_size: | 283 | gendata_h48_return_size: |
| 284 | return cocsepsize + ESEP_TABLESIZE(h, k) + infosize; | 284 | return cocsepsize + ESEP_TABLESIZE(h, k) + infosize; |
diff --git a/test/000_basic/basic_tests.c b/test/000_basic/basic_tests.c index c4434c5..accde66 100644 --- a/test/000_basic/basic_tests.c +++ b/test/000_basic/basic_tests.c | |||
| @@ -17,7 +17,7 @@ check2(cube_t cube1, char *name1, cube_t cube2, char *name2) | |||
| 17 | equal(cube1, cube2) ? "" : " NOT"); | 17 | equal(cube1, cube2) ? "" : " NOT"); |
| 18 | } | 18 | } |
| 19 | 19 | ||
| 20 | int main(void) { | 20 | void run(void) { |
| 21 | cube_t zero, solved; | 21 | cube_t zero, solved; |
| 22 | 22 | ||
| 23 | memset(&zero, 0, sizeof(cube_t)); | 23 | memset(&zero, 0, sizeof(cube_t)); |
| @@ -28,6 +28,4 @@ int main(void) { | |||
| 28 | check2(solved, "Solved", solved, "Solved"); | 28 | check2(solved, "Solved", solved, "Solved"); |
| 29 | check2(solved, "Solved", zero, "Zero"); | 29 | check2(solved, "Solved", zero, "Zero"); |
| 30 | check2(zero, "Zero", solved, "Solved"); | 30 | check2(zero, "Zero", solved, "Solved"); |
| 31 | |||
| 32 | return 0; | ||
| 33 | } | 31 | } |
diff --git a/test/001_pieces/pieces_tests.c b/test/001_pieces/pieces_tests.c index 1ef2fd0..2e6460b 100644 --- a/test/001_pieces/pieces_tests.c +++ b/test/001_pieces/pieces_tests.c | |||
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | void pieces(cube_t *, uint8_t [static 8], uint8_t [static 12]); | 3 | void pieces(cube_t *, uint8_t [static 8], uint8_t [static 12]); |
| 4 | 4 | ||
| 5 | int main(void) { | 5 | void run(void) { |
| 6 | int i; | 6 | int i; |
| 7 | uint8_t corner[8], edge[12]; | 7 | uint8_t corner[8], edge[12]; |
| 8 | char str[STRLENMAX], *aux; | 8 | char str[STRLENMAX], *aux; |
| @@ -22,6 +22,4 @@ int main(void) { | |||
| 22 | for (i = 0; i < 12; i++) | 22 | for (i = 0; i < 12; i++) |
| 23 | printf("%" PRIu8 " ", edge[i]); | 23 | printf("%" PRIu8 " ", edge[i]); |
| 24 | printf("\n"); | 24 | printf("\n"); |
| 25 | |||
| 26 | return 0; | ||
| 27 | } | 25 | } |
diff --git a/test/010_math_permsign/permsgn_tests.c b/test/010_math_permsign/permsgn_tests.c index 46c7377..04975db 100644 --- a/test/010_math_permsign/permsgn_tests.c +++ b/test/010_math_permsign/permsgn_tests.c | |||
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | int permsign(uint8_t *, int); | 3 | int permsign(uint8_t *, int); |
| 4 | 4 | ||
| 5 | int main(void) { | 5 | void run(void) { |
| 6 | char str[STRLENMAX]; | 6 | char str[STRLENMAX]; |
| 7 | uint8_t a[100]; | 7 | uint8_t a[100]; |
| 8 | int n, i, p; | 8 | int n, i, p; |
| @@ -17,6 +17,4 @@ int main(void) { | |||
| 17 | 17 | ||
| 18 | p = permsign(a, n); | 18 | p = permsign(a, n); |
| 19 | printf("%d\n", p); | 19 | printf("%d\n", p); |
| 20 | |||
| 21 | return 0; | ||
| 22 | } | 20 | } |
diff --git a/test/020_io_H48_read_write/io_H48_tests.c b/test/020_io_H48_read_write/io_H48_tests.c index 705356c..3d4b7e3 100644 --- a/test/020_io_H48_read_write/io_H48_tests.c +++ b/test/020_io_H48_read_write/io_H48_tests.c | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | #include "../test.h" | 1 | #include "../test.h" |
| 2 | 2 | ||
| 3 | int main(void) { | 3 | void run(void) { |
| 4 | char str[STRLENMAX], *aux; | 4 | char str[STRLENMAX], *aux; |
| 5 | cube_t cube; | 5 | cube_t cube; |
| 6 | 6 | ||
| @@ -19,6 +19,4 @@ int main(void) { | |||
| 19 | writecube("H48", cube, str); | 19 | writecube("H48", cube, str); |
| 20 | printf("%s\n", str); | 20 | printf("%s\n", str); |
| 21 | } | 21 | } |
| 22 | |||
| 23 | return 0; | ||
| 24 | } | 22 | } |
diff --git a/test/021_io_B32_write/io_B32_read_tests.c b/test/021_io_B32_write/io_B32_read_tests.c index 3ff81b1..1d2d334 100644 --- a/test/021_io_B32_write/io_B32_read_tests.c +++ b/test/021_io_B32_write/io_B32_read_tests.c | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | #include "../test.h" | 1 | #include "../test.h" |
| 2 | 2 | ||
| 3 | int main(void) { | 3 | void run(void) { |
| 4 | char str[STRLENMAX], *aux; | 4 | char str[STRLENMAX], *aux; |
| 5 | cube_t cube; | 5 | cube_t cube; |
| 6 | 6 | ||
| @@ -19,6 +19,4 @@ int main(void) { | |||
| 19 | writecube("B32", cube, str); | 19 | writecube("B32", cube, str); |
| 20 | printf("%s\n", str); | 20 | printf("%s\n", str); |
| 21 | } | 21 | } |
| 22 | |||
| 23 | return 0; | ||
| 24 | } | 22 | } |
diff --git a/test/022_io_B32_read/io_B32_read_tests.c b/test/022_io_B32_read/io_B32_read_tests.c index cf987f7..5fa9daf 100644 --- a/test/022_io_B32_read/io_B32_read_tests.c +++ b/test/022_io_B32_read/io_B32_read_tests.c | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | #include "../test.h" | 1 | #include "../test.h" |
| 2 | 2 | ||
| 3 | int main(void) { | 3 | void run(void) { |
| 4 | char str[STRLENMAX], *aux; | 4 | char str[STRLENMAX], *aux; |
| 5 | cube_t cube; | 5 | cube_t cube; |
| 6 | 6 | ||
| @@ -19,6 +19,4 @@ int main(void) { | |||
| 19 | writecube("H48", cube, str); | 19 | writecube("H48", cube, str); |
| 20 | printf("%s\n", str); | 20 | printf("%s\n", str); |
| 21 | } | 21 | } |
| 22 | |||
| 23 | return 0; | ||
| 24 | } | 22 | } |
diff --git a/test/023_io_LST_write/io_LST_write_tests.c b/test/023_io_LST_write/io_LST_write_tests.c index df35632..f041864 100644 --- a/test/023_io_LST_write/io_LST_write_tests.c +++ b/test/023_io_LST_write/io_LST_write_tests.c | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | #include "../test.h" | 1 | #include "../test.h" |
| 2 | 2 | ||
| 3 | int main(void) { | 3 | void run(void) { |
| 4 | char str[STRLENMAX], *aux; | 4 | char str[STRLENMAX], *aux; |
| 5 | cube_t cube; | 5 | cube_t cube; |
| 6 | 6 | ||
| @@ -19,6 +19,4 @@ int main(void) { | |||
| 19 | writecube("LST", cube, str); | 19 | writecube("LST", cube, str); |
| 20 | printf("%s\n", str); | 20 | printf("%s\n", str); |
| 21 | } | 21 | } |
| 22 | |||
| 23 | return 0; | ||
| 24 | } | 22 | } |
diff --git a/test/024_io_LST_read/io_LST_read_tests.c b/test/024_io_LST_read/io_LST_read_tests.c index 506a23d..fa80131 100644 --- a/test/024_io_LST_read/io_LST_read_tests.c +++ b/test/024_io_LST_read/io_LST_read_tests.c | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | #include "../test.h" | 1 | #include "../test.h" |
| 2 | 2 | ||
| 3 | int main(void) { | 3 | void run(void) { |
| 4 | char str[STRLENMAX], *aux; | 4 | char str[STRLENMAX], *aux; |
| 5 | cube_t cube; | 5 | cube_t cube; |
| 6 | 6 | ||
| @@ -19,6 +19,4 @@ int main(void) { | |||
| 19 | writecube("H48", cube, str); | 19 | writecube("H48", cube, str); |
| 20 | printf("%s\n", str); | 20 | printf("%s\n", str); |
| 21 | } | 21 | } |
| 22 | |||
| 23 | return 0; | ||
| 24 | } | 22 | } |
diff --git a/test/030_move/move_tests.c b/test/030_move/move_tests.c index 73e9dbe..d4a109b 100644 --- a/test/030_move/move_tests.c +++ b/test/030_move/move_tests.c | |||
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | cube_t applymoves(cube_t, char *); | 3 | cube_t applymoves(cube_t, char *); |
| 4 | 4 | ||
| 5 | int main(void) { | 5 | void run(void) { |
| 6 | char movestr[STRLENMAX], cubestr[STRLENMAX]; | 6 | char movestr[STRLENMAX], cubestr[STRLENMAX]; |
| 7 | cube_t cube; | 7 | cube_t cube; |
| 8 | 8 | ||
| @@ -20,6 +20,4 @@ int main(void) { | |||
| 20 | writecube("H48", cube, cubestr); | 20 | writecube("H48", cube, cubestr); |
| 21 | printf("%s\n", cubestr); | 21 | printf("%s\n", cubestr); |
| 22 | } | 22 | } |
| 23 | |||
| 24 | return 0; | ||
| 25 | } | 23 | } |
diff --git a/test/040_inverse_cube/inverse_tests.c b/test/040_inverse_cube/inverse_tests.c index 2ff3bc7..4cb7ad1 100644 --- a/test/040_inverse_cube/inverse_tests.c +++ b/test/040_inverse_cube/inverse_tests.c | |||
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | cube_t inverse(cube_t); | 3 | cube_t inverse(cube_t); |
| 4 | 4 | ||
| 5 | int main(void) { | 5 | void run(void) { |
| 6 | char str[STRLENMAX]; | 6 | char str[STRLENMAX]; |
| 7 | cube_t cube, inv; | 7 | cube_t cube, inv; |
| 8 | 8 | ||
| @@ -18,6 +18,4 @@ int main(void) { | |||
| 18 | writecube("H48", inv, str); | 18 | writecube("H48", inv, str); |
| 19 | printf("%s\n", str); | 19 | printf("%s\n", str); |
| 20 | } | 20 | } |
| 21 | |||
| 22 | return 0; | ||
| 23 | } | 21 | } |
diff --git a/test/050_compose/compose_tests.c b/test/050_compose/compose_tests.c index 0ea4eff..e0e65b2 100644 --- a/test/050_compose/compose_tests.c +++ b/test/050_compose/compose_tests.c | |||
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | cube_t compose(cube_t, cube_t); | 3 | cube_t compose(cube_t, cube_t); |
| 4 | 4 | ||
| 5 | int main(void) { | 5 | void run(void) { |
| 6 | char str[STRLENMAX]; | 6 | char str[STRLENMAX]; |
| 7 | cube_t c1, c2, c3; | 7 | cube_t c1, c2, c3; |
| 8 | 8 | ||
| @@ -21,6 +21,4 @@ int main(void) { | |||
| 21 | writecube("H48", c3, str); | 21 | writecube("H48", c3, str); |
| 22 | printf("%s\n", str); | 22 | printf("%s\n", str); |
| 23 | } | 23 | } |
| 24 | |||
| 25 | return 0; | ||
| 26 | } | 24 | } |
diff --git a/test/060_transform/transform_tests.c b/test/060_transform/transform_tests.c index f95ad67..bdb4dc5 100644 --- a/test/060_transform/transform_tests.c +++ b/test/060_transform/transform_tests.c | |||
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | cube_t applytrans(cube_t, char *); | 3 | cube_t applytrans(cube_t, char *); |
| 4 | 4 | ||
| 5 | int main(void) { | 5 | void run(void) { |
| 6 | char cubestr[STRLENMAX], transtr[STRLENMAX]; | 6 | char cubestr[STRLENMAX], transtr[STRLENMAX]; |
| 7 | cube_t cube; | 7 | cube_t cube; |
| 8 | 8 | ||
| @@ -20,6 +20,4 @@ int main(void) { | |||
| 20 | writecube("H48", cube, cubestr); | 20 | writecube("H48", cube, cubestr); |
| 21 | printf("%s\n", cubestr); | 21 | printf("%s\n", cubestr); |
| 22 | } | 22 | } |
| 23 | |||
| 24 | return 0; | ||
| 25 | } | 23 | } |
diff --git a/test/061_inverse_trans/inverse_trans_tests.c b/test/061_inverse_trans/inverse_trans_tests.c index 77bd40b..bbc1ac9 100644 --- a/test/061_inverse_trans/inverse_trans_tests.c +++ b/test/061_inverse_trans/inverse_trans_tests.c | |||
| @@ -6,7 +6,7 @@ cube_t applymoves(cube_t, char *); | |||
| 6 | cube_t applytrans(cube_t, char *); | 6 | cube_t applytrans(cube_t, char *); |
| 7 | extern char *transstr[]; | 7 | extern char *transstr[]; |
| 8 | 8 | ||
| 9 | int main(void) { | 9 | void run(void) { |
| 10 | uint8_t t, tinv; | 10 | uint8_t t, tinv; |
| 11 | cube_t cube; | 11 | cube_t cube; |
| 12 | 12 | ||
| @@ -33,6 +33,4 @@ int main(void) { | |||
| 33 | transstr[t], tinv); | 33 | transstr[t], tinv); |
| 34 | } | 34 | } |
| 35 | } | 35 | } |
| 36 | |||
| 37 | return 0; | ||
| 38 | } | 36 | } |
diff --git a/test/071_coord_eo/coord_eo_tests.c b/test/071_coord_eo/coord_eo_tests.c index 3defb8b..78e4395 100644 --- a/test/071_coord_eo/coord_eo_tests.c +++ b/test/071_coord_eo/coord_eo_tests.c | |||
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | int64_t coord_eo(cube_t); | 3 | int64_t coord_eo(cube_t); |
| 4 | 4 | ||
| 5 | int main(void) { | 5 | void run(void) { |
| 6 | char str[STRLENMAX]; | 6 | char str[STRLENMAX]; |
| 7 | cube_t cube; | 7 | cube_t cube; |
| 8 | int64_t result; | 8 | int64_t result; |
| @@ -13,6 +13,4 @@ int main(void) { | |||
| 13 | result = coord_eo(cube); | 13 | result = coord_eo(cube); |
| 14 | 14 | ||
| 15 | printf("%" PRId64 "\n", result); | 15 | printf("%" PRId64 "\n", result); |
| 16 | |||
| 17 | return 0; | ||
| 18 | } | 16 | } |
diff --git a/test/072_coord_co/coord_co_tests.c b/test/072_coord_co/coord_co_tests.c index c7af24c..3b84d74 100644 --- a/test/072_coord_co/coord_co_tests.c +++ b/test/072_coord_co/coord_co_tests.c | |||
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | int64_t coord_co(cube_t); | 3 | int64_t coord_co(cube_t); |
| 4 | 4 | ||
| 5 | int main(void) { | 5 | void run(void) { |
| 6 | char str[STRLENMAX]; | 6 | char str[STRLENMAX]; |
| 7 | cube_t cube; | 7 | cube_t cube; |
| 8 | int64_t result; | 8 | int64_t result; |
| @@ -13,6 +13,4 @@ int main(void) { | |||
| 13 | result = coord_co(cube); | 13 | result = coord_co(cube); |
| 14 | 14 | ||
| 15 | printf("%" PRId64 "\n", result); | 15 | printf("%" PRId64 "\n", result); |
| 16 | |||
| 17 | return 0; | ||
| 18 | } | 16 | } |
diff --git a/test/073_coord_csep/coord_csep_tests.c b/test/073_coord_csep/coord_csep_tests.c index a6e13c5..6d20079 100644 --- a/test/073_coord_csep/coord_csep_tests.c +++ b/test/073_coord_csep/coord_csep_tests.c | |||
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | int64_t coord_csep(cube_t); | 3 | int64_t coord_csep(cube_t); |
| 4 | 4 | ||
| 5 | int main(void) { | 5 | void run(void) { |
| 6 | char str[STRLENMAX]; | 6 | char str[STRLENMAX]; |
| 7 | cube_t cube; | 7 | cube_t cube; |
| 8 | int64_t result; | 8 | int64_t result; |
| @@ -13,6 +13,4 @@ int main(void) { | |||
| 13 | result = coord_csep(cube); | 13 | result = coord_csep(cube); |
| 14 | 14 | ||
| 15 | printf("%" PRId64 "\n", result); | 15 | printf("%" PRId64 "\n", result); |
| 16 | |||
| 17 | return 0; | ||
| 18 | } | 16 | } |
diff --git a/test/074_coord_esep/coord_esep_tests.c b/test/074_coord_esep/coord_esep_tests.c index 0ed3ef3..134ab59 100644 --- a/test/074_coord_esep/coord_esep_tests.c +++ b/test/074_coord_esep/coord_esep_tests.c | |||
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | int64_t coord_esep(cube_t); | 3 | int64_t coord_esep(cube_t); |
| 4 | 4 | ||
| 5 | int main(void) { | 5 | void run(void) { |
| 6 | char str[STRLENMAX]; | 6 | char str[STRLENMAX]; |
| 7 | cube_t cube; | 7 | cube_t cube; |
| 8 | int64_t result; | 8 | int64_t result; |
| @@ -13,6 +13,4 @@ int main(void) { | |||
| 13 | result = coord_esep(cube); | 13 | result = coord_esep(cube); |
| 14 | 14 | ||
| 15 | printf("%" PRId64 "\n", result); | 15 | printf("%" PRId64 "\n", result); |
| 16 | |||
| 17 | return 0; | ||
| 18 | } | 16 | } |
diff --git a/test/075_set_eo/set_eo_tests.c b/test/075_set_eo/set_eo_tests.c index 9c01a50..fb2c23e 100644 --- a/test/075_set_eo/set_eo_tests.c +++ b/test/075_set_eo/set_eo_tests.c | |||
| @@ -4,7 +4,7 @@ int64_t coord_eo(cube_t); | |||
| 4 | void set_eo(cube_t *, int64_t); | 4 | void set_eo(cube_t *, int64_t); |
| 5 | void pieces(cube_t *, uint8_t [static 8], uint8_t [static 12]); | 5 | void pieces(cube_t *, uint8_t [static 8], uint8_t [static 12]); |
| 6 | 6 | ||
| 7 | int main(void) { | 7 | void run(void) { |
| 8 | char str[STRLENMAX]; | 8 | char str[STRLENMAX]; |
| 9 | cube_t cube; | 9 | cube_t cube; |
| 10 | uint8_t edge[12], corner[8]; | 10 | uint8_t edge[12], corner[8]; |
| @@ -33,6 +33,4 @@ int main(void) { | |||
| 33 | writecube("H48", cube, str); | 33 | writecube("H48", cube, str); |
| 34 | printf("%s\n", str); | 34 | printf("%s\n", str); |
| 35 | } | 35 | } |
| 36 | |||
| 37 | return 0; | ||
| 38 | } | 36 | } |
diff --git a/test/076_copy_corners/copy_corners_tests.c b/test/076_copy_corners/copy_corners_tests.c index 446a849..7464ecc 100644 --- a/test/076_copy_corners/copy_corners_tests.c +++ b/test/076_copy_corners/copy_corners_tests.c | |||
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | void copy_corners(cube_t *, cube_t); | 3 | void copy_corners(cube_t *, cube_t); |
| 4 | 4 | ||
| 5 | int main(void) { | 5 | void run(void) { |
| 6 | char str[STRLENMAX]; | 6 | char str[STRLENMAX]; |
| 7 | cube_t c1, c2; | 7 | cube_t c1, c2; |
| 8 | 8 | ||
| @@ -22,6 +22,4 @@ int main(void) { | |||
| 22 | writecube("H48", c1, str); | 22 | writecube("H48", c1, str); |
| 23 | printf("%s\n", str); | 23 | printf("%s\n", str); |
| 24 | } | 24 | } |
| 25 | |||
| 26 | return 0; | ||
| 27 | } | 25 | } |
diff --git a/test/077_copy_edges/copy_edges_tests.c b/test/077_copy_edges/copy_edges_tests.c index 9afcb73..5077861 100644 --- a/test/077_copy_edges/copy_edges_tests.c +++ b/test/077_copy_edges/copy_edges_tests.c | |||
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | void copy_edges(cube_t *, cube_t); | 3 | void copy_edges(cube_t *, cube_t); |
| 4 | 4 | ||
| 5 | int main(void) { | 5 | void run(void) { |
| 6 | char str[STRLENMAX]; | 6 | char str[STRLENMAX]; |
| 7 | cube_t c1, c2; | 7 | cube_t c1, c2; |
| 8 | 8 | ||
| @@ -22,6 +22,4 @@ int main(void) { | |||
| 22 | writecube("H48", c1, str); | 22 | writecube("H48", c1, str); |
| 23 | printf("%s\n", str); | 23 | printf("%s\n", str); |
| 24 | } | 24 | } |
| 25 | |||
| 26 | return 0; | ||
| 27 | } | 25 | } |
diff --git a/test/078_invcoord_esep/invcoord_esep_tests.c b/test/078_invcoord_esep/invcoord_esep_tests.c index 0b83175..45f508b 100644 --- a/test/078_invcoord_esep/invcoord_esep_tests.c +++ b/test/078_invcoord_esep/invcoord_esep_tests.c | |||
| @@ -3,7 +3,7 @@ | |||
| 3 | int64_t coord_esep(cube_t); | 3 | int64_t coord_esep(cube_t); |
| 4 | cube_t invcoord_esep(int64_t); | 4 | cube_t invcoord_esep(int64_t); |
| 5 | 5 | ||
| 6 | int main(void) { | 6 | void run(void) { |
| 7 | char str[STRLENMAX]; | 7 | char str[STRLENMAX]; |
| 8 | cube_t cube; | 8 | cube_t cube; |
| 9 | int64_t i; | 9 | int64_t i; |
| @@ -16,6 +16,4 @@ int main(void) { | |||
| 16 | i = coord_esep(cube); | 16 | i = coord_esep(cube); |
| 17 | 17 | ||
| 18 | printf("%" PRId64 "\n", i); | 18 | printf("%" PRId64 "\n", i); |
| 19 | |||
| 20 | return 0; | ||
| 21 | } | 19 | } |
diff --git a/test/080_allowednext/allowednext_tests.c b/test/080_allowednext/allowednext_tests.c index e531911..644d4c5 100644 --- a/test/080_allowednext/allowednext_tests.c +++ b/test/080_allowednext/allowednext_tests.c | |||
| @@ -11,7 +11,7 @@ static char *moves[] = { | |||
| 11 | "B", "B2", "B'", | 11 | "B", "B2", "B'", |
| 12 | }; | 12 | }; |
| 13 | 13 | ||
| 14 | int main(void) { | 14 | void run(void) { |
| 15 | char movestr[STRLENMAX]; | 15 | char movestr[STRLENMAX]; |
| 16 | uint8_t m[100]; | 16 | uint8_t m[100]; |
| 17 | int n, i, j; | 17 | int n, i, j; |
| @@ -32,6 +32,4 @@ int main(void) { | |||
| 32 | n > 1 ? moves[m[n-2]] : "-", | 32 | n > 1 ? moves[m[n-2]] : "-", |
| 33 | n > 0 ? moves[m[n-1]] : "-"); | 33 | n > 0 ? moves[m[n-1]] : "-"); |
| 34 | printf("%s\n", allowednextmove(m, n) ? "true" : "false"); | 34 | printf("%s\n", allowednextmove(m, n) ? "true" : "false"); |
| 35 | |||
| 36 | return 0; | ||
| 37 | } | 35 | } |
diff --git a/test/090_solve_simple/solve_simple_tests.c b/test/090_solve_simple/solve_simple_tests.c index 5ba6d20..f5e00e2 100644 --- a/test/090_solve_simple/solve_simple_tests.c +++ b/test/090_solve_simple/solve_simple_tests.c | |||
| @@ -3,7 +3,7 @@ | |||
| 3 | int64_t solve(cube_t, char *, char *, char *, int8_t, int8_t, int64_t, int8_t, | 3 | int64_t solve(cube_t, char *, char *, char *, int8_t, int8_t, int64_t, int8_t, |
| 4 | void *, char *); | 4 | void *, char *); |
| 5 | 5 | ||
| 6 | int main(void) { | 6 | void run(void) { |
| 7 | char cubestr[STRLENMAX], solverstr[STRLENMAX], optionsstr[STRLENMAX]; | 7 | char cubestr[STRLENMAX], solverstr[STRLENMAX], optionsstr[STRLENMAX]; |
| 8 | char nisstypestr[STRLENMAX], minmovesstr[STRLENMAX]; | 8 | char nisstypestr[STRLENMAX], minmovesstr[STRLENMAX]; |
| 9 | char maxmovesstr[STRLENMAX], maxsolsstr[STRLENMAX]; | 9 | char maxmovesstr[STRLENMAX], maxsolsstr[STRLENMAX]; |
| @@ -45,6 +45,4 @@ int main(void) { | |||
| 45 | ); | 45 | ); |
| 46 | 46 | ||
| 47 | printf("%s", solutionsstr); | 47 | printf("%s", solutionsstr); |
| 48 | |||
| 49 | return 0; | ||
| 50 | } | 48 | } |
diff --git a/test/100_gendata_cocsep/gendata_cocsep_tests.c b/test/100_gendata_cocsep/gendata_cocsep_tests.c index 9d8f03c..4a29ebb 100644 --- a/test/100_gendata_cocsep/gendata_cocsep_tests.c +++ b/test/100_gendata_cocsep/gendata_cocsep_tests.c | |||
| @@ -4,7 +4,7 @@ | |||
| 4 | 4 | ||
| 5 | size_t gendata_cocsep(void *, uint64_t *, cube_t *); | 5 | size_t gendata_cocsep(void *, uint64_t *, cube_t *); |
| 6 | 6 | ||
| 7 | int main(void) { | 7 | void run(void) { |
| 8 | uint32_t buf[300000], i; | 8 | uint32_t buf[300000], i; |
| 9 | uint64_t selfsim[COCSEP_CLASSES]; | 9 | uint64_t selfsim[COCSEP_CLASSES]; |
| 10 | cube_t rep[COCSEP_CLASSES]; | 10 | cube_t rep[COCSEP_CLASSES]; |
| @@ -17,6 +17,4 @@ int main(void) { | |||
| 17 | printf("Max value: %" PRIu32 "\n", buf[result/4-11]); | 17 | printf("Max value: %" PRIu32 "\n", buf[result/4-11]); |
| 18 | for (i = 0; i < 10; i++) | 18 | for (i = 0; i < 10; i++) |
| 19 | printf("%" PRIu32 ": %" PRIu32 "\n", i, buf[result/4-10+i]); | 19 | printf("%" PRIu32 ": %" PRIu32 "\n", i, buf[result/4-10+i]); |
| 20 | |||
| 21 | return 0; | ||
| 22 | } | 20 | } |
diff --git a/test/101_cocsep_selfsim/cocsep_selfsim_tests.c b/test/101_cocsep_selfsim/cocsep_selfsim_tests.c index 195f9ba..9d9a8b2 100644 --- a/test/101_cocsep_selfsim/cocsep_selfsim_tests.c +++ b/test/101_cocsep_selfsim/cocsep_selfsim_tests.c | |||
| @@ -12,7 +12,7 @@ | |||
| 12 | size_t gendata_cocsep(void *, uint64_t *, cube_t *); | 12 | size_t gendata_cocsep(void *, uint64_t *, cube_t *); |
| 13 | int64_t coord_cocsep(cube_t); | 13 | int64_t coord_cocsep(cube_t); |
| 14 | 14 | ||
| 15 | int main(void) { | 15 | void run(void) { |
| 16 | char str[STRLENMAX]; | 16 | char str[STRLENMAX]; |
| 17 | uint32_t buf[300000], data; | 17 | uint32_t buf[300000], data; |
| 18 | int64_t coord, coclass; | 18 | int64_t coord, coclass; |
| @@ -35,6 +35,4 @@ int main(void) { | |||
| 35 | } | 35 | } |
| 36 | printf("\n"); | 36 | printf("\n"); |
| 37 | } | 37 | } |
| 38 | |||
| 39 | return 0; | ||
| 40 | } | 38 | } |
diff --git a/test/102_coord_invcoord_h48/coord_invcoord_h48_tests.c b/test/102_coord_invcoord_h48/coord_invcoord_h48_tests.c index b0668df..77dea81 100644 --- a/test/102_coord_invcoord_h48/coord_invcoord_h48_tests.c +++ b/test/102_coord_invcoord_h48/coord_invcoord_h48_tests.c | |||
| @@ -7,7 +7,7 @@ int64_t coord_h48(cube_t, const uint32_t *, uint8_t); | |||
| 7 | cube_t invcoord_h48(int64_t, const cube_t *, uint8_t); | 7 | cube_t invcoord_h48(int64_t, const cube_t *, uint8_t); |
| 8 | cube_t transform(cube_t, uint8_t); | 8 | cube_t transform(cube_t, uint8_t); |
| 9 | 9 | ||
| 10 | int main(void) { | 10 | void run(void) { |
| 11 | char str[STRLENMAX]; | 11 | char str[STRLENMAX]; |
| 12 | int i; | 12 | int i; |
| 13 | bool found; | 13 | bool found; |
| @@ -33,6 +33,4 @@ int main(void) { | |||
| 33 | printf("%d %s\n", i, found ? "ok" : "ERROR"); | 33 | printf("%d %s\n", i, found ? "ok" : "ERROR"); |
| 34 | i++; | 34 | i++; |
| 35 | } | 35 | } |
| 36 | |||
| 37 | return 0; | ||
| 38 | } | 36 | } |
diff --git a/test/103_gendata_h48/gendata_h48_tests.c b/test/103_gendata_h48/gendata_h48_tests.c index f0910cc..666f9f6 100644 --- a/test/103_gendata_h48/gendata_h48_tests.c +++ b/test/103_gendata_h48/gendata_h48_tests.c | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | 6 | ||
| 7 | size_t gendata_h48(void *, uint8_t, uint8_t); | 7 | size_t gendata_h48(void *, uint8_t, uint8_t); |
| 8 | 8 | ||
| 9 | int main(void) { | 9 | void run(void) { |
| 10 | char str[STRLENMAX]; | 10 | char str[STRLENMAX]; |
| 11 | uint8_t h, i; | 11 | uint8_t h, i; |
| 12 | uint32_t *buf, *h48info; | 12 | uint32_t *buf, *h48info; |
| @@ -31,5 +31,4 @@ int main(void) { | |||
| 31 | printf("%" PRIu32 ": %" PRIu32 "\n", i, h48info[i+1]); | 31 | printf("%" PRIu32 ": %" PRIu32 "\n", i, h48info[i+1]); |
| 32 | 32 | ||
| 33 | free(buf); | 33 | free(buf); |
| 34 | return 0; | ||
| 35 | } | 34 | } |
diff --git a/test/test b/test/test deleted file mode 100755 index 3adee3a..0000000 --- a/test/test +++ /dev/null | |||
| @@ -1,41 +0,0 @@ | |||
| 1 | #!/bin/sh | ||
| 2 | |||
| 3 | detectsan() { cc -fsanitize=$1 -dM -E -x c - </dev/null | grep "SANITIZE"; } | ||
| 4 | |||
| 5 | re="${TEST:-$@}" | ||
| 6 | |||
| 7 | CC="cc -DDEBUG -std=c99 -pedantic -Wall -Wextra \ | ||
| 8 | -Wno-unused-parameter -Wno-unused-function -g3 -D$CUBETYPE" | ||
| 9 | |||
| 10 | [ "$CUBETYPE" = "CUBE_AVX2" ] && CC="$CC -mavx2" | ||
| 11 | [ -n "$(detectsan address)" ] && CC="$CC -fsanitize=address" | ||
| 12 | [ -n "$(detectsan undefined)" ] && CC="$CC -fsanitize=undefined" | ||
| 13 | |||
| 14 | TESTBIN="test/run" | ||
| 15 | TESTOUT="test/last.out" | ||
| 16 | TESTERR="test/last.err" | ||
| 17 | CUBEOBJ="debugcube.o" | ||
| 18 | |||
| 19 | for t in test/*; do | ||
| 20 | if [ -n "$re" ] && [ -z "$(echo "$t" | grep "$re")" ]; then | ||
| 21 | continue | ||
| 22 | fi | ||
| 23 | if [ ! -d $t ]; then continue; fi | ||
| 24 | $CC -o $TESTBIN $t/*.c $CUBEOBJ || exit 1; | ||
| 25 | for cin in $t/*.in; do | ||
| 26 | c=$(echo "$cin" | sed 's/\.in//') | ||
| 27 | cout=$c.out | ||
| 28 | printf "$c: " | ||
| 29 | $TESTBIN < "$cin" > $TESTOUT 2> $TESTERR | ||
| 30 | if diff $cout $TESTOUT; then | ||
| 31 | printf "OK\n" | ||
| 32 | else | ||
| 33 | printf "Test failed! stderr:\n" | ||
| 34 | cat $TESTERR | ||
| 35 | exit 1 | ||
| 36 | fi | ||
| 37 | done | ||
| 38 | done | ||
| 39 | |||
| 40 | echo "All tests passed!" | ||
| 41 | rm -rf $TESTBIN $TESTOUT $TESTERR $CUBEOBJ | ||
diff --git a/test/test.h b/test/test.h index 1bbb9fc..415e093 100644 --- a/test/test.h +++ b/test/test.h | |||
| @@ -1,4 +1,5 @@ | |||
| 1 | #include <inttypes.h> | 1 | #include <inttypes.h> |
| 2 | #include <stdarg.h> | ||
| 2 | #include <stdbool.h> | 3 | #include <stdbool.h> |
| 3 | #include <stdio.h> | 4 | #include <stdio.h> |
| 4 | #include <stdlib.h> | 5 | #include <stdlib.h> |
| @@ -24,3 +25,15 @@ bool issolvable(cube_t); | |||
| 24 | bool issolved(cube_t); | 25 | bool issolved(cube_t); |
| 25 | cube_t readcube(char *, char *); | 26 | cube_t readcube(char *, char *); |
| 26 | void writecube(char *, cube_t, char *); | 27 | void writecube(char *, cube_t, char *); |
| 28 | void nissy_setlogger(void (*logger_function)(const char *, va_list)); | ||
| 29 | |||
| 30 | /* Test function to be implemented by all tests */ | ||
| 31 | void run(void); | ||
| 32 | |||
| 33 | void log_stderr(const char *str, va_list vl) { vfprintf(stderr, str, vl); } | ||
| 34 | |||
| 35 | int main(void) { | ||
| 36 | nissy_setlogger(log_stderr); | ||
| 37 | run(); | ||
| 38 | return 0; | ||
| 39 | } | ||
