heptagon/test/sdc/tracking.ept
2017-02-06 15:32:44 +01:00

141 lines
3.4 KiB
Plaintext

type level = None | Low | Normal | High | Bad
type elevel = Zero| Un | Deux | Trois | Quatre | Cinq
type wSize = NonW | Norm | Larg
node metrics(input :level) returns (st :level)
let
automaton
state Normal
do st = Normal;
unless (input = Low) then Low
| (input = High) then High
| (input = Bad) then Bad
state High
do st = High;
unless (input = Low) then Low
| (input = Normal) then Normal
| (input = Bad) then Bad
state Low
do st = Low;
unless (input = Normal) then Normal
| (input = High) then High
| (input = Bad) then Bad
state Bad
do st = Bad;
unless (input = Low) then Low
| (input = High) then High
| (input = Normal) then Normal
end
tel
node trackeur (s, c1, c2, e : bool) returns (res: int; wEx: elevel; win : wSize; running : bool)
let
automaton
state Off
do res = 0;
wEx = Zero;
win = NonW;
running = false;
unless (s & c1) then Untrackeur_nf
| (s & c2) then Untrackeur_lf
state Untrackeur_nf
do res = 1;
wEx = Cinq;
win = Norm;
running = true;
unless (e) then Off
| (not c1 & c2) then Untrackeur_lf
state Untrackeur_lf
do res = 2;
wEx = Quatre;
win = Larg;
running = true;
unless (e) then Off
| (c1 & not c2) then Untrackeur_nf
end
tel
node tracking(i_objvt, i_deadline, i_indice :level; s, e : bool)
returns (objectives:bool; st_objvt, st_deadline, st_indice :level; res: int; wEx: elevel; win : wSize; running : bool)
contract
assume true
enforce objectives
with ( c3, c1, c2 :bool)
var increase_window_size, speed_up:bool;
sst_objvt, sst_deadline : level;
winbis : wSize;
wExbis : elevel;
st_objvtbis, st_deadlinebis : level;
let
st_objvt = st_objvtbis;
st_deadline = st_deadlinebis;
sst_objvt = (None fby st_objvtbis) ;
sst_deadline = (None fby st_deadlinebis);
increase_window_size = (not (st_objvtbis = High & not ((NonW fby winbis) = NonW)) or not (winbis = Norm));
speed_up = (not (st_deadlinebis = Low & ((Zero fby wExbis) = Cinq)) or not (wExbis = Cinq)) &
(not (st_deadlinebis = Low & ((Zero fby wExbis) = Quatre)) or not (wExbis = Cinq));
objectives = (speed_up) & increase_window_size;
st_objvtbis = inlined metrics(i_objvt);
st_deadlinebis = inlined metrics(i_deadline);
st_indice = inlined metrics(i_indice);
(res, wExbis, winbis, running) = inlined trackeur (s, c1, c2, e);
win = winbis;
wEx = wExbis;
tel
(*
reax -s -a 'sB:d={P:D}' --triang tracking_ctrln/tracking.ctrln
./clean
clear && heptc -hepts -s tracking -target c -target ctrln tracking.ept
reax -a 'sS:d={I:D}' --triang tracking_ctrln/tracking.ctrln && ctrl2ept -n Tracking.tracking
heptc -target c tracking_controller.ept
PDW=$(pwd)
gcc -o sim -I/home/ctrl-a/.opam/4.02.3/lib/heptagon/c/ -I$PDW/tracking_c -I$PDW/tracking_controller_c -I$PDW/tracking_c tracking_c/_main.c tracking_c/tracking.c tracking_c/tracking_types.c tracking_controller_c/tracking_controller.c tracking_controller_c/tracking_controller_types.c
hepts -mod Tracking -node tracking -exec ./sim
PDW=$(pwd)
gcc -o sim -I/home/ctrl-a/.opam/4.02.3/lib/heptagon/c/ -I$PDW/tracking_c -I$PDW/tracking_c tracking_c/_main.c tracking_c/tracking.c tracking_c/tracking_types.c
hepts -mod tracking -node tracking -exec ./sim
*)