[Piglit] [PATCH 6/7] cl-program-tester: Defer parsing of input/output values until test execution
Tom Stellard
tom at stellard.net
Mon Sep 30 07:47:45 PDT 2013
From: Tom Stellard <thomas.stellard at amd.com>
This will make it possible to write tests using generic types.
---
tests/cl/program/program-tester.c | 61 +++++++++++++++++++++++++--------------
1 file changed, 40 insertions(+), 21 deletions(-)
diff --git a/tests/cl/program/program-tester.c b/tests/cl/program/program-tester.c
index 557dc4b..fbfeb7b 100644
--- a/tests/cl/program/program-tester.c
+++ b/tests/cl/program/program-tester.c
@@ -211,6 +211,7 @@ struct test_arg {
/* kernel arg data */
cl_uint index;
size_t size_in_mem;
+ char *raw_value;
void* value;
/* tolerance */
@@ -231,6 +232,7 @@ struct test_arg create_test_arg()
.index = 0,
.size_in_mem = 0,
+ .raw_value = NULL,
.value = NULL,
.toli = 0,
@@ -1007,11 +1009,10 @@ get_test_arg(const char* src, struct test* test, bool arg_in)
/* Get value */
regex_get_match_str(&value, src, pmatch, 3);
if(regex_match(value, REGEX_FULL_MATCH(REGEX_NULL))) {
- test_arg.value = NULL;
+ test_arg.raw_value = NULL;
} else {
- get_test_arg_value(&test_arg, value, test_arg.vec_elements);
+ test_arg.raw_value = value;
}
- free(value);
} else if(regex_match(src, REGEX_FULL_MATCH(REGEX_ARG_BUFFER))) { // buffer
char* array_length_str = NULL;
const char* tolerance_str = NULL;
@@ -1059,24 +1060,11 @@ get_test_arg(const char* src, struct test* test, bool arg_in)
exit_report_result(PIGLIT_WARN);
}
} else if(regex_match(value, REGEX_FULL_MATCH(REGEX_REPEAT))) {
- regmatch_t rmatch[3];
- char* repeat_value_str;
-
- regex_get_matches(value, REGEX_REPEAT, rmatch, 3, 0);
- regex_get_match_str(&repeat_value_str, value, rmatch, 2);
-
- get_test_arg_value(&test_arg,
- repeat_value_str,
- get_array_length(repeat_value_str));
-
- free(repeat_value_str);
+ test_arg.raw_value = value;
} else if(regex_match(value, REGEX_ARRAY)) {
- get_test_arg_value(&test_arg,
- value,
- test_arg.length * test_arg.vec_elements);
+ test_arg.raw_value = value;
}
}
- free(value);
}
if(arg_in) {
@@ -1729,6 +1717,7 @@ test_kernel(const struct piglit_cl_program_test_config* config,
switch(test_arg.type) {
case TEST_ARG_VALUE:
+ get_test_arg_value(&test_arg, test_arg.raw_value, test_arg.vec_elements);
arg_set = piglit_cl_set_kernel_arg(kernel,
test_arg.index,
test_arg.vec_elements * piglit_cl_type_get_size(test_arg.cl_type),
@@ -1738,7 +1727,22 @@ test_kernel(const struct piglit_cl_program_test_config* config,
struct buffer_arg buffer_arg;
buffer_arg.index = test_arg.index;
- if(test_arg.value != NULL) {
+ if(test_arg.raw_value != NULL) {
+ if(regex_match(test_arg.raw_value, REGEX_FULL_MATCH(REGEX_REPEAT))) {
+ regmatch_t rmatch[3];
+ char* repeat_value_str;
+
+ regex_get_matches(test_arg.raw_value, REGEX_REPEAT, rmatch, 3, 0);
+ regex_get_match_str(&repeat_value_str, test_arg.raw_value, rmatch, 2);
+
+ get_test_arg_value(&test_arg,
+ repeat_value_str,
+ get_array_length(repeat_value_str));
+ } else {
+ get_test_arg_value(&test_arg,
+ test_arg.raw_value,
+ test_arg.length * test_arg.vec_elements);
+ }
buffer_arg.buffer = piglit_cl_create_buffer(env->context,
CL_MEM_READ_WRITE,
test_arg.size_in_mem);
@@ -1802,7 +1806,7 @@ test_kernel(const struct piglit_cl_program_test_config* config,
break;
}
- if(test_arg.value != NULL) {
+ if(test_arg.raw_value != NULL) {
buffer_arg.buffer = piglit_cl_create_buffer(env->context,
CL_MEM_READ_WRITE,
test_arg.size_in_mem);
@@ -1875,7 +1879,22 @@ test_kernel(const struct piglit_cl_program_test_config* config,
}
}
- if(test_arg.value != NULL) {
+ if(test_arg.raw_value != NULL) {
+ if(regex_match(test_arg.raw_value, REGEX_FULL_MATCH(REGEX_REPEAT))) {
+ regmatch_t rmatch[3];
+ char* repeat_value_str;
+
+ regex_get_matches(test_arg.raw_value, REGEX_REPEAT, rmatch, 3, 0);
+ regex_get_match_str(&repeat_value_str, test_arg.raw_value, rmatch, 2);
+
+ get_test_arg_value(&test_arg,
+ repeat_value_str,
+ get_array_length(repeat_value_str));
+ } else {
+ get_test_arg_value(&test_arg,
+ test_arg.raw_value,
+ test_arg.length * test_arg.vec_elements);
+ }
void* read_value = malloc(test_arg.size_in_mem);
if(piglit_cl_read_buffer(env->context->command_queues[0],
--
1.7.11.4
More information about the Piglit
mailing list