source:
CIVL/examples/languageFeatures/conditionalExpression.cvl@
6495bb8
| Last change on this file since 6495bb8 was ea777aa, checked in by , 3 years ago | |
|---|---|
|
|
| File size: 1.1 KB | |
| Rev | Line | |
|---|---|---|
| [36b5ada] | 1 | /* Commandline execution: |
| 2 | * civl verify conditionalExpression.cvl | |
| 3 | * */ | |
| [e6b02c8] | 4 | #include<civlc.cvh> |
| [ba9808f] | 5 | int n = 2; |
| [3ff27cf] | 6 | $assume(n > (5 > 7 ? 1 : 0)); |
| [ba9808f] | 7 | |
| [f79a8a0] | 8 | int sum(int k){ |
| 9 | int sum = 0; | |
| 10 | for(int i = 1; i <= k; i++) | |
| 11 | sum += i; | |
| 12 | return sum; | |
| [90e22fc] | 13 | } |
| 14 | ||
| [f79a8a0] | 15 | void main(){ |
| 16 | int i = 1; | |
| [125b6b5] | 17 | |
| [f79a8a0] | 18 | // This would be |
| 19 | // Location Z: | |
| 20 | // when (n > 2) s = sum(5) goto ... | |
| 21 | // when (!(n > 2)) s = sum(8) goto ... | |
| 22 | int s = sum(n > 2 ? 5 : 8); | |
| 23 | ||
| [d980649] | 24 | $assert(s == 9 * (n > 2 ? 5 : 8) / 2); |
| [f79a8a0] | 25 | |
| [125b6b5] | 26 | // This should be translated into |
| [f79a8a0] | 27 | // Location X: |
| 28 | // when(i>1) n = 1 goto ... | |
| 29 | // when (!(i>1)) n = 2 | |
| 30 | n = i > 1 ? 1 : 2; | |
| [d980649] | 31 | $assert(n == 2); |
| [90e22fc] | 32 | |
| [f79a8a0] | 33 | // This should be translated into |
| 34 | // int v0; | |
| 35 | // if(n > 1) v0 = 1; else v0 = 2; | |
| 36 | // int v1; | |
| 37 | // if(i < 1) v1 = 1; else v1 = 2; | |
| 38 | // n = v0 + v1; | |
| 39 | n = (n > 1 ? 1 : 2) + (i < 1 ? 1 : 2); | |
| [d980649] | 40 | $assert(n == 3); |
| [f79a8a0] | 41 | |
| 42 | // conditional expression as the guard of a loop | |
| 43 | for(int j = 0; (j < 5 ? 1 : 0); j++){ | |
| 44 | n = i * j; | |
| 45 | } | |
| [d980649] | 46 | $assert(n == 4); |
| [f79a8a0] | 47 | |
| 48 | // as the guard of when statement | |
| 49 | $when(n < 1 ? 0 : 1) n = 3; | |
| 50 | ||
| 51 | // as the guard of if statement | |
| 52 | if(n < 1 ? 0 : 1) n = 5; | |
| [d980649] | 53 | $assert(n == 5); |
| [f79a8a0] | 54 | |
| 55 | // nested conditional expression | |
| 56 | s = (s < 30 ? 10 : (n < 40 ? 50 : 6)); | |
| [d980649] | 57 | $assert(s == 50); |
| [f79a8a0] | 58 | } |
Note:
See TracBrowser
for help on using the repository browser.
