File tree Expand file tree Collapse file tree
source/rust_verify_test/tests Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -1498,3 +1498,105 @@ test_verify_one_file! {
14981498 }
14991499 } => Ok ( ( ) )
15001500}
1501+
1502+ test_verify_one_file ! {
1503+ #[ test] recursive_call_in_loop1 verus_code! {
1504+ use vstd:: prelude:: * ;
1505+
1506+ fn test1( x: usize )
1507+ decreases x,
1508+ {
1509+ if x == 0 {
1510+ return ;
1511+ }
1512+ for i in 0 ..1
1513+ invariant x >= 1 ,
1514+ {
1515+ test1( x - 1 ) ;
1516+ }
1517+ }
1518+ } => Ok ( ( ) )
1519+ }
1520+
1521+ test_verify_one_file ! {
1522+ #[ test] recursive_call_in_loop2 verus_code! {
1523+ fn test1 ( x: usize )
1524+ decreases x,
1525+ {
1526+ if x == 0 {
1527+ return ;
1528+ }
1529+ let mut i: usize = 0 ;
1530+ while i < 10
1531+ invariant x >= 1 ,
1532+ decreases 10 - i,
1533+ {
1534+ test1( x - 1 ) ;
1535+ let mut j: usize = 0 ;
1536+ while j * 2 < 5
1537+ invariant x >= 1 , j <= 4 ,
1538+ decreases 4 - j,
1539+ {
1540+ test1( x - 1 ) ;
1541+ j = j + 1 ;
1542+ }
1543+ i = i + 1 ;
1544+ }
1545+
1546+ }
1547+ } => Ok ( ( ) )
1548+ }
1549+
1550+ test_verify_one_file ! {
1551+ #[ test] recursive_call_in_loop3 verus_code! {
1552+ #[ verifier:: loop_isolation( false ) ]
1553+ fn test1 ( x: usize )
1554+ decreases x,
1555+ {
1556+ if x == 0 {
1557+ return ;
1558+ }
1559+ let mut i: usize = 0 ;
1560+ while i < 10
1561+ decreases 10 - i,
1562+ {
1563+ test1( x - 1 ) ;
1564+ let mut j: usize = 0 ;
1565+ while j * 2 < 5
1566+ invariant j <= 4 ,
1567+ decreases 4 - j,
1568+ {
1569+ test1( x - 1 ) ;
1570+ j = j + 1 ;
1571+ }
1572+ i = i + 1 ;
1573+ }
1574+ }
1575+ } => Ok ( ( ) )
1576+ }
1577+
1578+ test_verify_one_file_with_options ! {
1579+ #[ test] recursive_call_in_loop4 [ "exec_allows_no_decreases_clause" ] => verus_code! {
1580+ #[ verifier:: loop_isolation( false ) ]
1581+ fn test1 ( x: usize )
1582+ decreases x,
1583+ {
1584+ if x == 0 {
1585+ return ;
1586+ }
1587+ let mut i: usize = 0 ;
1588+ while i < 10
1589+ {
1590+ test1( x - 1 ) ;
1591+ let mut j: usize = 0 ;
1592+ while j * 2 < 5
1593+ invariant j <= 4 ,
1594+ {
1595+ test1( x - 1 ) ;
1596+ j = j + 1 ;
1597+ }
1598+ i = i + 1 ;
1599+ }
1600+ }
1601+ } => Ok ( _err) => { /* allow decreases checks warnings */ }
1602+ }
You can’t perform that action at this time.
0 commit comments