|
- .equ RAMSTART 0x4000
- ; declare DIREC_LASTVAL manually so that we don't have to include directive.asm
- .equ DIREC_LASTVAL RAMSTART
-
- jp test
-
- .inc "core.asm"
- .inc "str.asm"
- .inc "lib/util.asm"
- .inc "zasm/util.asm"
- .inc "lib/parse.asm"
- .inc "zasm/parse.asm"
-
- ; mocks. aren't used in tests
- zasmGetPC:
- zasmIsFirstPass:
- symSelect:
- symFindVal:
- jp fail
-
- testNum: .db 1
-
- s99: .db "99", 0
- s0x99: .db "0x99", 0
- s0x100: .db "0x100", 0
- s0b0101: .db "0b0101", 0
- s0b01010101: .db "0b01010101", 0
- sFoo: .db "Foo", 0
-
- test:
- ld hl, 0xffff
- ld sp, hl
-
- call testLiteral
- call testDecimal
-
- ; success
- xor a
- halt
-
- testLiteral:
- ld hl, s99
- call parseLiteral
- jp nz, fail
- push ix \ pop hl
- ld a, h
- or a
- jp nz, fail
- ld a, l
- cp 99
- jp nz, fail
- call nexttest
-
- ld hl, s0x100
- call parseLiteral
- jp nz, fail
- push ix \ pop hl
- ld a, h
- cp 1
- jp nz, fail
- ld a, l
- or a
- jp nz, fail
- call nexttest
-
- ld hl, sFoo
- call parseLiteral
- jp z, fail
- call nexttest
-
- ld hl, s0b0101
- call parseLiteral
- jp nz, fail
- push ix \ pop hl
- ld a, h
- or a
- jp nz, fail
- ld a, l
- cp 0b0101
- jp nz, fail
- call nexttest
-
- ld hl, s0b01010101
- call parseLiteral
- jp nz, fail
- push ix \ pop hl
- ld a, h
- or a
- jp nz, fail
- ld a, l
- cp 0b01010101
- jp nz, fail
- call nexttest
-
- .equ FOO 0x42
- .equ BAR @+1
- ld a, BAR
- cp 0x43
- jp nz, fail
- call nexttest
- ret
-
- testDecimal:
-
- ; test valid cases. We loop through tblDecimalValid for our cases
- ld b, 5
- ld hl, .valid
-
- .loop1:
- push hl ; --> lvl 1
- ; put expected number in DE
- ld e, (hl)
- inc hl
- ld d, (hl)
- inc hl
- call parseDecimal
- jp nz, fail
- push ix \ pop hl
- ld a, h
- cp d
- jp nz, fail
- ld a, l
- cp e
- jp nz, fail
- pop hl ; <-- lvl 1
- ld de, 8 ; row size
- add hl, de
- djnz .loop1
- call nexttest
-
- ; test invalid cases. We loop through tblDecimalInvalid for our cases
- ld b, 4
- ld hl, .invalid
-
- .loop2:
- call parseDecimal
- jp z, fail
- ld de, 7 ; row size
- add hl, de
- djnz .loop2
- call nexttest
- ret
-
- ; 2b int, 6b str, null-padded
- .valid:
- .dw 99
- .db "99", 0, 0, 0, 0
- .dw 65535
- .db "65535", 0
- ; Space is also accepted as a number "ender"
- .dw 42
- .db "42 x", 0, 0
- ; Tab too
- .dw 42
- .db "42", 0x09, 'x', 0, 0
- ; A simple "0" works too!
- .dw 0
- .db '0', 0, 0, 0, 0, 0
-
-
- ; 7b strings, null-padded
- .invalid:
- ; null string is invalid
- .db 0, 0, 0, 0, 0, 0, 0
- ; too big, 5 chars
- .db "65536", 0, 0
- .db "99999", 0, 0
- ; too big, 6 chars with rightmost chars being within bound
- .db "111111", 0
-
-
- nexttest:
- ld a, (testNum)
- inc a
- ld (testNum), a
- ret
-
- fail:
- ld a, (testNum)
- halt
-
|