about summary refs log tree commit diff
path: root/src/libstd
diff options
context:
space:
mode:
authorDaniel Micay <danielmicay@gmail.com>2013-01-28 21:12:25 -0500
committerDaniel Micay <danielmicay@gmail.com>2013-01-28 21:25:58 -0500
commitfce6446e7e2683b5cfcc2a36211cec5ab2c355fa (patch)
tree6f065bd4ce7189e3c8d0ae67d80d19316848c4ab /src/libstd
parentabb79cb52de957a9c634ee2f7192627d92dd697f (diff)
downloadrust-fce6446e7e2683b5cfcc2a36211cec5ab2c355fa.tar.gz
rust-fce6446e7e2683b5cfcc2a36211cec5ab2c355fa.zip
add a FuzzyEq method that accepts an epsilon value
Diffstat (limited to 'src/libstd')
-rw-r--r--src/libstd/cmp.rs21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/libstd/cmp.rs b/src/libstd/cmp.rs
index c06e22dfbb1..d6fc23c6fdd 100644
--- a/src/libstd/cmp.rs
+++ b/src/libstd/cmp.rs
@@ -1,4 +1,4 @@
-// Copyright 2012 The Rust Project Developers. See the COPYRIGHT
+// Copyright 2013 The Rust Project Developers. See the COPYRIGHT
 // file at the top-level directory of this distribution and at
 // http://rust-lang.org/COPYRIGHT.
 //
@@ -19,24 +19,37 @@ const fuzzy_epsilon: float = 1.0e-6;
 
 pub trait FuzzyEq {
     pure fn fuzzy_eq(&self, other: &self) -> bool;
+    pure fn fuzzy_eq_eps(&self, other: &self, epsilon: &self) -> bool;
 }
 
 impl float: FuzzyEq {
     pure fn fuzzy_eq(&self, other: &float) -> bool {
         float::abs(*self - *other) < fuzzy_epsilon
     }
+
+    pure fn fuzzy_eq_eps(&self, other: &float, epsilon: &float) -> bool {
+        float::abs(*self - *other) < *epsilon
+    }
 }
 
 impl f32: FuzzyEq {
     pure fn fuzzy_eq(&self, other: &f32) -> bool {
         f32::abs(*self - *other) < (fuzzy_epsilon as f32)
     }
+
+    pure fn fuzzy_eq_eps(&self, other: &f32, epsilon: &f32) -> bool {
+        f32::abs(*self - *other) < *epsilon
+    }
 }
 
 impl f64: FuzzyEq {
     pure fn fuzzy_eq(&self, other: &f64) -> bool {
         f64::abs(*self - *other) < (fuzzy_epsilon as f64)
     }
+
+    pure fn fuzzy_eq_eps(&self, other: &f64, epsilon: &f64) -> bool {
+        f64::abs(*self - *other) < *epsilon
+    }
 }
 
 #[test]
@@ -45,3 +58,9 @@ fn test_fuzzy_equals() {
     assert (&1.0f32).fuzzy_eq(&1.0f32);
     assert (&1.0f64).fuzzy_eq(&1.0f64);
 }
+
+#[test]
+fn test_fuzzy_eq_eps() {
+    assert (&1.2).fuzzy_eq_eps(&0.9, &0.5);
+    assert !(&1.5).fuzzy_eq_eps(&0.9, &0.5);
+}