Add an algorithm to split an automaton in several automata. * bench/scc-stats: New directory. Contains input files and test program for computing statistics. * bench/split-product: New directory. Contains test program for synchronised product on splitted automata. * bench/split-product/models: New directory. Contains Promela files and LTL formulae that should be verified by the models. * src/tgba/tgbafromfile.cc, src/tgba/tgbafromfile.hh: New files. Small class to avoid long initializations with numerous constants when translating to TGBA many LTL formulae from a given file. * src/tgbaalgos/cutscc.cc, src/tgbaalgos/cutscc.hh: New file. From a single automaton, create, at most, X sub automata. * src/tgbaalgos/scc.cc, src/tgbaalgos/scc.hh: Adjust to compute self-loops count.
43 lines
617 B
Promela
43 lines
617 B
Promela
#define w1 client[0]@wait
|
|
#define s1 client[0]@served
|
|
|
|
#define C 3
|
|
#define S 3
|
|
|
|
chan clserv = [C] of { int };
|
|
chan servcl = [S] of { int };
|
|
|
|
active [C] proctype client() {
|
|
/* the _pid's are: 0 .. C-1 */
|
|
|
|
served:
|
|
if
|
|
:: (1) -> goto request;
|
|
fi;
|
|
request:
|
|
if
|
|
:: (1) -> clserv!_pid; goto wait;
|
|
fi;
|
|
wait:
|
|
if
|
|
:: servcl?eval(_pid); goto served;
|
|
fi;
|
|
}
|
|
|
|
active [S] proctype server() {
|
|
/* the _pid's are: 0 .. S-1 */
|
|
byte id;
|
|
|
|
wait:
|
|
if
|
|
:: clserv?id -> goto work;
|
|
fi;
|
|
work:
|
|
if
|
|
:: (1) -> goto reply;
|
|
fi;
|
|
reply:
|
|
if
|
|
:: (1) -> servcl!id; goto wait;
|
|
fi;
|
|
}
|