#include /* Basic usage */ ParameterizedTestParameters(params, simple) { static int vals[] = { 1, 2, 3 }; return cr_make_param_array(int, vals, sizeof (vals) / sizeof (int)); } ParameterizedTest(int *val, params, simple) { cr_assert_fail("Parameter: %d", *val); } /* Multiple parameters must be coalesced in a single parameter */ struct parameter_tuple { int i; double d; }; ParameterizedTestParameters(params, multiple) { static struct parameter_tuple params[] = { { 1, 2 }, { 3, 4 }, { 5, 6 }, }; return criterion_test_params(params); } ParameterizedTest(struct parameter_tuple *tup, params, multiple) { cr_assert_fail("Parameters: (%d, %f)", tup->i, tup->d); } /* Using dynamically generated parameters */ /* you **MUST** use new_obj, new_arr, delete_obj, delete_arr instead of the new, new[], delete and delete[] operators (respectively) to allocate and deallocate dynamic memory in parameters, otherwise this will crash. */ /* the criterion::allocator allocator may be used with STL containers to allocate objects with the functions described above. */ using criterion::new_obj; using criterion::new_arr; using criterion::delete_obj; using criterion::delete_arr; struct parameter_tuple_dyn { int i; std::unique_ptr d; parameter_tuple_dyn() : i(0), d(nullptr, criterion::free) {} parameter_tuple_dyn(int i, double *d) : i(i), d(d, criterion::free) {} }; ParameterizedTestParameters(params, cleanup) { static criterion::parameters params; params.push_back(parameter_tuple_dyn(1, new_obj(2))); params.push_back(parameter_tuple_dyn(3, new_obj(4))); params.push_back(parameter_tuple_dyn(5, new_obj(6))); /* A criterion::parameters can be returned in place of a criterion_test_params. */ return params; } ParameterizedTest(parameter_tuple_dyn * tup, params, cleanup) { cr_assert_fail("Parameters: (%d, %f)", tup->i, *tup->d); }