( lib.string ) |100 @on-reset ( -> ) ;tests/end ;tests &>l LDA2k JSR2 INC2 INC2 GTH2k ?&>l POP2 POP2 ( lb ) #0a18 DEO ( debugger ) #010e DEO ( exit ) #800f DEO BRK @tests [ =u8/ =u16/ ] &end $2 ( @|u8 ) %u8/mod ( a b -- a%b ) { DIVk MUL SUB } %u8/min ( a b -- min ) { LTHk [ JMP SWP ] POP } %u8/max ( a b -- min ) { GTHk [ JMP SWP ] POP } @u8/sqrt ( n -- sq ) DUP ?{ JMP2r } INCk ?{ POP #10 JMP2r } INC #01 SFT [ LITr 01 ] &>ls STHkr SUB INCr DUP STHkr GTH ?&>ls POP STHr JMP2r @u8/ ( byte -- ) DUP #04 SFT / ( >> ) & ( byte -- ) #0f AND DUP #09 GTH #27 MUL ADD [ LIT "0 ] ADD #18 DEO JMP2r ( @|u16 ) %u16/mod ( a* b* -- a%b* ) { DIV2k MUL2 SUB2 } %u16/min ( a b -- min ) { LTH2k [ JMP SWP2 ] POP2 } %u16/max ( a b -- min ) { GTH2k [ JMP SWP2 ] POP2 } @u16/sqrt ( n* -- sq* ) ORAk ?{ POP JMP2r } INC2k ORA ?{ INC SWP INC2 JMP2r } INC2 #01 SFT2 [ LIT2r 0001 ] &>ls STH2kr SUB2 INC2r DUP2 STH2kr GTH2 ?&>ls POP2 STH2r JMP2r @u16/ ( short* -- ) SWP u8/ !u8/ ( @|Tests ) @u8/ ( -- value ) ;&name str/ #06 #04 /mod #02 NEQ ?&fail #06 #04 /min #04 NEQ ?&fail #04 #06 /min #04 NEQ ?&fail #06 #04 /max #06 NEQ ?&fail #04 #06 /max #06 NEQ ?&fail #04 /sqrt #02 NEQ ?&fail #01 JMP2r &fail #00 JMP2r &name 0a "u8: 20 $1 @u16/ ( -- ) ;&name str/ #0006 #0004 /mod #0002 NEQ2 ?&fail #0006 #0004 /min #0004 NEQ2 ?&fail #0004 #0006 /min #0004 NEQ2 ?&fail #0006 #0004 /max #0006 NEQ2 ?&fail #0004 #0006 /max #0006 NEQ2 ?&fail #0004 /sqrt #0002 NEQ2 ?&fail #01 JMP2r &fail #00 JMP2r &name 0a "u16: 20 $1 @ ( bool -- ) #30 ADD #18 DEO JMP2r @str/ ( str* -- ) LDAk DUP ?{ POP POP2 JMP2r } #18 DEO INC2 !/