#include <sys/stat.h>
#include <dirent.h>
-bool opts_memchk = false;
-bool opts_debug = false;
+cmd_options opts;
+
char *task_bins[] = {
"./gmqcc",
"./qcvm"
* messages.
*/
bool task_execute(task_template_t *template, char ***line) {
- bool success = false;
+ bool success = true;
FILE *execute;
char buffer[4096];
memset (buffer,0,sizeof(buffer));
if (strrchr(data, '\n'))
*strrchr(data, '\n') = '\0';
-
- /*
- * We only care about the last line from the output for now
- * implementing multi-line match is TODO.
- */
- success = !!!(strcmp(data, template->comparematch[compare++]));
+ if (strcmp(data, template->comparematch[compare++]))
+ success = false;
/*
* Copy to output vector for diagnostics if execution match
* fails.
*/
vec_push(*line, data);
+
+ /* reset */
+ data = NULL;
+ size = 0;
}
mem_d(data);
data = NULL;
char **match = NULL;
size_t size = 0;
size_t i;
+ size_t j;
util_debug("TEST", "found %d tasks, preparing to execute\n", vec_size(task_tasks));
* Generate a task from thin air if it requires execution in
* the QCVM.
*/
- if (!strcmp(task_tasks[i].template->proceduretype, "-execute"))
- execute = true;
+ execute = !!(!strcmp(task_tasks[i].template->proceduretype, "-execute"));
/*
* We assume it compiled before we actually compiled :). On error
fflush(task_tasks[i].stdoutlog);
}
- if (!execute) {
+ if (!task_tasks[i].compiled) {
con_err("test failure: `%s` [%s] (failed to compile) see %s.stdout and %s.stderr\n",
task_tasks[i].template->description,
(task_tasks[i].template->failuremessage) ?
);
continue;
}
+
+ if (!execute) {
+ con_out("test succeeded: `%s` [%s]\n",
+ task_tasks[i].template->description,
+ (task_tasks[i].template->successmessage) ?
+ task_tasks[i].template->successmessage : "unknown"
+ );
+ continue;
+ }
+
/*
* If we made it here that concludes the task is to be executed
* in the virtual machine.
con_err(" ");
con_err("| Got: \"%s\"\n", (d >= vec_size(match)) ? "<<nothing else to compare>>" : match[d]);
}
+ for (j = 0; j < vec_size(match); j++)
+ mem_d(match[j]);
vec_free(match);
continue;
}
+ for (j = 0; j < vec_size(match); j++)
+ mem_d(match[j]);
+ vec_free(match);
con_out("test succeeded: `%s` [%s]\n",
task_tasks[i].template->description,
con_change(redirout, redirerr);
if (!strcmp(argv[0]+1, "debug")) {
- opts_debug = true;
+ opts.debug = true;
continue;
}
if (!strcmp(argv[0]+1, "memchk")) {
- opts_memchk = true;
+ opts.memchk = true;
continue;
}
if (!strcmp(argv[0]+1, "nocolor")) {