ForthHub/forth

>NUMBER

drom opened this issue · 1 comments

drom commented
\ >NUMBER TESTS
CREATE GN-BUF 0 C,
: GN-STRING GN-BUF 1 ;
: GN-CONSUMED   GN-BUF CHAR+ 0 ;
: GN'       [CHAR] ' WORD CHAR+ C@ GN-BUF C!  GN-STRING ;

T{ 0 0 GN' 0' >NUMBER -> 0 0 GN-CONSUMED }T
T{ 0 0 GN' 1' >NUMBER -> 1 0 GN-CONSUMED }T
T{ 1 0 GN' 1' >NUMBER -> BASE @ 1+ 0 GN-CONSUMED }T
T{ 0 0 GN' -' >NUMBER -> 0 0 GN-STRING }T   \ SHOULD FAIL TO CONVERT THESE
T{ 0 0 GN' +' >NUMBER -> 0 0 GN-STRING }T
T{ 0 0 GN' .' >NUMBER -> 0 0 GN-STRING }T

: >NUMBER-BASED
   BASE @ >R BASE ! >NUMBER R> BASE ! ;

T{ 0 0 GN' 2' 10 >NUMBER-BASED -> 2 0 GN-CONSUMED }T
T{ 0 0 GN' 2'  2 >NUMBER-BASED -> 0 0 GN-STRING }T
T{ 0 0 GN' F' 10 >NUMBER-BASED -> F 0 GN-CONSUMED }T
T{ 0 0 GN' G' 10 >NUMBER-BASED -> 0 0 GN-STRING }T
T{ 0 0 GN' G' MAX-BASE >NUMBER-BASED -> 10 0 GN-CONSUMED }T
T{ 0 0 GN' Z' MAX-BASE >NUMBER-BASED -> 23 0 GN-CONSUMED }T

: GN1   \ ( UD BASE -- UD' LEN ) UD SHOULD EQUAL UD' AND LEN SHOULD BE ZERO.
   BASE @ >R BASE !
   <# #S #>
   0 0 2SWAP >NUMBER SWAP DROP      \ RETURN LENGTH ONLY
   R> BASE ! ;
T{ 0 0 2 GN1 -> 0 0 0 }T
T{ MAX-UINT 0 2 GN1 -> MAX-UINT 0 0 }T
T{ MAX-UINT DUP 2 GN1 -> MAX-UINT DUP 0 }T
T{ 0 0 MAX-BASE GN1 -> 0 0 0 }T
T{ MAX-UINT 0 MAX-BASE GN1 -> MAX-UINT 0 0 }T
T{ MAX-UINT DUP MAX-BASE GN1 -> MAX-UINT DUP 0 }T

Errors:

Error: in line: 886 T{ 0 0 GN' 0' >NUMBER -> 0 0 GN-CONSUMED }T  expected [ 0, 0, 147, 1 ] to deeply equal [ 0, 0, 148, 0 ].
Error: in line: 887 T{ 0 0 GN' 1' >NUMBER -> 1 0 GN-CONSUMED }T  expected [ 0, 0, 147, 1 ] to deeply equal [ 1, 0, 148, 0 ].
Error: in line: 888 T{ 1 0 GN' 1' >NUMBER -> BASE @ 1+ 0 GN-CONSUMED }T  expected [ 1, 0, 147, 1 ] to deeply equal [ 17, 0, 148, 0 ].
.
.
.
Error: in line: 896 T{ 0 0 GN' 2' 10 >NUMBER-BASED -> 2 0 GN-CONSUMED }T  expected [ 0, 0, 147, 1 ] to deeply equal [ 2, 0, 148, 0 ].
.
Error: in line: 898 T{ 0 0 GN' F' 10 >NUMBER-BASED -> F 0 GN-CONSUMED }T  expected [ 0, 0, 147, 1 ] to deeply equal [ 15, 0, 148, 0 ].
.
Error: in line: 900 T{ 0 0 GN' G' MAX-BASE >NUMBER-BASED -> 10 0 GN-CONSUMED }T  expected [ 0, 0, 147, 1 ] to deeply equal [ 16, 0, 148, 0 ].
Error: in line: 901 T{ 0 0 GN' Z' MAX-BASE >NUMBER-BASED -> 23 0 GN-CONSUMED }T  expected [ 0, 0, 147, 1 ] to deeply equal [ 35, 0, 148, 0 ].
Error: in line: 908 T{ 0 0 2 GN1 -> 0 0 0 }T  expected [ 0, 0, 1 ] to deeply equal [ 0, 0, 0 ].
Error: in line: 909 T{ MAX-UINT 0 2 GN1 -> MAX-UINT 0 0 }T  expected [ 0, 0, 32 ] to deeply equal [ -1, 0, 0 ].
Error: in line: 910 T{ MAX-UINT DUP 2 GN1 -> MAX-UINT DUP 0 }T  expected [ 0, 0, 64 ] to deeply equal [ -1, -1, 0 ].
Error: in line: 911 T{ 0 0 MAX-BASE GN1 -> 0 0 0 }T  expected [ 0, 0, 1 ] to deeply equal [ 0, 0, 0 ].
Error: in line: 912 T{ MAX-UINT 0 MAX-BASE GN1 -> MAX-UINT 0 0 }T  expected [ 0, 0, 7 ] to deeply equal [ -1, 0, 0 ].
Error: in line: 913 T{ MAX-UINT DUP MAX-BASE GN1 -> MAX-UINT DUP 0 }T  expected [ 0, 0, 13 ] to deeply equal [ -1, -1, 0 ].
drom commented

Some words from ANS94

image


image