Skip to content

Commit 3265d15

Browse files
Merge branch 'termination-check-in-loop2' into termination-check-in-loop3
2 parents 1e5f58c + 1e4befe commit 3265d15

1 file changed

Lines changed: 102 additions & 0 deletions

File tree

source/rust_verify_test/tests/loops.rs

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff 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+
}

0 commit comments

Comments
 (0)