diff options
Diffstat (limited to 'Test/civl/parallel1.bpl')
-rw-r--r-- | Test/civl/parallel1.bpl | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/Test/civl/parallel1.bpl b/Test/civl/parallel1.bpl new file mode 100644 index 00000000..ec24342e --- /dev/null +++ b/Test/civl/parallel1.bpl @@ -0,0 +1,48 @@ +// RUN: %boogie -noinfer "%s" > "%t" +// RUN: %diff "%s.expect" "%t" +var {:layer 0,1} g:int; + +procedure {:yields} {:layer 1} PB() +{ + yield; + call Incr(); + yield; +} + +procedure {:yields} {:layer 0,1} Incr(); +ensures {:atomic} +|{A: + g := g + 1; return true; +}|; + +procedure {:yields} {:layer 0,1} Set(v: int); +ensures {:atomic} +|{A: + g := v; return true; +}|; + +procedure {:yields} {:layer 1} PC() +ensures {:layer 1} g == 3; +{ + yield; + call Set(3); + yield; + assert {:layer 1} g == 3; +} + +procedure {:yields} {:layer 1} PD() +{ + call PC(); + assert {:layer 1} g == 3; + yield; +} + +procedure {:yields} {:layer 1} Main() +{ + yield; + while (*) + { + par PB() | PC() | PD(); + } + yield; +} |