[rtems-central commit] validation: Simplify pre-condition N/A support

Sebastian Huber sebh at rtems.org
Tue Aug 17 07:36:33 UTC 2021


Module:    rtems-central
Branch:    master
Commit:    5f798f4804a315d870797bd4bfa5ee399cc2eb19
Changeset: http://git.rtems.org/rtems-central/commit/?id=5f798f4804a315d870797bd4bfa5ee399cc2eb19

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Fri Aug 13 21:49:52 2021 +0200

validation: Simplify pre-condition N/A support

---

 rtemsspec/tests/test_validation.py | 13 ++++---------
 rtemsspec/validation.py            | 26 +++++++-------------------
 2 files changed, 11 insertions(+), 28 deletions(-)

diff --git a/rtemsspec/tests/test_validation.py b/rtemsspec/tests/test_validation.py
index e5fb890..1fef4bf 100644
--- a/rtemsspec/tests/test_validation.py
+++ b/rtemsspec/tests/test_validation.py
@@ -2225,7 +2225,6 @@ void Action2_Run( int *a, int b, int *c )
         ++ctx->pcs[ 2 ]
       ) {
         Action2_Entry entry;
-        size_t pcs[ 3 ];
 
         entry = Action2_GetEntry( index );
         ++index;
@@ -2234,21 +2233,17 @@ void Action2_Run( int *a, int b, int *c )
           continue;
         }
 
-        memcpy( pcs, ctx->pcs, sizeof( pcs ) );
-
-        if ( entry.Pre_A_NA ) {
-          ctx->pcs[ 0 ] = Action2_Pre_A_NA;
-        }
-
         Action2_Prepare( ctx );
-        Action2_Pre_A_Prepare( ctx, ctx->pcs[ 0 ] );
+        Action2_Pre_A_Prepare(
+          ctx,
+          entry.Pre_A_NA ? Action2_Pre_A_NA : ctx->pcs[ 0 ]
+        );
         Action2_Pre_B_Prepare( ctx, ctx->pcs[ 1 ] );
         Action2_Pre_C_Prepare( ctx, ctx->pcs[ 2 ] );
         Action2_Action( ctx );
         Action2_Post_A_Check( ctx, entry.Post_A );
         Action2_Post_B_Check( ctx, entry.Post_B );
         Action2_Cleanup( ctx );
-        memcpy( ctx->pcs, pcs, sizeof( ctx->pcs ) );
       }
     }
   }
diff --git a/rtemsspec/validation.py b/rtemsspec/validation.py
index 8e14869..8b76fe9 100644
--- a/rtemsspec/validation.py
+++ b/rtemsspec/validation.py
@@ -554,30 +554,22 @@ class _ActionRequirementTestItem(_TestItem):
 
     def _add_loop_body(self, content: CContent,
                        transition_map: TransitionMap) -> None:
-        has_pre_co_na = max(transition_map.pre_co_summary[1:])
         content.add(f"{self.ident}_Entry entry;")
-        if has_pre_co_na:
-            content.append(f"size_t pcs[ {self._pre_co_count} ];")
         content.call_function("entry =", f"{self.ident}_GetEntry", ["index"])
         content.append("++index;")
         if transition_map.pre_co_summary[0]:
             with content.condition("entry.Skip"):
                 content.append("continue;")
-        if has_pre_co_na:
-            content.call_function(None, "memcpy",
-                                  ["pcs", "ctx->pcs", "sizeof( pcs )"])
-            for index, pre_co in enumerate(self._item["pre-conditions"]):
-                if transition_map.pre_co_summary[index + 1]:
-                    name = pre_co["name"]
-                    with content.condition(f"entry.Pre_{name}_NA"):
-                        enum_na = self._pre_co_idx_to_enum[index][-1]
-                        content.append(f"ctx->pcs[ {index} ] = {enum_na};")
         content.add_blank_line()
         self._add_call(content, "test-prepare", "Prepare")
-        for index, enum in enumerate(self._pre_co_idx_to_enum):
+        for index, pre_co in enumerate(self._item["pre-conditions"]):
             content.gap = False
-            content.call_function(None, f"{enum[0]}_Prepare",
-                                  ["ctx", f"ctx->pcs[ {index} ]"])
+            state = f"ctx->pcs[ {index} ]"
+            if transition_map.pre_co_summary[index + 1]:
+                enum_na = self._pre_co_idx_to_enum[index][-1]
+                state = f"entry.Pre_{pre_co['name']}_NA ? {enum_na} : {state}"
+            prepare = f"{self._pre_co_idx_to_enum[index][0]}_Prepare"
+            content.call_function(None, prepare, ["ctx", state])
         self._add_call(content, "test-action", "Action")
         for index, enum in enumerate(self._post_co_idx_to_enum):
             content.gap = False
@@ -585,10 +577,6 @@ class _ActionRequirementTestItem(_TestItem):
                 "ctx", f"entry.{transition_map.get_post_entry_member(index)}"
             ])
         self._add_call(content, "test-cleanup", "Cleanup")
-        if has_pre_co_na:
-            content.gap = False
-            content.call_function(None, "memcpy",
-                                  ["ctx->pcs", "pcs", "sizeof( ctx->pcs )"])
 
     def _add_for_loops(self, content: CContent, transition_map: TransitionMap,
                        index: int) -> None:



More information about the vc mailing list