// xfail-fast // Copyright 2012 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution and at // http://rust-lang.org/COPYRIGHT. // // Licensed under the Apache License, Version 2.0 or the MIT license // , at your // option. This file may not be copied, modified, or distributed // except according to those terms. // A more complex example of numeric extensions extern mod std; use core::cmp::{Eq, Ord}; use core::num::NumCast::from; use std::cmp::FuzzyEq; pub trait TypeExt {} impl TypeExt for u8 {} impl TypeExt for u16 {} impl TypeExt for u32 {} impl TypeExt for u64 {} impl TypeExt for uint {} impl TypeExt for i8 {} impl TypeExt for i16 {} impl TypeExt for i32 {} impl TypeExt for i64 {} impl TypeExt for int {} impl TypeExt for f32 {} impl TypeExt for f64 {} impl TypeExt for float {} pub trait NumExt: TypeExt + Eq + Ord + NumCast {} impl NumExt for u8 {} impl NumExt for u16 {} impl NumExt for u32 {} impl NumExt for u64 {} impl NumExt for uint {} impl NumExt for i8 {} impl NumExt for i16 {} impl NumExt for i32 {} impl NumExt for i64 {} impl NumExt for int {} impl NumExt for f32 {} impl NumExt for f64 {} impl NumExt for float {} pub trait UnSignedExt: NumExt {} impl UnSignedExt for u8 {} impl UnSignedExt for u16 {} impl UnSignedExt for u32 {} impl UnSignedExt for u64 {} impl UnSignedExt for uint {} pub trait SignedExt: NumExt {} impl SignedExt for i8 {} impl SignedExt for i16 {} impl SignedExt for i32 {} impl SignedExt for i64 {} impl SignedExt for int {} impl SignedExt for f32 {} impl SignedExt for f64 {} impl SignedExt for float {} pub trait IntegerExt: NumExt {} impl IntegerExt for u8 {} impl IntegerExt for u16 {} impl IntegerExt for u32 {} impl IntegerExt for u64 {} impl IntegerExt for uint {} impl IntegerExt for i8 {} impl IntegerExt for i16 {} impl IntegerExt for i32 {} impl IntegerExt for i64 {} impl IntegerExt for int {} pub trait FloatExt: NumExt + FuzzyEq {} impl FloatExt for f32 {} impl FloatExt for f64 {} impl FloatExt for float {} fn test_float_ext(n: T) { io::println(fmt!("%?", n < n)) } pub fn main() { test_float_ext(1f32); }