1 // Copyright 2014 The Rust Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution and at
3 // http://rust-lang.org/COPYRIGHT.
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 // option. This file may not be copied, modified, or distributed
9 // except according to those terms.
11 // pretty-expanded FIXME #23616
13 #![feature(collections, rand, into_cow)]
15 use std
::borrow
::{Cow, IntoCow}
;
16 use std
::collections
::BitVec
;
17 use std
::default::Default
;
18 use std
::iter
::FromIterator
;
20 use std
::option
::IntoIter
as OptionIter
;
22 use std
::rand
::XorShiftRng
as DummyRng
;
23 // FIXME the glob std::prelude::*; import of Vec is missing non-static inherent methods.
26 #[derive(PartialEq, Eq)]
29 fn id
<T
>(x
: T
) -> T { x }
30 fn eq
<T
: Eq
>(a
: T
, b
: T
) -> bool { a == b }
31 fn u8_as_i8(x
: u8) -> i8 { x as i8 }
32 fn odd(x
: usize) -> bool { x % 2 == 1 }
33 fn dummy_rng() -> DummyRng { DummyRng::new_unseeded() }
36 fn size() -> usize { std::mem::size_of::<Self>() }
41 ($
($expr
:expr
, $ty
:ty
, ($
($test
:expr
),*);)+) => (pub fn main() {$
({
43 static S
: $ty
= $expr
;
44 assert
!(eq(C($
($test
),*), $
expr($
($test
),*)));
45 assert
!(eq(S($
($test
),*), $
expr($
($test
),*)));
46 assert
!(eq(C($
($test
),*), S($
($test
),*)));
52 id
, fn(i32) -> i32, (5);
53 id
::<i32>, fn(i32) -> i32, (5);
55 // Enum variant constructor.
56 Some
, fn(i32) -> Option
<i32>, (5);
57 Some
::<i32>, fn(i32) -> Option
<i32>, (5);
59 // Tuple struct constructor.
60 Newt
, fn(i32) -> Newt
<i32>, (5);
61 Newt
::<i32>, fn(i32) -> Newt
<i32>, (5);
63 // Inherent static methods.
64 Vec
::new
, fn() -> Vec
<()>, ();
65 Vec
::<()>::new
, fn() -> Vec
<()>, ();
66 <Vec
<()>>::new
, fn() -> Vec
<()>, ();
67 Vec
::with_capacity
, fn(usize) -> Vec
<()>, (5);
68 Vec
::<()>::with_capacity
, fn(usize) -> Vec
<()>, (5);
69 <Vec
<()>>::with_capacity
, fn(usize) -> Vec
<()>, (5);
70 BitVec
::from_fn
, fn(usize, fn(usize) -> bool
) -> BitVec
, (5, odd
);
71 BitVec
::from_fn
::<fn(usize) -> bool
>, fn(usize, fn(usize) -> bool
) -> BitVec
, (5, odd
);
73 // Inherent non-static method.
74 Vec
::map_in_place
, fn(Vec
<u8>, fn(u8) -> i8) -> Vec
<i8>, (vec
![b'f'
, b'o'
, b'o'
], u8_as_i8
);
75 Vec
::map_in_place
::<i8, fn(u8) -> i8>, fn(Vec
<u8>, fn(u8) -> i8) -> Vec
<i8>,
76 (vec
![b'f'
, b'o'
, b'o'
], u8_as_i8
);
77 // FIXME these break with "type parameter might not appear here pointing at `<u8>`.
78 // Vec::<u8>::map_in_place: fn(Vec<u8>, fn(u8) -> i8) -> Vec<i8>
79 // , (vec![b'f', b'o', b'o'], u8_as_i8);
80 // Vec::<u8>::map_in_place::<i8, fn(u8) -> i8>: fn(Vec<u8>, fn(u8) -> i8) -> Vec<i8>
81 // , (vec![b'f', b'o', b'o'], u8_as_i8);
83 // Trait static methods.
84 bool
::size
, fn() -> usize, ();
85 <bool
>::size
, fn() -> usize, ();
86 <bool
as Size
>::size
, fn() -> usize, ();
88 Default
::default, fn() -> i32, ();
89 i32::default, fn() -> i32, ();
90 <i32>::default, fn() -> i32, ();
91 <i32 as Default
>::default, fn() -> i32, ();
93 Rand
::rand
, fn(&mut DummyRng
) -> i32, (&mut dummy_rng());
94 i32::rand
, fn(&mut DummyRng
) -> i32, (&mut dummy_rng());
95 <i32>::rand
, fn(&mut DummyRng
) -> i32, (&mut dummy_rng());
96 <i32 as Rand
>::rand
, fn(&mut DummyRng
) -> i32, (&mut dummy_rng());
97 Rand
::rand
::<DummyRng
>, fn(&mut DummyRng
) -> i32, (&mut dummy_rng());
98 i32::rand
::<DummyRng
>, fn(&mut DummyRng
) -> i32, (&mut dummy_rng());
99 <i32>::rand
::<DummyRng
>, fn(&mut DummyRng
) -> i32, (&mut dummy_rng());
100 <i32 as Rand
>::rand
::<DummyRng
>, fn(&mut DummyRng
) -> i32, (&mut dummy_rng());
102 // Trait non-static methods.
103 Clone
::clone
, fn(&i32) -> i32, (&5);
104 i32::clone
, fn(&i32) -> i32, (&5);
105 <i32>::clone
, fn(&i32) -> i32, (&5);
106 <i32 as Clone
>::clone
, fn(&i32) -> i32, (&5);
108 FromIterator
::from_iter
, fn(OptionIter
<i32>) -> Vec
<i32>, (Some(5).into_iter());
109 Vec
::from_iter
, fn(OptionIter
<i32>) -> Vec
<i32>, (Some(5).into_iter());
110 <Vec
<_
>>::from_iter
, fn(OptionIter
<i32>) -> Vec
<i32>, (Some(5).into_iter());
111 <Vec
<_
> as FromIterator
<_
>>::from_iter
, fn(OptionIter
<i32>) -> Vec
<i32>,
112 (Some(5).into_iter());
113 <Vec
<i32> as FromIterator
<_
>>::from_iter
, fn(OptionIter
<i32>) -> Vec
<i32>,
114 (Some(5).into_iter());
115 FromIterator
::from_iter
::<OptionIter
<i32>>, fn(OptionIter
<i32>) -> Vec
<i32>,
116 (Some(5).into_iter());
117 <Vec
<i32> as FromIterator
<_
>>::from_iter
::<OptionIter
<i32>>, fn(OptionIter
<i32>) -> Vec
<i32>,
118 (Some(5).into_iter());
120 Add
::add
, fn(i32, i32) -> i32, (5, 6);
121 i32::add
, fn(i32, i32) -> i32, (5, 6);
122 <i32>::add
, fn(i32, i32) -> i32, (5, 6);
123 <i32 as Add
<_
>>::add
, fn(i32, i32) -> i32, (5, 6);
124 <i32 as Add
<i32>>::add
, fn(i32, i32) -> i32, (5, 6);
126 String
::into_cow
, fn(String
) -> Cow
<'
static, str>,
128 <String
>::into_cow
, fn(String
) -> Cow
<'
static, str>,
130 <String
as IntoCow
<_
>>::into_cow
, fn(String
) -> Cow
<'
static, str>,
132 <String
as IntoCow
<'
static, _
>>::into_cow
, fn(String
) -> Cow
<'
static, str>,