1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#![no_std]
pub mod seq;
pub fn id<T>(value: T) -> T { value }
pub fn default<T: Default>() -> T {
Default::default()
}
pub fn first<P: seq::Singleton>(seq: P) -> P::First {
seq.first()
}
pub fn second<P: seq::Pair>(seq: P) -> P::Second {
seq.second()
}
pub fn third<P: seq::Triple>(seq: P) -> P::Third {
seq.third()
}
pub fn flip<A, B>((a, b): (A, B)) -> (B, A) {
(b, a)
}
#[test]
fn test_seq() {
assert_eq!(first((1, 2)), 1);
assert_eq!(first(&(1, 2)), &1);
assert_eq!(second((1, 2)), 2);
assert_eq!(third(&[] as &[i32]), None);
assert_eq!(second(&[1,2][..]), Some(&2));
assert_eq!(second(&[1,2]), &2);
}