package AssignmentTest {
part def Counter {
attribute count : ScalarValues::Integer := 0;
action incr {
assign count := count + 1;
}
action decr {
assign count := count - 1;
}
}
attribute def Incr;
attribute def Decr;
state def Counting {
part counter : Counter;
entry assign counter.count := 0;
then state wait;
accept Incr
then increment;
accept Decr
then decrement;
state increment {
do assign counter.count := counter.count + 1;
}
then wait;
state decrement {
do assign counter.count := counter.count - 1;
}
then wait;
}
calc def Increment {
in c : Counter;
return : Counter;
perform c.incr;
c
}
action a {
state counting : Counting;
assign counting.counter.count := counting.counter.count + 1;
assign counting.counter.count := Increment(counting.counter).count;
}
}