};
static void
-usage(ex)
+usage(int ex)
{
fprintf(ex ? stderr : stdout, "Usage: testsolv <testcase>\n");
exit(ex);
Pool *pool;
Queue job;
Queue solq;
- Solver *solv;
+ Solver *solv, *reusesolv = 0;
char *result = 0;
int resultflags = 0;
int debuglevel = 0;
int writeresult = 0;
+ char *writetestcase = 0;
int multijob = 0;
int rescallback = 0;
int c;
const char *p;
queue_init(&solq);
- while ((c = getopt(argc, argv, "vmrhl:s:")) >= 0)
+ while ((c = getopt(argc, argv, "vmrhl:s:T:")) >= 0)
{
switch (c)
{
else
queue_push2(&solq, 1, atoi(optarg));
break;
+ case 'T':
+ writetestcase = optarg;
+ break;
default:
usage(1);
break;
pool_free(pool);
exit(resultflags == 77 ? 77 : 1);
}
-
+ if (reusesolv)
+ {
+ solver_free(solv);
+ solv = reusesolv;
+ reusesolv = 0;
+ }
if (!multijob && !feof(fp))
multijob = 1;
solver_solve(solv, &job);
solv->solution_callback = 0;
solv->solution_callback_data = 0;
- if (!resultflags)
- resultflags = TESTCASE_RESULT_TRANSACTION | TESTCASE_RESULT_PROBLEMS;
+ if ((resultflags & ~TESTCASE_RESULT_REUSE_SOLVER) == 0)
+ resultflags |= TESTCASE_RESULT_TRANSACTION | TESTCASE_RESULT_PROBLEMS;
myresult = testcase_solverresult(solv, resultflags);
if (rescallback && reportsolutiondata.result)
{
else
{
int pcnt = solver_solve(solv, &job);
+ if (writetestcase)
+ testcase_write(solv, writetestcase, resultflags, 0, 0);
if (pcnt && solq.count)
{
int i, taken = 0;
}
}
queue_free(&job);
- solver_free(solv);
+ if ((resultflags & TESTCASE_RESULT_REUSE_SOLVER) != 0 && !feof(fp))
+ reusesolv = solv;
+ else
+ solver_free(solv);
}
+ if (reusesolv)
+ solver_free(reusesolv);
pool_free(pool);
fclose(fp);
}