| //@ run-pass |
| // A more complex example of numeric extensions |
| |
| pub trait TypeExt {} |
| |
| impl TypeExt for u8 {} |
| impl TypeExt for u16 {} |
| impl TypeExt for u32 {} |
| impl TypeExt for u64 {} |
| impl TypeExt for usize {} |
| |
| impl TypeExt for i8 {} |
| impl TypeExt for i16 {} |
| impl TypeExt for i32 {} |
| impl TypeExt for i64 {} |
| impl TypeExt for isize {} |
| |
| impl TypeExt for f32 {} |
| impl TypeExt for f64 {} |
| |
| |
| pub trait NumExt: TypeExt + PartialEq + PartialOrd {} |
| |
| impl NumExt for u8 {} |
| impl NumExt for u16 {} |
| impl NumExt for u32 {} |
| impl NumExt for u64 {} |
| impl NumExt for usize {} |
| |
| impl NumExt for i8 {} |
| impl NumExt for i16 {} |
| impl NumExt for i32 {} |
| impl NumExt for i64 {} |
| impl NumExt for isize {} |
| |
| impl NumExt for f32 {} |
| impl NumExt for f64 {} |
| |
| |
| pub trait UnSignedExt: NumExt {} |
| |
| impl UnSignedExt for u8 {} |
| impl UnSignedExt for u16 {} |
| impl UnSignedExt for u32 {} |
| impl UnSignedExt for u64 {} |
| impl UnSignedExt for usize {} |
| |
| |
| pub trait SignedExt: NumExt {} |
| |
| impl SignedExt for i8 {} |
| impl SignedExt for i16 {} |
| impl SignedExt for i32 {} |
| impl SignedExt for i64 {} |
| impl SignedExt for isize {} |
| |
| impl SignedExt for f32 {} |
| impl SignedExt for f64 {} |
| |
| |
| pub trait IntegerExt: NumExt {} |
| |
| impl IntegerExt for u8 {} |
| impl IntegerExt for u16 {} |
| impl IntegerExt for u32 {} |
| impl IntegerExt for u64 {} |
| impl IntegerExt for usize {} |
| |
| impl IntegerExt for i8 {} |
| impl IntegerExt for i16 {} |
| impl IntegerExt for i32 {} |
| impl IntegerExt for i64 {} |
| impl IntegerExt for isize {} |
| |
| |
| pub trait FloatExt: NumExt {} |
| |
| impl FloatExt for f32 {} |
| impl FloatExt for f64 {} |
| |
| |
| fn test_float_ext<T:FloatExt>(n: T) { println!("{}", n < n) } |
| |
| pub fn main() { |
| test_float_ext(1f32); |
| } |