jp test .inc "ascii.h" .inc "core.asm" .equ STDIO_RAMSTART RAMSTART .inc "stdio.asm" .inc "common.asm" .inc "lib/ari.asm" .inc "lib/util.asm" .inc "lib/fmt.asm" .inc "lib/parse.asm" test: ld sp, 0xffff call testParseHex call testParseHexadecimal call testParseDecimal call testParseLiteral ; success xor a halt testParseHex: ld hl, .allGood ld ix, .testGood call testList ld hl, .allBad ld ix, .testBad jp testList .testGood: ld a, (hl) call parseHex call assertNC inc hl ld b, (hl) jp assertEQB .testBad: ld a, (hl) call parseHex jp assertC .g1: .db '8', 8 .g2: .db 'e', 0xe .allGood: .dw .g1, .g2, 0 .b1: .db 'x' .allBad: .dw .b1, 0 testParseHexadecimal: ld hl, .allGood ld ix, .testGood jp testList .testGood: ld c, (hl) inc hl ld b, (hl) inc hl call parseHexadecimal call assertZ ld l, c ld h, b jp assertEQW .g1: .dw 0x99 .db "99", 0 .g2: .dw 0xab .db "aB", 0 ; The string "Foo" will not cause a failure. We will parse up to "o" and then ; stop. .g3: .dw 0xf .db "Foo", 0 .allGood: .dw .g1, .g2, .g3, 0 testParseDecimal: ld hl, .allGood ld ix, .testGood call testList ld hl, .allBad ld ix, .testBad jp testList .testGood: ld c, (hl) inc hl ld b, (hl) inc hl call parseDecimalC call assertZ ld l, c ld h, b jp assertEQW .testBad: call parseDecimalC jp assertNZ .g1: .dw 99 .db "99", 0 .g2: .dw 65535 .db "65535", 0 ; Space is also accepted as a number "ender" .g3: .dw 42 .db "42 x", 0 ; Tab too .g4: .dw 42 .db "42", 0x09, 'x', 0 ; A simple "0" works too! .g5: .dw 0 .db '0', 0 .allGood: .dw .g1, .g2, .g3, .g4, .g5, 0 ; null string is invalid .b1: .db 0 ; too big, 5 chars .b2: .db "65536", 0 .b3: .db "99999", 0 .b4: ; too big, 6 chars with rightmost chars being within bound .db "111111", 0 .allBad: .dw .b1, .b2, .b3, .b4, 0 testParseLiteral: ld hl, .allGood ld ix, .testGood call testList ld hl, .allBad ld ix, .testBad jp testList .testGood: ld c, (hl) inc hl ld b, (hl) inc hl call parseLiteral call assertZ ld l, c ld h, b jp assertEQW .testBad: call parseLiteral jp assertNZ .g1: .dw 99 .db "99", 0 .g2: .dw 0x100 .db "0x100", 0 .g3: .dw 0b0101 .db "0b0101", 0 .g4: .dw 0b01010101 .db "0b01010101", 0 .allGood: .dw .g1, .g2, .g3, .g4, 0 .b1: .db "Foo", 0 .allBad: .dw .b1, 0 RAMSTART: