collapseos/tools/tests/unit/common.asm
Virgil Dupras 213614af33 lib/expr: make recursion process a bit more orderly
Instead of going left and right, finding operators chars and replacing them
with nulls, we parse expressions in a more orderly manner, one chunk at a
time. I think it qualifies as "recursive descent", but I'm not sure.

This allows us to preserve the string we parse and should also make the
implementation of parens much easier.
2019-12-29 11:42:18 -05:00

81 lines
1.0 KiB
NASM

; *** requirements ***
; ascii.h
; core
; stdio
; lib/ari
; lib/fmt
testNum: .db 1
STDIO_PUTC:
out (0), a
cp a
ret
STDIO_GETC:
jp unsetZ
assertZ:
ret z
ld hl, .msg
call printstr
jp fail
.msg:
.db "Z not set", CR, LF, 0
assertNZ:
ret nz
ld hl, .msg
call printstr
jp fail
.msg:
.db "Z set", CR, LF, 0
; Assert that HL == DE
assertEQW:
ld a, h
cp d
jr nz, .fail
ld a, l
cp e
ret z
.fail:
call printHexPair
call printcrlf
ex de, hl
call printHexPair
call printcrlf
ld hl, .msg
call printstr
jp fail
.msg:
.db "HL != DE", CR, LF, 0
; Given a list of pointer to test data structures in HL and a pointer to a test
; routine in IX, call (IX) with HL pointing to the test structure until the list
; points to a zero. See testParseExpr in test_expr for an example usage.
testList:
push hl ; --> lvl 1
call intoHL
ld a, h
or l
jr z, .end
call callIX
call nexttest
pop hl ; <-- lvl 1
inc hl \ inc hl
jr testList
.end:
pop hl ; <-- lvl 1
ret
nexttest:
ld a, (testNum)
inc a
ld (testNum), a
ret
fail:
ld a, (testNum)
halt