summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2021-08-13 21:49:52 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2021-08-16 12:33:36 +0200
commit5f798f4804a315d870797bd4bfa5ee399cc2eb19 (patch)
tree4e2a3904af3fdc93dd5b3150ec14bc443da067d5
parentmodules: Update rtems (diff)
downloadrtems-central-5f798f4804a315d870797bd4bfa5ee399cc2eb19.tar.bz2
validation: Simplify pre-condition N/A support
-rw-r--r--rtemsspec/tests/test_validation.py13
-rw-r--r--rtemsspec/validation.py26
2 files changed, 11 insertions, 28 deletions
diff --git a/rtemsspec/tests/test_validation.py b/rtemsspec/tests/test_validation.py
index e5fb8901..1fef4bfe 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 8e14869d..8b76fe99 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: