mirror of
https://github.com/smyalygames/checklist-tester.git
synced 2025-05-18 14:34:12 +02:00
feat(formal): add type for item and procedure item
This commit is contained in:
parent
bd01c128b0
commit
1044f9d252
@ -96,6 +96,12 @@ types
|
|||||||
check : SwitchState
|
check : SwitchState
|
||||||
checked : bool;
|
checked : bool;
|
||||||
|
|
||||||
|
--@doc This is the item with the complimentary item in the chcecklist
|
||||||
|
ItemAndChecklistItem ::
|
||||||
|
item : ItemObject
|
||||||
|
checklist: ChecklistItem
|
||||||
|
inv i == i.item.type = i.checklist.type;
|
||||||
|
|
||||||
--@doc A section of a checklist, e.g. Landing Checklist
|
--@doc A section of a checklist, e.g. Landing Checklist
|
||||||
Procedure = seq of ChecklistItem
|
Procedure = seq of ChecklistItem
|
||||||
inv p ==
|
inv p ==
|
||||||
@ -111,8 +117,8 @@ types
|
|||||||
functions
|
functions
|
||||||
-- PROCEDURES
|
-- PROCEDURES
|
||||||
--@doc Finds the index of the next item in the procedure that needs to be completed
|
--@doc Finds the index of the next item in the procedure that needs to be completed
|
||||||
procedure_next_index: Procedure -> nat1
|
procedure_next_item_index: Procedure -> nat1
|
||||||
procedure_next_index(p) ==
|
procedure_next_item_index(p) ==
|
||||||
hd [ x | x in set {1,...,len p} & p(x).checked = false]
|
hd [ x | x in set {1,...,len p} & p(x).checked = false]
|
||||||
pre
|
pre
|
||||||
-- Checks procedure has not already been completed
|
-- Checks procedure has not already been completed
|
||||||
@ -125,6 +131,18 @@ functions
|
|||||||
else
|
else
|
||||||
true;
|
true;
|
||||||
|
|
||||||
|
-- --@doc Checks if all the procedures have been completed
|
||||||
|
-- check_all_proc_completed: Checklist -> bool
|
||||||
|
-- check_all_proc_completed(c) ==
|
||||||
|
-- false not in set { procedure_completed(c(x)) | x in set {1,...,len c} };
|
||||||
|
|
||||||
|
-- --@doc Gives the index for the next procedure to complete
|
||||||
|
-- next_procedure: Checklist -> nat1
|
||||||
|
-- next_procedure(c) ==
|
||||||
|
-- hd [ x | x in set {1,...,len c} & not procedure_completed(c(x))]
|
||||||
|
-- post
|
||||||
|
-- RESULT <= len c;
|
||||||
|
|
||||||
--@doc Checks if the procedure has been completed
|
--@doc Checks if the procedure has been completed
|
||||||
procedure_completed: Procedure -> bool
|
procedure_completed: Procedure -> bool
|
||||||
procedure_completed(p) ==
|
procedure_completed(p) ==
|
||||||
@ -133,7 +151,7 @@ functions
|
|||||||
--@doc Checks if the next item in the procedure has been completed
|
--@doc Checks if the next item in the procedure has been completed
|
||||||
check_proc_item_complete: Procedure * Aircraft -> bool
|
check_proc_item_complete: Procedure * Aircraft -> bool
|
||||||
check_proc_item_complete(p, a) ==
|
check_proc_item_complete(p, a) ==
|
||||||
let procItem = p(procedure_next_index(p)),
|
let procItem = p(procedure_next_item_index(p)),
|
||||||
item = a.items(procItem.procedure) in
|
item = a.items(procItem.procedure) in
|
||||||
|
|
||||||
--TODO need to be able to check for different types of Items
|
--TODO need to be able to check for different types of Items
|
||||||
@ -144,27 +162,43 @@ functions
|
|||||||
--@doc Marks next item in procedure as complete
|
--@doc Marks next item in procedure as complete
|
||||||
mark_proc_item_complete: Procedure -> Procedure
|
mark_proc_item_complete: Procedure -> Procedure
|
||||||
mark_proc_item_complete(p) ==
|
mark_proc_item_complete(p) ==
|
||||||
let i = procedure_next_index(p), item = p(i) in
|
let i = procedure_next_item_index(p), item = p(i) in
|
||||||
p ++ {i |-> complete_item(item)}
|
p ++ {i |-> complete_item(item)}
|
||||||
pre
|
pre
|
||||||
procedure_completed(p) = false;
|
procedure_completed(p) = false;
|
||||||
|
|
||||||
--@doc Completes an Item in the procedure on the Aircraft
|
--@doc Completes an item in the procedure
|
||||||
do_proc_item: ChecklistItem * Aircraft -> Aircraft
|
do_proc_item: ItemObject * ChecklistItem -> ItemAndChecklistItem
|
||||||
do_proc_item(p, a) ==
|
do_proc_item(i, p) ==
|
||||||
let itemName = p.procedure, item = a.items(p.procedure), objective = p.check in
|
let objective = p.check,
|
||||||
|
checkckItem = complete_item(p) in
|
||||||
-- Checks if the item is in the objective desired by the checklist
|
-- Checks if the item is in the objective desired by the checklist
|
||||||
if check_item_in_position(item, objective) then
|
if check_item_in_position(i, objective) then
|
||||||
a
|
mk_ItemAndChecklistItem(i, checkckItem)
|
||||||
else
|
else
|
||||||
mk_Aircraft(a.items ++ {itemName |-> move_item(a.items(itemName), objective)}, a.checklist)
|
mk_ItemAndChecklistItem(move_item(i, p.check), checkckItem)
|
||||||
pre
|
pre
|
||||||
p.checked = false;
|
p.checked = false
|
||||||
|
post
|
||||||
|
-- Checks the item has been moved correctly
|
||||||
|
check_item_in_position(RESULT.item, p.check);
|
||||||
|
|
||||||
|
--@doc Gets the procedure by the name, n.
|
||||||
|
get_procedure: String * Aircraft -> Procedure
|
||||||
|
get_procedure(n, a) ==
|
||||||
|
a.checklist(n)
|
||||||
|
pre
|
||||||
|
n in set dom a.checklist;
|
||||||
|
|
||||||
--@doc Completes a procedure step by step
|
--@doc Completes a procedure step by step
|
||||||
|
-- p = Name of procedure, a = Aircraft
|
||||||
complete_procedure: String * Aircraft -> Aircraft
|
complete_procedure: String * Aircraft -> Aircraft
|
||||||
complete_procedure(p, a) ==
|
complete_procedure(p, a) ==
|
||||||
is not yet specified;
|
is not yet specified
|
||||||
|
pre
|
||||||
|
let checklist = a.checklist in
|
||||||
|
p in set dom checklist
|
||||||
|
and not procedure_completed(checklist(p));
|
||||||
|
|
||||||
-- AIRCRAFT ITEMS
|
-- AIRCRAFT ITEMS
|
||||||
--@doc Marks ChecklistItem as complete
|
--@doc Marks ChecklistItem as complete
|
||||||
|
Loading…
x
Reference in New Issue
Block a user