source: CIVL/examples/contracts/contractsSeq/sum.cvl

main
Last change on this file was ea777aa, checked in by Alex Wilton <awilton@…>, 3 years ago

Moved examples, include, build_default.properties, common.xml, and README out from dev.civl.com into the root of the repo.

git-svn-id: svn://vsl.cis.udel.edu/civl/trunk@5704 fb995dde-84ed-4084-dfe6-e5aef3e2452c

  • Property mode set to 100644
File size: 887 bytes
RevLine 
[aaa9c8d]1#include<assert.h>
2#include<stdio.h>
3
4#pragma CIVL ACSL
5
6/*@ assigns \nothing;
7 @ ensures \result == x + y;
8*/
9int add(int x, int y){
10 return x + y;
11}
12
13/*@ requires n >= 0;
14 @ assigns \nothing;
15 @ ensures ((n + 1) * n) == \result * 2;
16 */
17int sum1(int n) {
18 int ret = 0;
19
20 /*@ loop invariant 0 <= i <= n+1;
21 @ loop invariant ret * 2 == (i - 1) * i;
22 @ loop assigns ret, i;
23 @*/
24 for(int i = 0; i <= n; i++)
25 ret = add(ret, i);
26 return ret;
27}
28
29/*@ requires n >= 0;
30 @ assigns \nothing;
31 @ ensures ((n + 1) * n) == \result * 2;
32 */
33int sum2(int n) {
34 int ret = 0;
35 int arg;
36
37 if(n <= 0) return 0;
38 else{
39 arg = sum2(n - 1);
40 ret = add(n, arg);
41 }
42 return ret;
43}
44
45/*@ assigns \nothing;
46 @ ensures \true;
47 @*/
48int main() {
49 int x;
50
51 $havoc(&x);
52 $assume(x >= 0);
53
54 int ret1 = sum1(x);
55 int ret2 = sum2(x);
56 $assert(ret1 == ret2);
57 return 0;
58}
Note: See TracBrowser for help on using the repository browser.