diff options
| author | Sebastiano Tronto <sebastiano@tronto.net> | 2024-10-10 19:49:48 +0200 |
|---|---|---|
| committer | Sebastiano Tronto <sebastiano@tronto.net> | 2024-10-10 19:49:48 +0200 |
| commit | 5e291466fbbc45aed74f67a1b2e555d1f0c44d8f (patch) | |
| tree | ebe96c88599d55ee1b986412f1d0456f55f950a9 /src/nissy.c | |
| parent | d4fadc24ee1993104bac7fd854ed6ca83f60ee66 (diff) | |
| download | nissy-core-5e291466fbbc45aed74f67a1b2e555d1f0c44d8f.tar.gz nissy-core-5e291466fbbc45aed74f67a1b2e555d1f0c44d8f.zip | |
Improved error messages and add some comments in nissy.h
Diffstat (limited to 'src/nissy.c')
| -rw-r--r-- | src/nissy.c | 63 |
1 files changed, 57 insertions, 6 deletions
diff --git a/src/nissy.c b/src/nissy.c index 4a4c0fd..1829d5c 100644 --- a/src/nissy.c +++ b/src/nissy.c | |||
| @@ -110,13 +110,19 @@ STATIC int64_t | |||
| 110 | write_result(cube_t cube, char result[static 22]) | 110 | write_result(cube_t cube, char result[static 22]) |
| 111 | { | 111 | { |
| 112 | if (!isconsistent(cube)) { | 112 | if (!isconsistent(cube)) { |
| 113 | LOG("Error: resulting cube is invalid\n"); | ||
| 113 | writecube("B32", ZERO_CUBE, result); | 114 | writecube("B32", ZERO_CUBE, result); |
| 114 | return 2; | 115 | return 8; |
| 115 | } | 116 | } |
| 116 | 117 | ||
| 117 | writecube("B32", cube, result); | 118 | writecube("B32", cube, result); |
| 118 | 119 | ||
| 119 | return issolvable(cube) ? 0 : 1; | 120 | if (!issolvable(cube)) { |
| 121 | LOG("Warning: resulting cube is not solvable\n"); | ||
| 122 | return 9; | ||
| 123 | } | ||
| 124 | |||
| 125 | return 0; | ||
| 120 | } | 126 | } |
| 121 | 127 | ||
| 122 | int64_t | 128 | int64_t |
| @@ -129,7 +135,19 @@ nissy_compose( | |||
| 129 | cube_t c, p, res; | 135 | cube_t c, p, res; |
| 130 | 136 | ||
| 131 | c = readcube("B32", cube); | 137 | c = readcube("B32", cube); |
| 138 | |||
| 139 | if (!isconsistent(c)) { | ||
| 140 | LOG("Error in nissy_compose: given cube is invalid\n"); | ||
| 141 | return 1; | ||
| 142 | } | ||
| 143 | |||
| 132 | p = readcube("B32", permutation); | 144 | p = readcube("B32", permutation); |
| 145 | |||
| 146 | if (!isconsistent(p)) { | ||
| 147 | LOG("Error in nissy_compose: given permutation is invalid\n"); | ||
| 148 | return 2; | ||
| 149 | } | ||
| 150 | |||
| 133 | res = compose(c, p); | 151 | res = compose(c, p); |
| 134 | 152 | ||
| 135 | return write_result(res, result); | 153 | return write_result(res, result); |
| @@ -144,6 +162,12 @@ nissy_inverse( | |||
| 144 | cube_t c, res; | 162 | cube_t c, res; |
| 145 | 163 | ||
| 146 | c = readcube("B32", cube); | 164 | c = readcube("B32", cube); |
| 165 | |||
| 166 | if (iserror(c)) { | ||
| 167 | LOG("Error in nissy_inverse: given cube is invalid\n"); | ||
| 168 | return 1; | ||
| 169 | } | ||
| 170 | |||
| 147 | res = inverse(c); | 171 | res = inverse(c); |
| 148 | 172 | ||
| 149 | return write_result(res, result); | 173 | return write_result(res, result); |
| @@ -159,6 +183,12 @@ nissy_applymoves( | |||
| 159 | cube_t c, res; | 183 | cube_t c, res; |
| 160 | 184 | ||
| 161 | c = readcube("B32", cube); | 185 | c = readcube("B32", cube); |
| 186 | |||
| 187 | if (!isconsistent(c)) { | ||
| 188 | LOG("Error in nissy_applymoves: given cube is invalid\n"); | ||
| 189 | return 1; | ||
| 190 | } | ||
| 191 | |||
| 162 | res = applymoves(c, moves); | 192 | res = applymoves(c, moves); |
| 163 | 193 | ||
| 164 | return write_result(res, result); | 194 | return write_result(res, result); |
| @@ -174,6 +204,12 @@ nissy_applytrans( | |||
| 174 | cube_t c, res; | 204 | cube_t c, res; |
| 175 | 205 | ||
| 176 | c = readcube("B32", cube); | 206 | c = readcube("B32", cube); |
| 207 | |||
| 208 | if (!isconsistent(c)) { | ||
| 209 | LOG("Error in nissy_applytrans: given cube is invalid\n"); | ||
| 210 | return 1; | ||
| 211 | } | ||
| 212 | |||
| 177 | res = applytrans(c, transformation); | 213 | res = applytrans(c, transformation); |
| 178 | 214 | ||
| 179 | return write_result(res, result); | 215 | return write_result(res, result); |
| @@ -189,6 +225,11 @@ nissy_frommoves( | |||
| 189 | 225 | ||
| 190 | res = applymoves(SOLVED_CUBE, moves); | 226 | res = applymoves(SOLVED_CUBE, moves); |
| 191 | 227 | ||
| 228 | if (!isconsistent(res)) { | ||
| 229 | /* Moves must be invalid */ | ||
| 230 | return 1; | ||
| 231 | } | ||
| 232 | |||
| 192 | return write_result(res, result); | 233 | return write_result(res, result); |
| 193 | } | 234 | } |
| 194 | 235 | ||
| @@ -200,12 +241,20 @@ nissy_convert( | |||
| 200 | char *result | 241 | char *result |
| 201 | ) | 242 | ) |
| 202 | { | 243 | { |
| 244 | int ret; | ||
| 203 | cube_t c; | 245 | cube_t c; |
| 204 | 246 | ||
| 205 | c = readcube(format_in, cube_string); | 247 | c = readcube(format_in, cube_string); |
| 206 | writecube(format_out, c, result); | ||
| 207 | 248 | ||
| 208 | return isconsistent(c) ? 0 : 2; | 249 | if (iserror(c)) |
| 250 | return 1; | ||
| 251 | |||
| 252 | ret = writecube(format_out, c, result); | ||
| 253 | |||
| 254 | if (ret != 0) | ||
| 255 | return 2; | ||
| 256 | |||
| 257 | return isconsistent(c) ? 0 : 3; | ||
| 209 | } | 258 | } |
| 210 | 259 | ||
| 211 | int64_t | 260 | int64_t |
| @@ -387,8 +436,10 @@ nissy_solve( | |||
| 387 | return -1; | 436 | return -1; |
| 388 | } else { | 437 | } else { |
| 389 | return THREADS > 1 ? | 438 | return THREADS > 1 ? |
| 390 | solve_h48_multithread(c, minmoves, maxmoves, maxsolutions, data, solutions) : | 439 | solve_h48_multithread(c, minmoves, |
| 391 | solve_h48(c, minmoves, maxmoves, maxsolutions, data, solutions); | 440 | maxmoves, maxsolutions, data, solutions) : |
| 441 | solve_h48(c, minmoves, | ||
| 442 | maxmoves, maxsolutions, data, solutions); | ||
| 392 | } | 443 | } |
| 393 | } else if (!strcmp(solver, "simple")) { | 444 | } else if (!strcmp(solver, "simple")) { |
| 394 | return solve_simple( | 445 | return solve_simple( |
