Skip to content

Commit 99e132d

Browse files
Extend control flow basics tests with loops
1 parent ee233c0 commit 99e132d

File tree

1 file changed

+52
-9
lines changed

1 file changed

+52
-9
lines changed

src/test/ui/consts/control-flow/basics.rs

Lines changed: 52 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
// Test basic functionality of `if` and `match` in a const context.
1+
// Test basic functionality of control flow in a const context.
22

33
// run-pass
44

55
#![feature(const_panic)]
66
#![feature(const_if_match)]
7+
#![feature(const_loop)]
78
#![feature(const_fn)]
89

910
const X: u32 = 4;
@@ -30,15 +31,57 @@ const fn gcd(a: u32, b: u32) -> u32 {
3031
gcd(b, a % b)
3132
}
3233

34+
const fn fib(n: u64) -> u64 {
35+
if n == 0 {
36+
return 0;
37+
}
38+
39+
let mut fib = (0, 1);
40+
let mut i = 1;
41+
while i < n {
42+
fib = (fib.1, fib.0 + fib.1);
43+
i += 1;
44+
}
45+
46+
fib.1
47+
}
48+
49+
const fn is_prime(n: u64) -> bool {
50+
if n % 2 == 0 {
51+
return false;
52+
}
53+
54+
let mut div = 3;
55+
loop {
56+
if n % div == 0 {
57+
return false;
58+
}
59+
60+
if div * div > n {
61+
return true;
62+
}
63+
64+
div += 2;
65+
}
66+
}
67+
68+
macro_rules! const_assert {
69+
($expr:expr) => {
70+
const _: () = assert!($expr);
71+
assert!($expr);
72+
}
73+
}
74+
3375
fn main() {
34-
const _: () = assert!(abs_diff(4, 5) == abs_diff(5, 4));
35-
assert_eq!(abs_diff(4, 5), abs_diff(5, 4));
76+
const_assert!(abs_diff(4, 5) == abs_diff(5, 4));
77+
const_assert!(ABS_DIFF == abs_diff(5, 4));
78+
79+
const_assert!(gcd(48, 18) == 6);
80+
const_assert!(gcd(18, 48) == 6);
3681

37-
const _: () = assert!(ABS_DIFF == abs_diff(5, 4));
38-
assert_eq!(ABS_DIFF, abs_diff(5, 4));
82+
const_assert!(fib(2) == 1);
83+
const_assert!(fib(8) == 21);
3984

40-
const _: () = assert!(gcd(48, 18) == 6);
41-
const _: () = assert!(gcd(18, 48) == 6);
42-
assert_eq!(gcd(48, 18), 6);
43-
assert_eq!(gcd(18, 48), 6);
85+
const_assert!(is_prime(113));
86+
const_assert!(!is_prime(117));
4487
}

0 commit comments

Comments
 (0)