File tree Expand file tree Collapse file tree 3 files changed +64
-0
lines changed
tests/cargo-kani/demos/non-empty-range Expand file tree Collapse file tree 3 files changed +64
-0
lines changed Original file line number Diff line number Diff line change
1
+ # Copyright Kani Contributors
2
+ # SPDX-License-Identifier: Apache-2.0 OR MIT
3
+ [package ]
4
+ name = " non-empty-range"
5
+ version = " 0.1.0"
6
+ edition = " 2021"
7
+ description = " A demo example for Kani that shows how to go from partial assurance with unit tests to full assurance with Kani"
8
+
9
+ # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
10
+
11
+ [dependencies ]
Original file line number Diff line number Diff line change
1
+ Status: SUCCESS\
2
+ Description: "assertion failed: range.is_none() || !range.as_ref().unwrap().is_empty()"
3
+
4
+ VERIFICATION:- SUCCESSFUL
Original file line number Diff line number Diff line change
1
+ // Copyright Kani Contributors
2
+ // SPDX-License-Identifier: Apache-2.0 OR MIT
3
+
4
+ /// a helper function that given a pair of integers, returns a valid non-empty
5
+ /// range (if possible) or `None`
6
+ pub fn create_non_empty_range ( a : i32 , b : i32 ) -> Option < std:: ops:: Range < i32 > > {
7
+ let range = if a < b {
8
+ Some ( a..b)
9
+ } else if b < a {
10
+ Some ( b..a)
11
+ } else {
12
+ None
13
+ } ;
14
+ assert ! ( range. is_none( ) || !range. as_ref( ) . unwrap( ) . is_empty( ) ) ;
15
+ range
16
+ }
17
+
18
+ #[ cfg( test) ]
19
+ mod tests {
20
+ use super :: * ;
21
+
22
+ #[ test]
23
+ fn test_create_range1 ( ) {
24
+ let r = create_non_empty_range ( 5 , 9 ) ;
25
+ assert_eq ! ( r. unwrap( ) , 5 ..9 ) ;
26
+ }
27
+
28
+ #[ test]
29
+ fn test_create_range2 ( ) {
30
+ let r = create_non_empty_range ( 35 , 2 ) ;
31
+ assert_eq ! ( r. unwrap( ) , 2 ..35 ) ;
32
+ }
33
+
34
+ #[ test]
35
+ fn test_create_range3 ( ) {
36
+ let r = create_non_empty_range ( -5 , -5 ) ;
37
+ assert ! ( r. is_none( ) ) ;
38
+ }
39
+ }
40
+
41
+ #[ cfg( kani) ]
42
+ mod kani_checks {
43
+ use super :: * ;
44
+
45
+ #[ kani:: proof]
46
+ fn check_range ( ) {
47
+ create_non_empty_range ( kani:: any ( ) , kani:: any ( ) ) ;
48
+ }
49
+ }
You can’t perform that action at this time.
0 commit comments