Advice on removing code redundancy

Gedare Bloom gedare at rtems.org
Wed Aug 19 18:47:04 UTC 2015


Ah, and then usage is:

TEST_BODY(tc_abs, 1, TC_abs)

Or something like that.

On Wed, Aug 19, 2015 at 2:46 PM, Gedare Bloom <gedare at rtems.org> wrote:
> Use paramterized CPP (C pre-processor) macros with string
> concatenation via ##, something like
>
> #define TEST_BODY(test_name, test_num, test_tag) \
> void __run_##test_name##_##test_num##() \
> { \
> ... \
>   rtems_task_start (tc_task_id, ___##test_tag##_##test_num##, 0);
> ... \
> } \
> rtems_task Init (rtems_task_argument) \
> { \
>   tc_finished = false; \
>   ___run_##test_name##_##test_num##(); \
> ...
> } \
>
> Something like that, the syntax may be a bit different but that's the idea.
>
> On Wed, Aug 19, 2015 at 10:26 AM, Saeed Ehteshamifar
> <salpha.2004 at gmail.com> wrote:
>> Hi,
>>
>> Please take a look at following snippet:
>>
>> testcase_executer.cpp:
>> 1.  #include "___TC_abs_1.h"
>> 2.
>> 3.  void ___run_tc_abs_1 ()
>> 4.  {
>> 5.    rtems_id tc_task_id;
>> 6.    rtems_name tc_task_name = rtems_build_name( 'T', 'C', ' ', ' ');
>> 7.    rtems_task_create(
>> 8.    tc_task_name, TC_TASK_PRIORITY, RTEMS_MINIMUM_STACK_SIZE,
>> 9.      RTEMS_DEFAULT_MODES, RTEMS_DEFAULT_ATTRIBUTES, &tc_task_id);
>> 10.
>> 11.   rtems_task_start (tc_task_id, ___TC_abs_1, 0);
>> 12.
>> 13.   for (int i=0; i<TC_TIMEOUT_DIVISION_FACTOR; i++) {
>> 14.     status = rtems_task_wake_after(RTEMS_MICROSECONDS_TO_TICKS(
>> 15.       TC_TIMEOUT/TC_TIMEOUT_DIVISION_FACTOR));
>> 16.     if (tc_finished)
>> 17.       break;
>> 18.   }
>> 19. }
>> 20.
>> 21. rtems_task Init (rtems_task_argument)
>> 22. {
>> 23.   tc_finished = false;
>> 24.   ___run_tc_wait_1 ();
>> 25.   if (tc_finished)
>> 26.     cout << "___TC_wait_1: " << "PASS" << endl;
>> 27.   else
>> 28.     cout << "___TC_wait_1: " << "RESTART" << endl;
>> 29.   cout << endl;
>> 30.
>> 31.   cout << "finito!" << endl;
>> 32.   exit (0);
>> 33. }
>>
>> It's going to be thousands of test cases, and I want to serially run each
>> test case in a task other than Init.
>> In the code above, I've marked symbols that are per each test case, with 3
>> leading underscores (___).
>> This is the basic duplication structure I've come up with. Since RTEMS
>> doesn't support dynamic linking, I'm going to duplicate lines 3 to 19
>> (___run_tc_abs_1) and 23 to 29 for each test case which leads to having a
>> very big source file for testcase_executer.cpp.
>> Is there any better solution that avoids code redundancy that I'm not aware
>> of? Do you have advices on how to change this structure to minimize code
>> redundancy? Any help is much appreciated.
>> Note: ___TC_abs_1 is already defined in a separate CPP file.
>>
>> Thanks for your time.
>>
>> Kind Regards,
>> SAeeD
>>
>> _______________________________________________
>> users mailing list
>> users at rtems.org
>> http://lists.rtems.org/mailman/listinfo/users



More information about the users mailing list