Refactor tests to use data structs
Rather than a pointer to the end of the parseable string, we now store the number of bytes we expect to be parsed. Current code allows for 11 bytes of string data which should suffice for most usecases.
This commit is contained in:
+44
-117
@@ -1,126 +1,53 @@
|
||||
mov r1, 1
|
||||
mov r2, test1
|
||||
mov r3, test1_end
|
||||
mov r13, test1_pass
|
||||
jmp atoi_test
|
||||
test1_pass:
|
||||
|
||||
mov r1, 2
|
||||
mov r2, test2
|
||||
mov r3, test2_end
|
||||
mov r13, test2_pass
|
||||
jmp atoi_test
|
||||
test2_pass:
|
||||
|
||||
mov r1, 3
|
||||
mov r2, test3
|
||||
mov r3, test3_end
|
||||
mov r13, test3_pass
|
||||
jmp atoi_test
|
||||
test3_pass:
|
||||
|
||||
mov r1, 4
|
||||
mov r2, test4
|
||||
mov r3, test4_end
|
||||
mov r13, test4_pass
|
||||
jmp atoi_test
|
||||
test4_pass:
|
||||
|
||||
mov r1, 5
|
||||
mov r2, test5
|
||||
mov r3, test5_end
|
||||
mov r13, test5_pass
|
||||
jmp atoi_test
|
||||
test5_pass:
|
||||
|
||||
mov r1, 6
|
||||
mov r2, test6
|
||||
mov r3, test6_end
|
||||
mov r13, test6_pass
|
||||
jmp atoi_test
|
||||
test6_pass:
|
||||
|
||||
mov r1, 7
|
||||
mov r2, test7
|
||||
mov r3, test7_end
|
||||
mov r13, test7_pass
|
||||
jmp atoi_test
|
||||
test7_pass:
|
||||
|
||||
mov r1, 8
|
||||
mov r2, test8
|
||||
mov r3, test8_end
|
||||
mov r13, test8_pass
|
||||
jmp atoi_test
|
||||
test8_pass:
|
||||
|
||||
mov r1, 9
|
||||
mov r2, test9
|
||||
mov r3, test9_end
|
||||
mov r13, test9_pass
|
||||
jmp atoi_test
|
||||
test9_pass:
|
||||
|
||||
success:
|
||||
jmp success
|
||||
|
||||
; test strint.atoi
|
||||
; Arguments:
|
||||
; r1 - test number
|
||||
; r2 - test data label
|
||||
; r3 - test end-of-string label
|
||||
; Result:
|
||||
; void. Hangs in failure: on failure.
|
||||
; Clobbers:
|
||||
; r8 - test number
|
||||
; r9 - Expected result in r1
|
||||
; r10 - Expected result in r2
|
||||
; Notes:
|
||||
; Depends on atoi not clobbering r8-r10.
|
||||
atoi_test:
|
||||
mov r8, r1
|
||||
load_32 r9, [r2]
|
||||
add r1, r2, 4
|
||||
mov r10, r3
|
||||
push r13
|
||||
; test harness for strint.atoi
|
||||
; Registers:
|
||||
; r8 - test address
|
||||
; r9 - expected result
|
||||
; r10 - actual length
|
||||
; r11 - expected length
|
||||
mov r8, tests
|
||||
next_test:
|
||||
; Set up arguments and run test
|
||||
add r1, r8, 5 ; Start of test string
|
||||
mov r13, atoi_test_ret
|
||||
jmp stdlib.strint.atoi
|
||||
atoi_test_ret:
|
||||
pop r13
|
||||
|
||||
; Load reference data
|
||||
load_32 r9, [r8] ; Expected result
|
||||
sub r10, r2, r8
|
||||
sub r10, r10, 5 ; Actual string length
|
||||
add r11, r8, 4 ; Address of expected length
|
||||
load_8 r11, [r11] ; Expected length
|
||||
|
||||
; Verify results
|
||||
cmp r1, r9
|
||||
jne failure
|
||||
cmp r2, r10
|
||||
jne failure
|
||||
jmp r13
|
||||
incorrect_result: jne incorrect_result
|
||||
cmp r10, r11
|
||||
incorrect_length: jne incorrect_length
|
||||
|
||||
failure:
|
||||
jmp failure
|
||||
; Next test
|
||||
add r8, r8, 0x10
|
||||
cmp r8, end_of_tests
|
||||
jl next_test
|
||||
|
||||
test1: U32 0 "0"
|
||||
test1_end: "\0"
|
||||
; Done
|
||||
success: jmp success
|
||||
|
||||
test2: U32 1 "1"
|
||||
test2_end: "\0"
|
||||
|
||||
test3: U32 2 "2"
|
||||
test3_end: "\0"
|
||||
|
||||
test4: U32 42 "42"
|
||||
test4_end: "\0"
|
||||
|
||||
test5: U32 67 "67"
|
||||
test5_end: "lol\0"
|
||||
|
||||
test6: U32 1690 "0x69a"
|
||||
test6_end: "\0"
|
||||
|
||||
test7: U32 19 "023"
|
||||
test7_end: "9\0"
|
||||
|
||||
test8: U32 11 "0b1011"
|
||||
test8_end: "\0"
|
||||
|
||||
test9: U32 17 "0b10001"
|
||||
test9_end: "2\0"
|
||||
|
||||
include stdlib
|
||||
|
||||
|
||||
@0x1000
|
||||
tests:
|
||||
; addr result inlen instr
|
||||
@0x1000 U32 0 U8 0 "\0"
|
||||
@0x1010 U32 0 U8 1 "0\0"
|
||||
@0x1020 U32 1 U8 1 "1\0"
|
||||
@0x1030 U32 2 U8 1 "2\0"
|
||||
@0x1040 U32 42 U8 2 "42\0"
|
||||
@0x1050 U32 67 U8 2 "67lol\0"
|
||||
@0x1060 U32 0x69a U8 5 "0x69a\0"
|
||||
@0x1070 U32 0o23 U8 3 "0239\0"
|
||||
@0x1080 U32 0b1011 U8 6 "0b1011\0"
|
||||
@0x1090 U32 0b10001 U8 7 "0b100012\0"
|
||||
end_of_tests:
|
||||
|
||||
Reference in New Issue
Block a user