]> git.lizzy.rs Git - rust.git/blob - src/test/ui/associated-type-bounds/fn-inline.rs
Auto merge of #103894 - mati865:gnullvm-libunwind-changes, r=thomcc
[rust.git] / src / test / ui / associated-type-bounds / fn-inline.rs
1 // run-pass
2 // aux-build:fn-aux.rs
3
4 #![allow(unused)]
5 #![feature(associated_type_bounds)]
6
7 extern crate fn_aux;
8
9 use fn_aux::*;
10
11 // ATB, Type parameters, Inline bounds:
12
13 fn inline_bound<B: Beta<Gamma: Alpha>>(beta: B) -> usize {
14     desugared_bound(beta)
15 }
16
17 fn inline_bound_region<B: Beta<Gamma: 'static>>(beta: B) -> usize {
18     desugared_bound_region(beta)
19 }
20
21 fn inline_bound_multi<B: Copy + Beta<Gamma: Alpha + 'static + Delta>>(
22     beta: B
23 ) -> usize {
24     desugared_bound_multi(beta)
25 }
26
27 fn inline_bound_region_specific<'a, B: Beta<Gamma: 'a + Epsilon<'a>>>(
28     gamma: &'a B::Gamma
29 ) -> usize {
30     desugared_bound_region_specific::<B>(gamma)
31 }
32
33 fn inline_bound_region_forall<B: Beta<Gamma: Copy + for<'a> Epsilon<'a>>>(
34     beta: B
35 ) -> usize {
36     desugared_bound_region_forall(beta)
37 }
38
39 fn inline_bound_region_forall2<B: Beta<Gamma: Copy + for<'a> Epsilon<'a, Zeta: Eta>>>(
40     beta: B
41 ) -> usize {
42     desugared_bound_region_forall2(beta)
43 }
44
45 fn inline_bound_nested<B: Beta<Gamma: Copy + Alpha + Beta<Gamma: Delta>>>(
46     beta: B
47 ) -> usize {
48     desugared_bound_nested(beta)
49 }
50
51 fn main() {
52     let beta = BetaType;
53     let gamma = beta.gamma();
54
55     assert_eq!(42, inline_bound(beta));
56     assert_eq!(24, inline_bound_region(beta));
57     assert_eq!(42 + 24 + 1337, inline_bound_multi(beta));
58     assert_eq!(7331, inline_bound_region_specific::<BetaType>(&gamma));
59     assert_eq!(7331 * 2, inline_bound_region_forall(beta));
60     // FIXME: requires lazy normalization.
61     // assert_eq!(7331 * 2, inline_bound_region_forall2(beta));
62     assert_eq!(42 + 1337, inline_bound_nested(beta));
63 }