Generate NumCast impls and tests using macros
This commit is contained in:
parent
3ffd735b45
commit
353ce872e2
14 changed files with 114 additions and 922 deletions
|
@ -12,7 +12,6 @@
|
|||
|
||||
use cmath;
|
||||
use libc::{c_float, c_int};
|
||||
use num::NumCast;
|
||||
use num::strconv;
|
||||
use num;
|
||||
use option::Option;
|
||||
|
@ -287,30 +286,6 @@ impl num::One for f32 {
|
|||
fn one() -> f32 { 1.0 }
|
||||
}
|
||||
|
||||
impl NumCast for f32 {
|
||||
/**
|
||||
* Cast `n` to an `f32`
|
||||
*/
|
||||
#[inline(always)]
|
||||
fn from<N:NumCast>(n: N) -> f32 { n.to_f32() }
|
||||
|
||||
#[inline(always)] fn to_u8(&self) -> u8 { *self as u8 }
|
||||
#[inline(always)] fn to_u16(&self) -> u16 { *self as u16 }
|
||||
#[inline(always)] fn to_u32(&self) -> u32 { *self as u32 }
|
||||
#[inline(always)] fn to_u64(&self) -> u64 { *self as u64 }
|
||||
#[inline(always)] fn to_uint(&self) -> uint { *self as uint }
|
||||
|
||||
#[inline(always)] fn to_i8(&self) -> i8 { *self as i8 }
|
||||
#[inline(always)] fn to_i16(&self) -> i16 { *self as i16 }
|
||||
#[inline(always)] fn to_i32(&self) -> i32 { *self as i32 }
|
||||
#[inline(always)] fn to_i64(&self) -> i64 { *self as i64 }
|
||||
#[inline(always)] fn to_int(&self) -> int { *self as int }
|
||||
|
||||
#[inline(always)] fn to_f32(&self) -> f32 { *self }
|
||||
#[inline(always)] fn to_f64(&self) -> f64 { *self as f64 }
|
||||
#[inline(always)] fn to_float(&self) -> float { *self as float }
|
||||
}
|
||||
|
||||
#[cfg(notest)]
|
||||
impl ops::Add<f32,f32> for f32 {
|
||||
fn add(&self, other: &f32) -> f32 { *self + *other }
|
||||
|
@ -592,51 +567,6 @@ pub fn test_num() {
|
|||
assert!((ten.modulo(&two) == num::cast(0)));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_numcast() {
|
||||
assert!((20u == 20f32.to_uint()));
|
||||
assert!((20u8 == 20f32.to_u8()));
|
||||
assert!((20u16 == 20f32.to_u16()));
|
||||
assert!((20u32 == 20f32.to_u32()));
|
||||
assert!((20u64 == 20f32.to_u64()));
|
||||
assert!((20i == 20f32.to_int()));
|
||||
assert!((20i8 == 20f32.to_i8()));
|
||||
assert!((20i16 == 20f32.to_i16()));
|
||||
assert!((20i32 == 20f32.to_i32()));
|
||||
assert!((20i64 == 20f32.to_i64()));
|
||||
assert!((20f == 20f32.to_float()));
|
||||
assert!((20f32 == 20f32.to_f32()));
|
||||
assert!((20f64 == 20f32.to_f64()));
|
||||
|
||||
assert!((20f32 == NumCast::from(20u)));
|
||||
assert!((20f32 == NumCast::from(20u8)));
|
||||
assert!((20f32 == NumCast::from(20u16)));
|
||||
assert!((20f32 == NumCast::from(20u32)));
|
||||
assert!((20f32 == NumCast::from(20u64)));
|
||||
assert!((20f32 == NumCast::from(20i)));
|
||||
assert!((20f32 == NumCast::from(20i8)));
|
||||
assert!((20f32 == NumCast::from(20i16)));
|
||||
assert!((20f32 == NumCast::from(20i32)));
|
||||
assert!((20f32 == NumCast::from(20i64)));
|
||||
assert!((20f32 == NumCast::from(20f)));
|
||||
assert!((20f32 == NumCast::from(20f32)));
|
||||
assert!((20f32 == NumCast::from(20f64)));
|
||||
|
||||
assert!((20f32 == num::cast(20u)));
|
||||
assert!((20f32 == num::cast(20u8)));
|
||||
assert!((20f32 == num::cast(20u16)));
|
||||
assert!((20f32 == num::cast(20u32)));
|
||||
assert!((20f32 == num::cast(20u64)));
|
||||
assert!((20f32 == num::cast(20i)));
|
||||
assert!((20f32 == num::cast(20i8)));
|
||||
assert!((20f32 == num::cast(20i16)));
|
||||
assert!((20f32 == num::cast(20i32)));
|
||||
assert!((20f32 == num::cast(20i64)));
|
||||
assert!((20f32 == num::cast(20f)));
|
||||
assert!((20f32 == num::cast(20f32)));
|
||||
assert!((20f32 == num::cast(20f64)));
|
||||
}
|
||||
|
||||
//
|
||||
// Local Variables:
|
||||
// mode: rust
|
||||
|
|
|
@ -12,7 +12,6 @@
|
|||
|
||||
use cmath;
|
||||
use libc::{c_double, c_int};
|
||||
use num::NumCast;
|
||||
use num::strconv;
|
||||
use num;
|
||||
use option::Option;
|
||||
|
@ -299,30 +298,6 @@ impl cmp::Ord for f64 {
|
|||
fn gt(&self, other: &f64) -> bool { (*self) > (*other) }
|
||||
}
|
||||
|
||||
impl NumCast for f64 {
|
||||
/**
|
||||
* Cast `n` to an `f64`
|
||||
*/
|
||||
#[inline(always)]
|
||||
fn from<N:NumCast>(n: N) -> f64 { n.to_f64() }
|
||||
|
||||
#[inline(always)] fn to_u8(&self) -> u8 { *self as u8 }
|
||||
#[inline(always)] fn to_u16(&self) -> u16 { *self as u16 }
|
||||
#[inline(always)] fn to_u32(&self) -> u32 { *self as u32 }
|
||||
#[inline(always)] fn to_u64(&self) -> u64 { *self as u64 }
|
||||
#[inline(always)] fn to_uint(&self) -> uint { *self as uint }
|
||||
|
||||
#[inline(always)] fn to_i8(&self) -> i8 { *self as i8 }
|
||||
#[inline(always)] fn to_i16(&self) -> i16 { *self as i16 }
|
||||
#[inline(always)] fn to_i32(&self) -> i32 { *self as i32 }
|
||||
#[inline(always)] fn to_i64(&self) -> i64 { *self as i64 }
|
||||
#[inline(always)] fn to_int(&self) -> int { *self as int }
|
||||
|
||||
#[inline(always)] fn to_f32(&self) -> f32 { *self as f32 }
|
||||
#[inline(always)] fn to_f64(&self) -> f64 { *self }
|
||||
#[inline(always)] fn to_float(&self) -> float { *self as float }
|
||||
}
|
||||
|
||||
impl num::Zero for f64 {
|
||||
#[inline(always)]
|
||||
fn zero() -> f64 { 0.0 }
|
||||
|
@ -614,51 +589,6 @@ pub fn test_num() {
|
|||
assert!((ten.modulo(&two) == num::cast(0)));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_numcast() {
|
||||
assert!((20u == 20f64.to_uint()));
|
||||
assert!((20u8 == 20f64.to_u8()));
|
||||
assert!((20u16 == 20f64.to_u16()));
|
||||
assert!((20u32 == 20f64.to_u32()));
|
||||
assert!((20u64 == 20f64.to_u64()));
|
||||
assert!((20i == 20f64.to_int()));
|
||||
assert!((20i8 == 20f64.to_i8()));
|
||||
assert!((20i16 == 20f64.to_i16()));
|
||||
assert!((20i32 == 20f64.to_i32()));
|
||||
assert!((20i64 == 20f64.to_i64()));
|
||||
assert!((20f == 20f64.to_float()));
|
||||
assert!((20f32 == 20f64.to_f32()));
|
||||
assert!((20f64 == 20f64.to_f64()));
|
||||
|
||||
assert!((20f64 == NumCast::from(20u)));
|
||||
assert!((20f64 == NumCast::from(20u8)));
|
||||
assert!((20f64 == NumCast::from(20u16)));
|
||||
assert!((20f64 == NumCast::from(20u32)));
|
||||
assert!((20f64 == NumCast::from(20u64)));
|
||||
assert!((20f64 == NumCast::from(20i)));
|
||||
assert!((20f64 == NumCast::from(20i8)));
|
||||
assert!((20f64 == NumCast::from(20i16)));
|
||||
assert!((20f64 == NumCast::from(20i32)));
|
||||
assert!((20f64 == NumCast::from(20i64)));
|
||||
assert!((20f64 == NumCast::from(20f)));
|
||||
assert!((20f64 == NumCast::from(20f32)));
|
||||
assert!((20f64 == NumCast::from(20f64)));
|
||||
|
||||
assert!((20f64 == num::cast(20u)));
|
||||
assert!((20f64 == num::cast(20u8)));
|
||||
assert!((20f64 == num::cast(20u16)));
|
||||
assert!((20f64 == num::cast(20u32)));
|
||||
assert!((20f64 == num::cast(20u64)));
|
||||
assert!((20f64 == num::cast(20i)));
|
||||
assert!((20f64 == num::cast(20i8)));
|
||||
assert!((20f64 == num::cast(20i16)));
|
||||
assert!((20f64 == num::cast(20i32)));
|
||||
assert!((20f64 == num::cast(20i64)));
|
||||
assert!((20f64 == num::cast(20f)));
|
||||
assert!((20f64 == num::cast(20f32)));
|
||||
assert!((20f64 == num::cast(20f64)));
|
||||
}
|
||||
|
||||
//
|
||||
// Local Variables:
|
||||
// mode: rust
|
||||
|
|
|
@ -21,7 +21,6 @@
|
|||
// PORT this must match in width according to architecture
|
||||
|
||||
use f64;
|
||||
use num::NumCast;
|
||||
use num::strconv;
|
||||
use num;
|
||||
use option::Option;
|
||||
|
@ -417,30 +416,6 @@ impl num::One for float {
|
|||
fn one() -> float { 1.0 }
|
||||
}
|
||||
|
||||
impl NumCast for float {
|
||||
/**
|
||||
* Cast `n` to a `float`
|
||||
*/
|
||||
#[inline(always)]
|
||||
fn from<N:NumCast>(n: N) -> float { n.to_float() }
|
||||
|
||||
#[inline(always)] fn to_u8(&self) -> u8 { *self as u8 }
|
||||
#[inline(always)] fn to_u16(&self) -> u16 { *self as u16 }
|
||||
#[inline(always)] fn to_u32(&self) -> u32 { *self as u32 }
|
||||
#[inline(always)] fn to_u64(&self) -> u64 { *self as u64 }
|
||||
#[inline(always)] fn to_uint(&self) -> uint { *self as uint }
|
||||
|
||||
#[inline(always)] fn to_i8(&self) -> i8 { *self as i8 }
|
||||
#[inline(always)] fn to_i16(&self) -> i16 { *self as i16 }
|
||||
#[inline(always)] fn to_i32(&self) -> i32 { *self as i32 }
|
||||
#[inline(always)] fn to_i64(&self) -> i64 { *self as i64 }
|
||||
#[inline(always)] fn to_int(&self) -> int { *self as int }
|
||||
|
||||
#[inline(always)] fn to_f32(&self) -> f32 { *self as f32 }
|
||||
#[inline(always)] fn to_f64(&self) -> f64 { *self as f64 }
|
||||
#[inline(always)] fn to_float(&self) -> float { *self }
|
||||
}
|
||||
|
||||
impl num::Round for float {
|
||||
#[inline(always)]
|
||||
fn round(&self, mode: num::RoundMode) -> float {
|
||||
|
@ -700,51 +675,6 @@ pub fn test_num() {
|
|||
assert!((ten.modulo(&two) == num::cast(0)));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_numcast() {
|
||||
assert!((20u == 20f.to_uint()));
|
||||
assert!((20u8 == 20f.to_u8()));
|
||||
assert!((20u16 == 20f.to_u16()));
|
||||
assert!((20u32 == 20f.to_u32()));
|
||||
assert!((20u64 == 20f.to_u64()));
|
||||
assert!((20i == 20f.to_int()));
|
||||
assert!((20i8 == 20f.to_i8()));
|
||||
assert!((20i16 == 20f.to_i16()));
|
||||
assert!((20i32 == 20f.to_i32()));
|
||||
assert!((20i64 == 20f.to_i64()));
|
||||
assert!((20f == 20f.to_float()));
|
||||
assert!((20f32 == 20f.to_f32()));
|
||||
assert!((20f64 == 20f.to_f64()));
|
||||
|
||||
assert!((20f == NumCast::from(20u)));
|
||||
assert!((20f == NumCast::from(20u8)));
|
||||
assert!((20f == NumCast::from(20u16)));
|
||||
assert!((20f == NumCast::from(20u32)));
|
||||
assert!((20f == NumCast::from(20u64)));
|
||||
assert!((20f == NumCast::from(20i)));
|
||||
assert!((20f == NumCast::from(20i8)));
|
||||
assert!((20f == NumCast::from(20i16)));
|
||||
assert!((20f == NumCast::from(20i32)));
|
||||
assert!((20f == NumCast::from(20i64)));
|
||||
assert!((20f == NumCast::from(20f)));
|
||||
assert!((20f == NumCast::from(20f32)));
|
||||
assert!((20f == NumCast::from(20f64)));
|
||||
|
||||
assert!((20f == num::cast(20u)));
|
||||
assert!((20f == num::cast(20u8)));
|
||||
assert!((20f == num::cast(20u16)));
|
||||
assert!((20f == num::cast(20u32)));
|
||||
assert!((20f == num::cast(20u64)));
|
||||
assert!((20f == num::cast(20i)));
|
||||
assert!((20f == num::cast(20i8)));
|
||||
assert!((20f == num::cast(20i16)));
|
||||
assert!((20f == num::cast(20i32)));
|
||||
assert!((20f == num::cast(20i64)));
|
||||
assert!((20f == num::cast(20f)));
|
||||
assert!((20f == num::cast(20f32)));
|
||||
assert!((20f == num::cast(20f64)));
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Local Variables:
|
||||
|
|
|
@ -10,78 +10,7 @@
|
|||
|
||||
//! Operations and constants for `i16`
|
||||
|
||||
use num::NumCast;
|
||||
|
||||
mod inst {
|
||||
pub type T = i16;
|
||||
pub static bits: uint = ::u16::bits;
|
||||
}
|
||||
|
||||
impl NumCast for i16 {
|
||||
/**
|
||||
* Cast `n` to a `i16`
|
||||
*/
|
||||
#[inline(always)]
|
||||
fn from<N:NumCast>(n: N) -> i16 { n.to_i16() }
|
||||
|
||||
#[inline(always)] fn to_u8(&self) -> u8 { *self as u8 }
|
||||
#[inline(always)] fn to_u16(&self) -> u16 { *self as u16 }
|
||||
#[inline(always)] fn to_u32(&self) -> u32 { *self as u32 }
|
||||
#[inline(always)] fn to_u64(&self) -> u64 { *self as u64 }
|
||||
#[inline(always)] fn to_uint(&self) -> uint { *self as uint }
|
||||
|
||||
#[inline(always)] fn to_i8(&self) -> i8 { *self as i8 }
|
||||
#[inline(always)] fn to_i16(&self) -> i16 { *self }
|
||||
#[inline(always)] fn to_i32(&self) -> i32 { *self as i32 }
|
||||
#[inline(always)] fn to_i64(&self) -> i64 { *self as i64 }
|
||||
#[inline(always)] fn to_int(&self) -> int { *self as int }
|
||||
|
||||
#[inline(always)] fn to_f32(&self) -> f32 { *self as f32 }
|
||||
#[inline(always)] fn to_f64(&self) -> f64 { *self as f64 }
|
||||
#[inline(always)] fn to_float(&self) -> float { *self as float }
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_numcast() {
|
||||
assert!((20u == 20i16.to_uint()));
|
||||
assert!((20u8 == 20i16.to_u8()));
|
||||
assert!((20u16 == 20i16.to_u16()));
|
||||
assert!((20u32 == 20i16.to_u32()));
|
||||
assert!((20u64 == 20i16.to_u64()));
|
||||
assert!((20i == 20i16.to_int()));
|
||||
assert!((20i8 == 20i16.to_i8()));
|
||||
assert!((20i16 == 20i16.to_i16()));
|
||||
assert!((20i32 == 20i16.to_i32()));
|
||||
assert!((20i64 == 20i16.to_i64()));
|
||||
assert!((20f == 20i16.to_float()));
|
||||
assert!((20f32 == 20i16.to_f32()));
|
||||
assert!((20f64 == 20i16.to_f64()));
|
||||
|
||||
assert!((20i16 == NumCast::from(20u)));
|
||||
assert!((20i16 == NumCast::from(20u8)));
|
||||
assert!((20i16 == NumCast::from(20u16)));
|
||||
assert!((20i16 == NumCast::from(20u32)));
|
||||
assert!((20i16 == NumCast::from(20u64)));
|
||||
assert!((20i16 == NumCast::from(20i)));
|
||||
assert!((20i16 == NumCast::from(20i8)));
|
||||
assert!((20i16 == NumCast::from(20i16)));
|
||||
assert!((20i16 == NumCast::from(20i32)));
|
||||
assert!((20i16 == NumCast::from(20i64)));
|
||||
assert!((20i16 == NumCast::from(20f)));
|
||||
assert!((20i16 == NumCast::from(20f32)));
|
||||
assert!((20i16 == NumCast::from(20f64)));
|
||||
|
||||
assert!((20i16 == num::cast(20u)));
|
||||
assert!((20i16 == num::cast(20u8)));
|
||||
assert!((20i16 == num::cast(20u16)));
|
||||
assert!((20i16 == num::cast(20u32)));
|
||||
assert!((20i16 == num::cast(20u64)));
|
||||
assert!((20i16 == num::cast(20i)));
|
||||
assert!((20i16 == num::cast(20i8)));
|
||||
assert!((20i16 == num::cast(20i16)));
|
||||
assert!((20i16 == num::cast(20i32)));
|
||||
assert!((20i16 == num::cast(20i64)));
|
||||
assert!((20i16 == num::cast(20f)));
|
||||
assert!((20i16 == num::cast(20f32)));
|
||||
assert!((20i16 == num::cast(20f64)));
|
||||
}
|
||||
|
|
|
@ -10,78 +10,7 @@
|
|||
|
||||
//! Operations and constants for `i32`
|
||||
|
||||
use num::NumCast;
|
||||
|
||||
mod inst {
|
||||
pub type T = i32;
|
||||
pub static bits: uint = ::u32::bits;
|
||||
}
|
||||
|
||||
impl NumCast for i32 {
|
||||
/**
|
||||
* Cast `n` to a `i32`
|
||||
*/
|
||||
#[inline(always)]
|
||||
fn from<N:NumCast>(n: N) -> i32 { n.to_i32() }
|
||||
|
||||
#[inline(always)] fn to_u8(&self) -> u8 { *self as u8 }
|
||||
#[inline(always)] fn to_u16(&self) -> u16 { *self as u16 }
|
||||
#[inline(always)] fn to_u32(&self) -> u32 { *self as u32 }
|
||||
#[inline(always)] fn to_u64(&self) -> u64 { *self as u64 }
|
||||
#[inline(always)] fn to_uint(&self) -> uint { *self as uint }
|
||||
|
||||
#[inline(always)] fn to_i8(&self) -> i8 { *self as i8 }
|
||||
#[inline(always)] fn to_i16(&self) -> i16 { *self as i16 }
|
||||
#[inline(always)] fn to_i32(&self) -> i32 { *self }
|
||||
#[inline(always)] fn to_i64(&self) -> i64 { *self as i64 }
|
||||
#[inline(always)] fn to_int(&self) -> int { *self as int }
|
||||
|
||||
#[inline(always)] fn to_f32(&self) -> f32 { *self as f32 }
|
||||
#[inline(always)] fn to_f64(&self) -> f64 { *self as f64 }
|
||||
#[inline(always)] fn to_float(&self) -> float { *self as float }
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_numcast() {
|
||||
assert!((20u == 20i32.to_uint()));
|
||||
assert!((20u8 == 20i32.to_u8()));
|
||||
assert!((20u16 == 20i32.to_u16()));
|
||||
assert!((20u32 == 20i32.to_u32()));
|
||||
assert!((20u64 == 20i32.to_u64()));
|
||||
assert!((20i == 20i32.to_int()));
|
||||
assert!((20i8 == 20i32.to_i8()));
|
||||
assert!((20i16 == 20i32.to_i16()));
|
||||
assert!((20i32 == 20i32.to_i32()));
|
||||
assert!((20i64 == 20i32.to_i64()));
|
||||
assert!((20f == 20i32.to_float()));
|
||||
assert!((20f32 == 20i32.to_f32()));
|
||||
assert!((20f64 == 20i32.to_f64()));
|
||||
|
||||
assert!((20i32 == NumCast::from(20u)));
|
||||
assert!((20i32 == NumCast::from(20u8)));
|
||||
assert!((20i32 == NumCast::from(20u16)));
|
||||
assert!((20i32 == NumCast::from(20u32)));
|
||||
assert!((20i32 == NumCast::from(20u64)));
|
||||
assert!((20i32 == NumCast::from(20i)));
|
||||
assert!((20i32 == NumCast::from(20i8)));
|
||||
assert!((20i32 == NumCast::from(20i16)));
|
||||
assert!((20i32 == NumCast::from(20i32)));
|
||||
assert!((20i32 == NumCast::from(20i64)));
|
||||
assert!((20i32 == NumCast::from(20f)));
|
||||
assert!((20i32 == NumCast::from(20f32)));
|
||||
assert!((20i32 == NumCast::from(20f64)));
|
||||
|
||||
assert!((20i32 == num::cast(20u)));
|
||||
assert!((20i32 == num::cast(20u8)));
|
||||
assert!((20i32 == num::cast(20u16)));
|
||||
assert!((20i32 == num::cast(20u32)));
|
||||
assert!((20i32 == num::cast(20u64)));
|
||||
assert!((20i32 == num::cast(20i)));
|
||||
assert!((20i32 == num::cast(20i8)));
|
||||
assert!((20i32 == num::cast(20i16)));
|
||||
assert!((20i32 == num::cast(20i32)));
|
||||
assert!((20i32 == num::cast(20i64)));
|
||||
assert!((20i32 == num::cast(20f)));
|
||||
assert!((20i32 == num::cast(20f32)));
|
||||
assert!((20i32 == num::cast(20f64)));
|
||||
}
|
||||
|
|
|
@ -10,78 +10,7 @@
|
|||
|
||||
//! Operations and constants for `i64`
|
||||
|
||||
use num::NumCast;
|
||||
|
||||
mod inst {
|
||||
pub type T = i64;
|
||||
pub static bits: uint = ::u64::bits;
|
||||
}
|
||||
|
||||
impl NumCast for i64 {
|
||||
/**
|
||||
* Cast `n` to a `i64`
|
||||
*/
|
||||
#[inline(always)]
|
||||
fn from<N:NumCast>(n: N) -> i64 { n.to_i64() }
|
||||
|
||||
#[inline(always)] fn to_u8(&self) -> u8 { *self as u8 }
|
||||
#[inline(always)] fn to_u16(&self) -> u16 { *self as u16 }
|
||||
#[inline(always)] fn to_u32(&self) -> u32 { *self as u32 }
|
||||
#[inline(always)] fn to_u64(&self) -> u64 { *self as u64 }
|
||||
#[inline(always)] fn to_uint(&self) -> uint { *self as uint }
|
||||
|
||||
#[inline(always)] fn to_i8(&self) -> i8 { *self as i8 }
|
||||
#[inline(always)] fn to_i16(&self) -> i16 { *self as i16 }
|
||||
#[inline(always)] fn to_i32(&self) -> i32 { *self as i32 }
|
||||
#[inline(always)] fn to_i64(&self) -> i64 { *self }
|
||||
#[inline(always)] fn to_int(&self) -> int { *self as int }
|
||||
|
||||
#[inline(always)] fn to_f32(&self) -> f32 { *self as f32 }
|
||||
#[inline(always)] fn to_f64(&self) -> f64 { *self as f64 }
|
||||
#[inline(always)] fn to_float(&self) -> float { *self as float }
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_numcast() {
|
||||
assert!((20u == 20i64.to_uint()));
|
||||
assert!((20u8 == 20i64.to_u8()));
|
||||
assert!((20u16 == 20i64.to_u16()));
|
||||
assert!((20u32 == 20i64.to_u32()));
|
||||
assert!((20u64 == 20i64.to_u64()));
|
||||
assert!((20i == 20i64.to_int()));
|
||||
assert!((20i8 == 20i64.to_i8()));
|
||||
assert!((20i16 == 20i64.to_i16()));
|
||||
assert!((20i32 == 20i64.to_i32()));
|
||||
assert!((20i64 == 20i64.to_i64()));
|
||||
assert!((20f == 20i64.to_float()));
|
||||
assert!((20f32 == 20i64.to_f32()));
|
||||
assert!((20f64 == 20i64.to_f64()));
|
||||
|
||||
assert!((20i64 == NumCast::from(20u)));
|
||||
assert!((20i64 == NumCast::from(20u8)));
|
||||
assert!((20i64 == NumCast::from(20u16)));
|
||||
assert!((20i64 == NumCast::from(20u32)));
|
||||
assert!((20i64 == NumCast::from(20u64)));
|
||||
assert!((20i64 == NumCast::from(20i)));
|
||||
assert!((20i64 == NumCast::from(20i8)));
|
||||
assert!((20i64 == NumCast::from(20i16)));
|
||||
assert!((20i64 == NumCast::from(20i32)));
|
||||
assert!((20i64 == NumCast::from(20i64)));
|
||||
assert!((20i64 == NumCast::from(20f)));
|
||||
assert!((20i64 == NumCast::from(20f32)));
|
||||
assert!((20i64 == NumCast::from(20f64)));
|
||||
|
||||
assert!((20i64 == num::cast(20u)));
|
||||
assert!((20i64 == num::cast(20u8)));
|
||||
assert!((20i64 == num::cast(20u16)));
|
||||
assert!((20i64 == num::cast(20u32)));
|
||||
assert!((20i64 == num::cast(20u64)));
|
||||
assert!((20i64 == num::cast(20i)));
|
||||
assert!((20i64 == num::cast(20i8)));
|
||||
assert!((20i64 == num::cast(20i16)));
|
||||
assert!((20i64 == num::cast(20i32)));
|
||||
assert!((20i64 == num::cast(20i64)));
|
||||
assert!((20i64 == num::cast(20f)));
|
||||
assert!((20i64 == num::cast(20f32)));
|
||||
assert!((20i64 == num::cast(20f64)));
|
||||
}
|
||||
|
|
|
@ -10,78 +10,7 @@
|
|||
|
||||
//! Operations and constants for `i8`
|
||||
|
||||
use num::NumCast;
|
||||
|
||||
mod inst {
|
||||
pub type T = i8;
|
||||
pub static bits: uint = ::u8::bits;
|
||||
}
|
||||
|
||||
impl NumCast for i8 {
|
||||
/**
|
||||
* Cast `n` to a `i8`
|
||||
*/
|
||||
#[inline(always)]
|
||||
fn from<N:NumCast>(n: N) -> i8 { n.to_i8() }
|
||||
|
||||
#[inline(always)] fn to_u8(&self) -> u8 { *self as u8 }
|
||||
#[inline(always)] fn to_u16(&self) -> u16 { *self as u16 }
|
||||
#[inline(always)] fn to_u32(&self) -> u32 { *self as u32 }
|
||||
#[inline(always)] fn to_u64(&self) -> u64 { *self as u64 }
|
||||
#[inline(always)] fn to_uint(&self) -> uint { *self as uint }
|
||||
|
||||
#[inline(always)] fn to_i8(&self) -> i8 { *self }
|
||||
#[inline(always)] fn to_i16(&self) -> i16 { *self as i16 }
|
||||
#[inline(always)] fn to_i32(&self) -> i32 { *self as i32 }
|
||||
#[inline(always)] fn to_i64(&self) -> i64 { *self as i64 }
|
||||
#[inline(always)] fn to_int(&self) -> int { *self as int }
|
||||
|
||||
#[inline(always)] fn to_f32(&self) -> f32 { *self as f32 }
|
||||
#[inline(always)] fn to_f64(&self) -> f64 { *self as f64 }
|
||||
#[inline(always)] fn to_float(&self) -> float { *self as float }
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_numcast() {
|
||||
assert!((20u == 20i8.to_uint()));
|
||||
assert!((20u8 == 20i8.to_u8()));
|
||||
assert!((20u16 == 20i8.to_u16()));
|
||||
assert!((20u32 == 20i8.to_u32()));
|
||||
assert!((20u64 == 20i8.to_u64()));
|
||||
assert!((20i == 20i8.to_int()));
|
||||
assert!((20i8 == 20i8.to_i8()));
|
||||
assert!((20i16 == 20i8.to_i16()));
|
||||
assert!((20i32 == 20i8.to_i32()));
|
||||
assert!((20i64 == 20i8.to_i64()));
|
||||
assert!((20f == 20i8.to_float()));
|
||||
assert!((20f32 == 20i8.to_f32()));
|
||||
assert!((20f64 == 20i8.to_f64()));
|
||||
|
||||
assert!((20i8 == NumCast::from(20u)));
|
||||
assert!((20i8 == NumCast::from(20u8)));
|
||||
assert!((20i8 == NumCast::from(20u16)));
|
||||
assert!((20i8 == NumCast::from(20u32)));
|
||||
assert!((20i8 == NumCast::from(20u64)));
|
||||
assert!((20i8 == NumCast::from(20i)));
|
||||
assert!((20i8 == NumCast::from(20i8)));
|
||||
assert!((20i8 == NumCast::from(20i16)));
|
||||
assert!((20i8 == NumCast::from(20i32)));
|
||||
assert!((20i8 == NumCast::from(20i64)));
|
||||
assert!((20i8 == NumCast::from(20f)));
|
||||
assert!((20i8 == NumCast::from(20f32)));
|
||||
assert!((20i8 == NumCast::from(20f64)));
|
||||
|
||||
assert!((20i8 == num::cast(20u)));
|
||||
assert!((20i8 == num::cast(20u8)));
|
||||
assert!((20i8 == num::cast(20u16)));
|
||||
assert!((20i8 == num::cast(20u32)));
|
||||
assert!((20i8 == num::cast(20u64)));
|
||||
assert!((20i8 == num::cast(20i)));
|
||||
assert!((20i8 == num::cast(20i8)));
|
||||
assert!((20i8 == num::cast(20i16)));
|
||||
assert!((20i8 == num::cast(20i32)));
|
||||
assert!((20i8 == num::cast(20i64)));
|
||||
assert!((20i8 == num::cast(20f)));
|
||||
assert!((20i8 == num::cast(20f32)));
|
||||
assert!((20i8 == num::cast(20f64)));
|
||||
}
|
||||
|
|
|
@ -10,8 +10,6 @@
|
|||
|
||||
//! Operations and constants for `int`
|
||||
|
||||
use num::NumCast;
|
||||
|
||||
pub use self::inst::pow;
|
||||
|
||||
mod inst {
|
||||
|
@ -57,72 +55,3 @@ mod inst {
|
|||
assert!((::int::min_value + ::int::max_value + 1 == 0));
|
||||
}
|
||||
}
|
||||
|
||||
impl NumCast for int {
|
||||
/**
|
||||
* Cast `n` to a `int`
|
||||
*/
|
||||
#[inline(always)]
|
||||
fn from<N:NumCast>(n: N) -> int { n.to_int() }
|
||||
|
||||
#[inline(always)] fn to_u8(&self) -> u8 { *self as u8 }
|
||||
#[inline(always)] fn to_u16(&self) -> u16 { *self as u16 }
|
||||
#[inline(always)] fn to_u32(&self) -> u32 { *self as u32 }
|
||||
#[inline(always)] fn to_u64(&self) -> u64 { *self as u64 }
|
||||
#[inline(always)] fn to_uint(&self) -> uint { *self as uint }
|
||||
|
||||
#[inline(always)] fn to_i8(&self) -> i8 { *self as i8 }
|
||||
#[inline(always)] fn to_i16(&self) -> i16 { *self as i16 }
|
||||
#[inline(always)] fn to_i32(&self) -> i32 { *self as i32 }
|
||||
#[inline(always)] fn to_i64(&self) -> i64 { *self as i64 }
|
||||
#[inline(always)] fn to_int(&self) -> int { *self }
|
||||
|
||||
#[inline(always)] fn to_f32(&self) -> f32 { *self as f32 }
|
||||
#[inline(always)] fn to_f64(&self) -> f64 { *self as f64 }
|
||||
#[inline(always)] fn to_float(&self) -> float { *self as float }
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_numcast() {
|
||||
assert!((20u == 20i.to_uint()));
|
||||
assert!((20u8 == 20i.to_u8()));
|
||||
assert!((20u16 == 20i.to_u16()));
|
||||
assert!((20u32 == 20i.to_u32()));
|
||||
assert!((20u64 == 20i.to_u64()));
|
||||
assert!((20i == 20i.to_int()));
|
||||
assert!((20i8 == 20i.to_i8()));
|
||||
assert!((20i16 == 20i.to_i16()));
|
||||
assert!((20i32 == 20i.to_i32()));
|
||||
assert!((20i64 == 20i.to_i64()));
|
||||
assert!((20f == 20i.to_float()));
|
||||
assert!((20f32 == 20i.to_f32()));
|
||||
assert!((20f64 == 20i.to_f64()));
|
||||
|
||||
assert!((20i == NumCast::from(20u)));
|
||||
assert!((20i == NumCast::from(20u8)));
|
||||
assert!((20i == NumCast::from(20u16)));
|
||||
assert!((20i == NumCast::from(20u32)));
|
||||
assert!((20i == NumCast::from(20u64)));
|
||||
assert!((20i == NumCast::from(20i)));
|
||||
assert!((20i == NumCast::from(20i8)));
|
||||
assert!((20i == NumCast::from(20i16)));
|
||||
assert!((20i == NumCast::from(20i32)));
|
||||
assert!((20i == NumCast::from(20i64)));
|
||||
assert!((20i == NumCast::from(20f)));
|
||||
assert!((20i == NumCast::from(20f32)));
|
||||
assert!((20i == NumCast::from(20f64)));
|
||||
|
||||
assert!((20i == num::cast(20u)));
|
||||
assert!((20i == num::cast(20u8)));
|
||||
assert!((20i == num::cast(20u16)));
|
||||
assert!((20i == num::cast(20u32)));
|
||||
assert!((20i == num::cast(20u64)));
|
||||
assert!((20i == num::cast(20i)));
|
||||
assert!((20i == num::cast(20i8)));
|
||||
assert!((20i == num::cast(20i16)));
|
||||
assert!((20i == num::cast(20i32)));
|
||||
assert!((20i == num::cast(20i64)));
|
||||
assert!((20i == num::cast(20f)));
|
||||
assert!((20i == num::cast(20f32)));
|
||||
assert!((20i == num::cast(20f64)));
|
||||
}
|
||||
|
|
|
@ -9,8 +9,8 @@
|
|||
// except according to those terms.
|
||||
|
||||
//! An interface for numeric types
|
||||
use cmp::Ord;
|
||||
use ops::{Div, Mul, Neg};
|
||||
use cmp::{Eq, Ord};
|
||||
use ops::{Neg, Add, Sub, Mul, Div, Modulo};
|
||||
use option::Option;
|
||||
use kinds::Copy;
|
||||
|
||||
|
@ -86,6 +86,57 @@ pub trait NumCast {
|
|||
fn to_float(&self) -> float;
|
||||
}
|
||||
|
||||
macro_rules! impl_num_cast(
|
||||
($T:ty, $conv:ident) => (
|
||||
// FIXME #4375: This enclosing module is necessary because
|
||||
// of a bug with macros expanding into multiple items
|
||||
pub mod $conv {
|
||||
use num::NumCast;
|
||||
|
||||
#[cfg(notest)]
|
||||
impl NumCast for $T {
|
||||
#[doc = "Cast `n` to a `$T`"]
|
||||
#[inline(always)]
|
||||
fn from<N:NumCast>(n: N) -> $T {
|
||||
// `$conv` could be generated using `concat_idents!`, but that
|
||||
// macro seems to be broken at the moment
|
||||
n.$conv()
|
||||
}
|
||||
|
||||
#[inline(always)] fn to_u8(&self) -> u8 { *self as u8 }
|
||||
#[inline(always)] fn to_u16(&self) -> u16 { *self as u16 }
|
||||
#[inline(always)] fn to_u32(&self) -> u32 { *self as u32 }
|
||||
#[inline(always)] fn to_u64(&self) -> u64 { *self as u64 }
|
||||
#[inline(always)] fn to_uint(&self) -> uint { *self as uint }
|
||||
|
||||
#[inline(always)] fn to_i8(&self) -> i8 { *self as i8 }
|
||||
#[inline(always)] fn to_i16(&self) -> i16 { *self as i16 }
|
||||
#[inline(always)] fn to_i32(&self) -> i32 { *self as i32 }
|
||||
#[inline(always)] fn to_i64(&self) -> i64 { *self as i64 }
|
||||
#[inline(always)] fn to_int(&self) -> int { *self as int }
|
||||
|
||||
#[inline(always)] fn to_f32(&self) -> f32 { *self as f32 }
|
||||
#[inline(always)] fn to_f64(&self) -> f64 { *self as f64 }
|
||||
#[inline(always)] fn to_float(&self) -> float { *self as float }
|
||||
}
|
||||
}
|
||||
)
|
||||
)
|
||||
|
||||
impl_num_cast!(u8, to_u8)
|
||||
impl_num_cast!(u16, to_u16)
|
||||
impl_num_cast!(u32, to_u32)
|
||||
impl_num_cast!(u64, to_u64)
|
||||
impl_num_cast!(uint, to_uint)
|
||||
impl_num_cast!(i8, to_i8)
|
||||
impl_num_cast!(i16, to_i16)
|
||||
impl_num_cast!(i32, to_i32)
|
||||
impl_num_cast!(i64, to_i64)
|
||||
impl_num_cast!(int, to_int)
|
||||
impl_num_cast!(f32, to_f32)
|
||||
impl_num_cast!(f64, to_f64)
|
||||
impl_num_cast!(float, to_float)
|
||||
|
||||
pub trait ToStrRadix {
|
||||
pub fn to_str_radix(&self, radix: uint) -> ~str;
|
||||
}
|
||||
|
@ -129,3 +180,64 @@ pub fn pow_with_uint<T:NumCast+One+Zero+Copy+Div<T,T>+Mul<T,T>>(
|
|||
total
|
||||
}
|
||||
|
||||
macro_rules! test_cast_20(
|
||||
($_20:expr) => ({
|
||||
let _20 = $_20;
|
||||
|
||||
assert!(20u == _20.to_uint());
|
||||
assert!(20u8 == _20.to_u8());
|
||||
assert!(20u16 == _20.to_u16());
|
||||
assert!(20u32 == _20.to_u32());
|
||||
assert!(20u64 == _20.to_u64());
|
||||
assert!(20i == _20.to_int());
|
||||
assert!(20i8 == _20.to_i8());
|
||||
assert!(20i16 == _20.to_i16());
|
||||
assert!(20i32 == _20.to_i32());
|
||||
assert!(20i64 == _20.to_i64());
|
||||
assert!(20f == _20.to_float());
|
||||
assert!(20f32 == _20.to_f32());
|
||||
assert!(20f64 == _20.to_f64());
|
||||
|
||||
assert!(_20 == NumCast::from(20u));
|
||||
assert!(_20 == NumCast::from(20u8));
|
||||
assert!(_20 == NumCast::from(20u16));
|
||||
assert!(_20 == NumCast::from(20u32));
|
||||
assert!(_20 == NumCast::from(20u64));
|
||||
assert!(_20 == NumCast::from(20i));
|
||||
assert!(_20 == NumCast::from(20i8));
|
||||
assert!(_20 == NumCast::from(20i16));
|
||||
assert!(_20 == NumCast::from(20i32));
|
||||
assert!(_20 == NumCast::from(20i64));
|
||||
assert!(_20 == NumCast::from(20f));
|
||||
assert!(_20 == NumCast::from(20f32));
|
||||
assert!(_20 == NumCast::from(20f64));
|
||||
|
||||
assert!(_20 == cast(20u));
|
||||
assert!(_20 == cast(20u8));
|
||||
assert!(_20 == cast(20u16));
|
||||
assert!(_20 == cast(20u32));
|
||||
assert!(_20 == cast(20u64));
|
||||
assert!(_20 == cast(20i));
|
||||
assert!(_20 == cast(20i8));
|
||||
assert!(_20 == cast(20i16));
|
||||
assert!(_20 == cast(20i32));
|
||||
assert!(_20 == cast(20i64));
|
||||
assert!(_20 == cast(20f));
|
||||
assert!(_20 == cast(20f32));
|
||||
assert!(_20 == cast(20f64));
|
||||
})
|
||||
)
|
||||
|
||||
#[test] fn test_u8_cast() { test_cast_20!(20u8) }
|
||||
#[test] fn test_u16_cast() { test_cast_20!(20u16) }
|
||||
#[test] fn test_u32_cast() { test_cast_20!(20u32) }
|
||||
#[test] fn test_u64_cast() { test_cast_20!(20u64) }
|
||||
#[test] fn test_uint_cast() { test_cast_20!(20u) }
|
||||
#[test] fn test_i8_cast() { test_cast_20!(20i8) }
|
||||
#[test] fn test_i16_cast() { test_cast_20!(20i16) }
|
||||
#[test] fn test_i32_cast() { test_cast_20!(20i32) }
|
||||
#[test] fn test_i64_cast() { test_cast_20!(20i64) }
|
||||
#[test] fn test_int_cast() { test_cast_20!(20i) }
|
||||
#[test] fn test_f32_cast() { test_cast_20!(20f32) }
|
||||
#[test] fn test_f64_cast() { test_cast_20!(20f64) }
|
||||
#[test] fn test_float_cast() { test_cast_20!(20f) }
|
|
@ -10,80 +10,9 @@
|
|||
|
||||
//! Operations and constants for `u16`
|
||||
|
||||
use num::NumCast;
|
||||
|
||||
mod inst {
|
||||
pub type T = u16;
|
||||
#[allow(non_camel_case_types)]
|
||||
pub type T_SIGNED = i16;
|
||||
pub static bits: uint = 16;
|
||||
}
|
||||
|
||||
impl NumCast for u16 {
|
||||
/**
|
||||
* Cast `n` to a `u16`
|
||||
*/
|
||||
#[inline(always)]
|
||||
fn from<N:NumCast>(n: N) -> u16 { n.to_u16() }
|
||||
|
||||
#[inline(always)] fn to_u8(&self) -> u8 { *self as u8 }
|
||||
#[inline(always)] fn to_u16(&self) -> u16 { *self }
|
||||
#[inline(always)] fn to_u32(&self) -> u32 { *self as u32 }
|
||||
#[inline(always)] fn to_u64(&self) -> u64 { *self as u64 }
|
||||
#[inline(always)] fn to_uint(&self) -> uint { *self as uint }
|
||||
|
||||
#[inline(always)] fn to_i8(&self) -> i8 { *self as i8 }
|
||||
#[inline(always)] fn to_i16(&self) -> i16 { *self as i16 }
|
||||
#[inline(always)] fn to_i32(&self) -> i32 { *self as i32 }
|
||||
#[inline(always)] fn to_i64(&self) -> i64 { *self as i64 }
|
||||
#[inline(always)] fn to_int(&self) -> int { *self as int }
|
||||
|
||||
#[inline(always)] fn to_f32(&self) -> f32 { *self as f32 }
|
||||
#[inline(always)] fn to_f64(&self) -> f64 { *self as f64 }
|
||||
#[inline(always)] fn to_float(&self) -> float { *self as float }
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_numcast() {
|
||||
assert!((20u == 20u16.to_uint()));
|
||||
assert!((20u8 == 20u16.to_u8()));
|
||||
assert!((20u16 == 20u16.to_u16()));
|
||||
assert!((20u32 == 20u16.to_u32()));
|
||||
assert!((20u64 == 20u16.to_u64()));
|
||||
assert!((20i == 20u16.to_int()));
|
||||
assert!((20i8 == 20u16.to_i8()));
|
||||
assert!((20i16 == 20u16.to_i16()));
|
||||
assert!((20i32 == 20u16.to_i32()));
|
||||
assert!((20i64 == 20u16.to_i64()));
|
||||
assert!((20f == 20u16.to_float()));
|
||||
assert!((20f32 == 20u16.to_f32()));
|
||||
assert!((20f64 == 20u16.to_f64()));
|
||||
|
||||
assert!((20u16 == NumCast::from(20u)));
|
||||
assert!((20u16 == NumCast::from(20u8)));
|
||||
assert!((20u16 == NumCast::from(20u16)));
|
||||
assert!((20u16 == NumCast::from(20u32)));
|
||||
assert!((20u16 == NumCast::from(20u64)));
|
||||
assert!((20u16 == NumCast::from(20i)));
|
||||
assert!((20u16 == NumCast::from(20i8)));
|
||||
assert!((20u16 == NumCast::from(20i16)));
|
||||
assert!((20u16 == NumCast::from(20i32)));
|
||||
assert!((20u16 == NumCast::from(20i64)));
|
||||
assert!((20u16 == NumCast::from(20f)));
|
||||
assert!((20u16 == NumCast::from(20f32)));
|
||||
assert!((20u16 == NumCast::from(20f64)));
|
||||
|
||||
assert!((20u16 == num::cast(20u)));
|
||||
assert!((20u16 == num::cast(20u8)));
|
||||
assert!((20u16 == num::cast(20u16)));
|
||||
assert!((20u16 == num::cast(20u32)));
|
||||
assert!((20u16 == num::cast(20u64)));
|
||||
assert!((20u16 == num::cast(20i)));
|
||||
assert!((20u16 == num::cast(20i8)));
|
||||
assert!((20u16 == num::cast(20i16)));
|
||||
assert!((20u16 == num::cast(20i32)));
|
||||
assert!((20u16 == num::cast(20i64)));
|
||||
assert!((20u16 == num::cast(20f)));
|
||||
assert!((20u16 == num::cast(20f32)));
|
||||
assert!((20u16 == num::cast(20f64)));
|
||||
}
|
||||
|
|
|
@ -10,80 +10,9 @@
|
|||
|
||||
//! Operations and constants for `u32`
|
||||
|
||||
use num::NumCast;
|
||||
|
||||
mod inst {
|
||||
pub type T = u32;
|
||||
#[allow(non_camel_case_types)]
|
||||
pub type T_SIGNED = i32;
|
||||
pub static bits: uint = 32;
|
||||
}
|
||||
|
||||
impl NumCast for u32 {
|
||||
/**
|
||||
* Cast `n` to a `u32`
|
||||
*/
|
||||
#[inline(always)]
|
||||
fn from<N:NumCast>(n: N) -> u32 { n.to_u32() }
|
||||
|
||||
#[inline(always)] fn to_u8(&self) -> u8 { *self as u8 }
|
||||
#[inline(always)] fn to_u16(&self) -> u16 { *self as u16 }
|
||||
#[inline(always)] fn to_u32(&self) -> u32 { *self }
|
||||
#[inline(always)] fn to_u64(&self) -> u64 { *self as u64 }
|
||||
#[inline(always)] fn to_uint(&self) -> uint { *self as uint }
|
||||
|
||||
#[inline(always)] fn to_i8(&self) -> i8 { *self as i8 }
|
||||
#[inline(always)] fn to_i16(&self) -> i16 { *self as i16 }
|
||||
#[inline(always)] fn to_i32(&self) -> i32 { *self as i32 }
|
||||
#[inline(always)] fn to_i64(&self) -> i64 { *self as i64 }
|
||||
#[inline(always)] fn to_int(&self) -> int { *self as int }
|
||||
|
||||
#[inline(always)] fn to_f32(&self) -> f32 { *self as f32 }
|
||||
#[inline(always)] fn to_f64(&self) -> f64 { *self as f64 }
|
||||
#[inline(always)] fn to_float(&self) -> float { *self as float }
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_numcast() {
|
||||
assert!((20u == 20u64.to_uint()));
|
||||
assert!((20u8 == 20u64.to_u8()));
|
||||
assert!((20u16 == 20u64.to_u16()));
|
||||
assert!((20u32 == 20u64.to_u32()));
|
||||
assert!((20u64 == 20u64.to_u64()));
|
||||
assert!((20i == 20u64.to_int()));
|
||||
assert!((20i8 == 20u64.to_i8()));
|
||||
assert!((20i16 == 20u64.to_i16()));
|
||||
assert!((20i32 == 20u64.to_i32()));
|
||||
assert!((20i64 == 20u64.to_i64()));
|
||||
assert!((20f == 20u64.to_float()));
|
||||
assert!((20f32 == 20u64.to_f32()));
|
||||
assert!((20f64 == 20u64.to_f64()));
|
||||
|
||||
assert!((20u64 == NumCast::from(20u)));
|
||||
assert!((20u64 == NumCast::from(20u8)));
|
||||
assert!((20u64 == NumCast::from(20u16)));
|
||||
assert!((20u64 == NumCast::from(20u32)));
|
||||
assert!((20u64 == NumCast::from(20u64)));
|
||||
assert!((20u64 == NumCast::from(20i)));
|
||||
assert!((20u64 == NumCast::from(20i8)));
|
||||
assert!((20u64 == NumCast::from(20i16)));
|
||||
assert!((20u64 == NumCast::from(20i32)));
|
||||
assert!((20u64 == NumCast::from(20i64)));
|
||||
assert!((20u64 == NumCast::from(20f)));
|
||||
assert!((20u64 == NumCast::from(20f32)));
|
||||
assert!((20u64 == NumCast::from(20f64)));
|
||||
|
||||
assert!((20u64 == num::cast(20u)));
|
||||
assert!((20u64 == num::cast(20u8)));
|
||||
assert!((20u64 == num::cast(20u16)));
|
||||
assert!((20u64 == num::cast(20u32)));
|
||||
assert!((20u64 == num::cast(20u64)));
|
||||
assert!((20u64 == num::cast(20i)));
|
||||
assert!((20u64 == num::cast(20i8)));
|
||||
assert!((20u64 == num::cast(20i16)));
|
||||
assert!((20u64 == num::cast(20i32)));
|
||||
assert!((20u64 == num::cast(20i64)));
|
||||
assert!((20u64 == num::cast(20f)));
|
||||
assert!((20u64 == num::cast(20f32)));
|
||||
assert!((20u64 == num::cast(20f64)));
|
||||
}
|
||||
|
|
|
@ -10,80 +10,9 @@
|
|||
|
||||
//! Operations and constants for `u64`
|
||||
|
||||
use num::NumCast;
|
||||
|
||||
mod inst {
|
||||
pub type T = u64;
|
||||
#[allow(non_camel_case_types)]
|
||||
pub type T_SIGNED = i64;
|
||||
pub static bits: uint = 64;
|
||||
}
|
||||
|
||||
impl NumCast for u64 {
|
||||
/**
|
||||
* Cast `n` to a `u64`
|
||||
*/
|
||||
#[inline(always)]
|
||||
fn from<N:NumCast>(n: N) -> u64 { n.to_u64() }
|
||||
|
||||
#[inline(always)] fn to_u8(&self) -> u8 { *self as u8 }
|
||||
#[inline(always)] fn to_u16(&self) -> u16 { *self as u16 }
|
||||
#[inline(always)] fn to_u32(&self) -> u32 { *self as u32 }
|
||||
#[inline(always)] fn to_u64(&self) -> u64 { *self }
|
||||
#[inline(always)] fn to_uint(&self) -> uint { *self as uint }
|
||||
|
||||
#[inline(always)] fn to_i8(&self) -> i8 { *self as i8 }
|
||||
#[inline(always)] fn to_i16(&self) -> i16 { *self as i16 }
|
||||
#[inline(always)] fn to_i32(&self) -> i32 { *self as i32 }
|
||||
#[inline(always)] fn to_i64(&self) -> i64 { *self as i64 }
|
||||
#[inline(always)] fn to_int(&self) -> int { *self as int }
|
||||
|
||||
#[inline(always)] fn to_f32(&self) -> f32 { *self as f32 }
|
||||
#[inline(always)] fn to_f64(&self) -> f64 { *self as f64 }
|
||||
#[inline(always)] fn to_float(&self) -> float { *self as float }
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_numcast() {
|
||||
assert!((20u == 20u64.to_uint()));
|
||||
assert!((20u8 == 20u64.to_u8()));
|
||||
assert!((20u16 == 20u64.to_u16()));
|
||||
assert!((20u32 == 20u64.to_u32()));
|
||||
assert!((20u64 == 20u64.to_u64()));
|
||||
assert!((20i == 20u64.to_int()));
|
||||
assert!((20i8 == 20u64.to_i8()));
|
||||
assert!((20i16 == 20u64.to_i16()));
|
||||
assert!((20i32 == 20u64.to_i32()));
|
||||
assert!((20i64 == 20u64.to_i64()));
|
||||
assert!((20f == 20u64.to_float()));
|
||||
assert!((20f32 == 20u64.to_f32()));
|
||||
assert!((20f64 == 20u64.to_f64()));
|
||||
|
||||
assert!((20u64 == NumCast::from(20u)));
|
||||
assert!((20u64 == NumCast::from(20u8)));
|
||||
assert!((20u64 == NumCast::from(20u16)));
|
||||
assert!((20u64 == NumCast::from(20u32)));
|
||||
assert!((20u64 == NumCast::from(20u64)));
|
||||
assert!((20u64 == NumCast::from(20i)));
|
||||
assert!((20u64 == NumCast::from(20i8)));
|
||||
assert!((20u64 == NumCast::from(20i16)));
|
||||
assert!((20u64 == NumCast::from(20i32)));
|
||||
assert!((20u64 == NumCast::from(20i64)));
|
||||
assert!((20u64 == NumCast::from(20f)));
|
||||
assert!((20u64 == NumCast::from(20f32)));
|
||||
assert!((20u64 == NumCast::from(20f64)));
|
||||
|
||||
assert!((20u64 == num::cast(20u)));
|
||||
assert!((20u64 == num::cast(20u8)));
|
||||
assert!((20u64 == num::cast(20u16)));
|
||||
assert!((20u64 == num::cast(20u32)));
|
||||
assert!((20u64 == num::cast(20u64)));
|
||||
assert!((20u64 == num::cast(20i)));
|
||||
assert!((20u64 == num::cast(20i8)));
|
||||
assert!((20u64 == num::cast(20i16)));
|
||||
assert!((20u64 == num::cast(20i32)));
|
||||
assert!((20u64 == num::cast(20i64)));
|
||||
assert!((20u64 == num::cast(20f)));
|
||||
assert!((20u64 == num::cast(20f32)));
|
||||
assert!((20u64 == num::cast(20f64)));
|
||||
}
|
||||
|
|
|
@ -12,8 +12,6 @@
|
|||
|
||||
pub use self::inst::is_ascii;
|
||||
|
||||
use num::NumCast;
|
||||
|
||||
mod inst {
|
||||
pub type T = u8;
|
||||
#[allow(non_camel_case_types)]
|
||||
|
@ -25,72 +23,3 @@ mod inst {
|
|||
|
||||
pub fn is_ascii(x: T) -> bool { return 0 as T == x & 128 as T; }
|
||||
}
|
||||
|
||||
impl NumCast for u8 {
|
||||
/**
|
||||
* Cast `n` to a `u8`
|
||||
*/
|
||||
#[inline(always)]
|
||||
fn from<N:NumCast>(n: N) -> u8 { n.to_u8() }
|
||||
|
||||
#[inline(always)] fn to_u8(&self) -> u8 { *self }
|
||||
#[inline(always)] fn to_u16(&self) -> u16 { *self as u16 }
|
||||
#[inline(always)] fn to_u32(&self) -> u32 { *self as u32 }
|
||||
#[inline(always)] fn to_u64(&self) -> u64 { *self as u64 }
|
||||
#[inline(always)] fn to_uint(&self) -> uint { *self as uint }
|
||||
|
||||
#[inline(always)] fn to_i8(&self) -> i8 { *self as i8 }
|
||||
#[inline(always)] fn to_i16(&self) -> i16 { *self as i16 }
|
||||
#[inline(always)] fn to_i32(&self) -> i32 { *self as i32 }
|
||||
#[inline(always)] fn to_i64(&self) -> i64 { *self as i64 }
|
||||
#[inline(always)] fn to_int(&self) -> int { *self as int }
|
||||
|
||||
#[inline(always)] fn to_f32(&self) -> f32 { *self as f32 }
|
||||
#[inline(always)] fn to_f64(&self) -> f64 { *self as f64 }
|
||||
#[inline(always)] fn to_float(&self) -> float { *self as float }
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_numcast() {
|
||||
assert!((20u == 20u8.to_uint()));
|
||||
assert!((20u8 == 20u8.to_u8()));
|
||||
assert!((20u16 == 20u8.to_u16()));
|
||||
assert!((20u32 == 20u8.to_u32()));
|
||||
assert!((20u64 == 20u8.to_u64()));
|
||||
assert!((20i == 20u8.to_int()));
|
||||
assert!((20i8 == 20u8.to_i8()));
|
||||
assert!((20i16 == 20u8.to_i16()));
|
||||
assert!((20i32 == 20u8.to_i32()));
|
||||
assert!((20i64 == 20u8.to_i64()));
|
||||
assert!((20f == 20u8.to_float()));
|
||||
assert!((20f32 == 20u8.to_f32()));
|
||||
assert!((20f64 == 20u8.to_f64()));
|
||||
|
||||
assert!((20u8 == NumCast::from(20u)));
|
||||
assert!((20u8 == NumCast::from(20u8)));
|
||||
assert!((20u8 == NumCast::from(20u16)));
|
||||
assert!((20u8 == NumCast::from(20u32)));
|
||||
assert!((20u8 == NumCast::from(20u64)));
|
||||
assert!((20u8 == NumCast::from(20i)));
|
||||
assert!((20u8 == NumCast::from(20i8)));
|
||||
assert!((20u8 == NumCast::from(20i16)));
|
||||
assert!((20u8 == NumCast::from(20i32)));
|
||||
assert!((20u8 == NumCast::from(20i64)));
|
||||
assert!((20u8 == NumCast::from(20f)));
|
||||
assert!((20u8 == NumCast::from(20f32)));
|
||||
assert!((20u8 == NumCast::from(20f64)));
|
||||
|
||||
assert!((20u8 == num::cast(20u)));
|
||||
assert!((20u8 == num::cast(20u8)));
|
||||
assert!((20u8 == num::cast(20u16)));
|
||||
assert!((20u8 == num::cast(20u32)));
|
||||
assert!((20u8 == num::cast(20u64)));
|
||||
assert!((20u8 == num::cast(20i)));
|
||||
assert!((20u8 == num::cast(20i8)));
|
||||
assert!((20u8 == num::cast(20i16)));
|
||||
assert!((20u8 == num::cast(20i32)));
|
||||
assert!((20u8 == num::cast(20i64)));
|
||||
assert!((20u8 == num::cast(20f)));
|
||||
assert!((20u8 == num::cast(20f32)));
|
||||
assert!((20u8 == num::cast(20f64)));
|
||||
}
|
||||
|
|
|
@ -10,8 +10,6 @@
|
|||
|
||||
//! Operations and constants for `uint`
|
||||
|
||||
use num::NumCast;
|
||||
|
||||
pub use self::inst::{
|
||||
div_ceil, div_round, div_floor, iterate,
|
||||
next_power_of_two
|
||||
|
@ -209,72 +207,3 @@ pub mod inst {
|
|||
assert!((accum == 10));
|
||||
}
|
||||
}
|
||||
|
||||
impl NumCast for uint {
|
||||
/**
|
||||
* Cast `n` to a `uint`
|
||||
*/
|
||||
#[inline(always)]
|
||||
fn from<N:NumCast>(n: N) -> uint { n.to_uint() }
|
||||
|
||||
#[inline(always)] fn to_u8(&self) -> u8 { *self as u8 }
|
||||
#[inline(always)] fn to_u16(&self) -> u16 { *self as u16 }
|
||||
#[inline(always)] fn to_u32(&self) -> u32 { *self as u32 }
|
||||
#[inline(always)] fn to_u64(&self) -> u64 { *self as u64 }
|
||||
#[inline(always)] fn to_uint(&self) -> uint { *self }
|
||||
|
||||
#[inline(always)] fn to_i8(&self) -> i8 { *self as i8 }
|
||||
#[inline(always)] fn to_i16(&self) -> i16 { *self as i16 }
|
||||
#[inline(always)] fn to_i32(&self) -> i32 { *self as i32 }
|
||||
#[inline(always)] fn to_i64(&self) -> i64 { *self as i64 }
|
||||
#[inline(always)] fn to_int(&self) -> int { *self as int }
|
||||
|
||||
#[inline(always)] fn to_f32(&self) -> f32 { *self as f32 }
|
||||
#[inline(always)] fn to_f64(&self) -> f64 { *self as f64 }
|
||||
#[inline(always)] fn to_float(&self) -> float { *self as float }
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_numcast() {
|
||||
assert!((20u == 20u.to_uint()));
|
||||
assert!((20u8 == 20u.to_u8()));
|
||||
assert!((20u16 == 20u.to_u16()));
|
||||
assert!((20u32 == 20u.to_u32()));
|
||||
assert!((20u64 == 20u.to_u64()));
|
||||
assert!((20i == 20u.to_int()));
|
||||
assert!((20i8 == 20u.to_i8()));
|
||||
assert!((20i16 == 20u.to_i16()));
|
||||
assert!((20i32 == 20u.to_i32()));
|
||||
assert!((20i64 == 20u.to_i64()));
|
||||
assert!((20f == 20u.to_float()));
|
||||
assert!((20f32 == 20u.to_f32()));
|
||||
assert!((20f64 == 20u.to_f64()));
|
||||
|
||||
assert!((20u == NumCast::from(20u)));
|
||||
assert!((20u == NumCast::from(20u8)));
|
||||
assert!((20u == NumCast::from(20u16)));
|
||||
assert!((20u == NumCast::from(20u32)));
|
||||
assert!((20u == NumCast::from(20u64)));
|
||||
assert!((20u == NumCast::from(20i)));
|
||||
assert!((20u == NumCast::from(20i8)));
|
||||
assert!((20u == NumCast::from(20i16)));
|
||||
assert!((20u == NumCast::from(20i32)));
|
||||
assert!((20u == NumCast::from(20i64)));
|
||||
assert!((20u == NumCast::from(20f)));
|
||||
assert!((20u == NumCast::from(20f32)));
|
||||
assert!((20u == NumCast::from(20f64)));
|
||||
|
||||
assert!((20u == num::cast(20u)));
|
||||
assert!((20u == num::cast(20u8)));
|
||||
assert!((20u == num::cast(20u16)));
|
||||
assert!((20u == num::cast(20u32)));
|
||||
assert!((20u == num::cast(20u64)));
|
||||
assert!((20u == num::cast(20i)));
|
||||
assert!((20u == num::cast(20i8)));
|
||||
assert!((20u == num::cast(20i16)));
|
||||
assert!((20u == num::cast(20i32)));
|
||||
assert!((20u == num::cast(20i64)));
|
||||
assert!((20u == num::cast(20f)));
|
||||
assert!((20u == num::cast(20f32)));
|
||||
assert!((20u == num::cast(20f64)));
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue