From 7e064deacfc9eab6e79737bb1f5070a19e2e1dc1 Mon Sep 17 00:00:00 2001 From: Matt Brubeck Date: Thu, 27 Oct 2011 16:22:16 -0700 Subject: [PATCH] +0.0 should be positive and -0.0 should be negative. --- src/lib/float.rs | 12 ++++++------ src/test/stdtest/float.rs | 21 ++++++++++++++++++++- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/src/lib/float.rs b/src/lib/float.rs index 5bdf250069e9..55ffa5025e76 100644 --- a/src/lib/float.rs +++ b/src/lib/float.rs @@ -214,12 +214,12 @@ fn NaN() -> float { } /* Function: infinity */ -fn infinity() -> float { +pure fn infinity() -> float { ret 1./0.; } /* Function: neg_infinity */ -fn neg_infinity() -> float { +pure fn neg_infinity() -> float { ret -1./0.; } @@ -257,16 +257,16 @@ pure fn ge(x: float, y: float) -> bool { ret x >= y; } pure fn gt(x: float, y: float) -> bool { ret x > y; } /* Predicate: positive */ -pure fn positive(x: float) -> bool { ret x > 0.; } +pure fn positive(x: float) -> bool { ret x > 0. || (1./x) == infinity(); } /* Predicate: negative */ -pure fn negative(x: float) -> bool { ret x < 0.; } +pure fn negative(x: float) -> bool { ret x < 0. || (1./x) == neg_infinity(); } /* Predicate: nonpositive */ -pure fn nonpositive(x: float) -> bool { ret x <= 0.; } +pure fn nonpositive(x: float) -> bool { ret !positive(x); } /* Predicate: nonnegative */ -pure fn nonnegative(x: float) -> bool { ret x >= 0.; } +pure fn nonnegative(x: float) -> bool { ret !negative(x); } // // Local Variables: diff --git a/src/test/stdtest/float.rs b/src/test/stdtest/float.rs index b77d83eb7573..086942fb8c17 100644 --- a/src/test/stdtest/float.rs +++ b/src/test/stdtest/float.rs @@ -15,5 +15,24 @@ fn test_from_str() { assert ( float::from_str("5.") == 5. ); assert ( float::from_str(".5") == 0.5 ); assert ( float::from_str("0.5") == 0.5 ); - +} + +#[test] +fn test_positive() { + assert(float::positive(float::infinity())); + assert(float::positive(1.)); + assert(float::positive(0.)); + assert(!float::positive(-1.)); + assert(!float::positive(float::neg_infinity())); + assert(!float::positive(1./float::neg_infinity())); +} + +#[test] +fn test_negative() { + assert(!float::negative(float::infinity())); + assert(!float::negative(1.)); + assert(!float::negative(0.)); + assert(float::negative(-1.)); + assert(float::negative(float::neg_infinity())); + assert(float::negative(1./float::neg_infinity())); }