-
Notifications
You must be signed in to change notification settings - Fork 184
Open
Description
How can I pass a runtime determined state from the main test process to the forked worker?
#include <stdio.h>
#include "criterion/criterion.h"
static char *STATE = NULL;
void load_state() {
// STATE is (null) here
criterion_current_test->data->data = STATE;
}
Test(s, t, .init = load_state) {
// criterion_current_test->data->data is (nil)
}
int main(int argc, char *argv[]) {
char *state = "foobar"; // some runtime state
STATE = state;
fprintf(stderr, "STATE %p\n", STATE);
struct criterion_test_set *tests = criterion_initialize();
if (!criterion_handle_args(argc, argv, false)) {
return EXIT_FAILURE;
}
criterion_run_all_tests(tests);
criterion_finalize(tests);
return EXIT_SUCCESS;
}I understand using malloc is UB. However using cr_malloc requires cr_init to have been called already and that does not happen until the tests begin to run. cr_init is not idempotent, so invoking it in main manually before the tests begin would simply create a new arena again.
Here, state could be a random seed passed from the command line to the individual tests.
Metadata
Metadata
Assignees
Labels
No labels