diff --git a/src/plugins/wp/tests/wp_gallery/euclid3.c b/src/plugins/wp/tests/wp_gallery/euclid3.c new file mode 100644 index 0000000000000000000000000000000000000000..8276d9682a602c7fa1538ca60cf842c3cceadfcf --- /dev/null +++ b/src/plugins/wp/tests/wp_gallery/euclid3.c @@ -0,0 +1,43 @@ +#include <limits.h> + +//@ import why3: number::Gcd; + +//@ import why3: int::MinMax; + +/*@ + requires \abs(a) <= INT_MAX ; + requires \abs(b) <= INT_MAX ; + assigns \nothing; + ensures \result == Gcd::gcd(a,b); +*/ + +int euclid_gcd(int a, int b) +{ + int r; + /*@ + loop assigns a, b, r; + loop invariant Gcd::gcd(a,b) == \at( Gcd::gcd(a,b), Pre ); + loop variant \abs(b); + */ + while( b != 0 ) { + r = b ; + b = a % b ; + a = r ; + } + return a < 0 ? -a : a; +} + +/*@ + requires \abs(a) <= INT_MAX; + requires \abs(b) <= INT_MAX; + requires \abs(c) <= INT_MAX; + requires \abs(d) <= INT_MAX; + assigns \nothing; + ensures \result == Gcd::gcd(MinMax::min(a,b), MinMax::max(c,d) ); +*/ +int minmax_gcd(int a, int b, int c, int d) +{ + int x = (a > b) ? b : a; + int y = (c > d) ? c : d; + return euclid_gcd(x,y); +} diff --git a/src/plugins/wp/tests/wp_gallery/external-import.c b/src/plugins/wp/tests/wp_gallery/external-import.c new file mode 100644 index 0000000000000000000000000000000000000000..1751fa492643deae669a441c4427561a35db9ee5 --- /dev/null +++ b/src/plugins/wp/tests/wp_gallery/external-import.c @@ -0,0 +1,23 @@ +#include <limits.h> + +//@ import why3: summodule::Sum; + +/*@ + requires \abs(a) <= INT_MAX ; + requires \abs(b) <= INT_MAX ; + assigns \nothing; + ensures \result == Sum::sum(a,b); +*/ +int sum (int a, int b) { + + /*@ + loop assigns a, b; + loop invariant a <= a + b; + loop variant b; + */ + while( b != 0){ + a+=1; + b-=1; + } + return a; +}