summaryrefslogtreecommitdiff
path: root/Test/inline/test4.bpl
blob: 2a646b58f9fe0a63a3e84cc853d3418f868214f5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
// RUN: %boogie -inline:spec -print:- -env:0 -printInlined -noinfer "%s" > "%t"
// RUN: %diff "%s.expect" "%t"

procedure main(x:int)
{
	var A:[int]int;
	var i:int;
	var b:bool;
	var size:int;
	
	call i,b := find(A, size, x);

	if(b) {
		assert(i > 0 && A[i] == x);
	}

	return;
}

procedure {:inline 1} find(A:[int]int, size:int, x:int) returns (ret:int, found:bool)
{
	var i:int;
	var b:bool;

	ret := -1;
	b := false;
	found := b;
	i := 0;

	while(i < size) {
		call b := check(A, i, x);
		if(b) {
		      ret := i;
		      found := b;
		      break;
		}
	
	}

	return;

}


procedure {:inline 3} check (A:[int]int, i:int, c:int) returns (ret:bool)
	  requires i >= 0;
	  ensures (old(A[i]) > c) ==> ret == true;
{
	if(A[i] == c) {
		ret := true;
	} else {
	       ret := false;
	}
	return;
}