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