collapseos/tools/tests/unit/test_expr.asm

156 lines
2.3 KiB
NASM
Raw Normal View History

.equ RAMSTART 0x4000
.equ ZASM_REG_MAXCNT 0xff
.equ ZASM_LREG_MAXCNT 0x40
.equ ZASM_REG_BUFSZ 0x1000
.equ ZASM_LREG_BUFSZ 0x200
2019-10-05 10:26:21 +10:00
; declare DIREC_LASTVAL manually so that we don't have to include directive.asm
.equ DIREC_LASTVAL RAMSTART
jp test
.inc "ascii.h"
.inc "core.asm"
.inc "str.asm"
.inc "lib/util.asm"
.inc "lib/ari.asm"
.inc "lib/fmt.asm"
.inc "zasm/util.asm"
.inc "zasm/const.asm"
.inc "lib/parse.asm"
.inc "zasm/parse.asm"
2019-10-05 10:26:21 +10:00
.equ SYM_RAMSTART DIREC_LASTVAL+2
.inc "zasm/symbol.asm"
.equ EXPR_PARSE parseNumberOrSymbol
.inc "lib/expr.asm"
.equ STDIO_RAMSTART SYM_RAMEND
.inc "stdio.asm"
.inc "common.asm"
; Pretend that we aren't in first pass
zasmIsFirstPass:
jp unsetZ
zasmGetPC:
ret
sFOO: .db "FOO", 0
sBAR: .db "BAR", 0
test:
ld sp, 0xffff
2019-12-30 07:39:39 +11:00
; before testing begins, let's set up FOO and BAR symbols
call symInit
ld hl, sFOO
ld de, 0x4000
2019-07-23 05:59:47 +10:00
call symRegisterGlobal
jp nz, fail
ld hl, sBAR
ld de, 0x20
2019-07-23 05:59:47 +10:00
call symRegisterGlobal
jp nz, fail
2019-12-30 07:39:39 +11:00
call testParseExpr
call testSPOnFail
2019-05-19 05:17:56 +10:00
; success
xor a
halt
testParseExpr:
ld hl, .alltests
ld ix, .test
jp testList
.test:
push hl \ pop iy
inc hl \ inc hl
2019-12-24 11:13:44 +11:00
call parseExpr
call assertZ
ld l, (iy)
ld h, (iy+1)
jp assertEQW
.t1:
.dw 7
.db "42/6", 0
.t2:
.dw 1
.db "7%3", 0
2019-11-23 09:16:51 +11:00
.t3:
.dw 0x0907
.db "0x99f7&0x0f0f", 0
.t4:
.dw 0x9fff
.db "0x99f7|0x0f0f", 0
.t5:
.dw 0x96f8
.db "0x99f7^0x0f0f", 0
.t6:
.dw 0x133e
.db "0x99f7}3", 0
.t7:
.dw 0xcfb8
.db "0x99f7{3", 0
2019-11-24 06:56:23 +11:00
.t8:
.dw 0xffff
.db "-1", 0
.t9:
.dw 10
.db "2*3+4", 0
; There was this untested regression during the replacement of find-and-subst
; parseExpr to the recursive descent one. It was time consuming to find. Here
; it goes, here it stays.
.t10:
.dw '-'+1
.db "'-'+1", 0
2019-12-30 07:39:39 +11:00
.t11:
.dw 0x4023
.db "0x4001+0x22", 0
.t12:
.dw 0x4020
.db "FOO+BAR", 0
.t13:
.dw 0x60
.db "BAR*3", 0
.t14:
.dw 0x3ffd
.db "FOO-3", 0
.t15:
.dw 0x4080
.db "FOO+BAR*4", 0
; "0" is a special case, let's test it
.t16:
.dw 0
.db "0", 0
; Another one that caused troubles
.t17:
.dw 123
.db "0+123", 0
.alltests:
2019-12-30 07:39:39 +11:00
.dw .t1, .t2, .t3, .t4, .t5, .t6, .t7, .t8, .t9, .t10, .t11, .t12
.dw .t13, .t14, .t15, .t16, .t17, 0
; Ensure that stack is balanced on failure
testSPOnFail:
ld (testSP), sp
ld hl, .sFail
call parseExpr
call assertNZ
call assertSP
jp nexttest
.sFail: .db "1+abc123", 0