diff --git a/types/src/number/add.rs b/types/src/number/add.rs new file mode 100644 index 0000000..e9c1366 --- /dev/null +++ b/types/src/number/add.rs @@ -0,0 +1,36 @@ + + +use std::ops::Add; +use super::{Int, Flt, Real}; + +impl Add for Real { + type Output = Real; + + fn add(self, other: Real) -> Real { + match other { + Real::Integer(v) => self.add_integer(v), + _ => Real::Integer(0) + } + } +} + +impl Real { + fn add_integer(self, v_other: Int) -> Real { + match self { + Real::Integer(v) => Real::Integer(v + v_other), + _ => Real::Integer(0) + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + use number::Real; + + #[test] + fn integer_add_works() { + let result = Real::Integer(3) + Real::Integer(5); + assert_eq!(result, Real::Integer(8)); + } +} diff --git a/types/src/number/mod.rs b/types/src/number/mod.rs index 8d63841..16d8f5e 100644 --- a/types/src/number/mod.rs +++ b/types/src/number/mod.rs @@ -7,6 +7,7 @@ /// Scheme numbers are complex, literally. pub mod real; +mod add; pub use self::real::Real; diff --git a/types/src/number/real.rs b/types/src/number/real.rs index c943c4d..9539acf 100644 --- a/types/src/number/real.rs +++ b/types/src/number/real.rs @@ -51,7 +51,7 @@ impl IsBool for Real { } impl IsChar for Real { } impl IsNumber for Real { - fn is_number(&self) -> 9bool { true } + fn is_number(&self) -> bool { true } fn is_integer(&self) -> bool { match *self {