about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorDaniel Micay <danielmicay@gmail.com>2014-03-08 01:10:32 -0500
committerDaniel Micay <danielmicay@gmail.com>2014-03-14 15:26:05 -0400
commit4e1c2158f29fbb6c2bdb4d50f1fdc6a30685bc3c (patch)
treea79d99849861d34fc0c61c7a0b8886e8c94f171b /src
parent3fbee34a89c478f959046bf4b4e12a70e937c374 (diff)
downloadrust-4e1c2158f29fbb6c2bdb4d50f1fdc6a30685bc3c.tar.gz
rust-4e1c2158f29fbb6c2bdb4d50f1fdc6a30685bc3c.zip
cmp: switch `min` and `max` to `TotalOrd`
The `Float` trait provides correct `min` and `max` methods on floating
point types, providing a consistent result regardless of the order the
parameters are passed.

These generic functions do not take the necessary performance hit to
correctly support a partial order, so the true requirement should be
given as a type bound.

Closes #12712
Diffstat (limited to 'src')
-rw-r--r--src/doc/guide-tasks.md2
-rw-r--r--src/libstd/cmp.rs4
-rw-r--r--src/libstd/iter.rs8
-rw-r--r--src/libtest/lib.rs2
4 files changed, 7 insertions, 9 deletions
diff --git a/src/doc/guide-tasks.md b/src/doc/guide-tasks.md
index e20baa32c1a..b00efaa26e7 100644
--- a/src/doc/guide-tasks.md
+++ b/src/doc/guide-tasks.md
@@ -353,8 +353,6 @@ fn pnorm(nums: &~[f64], p: uint) -> f64 {
 
 fn main() {
     let numbers = vec::from_fn(1000000, |_| rand::random::<f64>());
-    println!("Inf-norm = {}",  *numbers.iter().max().unwrap());
-
     let numbers_arc = Arc::new(numbers);
 
     for num in range(1u, 10) {
diff --git a/src/libstd/cmp.rs b/src/libstd/cmp.rs
index 6975c9da3f0..023b2028703 100644
--- a/src/libstd/cmp.rs
+++ b/src/libstd/cmp.rs
@@ -184,12 +184,12 @@ pub trait Equiv<T> {
 }
 
 #[inline]
-pub fn min<T:Ord>(v1: T, v2: T) -> T {
+pub fn min<T: TotalOrd>(v1: T, v2: T) -> T {
     if v1 < v2 { v1 } else { v2 }
 }
 
 #[inline]
-pub fn max<T:Ord>(v1: T, v2: T) -> T {
+pub fn max<T: TotalOrd>(v1: T, v2: T) -> T {
     if v1 > v2 { v1 } else { v2 }
 }
 
diff --git a/src/libstd/iter.rs b/src/libstd/iter.rs
index 11d7bc6c1bf..6bcac425420 100644
--- a/src/libstd/iter.rs
+++ b/src/libstd/iter.rs
@@ -68,7 +68,7 @@ use cmp;
 use num::{Zero, One, CheckedAdd, CheckedSub, Saturating, ToPrimitive, Int};
 use option::{Option, Some, None};
 use ops::{Add, Mul, Sub};
-use cmp::{Eq, Ord};
+use cmp::{Eq, Ord, TotalOrd};
 use clone::Clone;
 use uint;
 use mem;
@@ -626,7 +626,7 @@ pub trait Iterator<A> {
     /// assert_eq!(*xs.iter().max_by(|x| x.abs()).unwrap(), -10);
     /// ```
     #[inline]
-    fn max_by<B: Ord>(&mut self, f: |&A| -> B) -> Option<A> {
+    fn max_by<B: TotalOrd>(&mut self, f: |&A| -> B) -> Option<A> {
         self.fold(None, |max: Option<(A, B)>, x| {
             let x_val = f(&x);
             match max {
@@ -650,7 +650,7 @@ pub trait Iterator<A> {
     /// assert_eq!(*xs.iter().min_by(|x| x.abs()).unwrap(), 0);
     /// ```
     #[inline]
-    fn min_by<B: Ord>(&mut self, f: |&A| -> B) -> Option<A> {
+    fn min_by<B: TotalOrd>(&mut self, f: |&A| -> B) -> Option<A> {
         self.fold(None, |min: Option<(A, B)>, x| {
             let x_val = f(&x);
             match min {
@@ -917,7 +917,7 @@ pub trait OrdIterator<A> {
     fn min_max(&mut self) -> MinMaxResult<A>;
 }
 
-impl<A: Ord, T: Iterator<A>> OrdIterator<A> for T {
+impl<A: TotalOrd, T: Iterator<A>> OrdIterator<A> for T {
     #[inline]
     fn max(&mut self) -> Option<A> {
         self.fold(None, |max, x| {
diff --git a/src/libtest/lib.rs b/src/libtest/lib.rs
index 9ebd7d72c91..0f9ae1af096 100644
--- a/src/libtest/lib.rs
+++ b/src/libtest/lib.rs
@@ -1069,7 +1069,7 @@ impl MetricMap {
                     if delta.abs() <= noise {
                         LikelyNoise
                     } else {
-                        let pct = delta.abs() / cmp::max(vold.value, f64::EPSILON) * 100.0;
+                        let pct = delta.abs() / vold.value.max(f64::EPSILON) * 100.0;
                         if vold.noise < 0.0 {
                             // When 'noise' is negative, it means we want
                             // to see deltas that go up over time, and can