[ 0 ] [ "0" string>number ] unit-test
[ 0 ] [ "00" string>number ] unit-test
+[ 0 ] [ "0,000" string>number ] unit-test
[ 0.0 ] [ "0." string>number ] unit-test
[ 0.0 ] [ "0.0" string>number ] unit-test
[ 0.0 ] [ "0x0.0p0" string>number ] unit-test
[ -8 ] [ "-0o10" string>number ] unit-test
[ -2 ] [ "-0b10" string>number ] unit-test
+[ 0x7FFF,ABCD ] [ "0x7FFF,ABCD" string>number ] unit-test
+
[ 1.0 ] [ "0x1.0p0" string>number ] unit-test
+
+[ f ] [ "0x" string>number ] unit-test
+[ f ] [ "0b" string>number ] unit-test
+[ f ] [ "0o" string>number ] unit-test
+[ f ] [ "0x," string>number ] unit-test
+[ f ] [ "0b," string>number ] unit-test
+[ f ] [ "0o," string>number ] unit-test
+[ f ] [ "0x,1" string>number ] unit-test
+[ f ] [ "0b,1" string>number ] unit-test
+[ f ] [ "0o,1" string>number ] unit-test
+[ f ] [ "0x1," string>number ] unit-test
+[ f ] [ "0b1," string>number ] unit-test
+[ f ] [ "0o1," string>number ] unit-test
: with-radix-char ( i number-parse n radix-quot nonradix-quot -- n/f )
[
rot {
- { CHAR: b [ drop 2 ->radix next-digit ] }
- { CHAR: o [ drop 8 ->radix next-digit ] }
- { CHAR: x [ drop 16 ->radix next-digit ] }
+ { CHAR: b [ drop 2 ->radix require-next-digit ] }
+ { CHAR: o [ drop 8 ->radix require-next-digit ] }
+ { CHAR: x [ drop 16 ->radix require-next-digit ] }
{ f [ 3drop 2drop 0 ] }
[ [ drop ] 2dip swap call ]
} case
: @pos-first-digit ( i number-parse n char -- n/f )
{
{ CHAR: . [ ->required-mantissa ] }
- { CHAR: 0 [ [ @pos-digit ] [ @pos-digit-or-punc ] with-radix-char ] }
+ { CHAR: 0 [ [ @pos-first-digit ] [ @pos-digit-or-punc ] with-radix-char ] }
[ @pos-digit ]
- } case ; inline
+ } case ; inline recursive
: @neg-digit-or-punc ( i number-parse n char -- n/f )
{
: @neg-first-digit ( i number-parse n char -- n/f )
{
{ CHAR: . [ ->required-mantissa ] }
- { CHAR: 0 [ [ @neg-digit ] [ @neg-digit-or-punc ] with-radix-char ] }
+ { CHAR: 0 [ [ @neg-first-digit ] [ @neg-digit-or-punc ] with-radix-char ] }
[ @neg-digit ]
- } case ; inline
+ } case ; inline recursive
: @first-char ( i number-parse n char -- n/f )
{