From 6b5731e7045ce5ea3209f957d5275a765f883f26 Mon Sep 17 00:00:00 2001 From: Grahame Bowland Date: Sun, 15 Apr 2012 02:21:57 +0800 Subject: [PATCH] add inf/-inf/NaN parsing to float::from_str add tests for "inf"/"-inf"/"NaN" conversion add tests for "-0." -> -0., "0." -> 0. --- src/libcore/float.rs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/libcore/float.rs b/src/libcore/float.rs index 04efad11a5fd9..7d0143da88802 100644 --- a/src/libcore/float.rs +++ b/src/libcore/float.rs @@ -110,6 +110,7 @@ This function accepts strings such as * '', or, equivalently, '.' (understood as 0) * '5.' * '.5', or, equivalently, '0.5' +* 'inf', '-inf', 'NaN' Leading and trailing whitespace are ignored. @@ -123,6 +124,14 @@ Leading and trailing whitespace are ignored. where `n` is the floating-point number represented by `[num]`. "] fn from_str(num: str) -> option { + if num == "inf" { + ret some(infinity); + } else if num == "-inf" { + ret some(neg_infinity); + } else if num == "NaN" { + ret some(NaN); + } + let mut pos = 0u; //Current byte position in the string. //Used to walk the string in O(n). let len = str::len(num); //Length of the string, in bytes. @@ -301,6 +310,15 @@ fn test_from_str() { assert from_str("-.5") == some(-0.5); assert from_str("-.5") == some(-0.5); assert from_str("-5") == some(-5.); + assert from_str("-0") == some(-0.); + assert from_str("0") == some(0.); + assert from_str("inf") == some(infinity); + assert from_str("-inf") == some(neg_infinity); + // note: NaN != NaN, hence this slightly complex test + alt from_str("NaN") { + some(f) { assert is_NaN(f); } + none { fail; } + } assert from_str("") == none; assert from_str("x") == none;