]> git.lizzy.rs Git - rust.git/blob - src/test/ui/consts/const-fn.rs
Merge commit 'cd4810de42c57b64b74dae09c530a4c3a41f87b9' into libgccjit-codegen
[rust.git] / src / test / ui / consts / const-fn.rs
1 // run-pass
2 #![allow(stable_features)]
3
4 // A very basic test of const fn functionality.
5
6 #![feature(const_indexing)]
7 #![feature(const_fn_trait_bound)]
8
9 const fn add(x: u32, y: u32) -> u32 {
10     x + y
11 }
12
13 const fn sub(x: u32, y: u32) -> u32 {
14     x - y
15 }
16
17 const unsafe fn div(x: u32, y: u32) -> u32 {
18     x / y
19 }
20
21 const fn generic<T>(t: T) -> T {
22     t
23 }
24
25 const fn generic_arr<T: Copy>(t: [T; 1]) -> T {
26     t[0]
27 }
28
29 const SUM: u32 = add(44, 22);
30 const DIFF: u32 = sub(44, 22);
31 const DIV: u32 = unsafe{div(44, 22)};
32
33 fn main() {
34     assert_eq!(SUM, 66);
35     assert!(SUM != 88);
36
37     assert_eq!(DIFF, 22);
38     assert_eq!(DIV, 2);
39
40     let _: [&'static str; sub(100, 99) as usize] = ["hi"];
41     let _: [&'static str; generic(1)] = ["hi"];
42     let _: [&'static str; generic_arr([1])] = ["hi"];
43 }