diff options
| author | Matt Brubeck <mbrubeck@limpet.net> | 2011-10-27 22:01:30 -0700 |
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2011-10-28 14:44:39 -0700 |
| commit | 000b2fe9a6b18cab1deee9579e8740d7c37a67b4 (patch) | |
| tree | 513f8248a6998825fa45b5c7ff6540e8d1a0a63b /src/test | |
| parent | 7e064deacfc9eab6e79737bb1f5070a19e2e1dc1 (diff) | |
| download | rust-000b2fe9a6b18cab1deee9579e8740d7c37a67b4.tar.gz rust-000b2fe9a6b18cab1deee9579e8740d7c37a67b4.zip | |
Use IEEE 754 semantics for NaN (Issue #1084)
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/run-pass/float-nan.rs | 74 | ||||
| -rw-r--r-- | src/test/stdtest/float.rs | 26 |
2 files changed, 99 insertions, 1 deletions
diff --git a/src/test/run-pass/float-nan.rs b/src/test/run-pass/float-nan.rs new file mode 100644 index 00000000000..61ef4373a8c --- /dev/null +++ b/src/test/run-pass/float-nan.rs @@ -0,0 +1,74 @@ +use std; +import std::float; + +fn main() { + let nan = float::NaN(); + assert(float::isNaN(nan)); + + let inf = float::infinity(); + assert(-inf == float::neg_infinity()); + + assert( nan != nan); + assert( nan != -nan); + assert(-nan != -nan); + assert(-nan != nan); + + assert( nan != 1.); + assert( nan != 0.); + assert( nan != inf); + assert( nan != -inf); + + assert( 1. != nan); + assert( 0. != nan); + assert( inf != nan); + assert(-inf != nan); + + assert(!( nan == nan)); + assert(!( nan == -nan)); + assert(!( nan == 1.)); + assert(!( nan == 0.)); + assert(!( nan == inf)); + assert(!( nan == -inf)); + assert(!( 1. == nan)); + assert(!( 0. == nan)); + assert(!( inf == nan)); + assert(!(-inf == nan)); + assert(!(-nan == nan)); + assert(!(-nan == -nan)); + + assert(!( nan > nan)); + assert(!( nan > -nan)); + assert(!( nan > 0.)); + assert(!( nan > inf)); + assert(!( nan > -inf)); + assert(!( 0. > nan)); + assert(!( inf > nan)); + assert(!(-inf > nan)); + assert(!(-nan > nan)); + + assert(!(nan < 0.)); + assert(!(nan < 1.)); + assert(!(nan < -1.)); + assert(!(nan < inf)); + assert(!(nan < -inf)); + assert(!(nan < nan)); + assert(!(nan < -nan)); + + assert(!( 0. < nan)); + assert(!( 1. < nan)); + assert(!( -1. < nan)); + assert(!( inf < nan)); + assert(!(-inf < nan)); + assert(!(-nan < nan)); + + assert(float::isNaN(nan + inf)); + assert(float::isNaN(nan + -inf)); + assert(float::isNaN(nan + 0.)); + assert(float::isNaN(nan + 1.)); + assert(float::isNaN(nan * 1.)); + assert(float::isNaN(nan / 1.)); + assert(float::isNaN(nan / 0.)); + assert(float::isNaN(0. / 0.)); + assert(float::isNaN(-inf + inf)); + assert(float::isNaN(inf - inf)); +} diff --git a/src/test/stdtest/float.rs b/src/test/stdtest/float.rs index 086942fb8c1..302d6b1679e 100644 --- a/src/test/stdtest/float.rs +++ b/src/test/stdtest/float.rs @@ -10,7 +10,7 @@ fn test_from_str() { assert ( float::from_str("2.5e10") == 25000000000. ); assert ( float::from_str("25000000000.E-10") == 2.5 ); assert ( float::from_str("") == 0. ); - assert ( float::from_str(" ") == 0. ); + assert ( float::isNaN(float::from_str(" ")) ); assert ( float::from_str(".") == 0. ); assert ( float::from_str("5.") == 5. ); assert ( float::from_str(".5") == 0.5 ); @@ -25,6 +25,7 @@ fn test_positive() { assert(!float::positive(-1.)); assert(!float::positive(float::neg_infinity())); assert(!float::positive(1./float::neg_infinity())); + assert(!float::positive(float::NaN())); } #[test] @@ -35,4 +36,27 @@ fn test_negative() { assert(float::negative(-1.)); assert(float::negative(float::neg_infinity())); assert(float::negative(1./float::neg_infinity())); + assert(!float::negative(float::NaN())); +} + +#[test] +fn test_nonpositive() { + assert(!float::nonpositive(float::infinity())); + assert(!float::nonpositive(1.)); + assert(!float::nonpositive(0.)); + assert(float::nonpositive(-1.)); + assert(float::nonpositive(float::neg_infinity())); + assert(float::nonpositive(1./float::neg_infinity())); + // TODO: assert(!float::nonpositive(float::NaN())); +} + +#[test] +fn test_nonnegative() { + assert(float::nonnegative(float::infinity())); + assert(float::nonnegative(1.)); + assert(float::nonnegative(0.)); + assert(!float::nonnegative(-1.)); + assert(!float::nonnegative(float::neg_infinity())); + assert(!float::nonnegative(1./float::neg_infinity())); + // TODO: assert(!float::nonnegative(float::NaN())); } |
