math.parser: support leading + on significand and exponent so string>number can be a proper superset of C strto* functions

db4
Joe Groff 2010-02-07 14:21:50 -08:00
parent ce1ff01851
commit 0f651c8506
2 changed files with 19 additions and 3 deletions

View File

@ -25,8 +25,20 @@ unit-test
[ "12345abcdef" string>number ]
unit-test
[ t ]
[ "-12" string>number 0 < ]
[ 12 ]
[ "+12" string>number ]
unit-test
[ -12 ]
[ "-12" string>number ]
unit-test
[ f ]
[ "-+12" string>number ]
unit-test
[ f ]
[ "+-12" string>number ]
unit-test
[ f ]
@ -47,13 +59,13 @@ unit-test
[ f ] [ "1/-2" string>number ] unit-test
[ f ] [ "1/2/3" string>number ] unit-test
[ 1+1/2 ] [ "1+1/2" string>number ] unit-test
[ 1+1/2 ] [ "+1+1/2" string>number ] unit-test
[ f ] [ "1-1/2" string>number ] unit-test
[ -1-1/2 ] [ "-1-1/2" string>number ] unit-test
[ f ] [ "-1+1/2" string>number ] unit-test
[ f ] [ "1+2" string>number ] unit-test
[ f ] [ "1+" string>number ] unit-test
[ f ] [ "1-" string>number ] unit-test
[ f ] [ "+1" string>number ] unit-test
[ f ] [ "1+1/2+2" string>number ] unit-test
[ 100000 ] [ "100,000" string>number ] unit-test
@ -68,6 +80,7 @@ unit-test
[ f ] [ "-,2" string>number ] unit-test
[ 2.0 ] [ "2." string>number ] unit-test
[ 2.0 ] [ "+2." string>number ] unit-test
[ 0.25 ] [ ".25" string>number ] unit-test
[ -2.0 ] [ "-2." string>number ] unit-test
[ -0.25 ] [ "-.25" string>number ] unit-test
@ -80,6 +93,7 @@ unit-test
[ 100.0 ] [ "100." string>number ] unit-test
[ 100.0 ] [ "1e2" string>number ] unit-test
[ 100.0 ] [ "1e+2" string>number ] unit-test
[ HEX: 1e2 ] [ "1e2" hex> ] unit-test
[ HEX: 1.999999999999ap-3 ] [ "0.2" string>number ] unit-test

View File

@ -118,6 +118,7 @@ DEFER: @neg-digit
: @exponent-first-char ( float-parse i number-parse n char -- float-parse n/f )
{
{ CHAR: - [ [ @exponent-digit ] require-next-digit ?neg ] }
{ CHAR: + [ [ @exponent-digit ] require-next-digit ] }
[ @exponent-digit ]
} case ; inline
@ -231,6 +232,7 @@ DEFER: @neg-digit
: @first-char ( i number-parse n char -- n/f )
{
{ CHAR: - [ [ @neg-first-digit ] require-next-digit ?neg ] }
{ CHAR: + [ [ @pos-first-digit ] require-next-digit ] }
[ @pos-first-digit ]
} case ; inline