Merge pull request #2205 from grahame/floatstrfixes
add inf/-inf/NaN parsing to float::from_str
This commit is contained in:
commit
4063802f64
1 changed files with 18 additions and 0 deletions
|
@ -110,6 +110,7 @@ This function accepts strings such as
|
||||||
* '', or, equivalently, '.' (understood as 0)
|
* '', or, equivalently, '.' (understood as 0)
|
||||||
* '5.'
|
* '5.'
|
||||||
* '.5', or, equivalently, '0.5'
|
* '.5', or, equivalently, '0.5'
|
||||||
|
* 'inf', '-inf', 'NaN'
|
||||||
|
|
||||||
Leading and trailing whitespace are ignored.
|
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]`.
|
where `n` is the floating-point number represented by `[num]`.
|
||||||
"]
|
"]
|
||||||
fn from_str(num: str) -> option<float> {
|
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.
|
let mut pos = 0u; //Current byte position in the string.
|
||||||
//Used to walk the string in O(n).
|
//Used to walk the string in O(n).
|
||||||
let len = str::len(num); //Length of the string, in bytes.
|
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(-0.5);
|
assert from_str("-.5") == some(-0.5);
|
||||||
assert from_str("-5") == some(-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("") == none;
|
||||||
assert from_str("x") == none;
|
assert from_str("x") == none;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue