Extend control flow basics tests with loops
This commit is contained in:
parent
ee233c07c6
commit
99e132db97
|
@ -1,9 +1,10 @@
|
||||||
// Test basic functionality of `if` and `match` in a const context.
|
// Test basic functionality of control flow in a const context.
|
||||||
|
|
||||||
// run-pass
|
// run-pass
|
||||||
|
|
||||||
#![feature(const_panic)]
|
#![feature(const_panic)]
|
||||||
#![feature(const_if_match)]
|
#![feature(const_if_match)]
|
||||||
|
#![feature(const_loop)]
|
||||||
#![feature(const_fn)]
|
#![feature(const_fn)]
|
||||||
|
|
||||||
const X: u32 = 4;
|
const X: u32 = 4;
|
||||||
|
@ -30,15 +31,57 @@ const fn gcd(a: u32, b: u32) -> u32 {
|
||||||
gcd(b, a % b)
|
gcd(b, a % b)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
const fn fib(n: u64) -> u64 {
|
||||||
const _: () = assert!(abs_diff(4, 5) == abs_diff(5, 4));
|
if n == 0 {
|
||||||
assert_eq!(abs_diff(4, 5), abs_diff(5, 4));
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
const _: () = assert!(ABS_DIFF == abs_diff(5, 4));
|
let mut fib = (0, 1);
|
||||||
assert_eq!(ABS_DIFF, abs_diff(5, 4));
|
let mut i = 1;
|
||||||
|
while i < n {
|
||||||
|
fib = (fib.1, fib.0 + fib.1);
|
||||||
|
i += 1;
|
||||||
|
}
|
||||||
|
|
||||||
const _: () = assert!(gcd(48, 18) == 6);
|
fib.1
|
||||||
const _: () = assert!(gcd(18, 48) == 6);
|
}
|
||||||
assert_eq!(gcd(48, 18), 6);
|
|
||||||
assert_eq!(gcd(18, 48), 6);
|
const fn is_prime(n: u64) -> bool {
|
||||||
|
if n % 2 == 0 {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut div = 3;
|
||||||
|
loop {
|
||||||
|
if n % div == 0 {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if div * div > n {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
div += 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
macro_rules! const_assert {
|
||||||
|
($expr:expr) => {
|
||||||
|
const _: () = assert!($expr);
|
||||||
|
assert!($expr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
const_assert!(abs_diff(4, 5) == abs_diff(5, 4));
|
||||||
|
const_assert!(ABS_DIFF == abs_diff(5, 4));
|
||||||
|
|
||||||
|
const_assert!(gcd(48, 18) == 6);
|
||||||
|
const_assert!(gcd(18, 48) == 6);
|
||||||
|
|
||||||
|
const_assert!(fib(2) == 1);
|
||||||
|
const_assert!(fib(8) == 21);
|
||||||
|
|
||||||
|
const_assert!(is_prime(113));
|
||||||
|
const_assert!(!is_prime(117));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue