forked from TCShenanigans/symphony_stdlib
63 lines
1.5 KiB
NASM
63 lines
1.5 KiB
NASM
; test harness for int_to_string
|
|
; Registers:
|
|
; r8 - test address
|
|
; r9 - test method
|
|
; r12 - end of tests address
|
|
li r8, tests
|
|
li r12, end_of_tests
|
|
next_test:
|
|
; Set up arguments and run test
|
|
load_32 r1, [r8] ; Input value
|
|
li r2, scratch ; Output buffer
|
|
mov r3, 64 ; Output buffer size
|
|
add r4, r8, 4 ; Base
|
|
load_8 r4, [r4]
|
|
mov r13, itoa_test_ret ; return address
|
|
jmp stdlib.int_to_string.auto
|
|
itoa_test_ret:
|
|
nop ; For breakpoint after itoa but before r1 clobber
|
|
|
|
; Strcmp to check results
|
|
add r1, r8, 5 ; expected output
|
|
li r2, scratch ; actual output
|
|
mov r13, itoa_strcmp_ret
|
|
jmp stdlib.string.compare
|
|
itoa_strcmp_ret:
|
|
|
|
; Verify results
|
|
halt.ne
|
|
|
|
; Next test
|
|
add r8, r8, 0x40
|
|
cmp r8, r12
|
|
jl next_test
|
|
|
|
; Done
|
|
halt
|
|
|
|
|
|
include ../src/stdlib
|
|
|
|
@0x20000
|
|
tests:
|
|
; inlen is the number of input bytes the function is expected to consume
|
|
; addr int base result
|
|
@0x20000 U32 0b0 U8 2 "0\0"
|
|
@0x20040 U32 0xFFFFFFFF U8 2 "11111111111111111111111111111111\0"
|
|
@0x20080 U32 0b101010 U8 2 "101010\0"
|
|
@0x200c0 U32 0o0 U8 8 "0\0"
|
|
@0x20100 U32 0o640 U8 8 "640\0"
|
|
@0x20140 U32 0xFFFFFFFF U8 8 "37777777777\0"
|
|
@0x20180 U32 0x0 U8 16 "0\0"
|
|
@0x201c0 U32 0x32fF6 U8 16 "32FF6\0"
|
|
@0x20200 U32 0xdeadbeef U8 16 "DEADBEEF\0"
|
|
@0x20240 U32 0xFFFFFFFF U8 16 "FFFFFFFF\0"
|
|
@0x20280 U32 0 U8 10 "0\0"
|
|
@0x202c0 U32 42069 U8 10 "42069\0"
|
|
@0x20300 U32 12345678 U8 10 "12345678\0"
|
|
@0x20340 U32 99999999 U8 10 "99999999\0"
|
|
@0x20380
|
|
end_of_tests:
|
|
scratch: U1024 0
|
|
|