Skip to content
Snippets Groups Projects
Commit 424bba0b authored by Patrick Baudin's avatar Patrick Baudin
Browse files

[WP/test] adding a test initializing multidimentianal arrays

parent 57c8e509
No related branches found
No related tags found
No related merge requests found
This diff is collapsed.
This diff is collapsed.
# frama-c -wp -wp-timeout 90 -wp-steps 1500 [...]
[kernel] Parsing tests/wp_typed/user_init.i (no preprocessing)
[wp] Running WP plugin...
[wp] Loading driver 'share/wp.driver'
[wp] [CFG] Goal init_exits : Valid (Unreachable)
[wp] [CFG] Goal init_t1_exits : Valid (Unreachable)
[wp] [CFG] Goal init_t2_v1_exits : Valid (Unreachable)
[wp] [CFG] Goal init_t2_v2_exits : Valid (Unreachable)
[wp] [CFG] Goal init_t2_v3_exits : Valid (Unreachable)
[wp] Warning: Missing RTE guards
[wp] 89 goals scheduled
[wp] [Alt-Ergo] Goal typed_init_ensures : Valid
[wp] [Alt-Ergo] Goal typed_init_loop_invariant_Partial_preserved : Valid
[wp] [Qed] Goal typed_init_loop_invariant_Partial_established : Valid
[wp] [Alt-Ergo] Goal typed_init_loop_invariant_Range_preserved : Valid
[wp] [Qed] Goal typed_init_loop_invariant_Range_established : Valid
[wp] [Qed] Goal typed_init_loop_assigns_part1 : Valid
[wp] [Alt-Ergo] Goal typed_init_loop_assigns_part2 : Valid
[wp] [Qed] Goal typed_init_assigns : Valid
[wp] [Qed] Goal typed_init_loop_variant_decrease : Valid
[wp] [Qed] Goal typed_init_loop_variant_positive : Valid
[wp] [Alt-Ergo] Goal typed_init_t1_ensures : Valid
[wp] [Alt-Ergo] Goal typed_init_t1_loop_invariant_Partial_preserved : Valid
[wp] [Qed] Goal typed_init_t1_loop_invariant_Partial_established : Valid
[wp] [Alt-Ergo] Goal typed_init_t1_loop_invariant_Range_preserved : Valid
[wp] [Qed] Goal typed_init_t1_loop_invariant_Range_established : Valid
[wp] [Qed] Goal typed_init_t1_loop_assigns : Valid
[wp] [Qed] Goal typed_init_t1_assigns_part1 : Valid
[wp] [Qed] Goal typed_init_t1_assigns_part2 : Valid
[wp] [Alt-Ergo] Goal typed_init_t1_loop_variant_decrease : Valid
[wp] [Qed] Goal typed_init_t1_loop_variant_positive : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_bis_v1_ensures : Valid
[wp] [Qed] Goal typed_init_t2_bis_v1_exits : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_bis_v1_loop_invariant_Partial_preserved : Valid
[wp] [Qed] Goal typed_init_t2_bis_v1_loop_invariant_Partial_established : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_bis_v1_loop_invariant_Range_preserved : Valid
[wp] [Qed] Goal typed_init_t2_bis_v1_loop_invariant_Range_established : Valid
[wp] [Qed] Goal typed_init_t2_bis_v1_assert_Offset : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_bis_v1_loop_variant_decrease : Valid
[wp] [Qed] Goal typed_init_t2_bis_v1_loop_variant_positive : Valid
[wp] [Qed] Goal typed_init_t2_bis_v1_call_init_requires : Valid
[wp] [Qed] Goal typed_init_t2_bis_v1_call_init_requires_2 : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_bis_v2_ensures : Valid
[wp] [Qed] Goal typed_init_t2_bis_v2_exits : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_bis_v2_loop_invariant_Partial_preserved : Valid
[wp] [Qed] Goal typed_init_t2_bis_v2_loop_invariant_Partial_established : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_bis_v2_loop_invariant_Range_preserved : Valid
[wp] [Qed] Goal typed_init_t2_bis_v2_loop_invariant_Range_established : Valid
[wp] [Qed] Goal typed_init_t2_bis_v2_assert_Offset_i : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_bis_v2_loop_variant_decrease : Valid
[wp] [Qed] Goal typed_init_t2_bis_v2_loop_variant_positive : Valid
[wp] [Qed] Goal typed_init_t2_bis_v2_call_init_requires : Valid
[wp] [Qed] Goal typed_init_t2_bis_v2_call_init_requires_2 : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_v1_ensures : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_v1_loop_invariant_Partial_i_preserved : Valid
[wp] [Qed] Goal typed_init_t2_v1_loop_invariant_Partial_i_established : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_v1_loop_invariant_Range_i_preserved : Valid
[wp] [Qed] Goal typed_init_t2_v1_loop_invariant_Range_i_established : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_v1_loop_invariant_Partial_j_preserved : Valid
[wp] [Qed] Goal typed_init_t2_v1_loop_invariant_Partial_j_established : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_v1_loop_invariant_Previous_i_preserved : Valid
[wp] [Qed] Goal typed_init_t2_v1_loop_invariant_Previous_i_established : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_v1_loop_invariant_Range_j_preserved : Valid
[wp] [Qed] Goal typed_init_t2_v1_loop_invariant_Range_j_established : Valid
[wp] [Qed] Goal typed_init_t2_v1_assert_Last_j : Valid
[wp] [Qed] Goal typed_init_t2_v1_assert_Last_i : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_v1_loop_variant_decrease : Valid
[wp] [Qed] Goal typed_init_t2_v1_loop_variant_positive : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_v1_loop_variant_2_decrease : Valid
[wp] [Qed] Goal typed_init_t2_v1_loop_variant_2_positive : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_v2_ensures : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_v2_loop_invariant_Partial_i_preserved : Valid
[wp] [Qed] Goal typed_init_t2_v2_loop_invariant_Partial_i_established : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_v2_loop_invariant_Range_i_preserved : Valid
[wp] [Qed] Goal typed_init_t2_v2_loop_invariant_Range_i_established : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_v2_loop_invariant_Partial_j_preserved : Valid
[wp] [Qed] Goal typed_init_t2_v2_loop_invariant_Partial_j_established : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_v2_loop_invariant_Previous_i_preserved : Valid
[wp] [Qed] Goal typed_init_t2_v2_loop_invariant_Previous_i_established : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_v2_loop_invariant_Range_j_preserved : Valid
[wp] [Qed] Goal typed_init_t2_v2_loop_invariant_Range_j_established : Valid
[wp] [Qed] Goal typed_init_t2_v2_assert_Last_j : Valid
[wp] [Qed] Goal typed_init_t2_v2_assert_Last_i : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_v2_loop_variant_decrease : Valid
[wp] [Qed] Goal typed_init_t2_v2_loop_variant_positive : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_v2_loop_variant_2_decrease : Valid
[wp] [Qed] Goal typed_init_t2_v2_loop_variant_2_positive : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_v3_ensures : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_v3_loop_invariant_Range_i_preserved : Valid
[wp] [Qed] Goal typed_init_t2_v3_loop_invariant_Range_i_established : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_v3_loop_invariant_Partial_j_preserved : Valid
[wp] [Qed] Goal typed_init_t2_v3_loop_invariant_Partial_j_established : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_v3_loop_invariant_Range_j_preserved : Valid
[wp] [Qed] Goal typed_init_t2_v3_loop_invariant_Range_j_established : Valid
[wp] [Qed] Goal typed_init_t2_v3_assert_Last_j : Valid
[wp] [Qed] Goal typed_init_t2_v3_assert_Last_i : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_v3_loop_variant_decrease : Valid
[wp] [Qed] Goal typed_init_t2_v3_loop_variant_positive : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_v3_loop_variant_2_decrease : Valid
[wp] [Qed] Goal typed_init_t2_v3_loop_variant_2_positive : Valid
[wp] Proved goals: 89 / 89
Qed: 51
Alt-Ergo: 38
[wp] Report in: 'tests/wp_typed/oracle_qualif/user_init.0.report.json'
[wp] Report out: 'tests/wp_typed/result_qualif/user_init.0.report.json'
-------------------------------------------------------------
Functions WP Alt-Ergo Total Success
init 6 4 (80..104) 10 100%
init_t1 6 4 (12..24) 10 100%
init_t2_v1 9 8 (40..52) 17 100%
init_t2_v2 9 8 (32..44) 17 100%
init_t2_v3 7 6 (16..28) 13 100%
init_t2_bis_v1 7 4 (208..256) 11 100%
init_t2_bis_v2 7 4 (192..240) 11 100%
-------------------------------------------------------------
# frama-c -wp -wp-timeout 90 -wp-steps 1500 [...]
[kernel] Parsing tests/wp_typed/user_init.i (no preprocessing)
[wp] Running WP plugin...
[wp] Loading driver 'share/wp.driver'
[wp] [CFG] Goal init_exits : Valid (Unreachable)
[wp] [CFG] Goal init_t1_exits : Valid (Unreachable)
[wp] [CFG] Goal init_t2_v1_exits : Valid (Unreachable)
[wp] [CFG] Goal init_t2_v2_exits : Valid (Unreachable)
[wp] [CFG] Goal init_t2_v3_exits : Valid (Unreachable)
[wp] Warning: Missing RTE guards
[wp] 8 goals scheduled
[wp] [Qed] Goal typed_init_t2_v2_loop_assigns_part1 : Valid
[wp] Warning: creating session directory `tests/wp_typed/result_qualif/user_init-session/test-1'
[wp] Warning: creating session directory `tests/wp_typed/result_qualif/user_init-session/test-1/wp'
[wp] [Tactical] Goal typed_init_t2_v2_loop_assigns_part2 : Valid
[wp] [Tactical] Goal typed_init_t2_v2_loop_assigns_part3 : Valid
[wp] [Qed] Goal typed_init_t2_v2_loop_assigns_2_part1 : Valid
[wp] [Tactical] Goal typed_init_t2_v2_loop_assigns_2_part2 : Valid
[wp] [Tactical] Goal typed_init_t2_v2_loop_assigns_2_part3 : Valid
[wp] [Tactical] Goal typed_init_t2_v2_assigns_part1 : Valid
[wp] [Tactical] Goal typed_init_t2_v2_assigns_part2 : Valid
[wp] Proved goals: 8 / 8
Qed: 3
Alt-Ergo: 0 (unsuccess: 5)
Script: 5
[wp] Updated session with 5 new valid scripts.
[wp] Report in: 'tests/wp_typed/oracle_qualif/user_init.1.report.json'
[wp] Report out: 'tests/wp_typed/result_qualif/user_init.1.report.json'
-------------------------------------------------------------
Functions WP Alt-Ergo Total Success
init_t2_v2 3 - (16..28) 8 100%
-------------------------------------------------------------
# frama-c -wp -wp-timeout 90 -wp-steps 300 [...]
[kernel] Parsing tests/wp_typed/user_init.i (no preprocessing)
[wp] Running WP plugin...
[wp] Loading driver 'share/wp.driver'
[wp] [CFG] Goal init_exits : Valid (Unreachable)
[wp] [CFG] Goal init_t1_exits : Valid (Unreachable)
[wp] [CFG] Goal init_t2_v1_exits : Valid (Unreachable)
[wp] [CFG] Goal init_t2_v2_exits : Valid (Unreachable)
[wp] [CFG] Goal init_t2_v3_exits : Valid (Unreachable)
[wp] Warning: Missing RTE guards
[wp] 33 goals scheduled
[wp] [Qed] Goal typed_init_t2_bis_v1_loop_assigns_part1 : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_bis_v1_loop_assigns_part2 : Unsuccess
[wp] [Alt-Ergo] Goal typed_init_t2_bis_v1_loop_assigns_part3 : Unsuccess
[wp] [Qed] Goal typed_init_t2_bis_v1_assigns_exit_part1 : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_bis_v1_assigns_exit_part2 : Unsuccess
[wp] [Qed] Goal typed_init_t2_bis_v1_assigns_exit_part3 : Valid
[wp] [Qed] Goal typed_init_t2_bis_v1_assigns_normal_part1 : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_bis_v1_assigns_normal_part2 : Unsuccess
[wp] [Qed] Goal typed_init_t2_bis_v2_loop_assigns_part1 : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_bis_v2_loop_assigns_part2 : Unsuccess
[wp] [Alt-Ergo] Goal typed_init_t2_bis_v2_loop_assigns_part3 : Unsuccess
[wp] [Qed] Goal typed_init_t2_bis_v2_assigns_exit_part1 : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_bis_v2_assigns_exit_part2 : Unsuccess
[wp] [Qed] Goal typed_init_t2_bis_v2_assigns_exit_part3 : Valid
[wp] [Qed] Goal typed_init_t2_bis_v2_assigns_normal_part1 : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_bis_v2_assigns_normal_part2 : Unsuccess
[wp] [Qed] Goal typed_init_t2_v1_loop_assigns_part1 : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_v1_loop_assigns_part2 : Unsuccess
[wp] [Alt-Ergo] Goal typed_init_t2_v1_loop_assigns_part3 : Unsuccess
[wp] [Qed] Goal typed_init_t2_v1_loop_assigns_2_part1 : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_v1_loop_assigns_2_part2 : Unsuccess
[wp] [Alt-Ergo] Goal typed_init_t2_v1_loop_assigns_2_part3 : Unsuccess
[wp] [Qed] Goal typed_init_t2_v1_assigns_part1 : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_v1_assigns_part2 : Unsuccess
[wp] [Alt-Ergo] Goal typed_init_t2_v3_loop_invariant_lack_Partial_i_preserved : Unsuccess
[wp] [Qed] Goal typed_init_t2_v3_loop_invariant_lack_Partial_i_established : Valid
[wp] [Qed] Goal typed_init_t2_v3_loop_assigns_part1 : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_v3_loop_assigns_part2 : Unsuccess
[wp] [Alt-Ergo] Goal typed_init_t2_v3_loop_assigns_part3 : Unsuccess
[wp] [Qed] Goal typed_init_t2_v3_loop_assigns_2_part1 : Valid
[wp] [Qed] Goal typed_init_t2_v3_loop_assigns_2_part2 : Valid
[wp] [Qed] Goal typed_init_t2_v3_assigns_part1 : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_v3_assigns_part2 : Unsuccess
[wp] Proved goals: 16 / 33
Qed: 16
Alt-Ergo: 0 (unsuccess: 17)
[wp] Report in: 'tests/wp_typed/oracle_qualif/user_init.2.report.json'
[wp] Report out: 'tests/wp_typed/result_qualif/user_init.2.report.json'
-------------------------------------------------------------
Functions WP Alt-Ergo Total Success
init_t2_v1 3 - 8 37.5%
init_t2_v3 5 - 9 55.6%
init_t2_bis_v1 4 - 8 50.0%
init_t2_bis_v2 4 - 8 50.0%
-------------------------------------------------------------
# frama-c -wp -wp-timeout 90 -wp-steps 1500 [...]
[kernel] Parsing tests/wp_typed/user_init.i (no preprocessing)
[wp] Running WP plugin...
[wp] Loading driver 'share/wp.driver'
[wp] [CFG] Goal init_t1_exits : Valid (Unreachable)
[wp] [CFG] Goal init_t2_exits : Valid (Unreachable)
[wp] Warning: Missing RTE guards
[wp] 54 goals scheduled
[wp] [Alt-Ergo] Goal typed_init_ensures : Valid
[wp] [Alt-Ergo] Goal typed_init_loop_invariant_Partial_preserved : Valid
[wp] [Qed] Goal typed_init_loop_invariant_Partial_established : Valid
[wp] [Alt-Ergo] Goal typed_init_loop_invariant_Range_preserved : Valid
[wp] [Qed] Goal typed_init_loop_invariant_Range_established : Valid
[wp] [Qed] Goal typed_init_loop_assigns_part1 : Valid
[wp] [Alt-Ergo] Goal typed_init_loop_assigns_part2 : Valid
[wp] [Qed] Goal typed_init_assigns : Valid
[wp] [Alt-Ergo] Goal typed_init_t1_ensures : Valid
[wp] [Alt-Ergo] Goal typed_init_t1_loop_invariant_Partial_preserved : Valid
[wp] [Qed] Goal typed_init_t1_loop_invariant_Partial_established : Valid
[wp] [Alt-Ergo] Goal typed_init_t1_loop_invariant_Range_preserved : Valid
[wp] [Qed] Goal typed_init_t1_loop_invariant_Range_established : Valid
[wp] [Qed] Goal typed_init_t1_loop_assigns : Valid
[wp] [Qed] Goal typed_init_t1_assigns_part1 : Valid
[wp] [Qed] Goal typed_init_t1_assigns_part2 : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_ensures : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_loop_invariant_Partial_i_preserved : Valid
[wp] [Qed] Goal typed_init_t2_loop_invariant_Partial_i_established : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_loop_invariant_Range_i_preserved : Valid
[wp] [Qed] Goal typed_init_t2_loop_invariant_Range_i_established : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_loop_invariant_Partial_j_preserved : Valid
[wp] [Qed] Goal typed_init_t2_loop_invariant_Partial_j_established : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_loop_invariant_Previous_i_preserved : Valid
[wp] [Qed] Goal typed_init_t2_loop_invariant_Previous_i_established : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_loop_invariant_Range_j_preserved : Valid
[wp] [Qed] Goal typed_init_t2_loop_invariant_Range_j_established : Valid
[wp] [Qed] Goal typed_init_t2_assert_j : Valid
[wp] [Qed] Goal typed_init_t2_assert_i : Valid
[wp] [Qed] Goal typed_init_t2_loop_assigns_part1 : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_loop_assigns_part2 : Unsuccess
[wp] [Alt-Ergo] Goal typed_init_t2_loop_assigns_part3 : Unsuccess
[wp] [Qed] Goal typed_init_t2_loop_assigns_2_part1 : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_loop_assigns_2_part2 : Unsuccess
[wp] [Alt-Ergo] Goal typed_init_t2_loop_assigns_2_part3 : Unsuccess
[wp] [Qed] Goal typed_init_t2_assigns_part1 : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_assigns_part2 : Unsuccess
[wp] [Alt-Ergo] Goal typed_init_t2_bis_ensures : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_bis_exits : Unsuccess
[wp] [Alt-Ergo] Goal typed_init_t2_bis_loop_invariant_Partial_i_preserved : Valid
[wp] [Qed] Goal typed_init_t2_bis_loop_invariant_Partial_i_established : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_bis_loop_invariant_Range_i_preserved : Valid
[wp] [Qed] Goal typed_init_t2_bis_loop_invariant_Range_i_established : Valid
[wp] [Qed] Goal typed_init_t2_bis_assert_i : Valid
[wp] [Qed] Goal typed_init_t2_bis_loop_assigns_part1 : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_bis_loop_assigns_part2 : Unsuccess
[wp] [Alt-Ergo] Goal typed_init_t2_bis_loop_assigns_part3 : Unsuccess
[wp] [Qed] Goal typed_init_t2_bis_assigns_exit_part1 : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_bis_assigns_exit_part2 : Unsuccess
[wp] [Alt-Ergo] Goal typed_init_t2_bis_assigns_exit_part3 : Unsuccess
[wp] [Qed] Goal typed_init_t2_bis_assigns_normal_part1 : Valid
[wp] [Alt-Ergo] Goal typed_init_t2_bis_assigns_normal_part2 : Unsuccess
[wp] [Qed] Goal typed_init_t2_bis_call_init_requires : Valid
[wp] [Qed] Goal typed_init_t2_bis_call_init_requires_2 : Valid
[wp] Proved goals: 43 / 54
Qed: 27
Alt-Ergo: 16 (unsuccess: 11)
[wp] Report in: 'tests/wp_typed/oracle_qualif/user_init.0.report.json'
[wp] Report out: 'tests/wp_typed/result_qualif/user_init.0.report.json'
-------------------------------------------------------------
Functions WP Alt-Ergo Total Success
init 4 4 (80..104) 8 100%
init_t1 5 3 (12..24) 8 100%
init_t2 10 6 (40..52) 21 76.2%
init_t2_bis 8 3 (36..48) 17 64.7%
-------------------------------------------------------------
/* run.config_qualif
EXECNOW: rm -rf @PTEST_DIR@/result@PTEST_CONFIG@/@PTEST_NAME@-session/
OPT: -wp-prop=-lack,-tactic
OPT: -wp-prop=tactic -wp-auto=wp:split -session @PTEST_DIR@/result@PTEST_CONFIG@/@PTEST_NAME@-session/test-@PTEST_NUMBER@
OPT: -wp-prop=lack -wp-steps 300
*/
/*@ requires \valid(a+(0..n-1)) ; /*@ requires \valid(a+(0..n-1)) ;
@ requires n >= 0 ; @ requires n >= 0 ;
@ ensures \forall int k ; 0 <= k < n ==> a[k] == v ;
@ assigns a[0..n-1] ; @ assigns a[0..n-1] ;
@ ensures \forall int k ; 0 <= k < n ==> a[k] == v ;
@ exits \false;
*/ */
void init( int * a , int n , int v ) void init( int * a , int n , int v )
{ {
/*@ loop invariant Range: 0 <= i <= n ; /*@ loop assigns Zone: i,a[0..n-1] ;
@ loop invariant Range: 0 <= i <= n ;
@ loop invariant Partial: \forall int k ; 0 <= k < i ==> a[k] == v ; @ loop invariant Partial: \forall int k ; 0 <= k < i ==> a[k] == v ;
@ loop assigns i,a[0..n-1] ; @ loop variant Decr_i: n - i ;
*/ */
for (int i = 0 ; i < n ; i++) a[i] = v ; for (int i = 0 ; i < n ; i++) a[i] = v ;
} }
...@@ -19,9 +27,10 @@ int t1[10]; ...@@ -19,9 +27,10 @@ int t1[10];
*/ */
void init_t1(int v) { void init_t1(int v) {
unsigned i; unsigned i;
/*@ loop invariant Range: 0 <= i <= 10 ; /*@ loop assigns Zone: i,t1[0..9] ;
@ loop invariant Range: 0 <= i <= 10 ;
@ loop invariant Partial: \forall integer k ; 0 <= k < i ==> t1[k] ≡ v ; @ loop invariant Partial: \forall integer k ; 0 <= k < i ==> t1[k] ≡ v ;
@ loop assigns i,t1[0..9] ; @ loop variant Decr: 10 - i ;
*/ */
for (i = 0 ; i < 10 ; i++) t1[i] = v ; for (i = 0 ; i < 10 ; i++) t1[i] = v ;
} }
...@@ -29,45 +38,123 @@ void init_t1(int v) { ...@@ -29,45 +38,123 @@ void init_t1(int v) {
int t2[10][20]; int t2[10][20];
/*@ ensures \forall integer k, l; 0 <= k < 10 && 0 <= l < 20 ==> t2[k][l] == v; /*@ ensures \forall integer k, l; 0 <= k < 10 && 0 <= l < 20 ==> t2[k][l] == v;
@ exits \false; @ exits \false;
@ assigns t2[0..9][0..19]; @ assigns lack: t2[0..9][0..19];
*/ */
void init_t2(int v) { void init_t2_v1(int v) {
unsigned i,j; unsigned i,j;
/*@ loop assigns i, j, t2[0..9][0..19]; /*@ loop assigns lack: Zone_i: i, j, t2[0..9][0..19];
@ loop invariant Range_i: 0 <= i <= 10 ; @ loop invariant Range_i: 0 <= i <= 10 ;
@ loop invariant Partial_i: \forall integer k,l; 0 <= k < i && 0 <= l < 20 ==> t2[k][l] == v; @ loop invariant Partial_i: \forall integer k,l; 0 <= k < i && 0 <= l < 20 ==> t2[k][l] == v;
*/ @ loop variant Decr_i: 10 - i ;
*/
for(i = 0; i <= 9; i++) { for(i = 0; i <= 9; i++) {
/*@ loop assigns j, t2[0..9][0..19]; /*@ loop assigns lack: Zone_j: j, t2[0..9][0..19];
@ loop invariant Range_j: 0 <= j <= 20 ; @ loop invariant Range_j: 0 <= j <= 20 ;
@ loop invariant Partial_j: \forall integer l; 0 <= l < j ==> t2[i][l] == v; @ loop invariant Partial_j: \forall integer l; 0 <= l < j ==> t2[i][l] == v;
@ loop invariant Previous_i: \forall integer k,l; 0 <= k < i && 0 <= l < 20 ==> t2[k][l] == \at(t2[k][l], LoopEntry); @ loop invariant Previous_i: \forall integer k,l; 0 <= k < i && 0 <= l < 20 ==> t2[k][l] == \at(t2[k][l], LoopEntry);
@ loop variant Decr_j: 20 - j ;
*/ */
for(j = 0; j <= 19; j++) { for(j = 0; j <= 19; j++) {
t2[i][j] = v; t2[i][j] = v;
} }
//@ assert j: j==20; //@ assert Last_j: j==20;
; ;
} }
//@ assert i: i==10; //@ assert Last_i: i==10;
; ;
} }
//------------------------- //-------------------------
/*@ ensures \forall integer k, l; 0 <= k < 10 && 0 <= l < 20 ==> t2[k][l] == v; /*@ ensures \forall integer k, l; 0 <= k < 10 && 0 <= l < 20 ==> t2[k][l] == v;
@ assigns t2[0..9][0..19];
@ exits \false; @ exits \false;
@ assigns tactic: t2[..][..];
*/ */
void init_t2_bis(int v) { void init_t2_v2(int v) {
unsigned i; unsigned i,j;
/*@ loop assigns i, t2[0..9][0..19]; /*@ loop assigns tactic: Zone_i: i, j, t2[..][..];
@ loop invariant Range_i: 0 <= i <= 10 ; @ loop invariant Range_i: 0 <= i <= 10 ;
@ loop invariant Partial_i: \forall integer k,l; 0 <= k < i && 0 <= l < 20 ==> t2[k][l] == v; @ loop invariant Partial_i: \forall integer k,l; 0 <= k < i && 0 <= l < 20 ==> t2[k][l] == v;
@ loop variant Decr_i: 10 - i ;
*/ */
for(i = 0; i <= 9; i++) { for(i = 0; i <= 9; i++) {
init(&t2[i][0], 20, v); /*@ loop assigns tactic: Zone_j: j, t2[..][..];
@ loop invariant Range_j: 0 <= j <= 20 ;
@ loop invariant Partial_j: \forall integer l; 0 <= l < j ==> t2[i][l] == v;
@ loop invariant Previous_i: \forall integer k,l; 0 <= k < i && 0 <= l < 20 ==> t2[k][l] == \at(t2[k][l], LoopEntry);
@ loop variant Decr_j: 20 - j ;
*/
for(j = 0; j <= 19; j++) {
t2[i][j] = v;
}
//@ assert Last_j: j==20;
;
} }
//@ assert i: i==10; //@ assert Last_i: i==10;
; ;
} }
//-------------------------
/*@ ensures \forall integer k, l; 0 <= k < 10 && 0 <= l < 20 ==> t2[k][l] == v;
@ exits \false;
@ assigns lack: t2[..][..];
*/
void init_t2_v3(int v) {
unsigned i,j;
/*@ loop assigns lack: Zone_i: i, j, t2[..][..];
@ loop invariant Range_i: 0 <= i <= 10 ;
@ loop invariant lack: Partial_i: \forall integer k,l; 0 <= k < i && 0 <= l < 20 ==> t2[k][l] == v;
@ loop variant V_i: 10 - i ;
*/
for(i = 0; i <= 9; i++) {
/*@ loop assigns lack: Zone_j: j, t2[i][..];
@ loop invariant Range_j: 0 <= j <= 20 ;
@ loop invariant Partial_j: \forall integer l; 0 <= l < j ==> t2[i][l] == v;
@ loop variant Decr_j: 20 - j ;
*/
for(j = 0; j <= 19; j++) {
t2[i][j] = v;
}
//@ assert Last_j: j==20;
;
}
//@ assert Last_i: i==10;
;
}
//-------------------------
/*@ ensures \forall integer k, l; 0 <= k < 10 && 0 <= l < 20 ==> t2[k][l] == v;
@ assigns lack: t2[0..9][0..19];
@ exits \false;
*/
void init_t2_bis_v1(int v) {
unsigned i;
/*@ loop assigns lack: Zone: i, t2[0..9][0..19];
@ loop invariant Range: 0 <= i <= 10 ;
@ loop invariant Partial: \forall integer k,l; 0 <= k < i && 0 <= l < 20 ==> t2[k][l] == v;
@ loop variant Decr: 10 - i ;
*/
for(i = 0; i <= 9; i++) {
init(&t2[i][0], 20, v);
//@ assert Offset: &t2[i][0] == &t2[0][0] + 20*i;
}
}
//-------------------------
/*@ ensures \forall integer k, l; 0 <= k < 10 && 0 <= l < 20 ==> t2[k][l] == v;
@ assigns lack: t2[..][..];
@ exits \false;
*/
void init_t2_bis_v2(int v) {
unsigned i;
/*@ loop assigns lack: Zone: i, t2[..][..];
@ loop invariant Range: 0 <= i <= 10 ;
@ loop invariant Partial: \forall integer k,l; 0 <= k < i && 0 <= l < 20 ==> t2[k][l] == v;
@ loop variant Decr: 10 - i ;
*/
for(i = 0; i <= 9; i++) {
init(&t2[i][0], 20, v);
//@ assert Offset_i: &t2[i][0] == &t2[0][0] + 20*i;
;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment