On Mon, Sep 30, 2013 at 9:47 AM, Tom Stellard <[email protected]> wrote:
> From: Tom Stellard <[email protected]>
>
> 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);
> +                               }

This if/else block is identical to the one above (unless I missed
something)...  can this be consolidated?

--Aaron

>                                 void* read_value = 
> malloc(test_arg.size_in_mem);
>
>                                 
> if(piglit_cl_read_buffer(env->context->command_queues[0],
> --
> 1.7.11.4
>
> _______________________________________________
> Piglit mailing list
> [email protected]
> http://lists.freedesktop.org/mailman/listinfo/piglit
_______________________________________________
Piglit mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/piglit

Reply via email to