Add tests print(),puts(), start adding tests for printf()

This commit is contained in:
2025-07-21 17:20:55 +02:00
parent 03303a303e
commit c69bd8332e

View File

@@ -197,6 +197,20 @@ section .rodata
addTest(clampu2, "clampu(0, 1, 1000)") addTest(clampu2, "clampu(0, 1, 1000)")
addTest(clampu3, "clampu(1337, 1, 1000)") addTest(clampu3, "clampu(1337, 1, 1000)")
addTest(clampu4, "clampu(MAX_UINT64, 0, MAX_UINT32)") addTest(clampu4, "clampu(MAX_UINT64, 0, MAX_UINT32)")
;print()
addTestHeader(_print, "print")
addTest(print1, "print(''Hello, world!\n'')")
printStr db "Hello, world!",NL,EOS
;puts()
addTestHeader(_puts, "puts")
addTest(puts1, "puts(''Howdy, environment!''")
putsStr db "Howdy, environment!",EOS
;printf()
addTestHeader(_printf, "printf")
addTest(printf_invalid, "printf(''H%ell%0 T\\%t\he%%%re%\n'')") ;=> Should be 'H%ell%0 T\\%t\he%re%' => 20 (+1 for NL) (yes, aware of the fact that '%0' is printed as '0' at the time of writing)
printfStr1 db "H%ell%0 T\\%t\he%%%re%\n",EOS
addTest(printf_hexpadd, "printf(''%x | %16x | %016x | %#16x | %#016x\n%X | %016X | %16X | %#016X | %#16X\n'', 80181775710, [... same arg 9 more times])")
printfStr2 db "%x | %16x | %016x | %#16x | %#016x\n%X | %016X | %16X | %#016X | %#16X\n",EOS
section .data section .data
@@ -521,6 +535,55 @@ _start:
assert_u_eq(MAX_UINT32) assert_u_eq(MAX_UINT32)
%endif %endif
;--- print()
%if TEST_print
printTestHeader(_print)
lea rdi, [rel printStr]
call print
assert_eq(14)
%endif
;--- puts()
%if TEST_puts
printTestHeader(_puts)
lea rdi, [rel putsStr]
call puts
assert_eq(20)
%endif
;--- printf()
%if TEST_printf
printTestHeader(_printf)
; TEST 1 (some invalid specifiers/characters)
printTest(printf_invalid)
lea rdi, [rel printfStr1]
xor rsi, rsi
xor rdx, rdx
xor rcx, rcx
call printf
assert_eq(21)
; TEST 2 (print hexadecimal numbers in multiple possible ways)
printTest(printf_hexpadd)
lea rdi, [rel printfStr2]
mov rsi, 80181775710
mov rdx, rsi
mov rcx, rsi
mov r8, rsi
mov r9, rsi
push rsi
push rsi
push rsi
push rsi
push rsi
call printf
add rsp, SIZE_QWORD * 5
assert_eq(174) ;8*16(%[#][0]16(x|X)) + (8*3( | ) + 20 (2x %x) + 2 (NL) => 174
%endif
;;; ;;;
;;; TEST RESULTS ;;; TEST RESULTS
;;; ;;;