diff options
| author | Simon Tatham <anakin@pobox.com> | 2012-06-01 18:41:26 +0000 |
|---|---|---|
| committer | Simon Tatham <anakin@pobox.com> | 2012-06-01 18:41:26 +0000 |
| commit | 5a095b8a08fa9f087b93c86aea0fa027138b028d (patch) | |
| tree | cb4705e1641ac8e7c9c938c56796ded16e4927a4 | |
| parent | a46f06e90e6fc8e229c13437135b61ad97871174 (diff) | |
| download | puzzles-5a095b8a08fa9f087b93c86aea0fa027138b028d.zip puzzles-5a095b8a08fa9f087b93c86aea0fa027138b028d.tar.gz puzzles-5a095b8a08fa9f087b93c86aea0fa027138b028d.tar.bz2 puzzles-5a095b8a08fa9f087b93c86aea0fa027138b028d.tar.xz | |
Add a hacky environment variable that lets me arrange a soak-test of a
solver I've just modified, by forcing every game generation to be
instantly followed by an attempt to re-solve the same game
_description_ without the aux_info.
I've hacked similar changes in to midend.c several times in the last
couple of months for one reason or another, and it's about time I
arranged not to have to recompile to do it!
[originally from svn r9549]
| -rw-r--r-- | midend.c | 49 |
1 files changed, 49 insertions, 0 deletions
@@ -429,6 +429,55 @@ void midend_new_game(midend *me) sfree(movestr); } + /* + * Soak test, enabled by setting <gamename>_TESTSOLVE in the + * environment. This causes an immediate attempt to re-solve the + * game without benefit of aux_info. The effect is that (at least + * on Unix) you can run 'FOO_TESTSOLVE=1 foo --generate 10000 + * <params>#12345' and it will generate a lot of game ids and + * instantly pass each one back to the solver. + * + * (It's worth putting in an explicit seed in any such test, so + * you can repeat it to diagnose a problem if one comes up!) + */ + { + char buf[80]; + int j, k; + static int doing_test_solve = -1; + if (doing_test_solve < 0) { + sprintf(buf, "%s_TESTSOLVE", me->ourgame->name); + for (j = k = 0; buf[j]; j++) + if (!isspace((unsigned char)buf[j])) + buf[k++] = toupper((unsigned char)buf[j]); + buf[k] = '\0'; + if (getenv(buf)) { + /* + * Since this is used for correctness testing, it's + * helpful to have a visual acknowledgment that the + * user hasn't mistyped the environment variable name. + */ + fprintf(stderr, "Running solver soak tests\n"); + doing_test_solve = TRUE; + } else { + doing_test_solve = FALSE; + } + } + if (doing_test_solve) { + game_state *s; + char *msg, *movestr; + + msg = NULL; + movestr = me->ourgame->solve(me->states[0].state, + me->states[0].state, + NULL, &msg); + assert(movestr && !msg); + s = me->ourgame->execute_move(me->states[0].state, movestr); + assert(s); + me->ourgame->free_game(s); + sfree(movestr); + } + } + me->states[me->nstates].movestr = NULL; me->states[me->nstates].movetype = NEWGAME; me->nstates++; |