Skip to content

Commit

Permalink
add inf/-inf/NaN parsing to float::from_str
Browse files Browse the repository at this point in the history
add tests for "inf"/"-inf"/"NaN" conversion
add tests for "-0." -> -0., "0." -> 0.
  • Loading branch information
Grahame Bowland committed Apr 14, 2012
1 parent 658b6a7 commit 6b5731e
Showing 1 changed file with 18 additions and 0 deletions.
18 changes: 18 additions & 0 deletions src/libcore/float.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -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<float> {
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.
Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit 6b5731e

Please sign in to comment.