[rtems-central commit] validation: Move parts of loop body to a function

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


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

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Mon Aug 16 12:19:27 2021 +0200

validation: Move parts of loop body to a function

---

 rtemsspec/tests/test_validation.py | 41 +++++++++++++++++++++++---------------
 rtemsspec/validation.py            | 25 +++++++++++++++--------
 2 files changed, 42 insertions(+), 24 deletions(-)

diff --git a/rtemsspec/tests/test_validation.py b/rtemsspec/tests/test_validation.py
index 287ee3a..43a2cd7 100644
--- a/rtemsspec/tests/test_validation.py
+++ b/rtemsspec/tests/test_validation.py
@@ -698,6 +698,16 @@ static inline Directive_Entry Directive_PopEntry( Directive_Context *ctx )
   ];
 }
 
+static void Directive_TestVariant( Directive_Context *ctx )
+{
+  Directive_Pre_Name_Prepare( ctx, ctx->Map.pcs[ 0 ] );
+  Directive_Pre_Node_Prepare( ctx, ctx->Map.pcs[ 1 ] );
+  Directive_Pre_Id_Prepare( ctx, ctx->Map.pcs[ 2 ] );
+  Directive_Action( ctx );
+  Directive_Post_Status_Check( ctx, ctx->Map.entry.Post_Status );
+  Directive_Post_Id_Check( ctx, ctx->Map.entry.Post_Id );
+}
+
 /**
  * @fn void T_case_body_Directive( void )
  */
@@ -725,13 +735,7 @@ T_TEST_CASE_FIXTURE( Directive, &Directive_Fixture )
         ++ctx->Map.pcs[ 2 ]
       ) {
         ctx->Map.entry = Directive_PopEntry( ctx );
-
-        Directive_Pre_Name_Prepare( ctx, ctx->Map.pcs[ 0 ] );
-        Directive_Pre_Node_Prepare( ctx, ctx->Map.pcs[ 1 ] );
-        Directive_Pre_Id_Prepare( ctx, ctx->Map.pcs[ 2 ] );
-        Directive_Action( ctx );
-        Directive_Post_Status_Check( ctx, ctx->Map.entry.Post_Status );
-        Directive_Post_Id_Check( ctx, ctx->Map.entry.Post_Id );
+        Directive_TestVariant( ctx );
       }
     }
   }
@@ -2219,6 +2223,19 @@ static inline Action2_Entry Action2_PopEntry( Action2_Context *ctx )
   ];
 }
 
+static void Action2_TestVariant( Action2_Context *ctx )
+{
+  Action2_Pre_A_Prepare(
+    ctx,
+    ctx->Map.entry.Pre_A_NA ? Action2_Pre_A_NA : ctx->Map.pcs[ 0 ]
+  );
+  Action2_Pre_B_Prepare( ctx, ctx->Map.pcs[ 1 ] );
+  Action2_Pre_C_Prepare( ctx, ctx->Map.pcs[ 2 ] );
+  Action2_Action( ctx );
+  Action2_Post_A_Check( ctx, ctx->Map.entry.Post_A );
+  Action2_Post_B_Check( ctx, ctx->Map.entry.Post_B );
+}
+
 static T_fixture_node Action2_Node;
 
 void Action2_Run( int *a, int b, int *c )
@@ -2256,15 +2273,7 @@ void Action2_Run( int *a, int b, int *c )
         }
 
         Action2_Prepare( ctx );
-        Action2_Pre_A_Prepare(
-          ctx,
-          ctx->Map.entry.Pre_A_NA ? Action2_Pre_A_NA : ctx->Map.pcs[ 0 ]
-        );
-        Action2_Pre_B_Prepare( ctx, ctx->Map.pcs[ 1 ] );
-        Action2_Pre_C_Prepare( ctx, ctx->Map.pcs[ 2 ] );
-        Action2_Action( ctx );
-        Action2_Post_A_Check( ctx, ctx->Map.entry.Post_A );
-        Action2_Post_B_Check( ctx, ctx->Map.entry.Post_B );
+        Action2_TestVariant( ctx );
         Action2_Cleanup( ctx );
       }
     }
diff --git a/rtemsspec/validation.py b/rtemsspec/validation.py
index 48c6507..c743b1c 100644
--- a/rtemsspec/validation.py
+++ b/rtemsspec/validation.py
@@ -561,15 +561,9 @@ class _ActionRequirementTestItem(_TestItem):
             content.gap = False
             content.call_function(None, f"{self.ident}_{name}", ["ctx"])
 
-    def _add_loop_body(self, content: CContent,
-                       transition_map: TransitionMap) -> None:
+    def _add_test_variant(self, content: CContent,
+                          transition_map: TransitionMap) -> None:
         entry = "ctx->Map.entry"
-        content.call_function(f"{entry} =", f"{self.ident}_PopEntry", ["ctx"])
-        if transition_map.pre_co_summary[0]:
-            with content.condition(f"{entry}.Skip"):
-                content.append("continue;")
-        content.add_blank_line()
-        self._add_call(content, "test-prepare", "Prepare")
         for index, pre_co in enumerate(self._item["pre-conditions"]):
             content.gap = False
             state = f"ctx->Map.pcs[ {index} ]"
@@ -585,6 +579,18 @@ class _ActionRequirementTestItem(_TestItem):
             content.call_function(None, f"{enum[0]}_Check", [
                 "ctx", f"{entry}.{transition_map.get_post_entry_member(index)}"
             ])
+
+    def _add_loop_body(self, content: CContent,
+                       transition_map: TransitionMap) -> None:
+        entry = "ctx->Map.entry"
+        content.call_function(f"{entry} =", f"{self.ident}_PopEntry", ["ctx"])
+        if transition_map.pre_co_summary[0]:
+            with content.condition(f"{entry}.Skip"):
+                content.append("continue;")
+            content.add_blank_line()
+        self._add_call(content, "test-prepare", "Prepare")
+        content.gap = False
+        content.call_function(None, f"{self.ident}_TestVariant", ["ctx"])
         self._add_call(content, "test-cleanup", "Cleanup")
 
     def _add_for_loops(self, content: CContent, transition_map: TransitionMap,
@@ -610,6 +616,9 @@ class _ActionRequirementTestItem(_TestItem):
                 "ctx->Map.index = index + 1;", f"return {self.ident}_Entries[",
                 f"  {self.ident}_Map[ index ]", "];"
             ])
+        with content.function("static void", f"{self.ident}_TestVariant",
+                              [f"{self.context} *ctx"]):
+            self._add_test_variant(content, transition_map)
         fixture = f"{self.ident}_Fixture"
         prologue = CContent()
         epilogue = CContent()



More information about the vc mailing list