about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2014-08-12 07:31:17 +0000
committerbors <bors@rust-lang.org>2014-08-12 07:31:17 +0000
commitc1eaafe8ab2114dd10d87a4983e1263c844f782f (patch)
treec87e3beb08867c30adf74337e5996fbde99730c9
parente8204a84c7f365533c217b4882bbe0cbce5a34e3 (diff)
parent04233a1675272d4a21440943f1441b586cdf0afd (diff)
downloadrust-c1eaafe8ab2114dd10d87a4983e1263c844f782f.tar.gz
rust-c1eaafe8ab2114dd10d87a4983e1263c844f782f.zip
auto merge of #16425 : nham/rust/fix_nan_format, r=alexcrichton
Currently, this:

    println!("{}", std::f64::NAN);

prints "-NaN". This commit is an attempt to change that to "NaN" instead.
-rw-r--r--src/libcore/fmt/mod.rs7
-rw-r--r--src/test/run-pass/format-nan.rs18
2 files changed, 22 insertions, 3 deletions
diff --git a/src/libcore/fmt/mod.rs b/src/libcore/fmt/mod.rs
index 48bbc8401fe..9cb64747c91 100644
--- a/src/libcore/fmt/mod.rs
+++ b/src/libcore/fmt/mod.rs
@@ -19,6 +19,7 @@ use collections::Collection;
 use iter::{Iterator, range};
 use kinds::Copy;
 use mem;
+use num::Float;
 use option::{Option, Some, None};
 use ops::Deref;
 use result::{Ok, Err};
@@ -584,7 +585,7 @@ macro_rules! floating(($ty:ident) => {
                                              float::ExpNone,
                                              false,
                                              |bytes| {
-                fmt.pad_integral(*self >= 0.0, "", bytes)
+                fmt.pad_integral(self.is_nan() || *self >= 0.0, "", bytes)
             })
         }
     }
@@ -605,7 +606,7 @@ macro_rules! floating(($ty:ident) => {
                                              float::ExpDec,
                                              false,
                                              |bytes| {
-                fmt.pad_integral(*self >= 0.0, "", bytes)
+                fmt.pad_integral(self.is_nan() || *self >= 0.0, "", bytes)
             })
         }
     }
@@ -626,7 +627,7 @@ macro_rules! floating(($ty:ident) => {
                                              float::ExpDec,
                                              true,
                                              |bytes| {
-                fmt.pad_integral(*self >= 0.0, "", bytes)
+                fmt.pad_integral(self.is_nan() || *self >= 0.0, "", bytes)
             })
         }
     }
diff --git a/src/test/run-pass/format-nan.rs b/src/test/run-pass/format-nan.rs
new file mode 100644
index 00000000000..1024bc21d2b
--- /dev/null
+++ b/src/test/run-pass/format-nan.rs
@@ -0,0 +1,18 @@
+// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+pub fn main() {
+    use std::f64;
+    let x = "NaN".to_string();
+    assert_eq!(format!("{}", f64::NAN), x);
+    assert_eq!(format!("{:e}", f64::NAN), x);
+    assert_eq!(format!("{:E}", f64::NAN), x);
+}
+