mirror of
git://git.tartarus.org/simon/puzzles.git
synced 2025-04-21 08:01:30 -07:00
Introduce some extra testing and benchmarking command-line options to
the GTK front end, plus a 'make test' target in the GTK makefile which uses them to automatically generate 100 puzzles for each game at each preset configuration, test-run them back through the solver without their aux_info to ensure that can cope, and produce an HTML box plot of game generation times for each preset. As part of this work I've removed the TESTSOLVE mechanism from r9549, since the new --test-solve option does the same thing better (in that when something goes wrong it prints the random seed that caused the problem). [originally from svn r9825] [r9549 == 5a095b8a08fa9f087b93c86aea0fa027138b028d]
This commit is contained in:
49
midend.c
49
midend.c
@ -445,55 +445,6 @@ 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++;
|
||||
|
Reference in New Issue
Block a user