]> git.lizzy.rs Git - rust.git/blob - src/test/run-pass/trait-inheritance-num2.rs
auto merge of #9550 : alexcrichton/rust/remove-printf, r=thestinger
[rust.git] / src / test / run-pass / trait-inheritance-num2.rs
1 // xfail-fast
2
3 // Copyright 2012 The Rust Project Developers. See the COPYRIGHT
4 // file at the top-level directory of this distribution and at
5 // http://rust-lang.org/COPYRIGHT.
6 //
7 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
8 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
9 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
10 // option. This file may not be copied, modified, or distributed
11 // except according to those terms.
12
13 // A more complex example of numeric extensions
14
15 extern mod extra;
16
17 use std::cmp::{Eq, Ord};
18
19 pub trait TypeExt {}
20
21
22 impl TypeExt for u8 {}
23 impl TypeExt for u16 {}
24 impl TypeExt for u32 {}
25 impl TypeExt for u64 {}
26 impl TypeExt for uint {}
27
28 impl TypeExt for i8 {}
29 impl TypeExt for i16 {}
30 impl TypeExt for i32 {}
31 impl TypeExt for i64 {}
32 impl TypeExt for int {}
33
34 impl TypeExt for f32 {}
35 impl TypeExt for f64 {}
36 impl TypeExt for float {}
37
38
39 pub trait NumExt: TypeExt + Eq + Ord + Num + NumCast {}
40
41 impl NumExt for u8 {}
42 impl NumExt for u16 {}
43 impl NumExt for u32 {}
44 impl NumExt for u64 {}
45 impl NumExt for uint {}
46
47 impl NumExt for i8 {}
48 impl NumExt for i16 {}
49 impl NumExt for i32 {}
50 impl NumExt for i64 {}
51 impl NumExt for int {}
52
53 impl NumExt for f32 {}
54 impl NumExt for f64 {}
55 impl NumExt for float {}
56
57
58 pub trait UnSignedExt: NumExt {}
59
60 impl UnSignedExt for u8 {}
61 impl UnSignedExt for u16 {}
62 impl UnSignedExt for u32 {}
63 impl UnSignedExt for u64 {}
64 impl UnSignedExt for uint {}
65
66
67 pub trait SignedExt: NumExt {}
68
69 impl SignedExt for i8 {}
70 impl SignedExt for i16 {}
71 impl SignedExt for i32 {}
72 impl SignedExt for i64 {}
73 impl SignedExt for int {}
74
75 impl SignedExt for f32 {}
76 impl SignedExt for f64 {}
77 impl SignedExt for float {}
78
79
80 pub trait IntegerExt: NumExt {}
81
82 impl IntegerExt for u8 {}
83 impl IntegerExt for u16 {}
84 impl IntegerExt for u32 {}
85 impl IntegerExt for u64 {}
86 impl IntegerExt for uint {}
87
88 impl IntegerExt for i8 {}
89 impl IntegerExt for i16 {}
90 impl IntegerExt for i32 {}
91 impl IntegerExt for i64 {}
92 impl IntegerExt for int {}
93
94
95 pub trait FloatExt: NumExt + ApproxEq<Self> {}
96
97 impl FloatExt for f32 {}
98 impl FloatExt for f64 {}
99 impl FloatExt for float {}
100
101
102 fn test_float_ext<T:FloatExt>(n: T) { println!("{}", n < n) }
103
104 pub fn main() {
105     test_float_ext(1f32);
106 }