Add tests for existing functions (except file functions)
This commit is contained in:
336
src/tests.asm
336
src/tests.asm
@@ -234,6 +234,8 @@ section .rodata
|
|||||||
printfStr2 db "%x | %16x | %016x | %#16x | %#016x\n%X | %016X | %16X | %#016X | %#16X\n",EOS
|
printfStr2 db "%x | %16x | %016x | %#16x | %#016x\n%X | %016X | %16X | %#016X | %#16X\n",EOS
|
||||||
addTest(printf_ppadd, "printf(''%p | %16p | %016p | %#16p | %#016p\n%p | %016p | %16p | %#016p | %#16p\n'', 80181775710, [... same arg 9 more times])")
|
addTest(printf_ppadd, "printf(''%p | %16p | %016p | %#16p | %#016p\n%p | %016p | %16p | %#016p | %#16p\n'', 80181775710, [... same arg 9 more times])")
|
||||||
printfStr3 db "%p | %16p | %016p | %#16p | %#016p\n%p | %016p | %16p | %#016p | %#16p\n",EOS
|
printfStr3 db "%p | %16p | %016p | %#16p | %#016p\n%p | %016p | %16p | %#016p | %#16p\n",EOS
|
||||||
|
addTest(printf_null, "printf(''NULL pointer (%%s): %s\n'', itoa(128, 9, 0, 0))")
|
||||||
|
printfStr4 db "NULL pointer (%%s): %s\n",EOS
|
||||||
; STRINGS FOR USE IN STRING FUNCTIOns
|
; STRINGS FOR USE IN STRING FUNCTIOns
|
||||||
str1 db "Hello, World!",EOS;13
|
str1 db "Hello, World!",EOS;13
|
||||||
str2 db "Hello, world!",EOS;13
|
str2 db "Hello, world!",EOS;13
|
||||||
@@ -248,8 +250,69 @@ section .rodata
|
|||||||
addTest(strlen3, "strlen(str3)")
|
addTest(strlen3, "strlen(str3)")
|
||||||
addTest(strlen4, "strlen(str4)")
|
addTest(strlen4, "strlen(str4)")
|
||||||
addTest(strlen5, "strlen(str5)")
|
addTest(strlen5, "strlen(str5)")
|
||||||
|
;strcpy()
|
||||||
|
addTestHeader(_strcpy, "strcpy")
|
||||||
|
addTest(strcpy1, "strcpy(strBuff1, str1, 64)")
|
||||||
|
addTest(strcpy2, "strcpy(strBuff1, str5, 64)")
|
||||||
|
addTest(strcpy3, "strcpy(strBuff1, str5, 14)")
|
||||||
|
;strcat()
|
||||||
|
addTestHeader(_strcat, "strcat")
|
||||||
|
addTest(strcat1, "strcat(strbuff2, str1, 64)")
|
||||||
|
addTest(strcat2, "strcat(strBuff2, str3, 64)")
|
||||||
|
addTest(strcat3, "strcat(strBuff2, str5, 64)")
|
||||||
|
addTest(strcat4, "strcat(strbuff1, str4, 1)")
|
||||||
|
;strclr()
|
||||||
|
addTestHeader(_strclr, "strclr")
|
||||||
|
addTest(strclr1_1, "strcpy(strBuff1, str1, 64)")
|
||||||
|
addTest(strclr1_2, "puts(strBuff1)")
|
||||||
|
addTest(strclr1_3, "strclr(strBuff1, 64)")
|
||||||
|
addTest(strclr1_4, "puts(strbuff1)")
|
||||||
|
addTest(strclr2_1, "strclr(strBuff1, 2)")
|
||||||
|
addTest(strclr2_2, "puts(strBuff1[2])")
|
||||||
|
;strcmp()
|
||||||
|
addTestHeader(_strcmp, "strcmp")
|
||||||
|
addTest(strcmp1, "strcmp(str1, str2)") ;8
|
||||||
|
addTest(strcmp2, "strcmp(str1, str3)") ;6
|
||||||
|
addTest(strcmp3_1, "strcpy(strBuff1, str1, 64)")
|
||||||
|
addTest(strcmp3_2, "strcmp(str1, strBuff1)") ;0
|
||||||
|
addTest(strcmp4_1, "strcat(strBuff1, str1, 64)")
|
||||||
|
addTest(strcmp4_2, "strcmp(str1, strBuff1)") ;13
|
||||||
|
addTest(strcmp5, "strcmp(strBuff1, str1)") ;14
|
||||||
|
addTest(strcmp6_1, "strclr(strBuff1, 64)")
|
||||||
|
addTest(strcmp6_2, "strcmp(str1, strBuff1)") ;0
|
||||||
|
;atoi()
|
||||||
|
addTestHeader(_atoi, "atoi")
|
||||||
|
addTest(atoi1, "atoi(''079168045'')") ;79168045
|
||||||
|
addTest(atoi2, "atoi(''-079168045'')") ;-79168045
|
||||||
|
addTest(atoi3, "atoi(''-0xABCDEF'')") ;0
|
||||||
|
addTest(atoi4, "atoi(''0xabC0D9efF'')") ;46104682239
|
||||||
|
addTest(atoi5, "atoi(''0o77716254'')") ;16751788
|
||||||
|
addTest(atoi6, "atoi(''0o77718254'')") ;0
|
||||||
|
addTest(atoi7, "atoi(''0b00010111'')") ;23
|
||||||
|
addTest(atoi8, "atoi(''0b02010111'')") ;0
|
||||||
|
addTest(atoi9, "atoi(''0xabcdefg'')") ;0
|
||||||
|
atoiStr1 db "079168045",EOS
|
||||||
|
atoiStr2 db "-079168045",EOS
|
||||||
|
atoiStr3 db "-0xABCDEF",EOS
|
||||||
|
atoiStr4 db "0xabC0D9efF",EOS
|
||||||
|
atoiStr5 db "0o77716254",EOS
|
||||||
|
atoiStr6 db "0o77718254",EOS
|
||||||
|
atoiStr7 db "0b00010111",EOS
|
||||||
|
atoiStr8 db "0b02010111",EOS
|
||||||
|
atoiStr9 db "0xabcdefg",EOS
|
||||||
|
;itoa()
|
||||||
|
addTestHeader(_itoa, "itoa")
|
||||||
|
addTest(itoa1, "// See printf outputs")
|
||||||
|
;utoa()
|
||||||
|
addTestHeader(_utoa, "utoa")
|
||||||
|
addTest(utoa1, "// See printf outputs")
|
||||||
|
;fopen()
|
||||||
|
;fclose()
|
||||||
|
;fexist()
|
||||||
|
|
||||||
section .bss
|
section .bss
|
||||||
|
strBuff1 resb 64
|
||||||
|
strBuff2 resb 64
|
||||||
|
|
||||||
section .text
|
section .text
|
||||||
global _start
|
global _start
|
||||||
@@ -688,6 +751,18 @@ _start:
|
|||||||
call printf
|
call printf
|
||||||
add rsp, SIZE_QWORD * 5
|
add rsp, SIZE_QWORD * 5
|
||||||
assert_eq(178) ;Len of TEST 2 + 4 (since %p always uses prefix 0x, this test has that two times extra => 4 chars)
|
assert_eq(178) ;Len of TEST 2 + 4 (since %p always uses prefix 0x, this test has that two times extra => 4 chars)
|
||||||
|
|
||||||
|
; TEST 4 (null)
|
||||||
|
printTest(printf_null)
|
||||||
|
mov rdi, 128
|
||||||
|
mov rsi, 9
|
||||||
|
mov rdx, 0
|
||||||
|
mov rcx, 0
|
||||||
|
call itoa
|
||||||
|
lea rdi, [rel printfStr4]
|
||||||
|
mov rsi, rax
|
||||||
|
call printf
|
||||||
|
assert_eq(26)
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
;;;
|
;;;
|
||||||
@@ -736,6 +811,267 @@ _start:
|
|||||||
assert_eq(43)
|
assert_eq(43)
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
|
;--- strcpy()
|
||||||
|
%if TEST_strcpy
|
||||||
|
printTestHeader(_strcpy)
|
||||||
|
|
||||||
|
; TEST 1: strcpy(strBuff1, str1, 64)
|
||||||
|
printTest(strcpy1)
|
||||||
|
lea rdi, [rel strBuff1]
|
||||||
|
lea rsi, [rel str1]
|
||||||
|
mov rdx, 64
|
||||||
|
call strcpy
|
||||||
|
lea rdi, [rel strBuff1]
|
||||||
|
assert_eq(rdi)
|
||||||
|
lea rdi, [rel strBuff1]
|
||||||
|
call puts
|
||||||
|
|
||||||
|
; TEST 2: strcpy(strBuff1, str5, 64)
|
||||||
|
printTest(strcpy2)
|
||||||
|
lea rdi, [rel strBuff1]
|
||||||
|
lea rsi, [rel str5]
|
||||||
|
mov rdx, 64
|
||||||
|
call strcpy
|
||||||
|
lea rdi, [rel strBuff1]
|
||||||
|
assert_eq(rdi)
|
||||||
|
lea rdi, [rel strBuff1]
|
||||||
|
call puts
|
||||||
|
|
||||||
|
; TEST 3: strcpy(strBuff1, str5, 14)
|
||||||
|
printTest(strcpy3)
|
||||||
|
lea rdi, [rel strBuff1]
|
||||||
|
lea rsi, [rel str5]
|
||||||
|
mov rdx, 14
|
||||||
|
call strcpy
|
||||||
|
lea rdi, [rel strBuff1]
|
||||||
|
assert_eq(rdi)
|
||||||
|
lea rdi, [rel strBuff1]
|
||||||
|
call puts
|
||||||
|
%endif
|
||||||
|
|
||||||
|
;--- strcat()
|
||||||
|
%if TEST_strcat
|
||||||
|
printTestHeader(_strcat)
|
||||||
|
|
||||||
|
; TEST 1: strcat(strBuff2, str1, 64)
|
||||||
|
printTest(strcat1)
|
||||||
|
lea rdi, [rel strBuff2]
|
||||||
|
lea rsi, [rel str1]
|
||||||
|
mov rdx, 64
|
||||||
|
call strcat
|
||||||
|
assert_eq(strBuff2)
|
||||||
|
lea rdi, [rel strBuff2]
|
||||||
|
call puts
|
||||||
|
|
||||||
|
; TEST 2: strcat(strBuff2, str3, 64)
|
||||||
|
printTest(strcat2)
|
||||||
|
lea rdi, [rel strBuff2]
|
||||||
|
lea rsi, [rel str3]
|
||||||
|
mov rdx, 64
|
||||||
|
call strcat
|
||||||
|
assert_eq(strBuff2)
|
||||||
|
lea rdi, [rel strBuff2]
|
||||||
|
call puts
|
||||||
|
|
||||||
|
; TEST 3: strcat(strBuff2, str5, 64)
|
||||||
|
printTest(strcat3)
|
||||||
|
lea rdi, [rel strBuff2]
|
||||||
|
lea rsi, [rel str5]
|
||||||
|
mov rdx, 64
|
||||||
|
call strcat
|
||||||
|
assert_eq(strBuff2)
|
||||||
|
lea rdi, [rel strBuff2]
|
||||||
|
call puts
|
||||||
|
|
||||||
|
; TEST 4: strcat(strBuff1, str4, 1)
|
||||||
|
;printTest(strcat4)
|
||||||
|
;lea rdi, [rel strBuff1]
|
||||||
|
;lea rsi, [rel str4]
|
||||||
|
;mov rdx, 1
|
||||||
|
;call strcat ;SIGSEGV
|
||||||
|
;assert_eq(strBuff1)
|
||||||
|
;lea rdi, [rel strBuff1]
|
||||||
|
;call puts
|
||||||
|
%endif
|
||||||
|
|
||||||
|
;--- strclr()
|
||||||
|
%if TEST_strclr
|
||||||
|
printTestHeader(_strclr)
|
||||||
|
|
||||||
|
; TEST 1
|
||||||
|
printTest(strclr1_1)
|
||||||
|
lea rdi, [rel strBuff1]
|
||||||
|
lea rsi, [rel str1]
|
||||||
|
mov rdx, 64
|
||||||
|
call strcpy
|
||||||
|
printTest(strclr1_2)
|
||||||
|
lea rdi, [rel strBuff1]
|
||||||
|
call puts
|
||||||
|
printTest(strclr1_3)
|
||||||
|
lea rdi, [rel strBuff1]
|
||||||
|
mov rsi, 64
|
||||||
|
call strclr
|
||||||
|
printTest(strclr1_4)
|
||||||
|
lea rdi, [rel strBuff1]
|
||||||
|
call puts
|
||||||
|
assert_eq(1) ;1 char printed, NL
|
||||||
|
|
||||||
|
; TEST 2
|
||||||
|
printTest(strclr1_1)
|
||||||
|
lea rdi, [rel strBuff1]
|
||||||
|
lea rsi, [rel str1]
|
||||||
|
mov rdx, 64
|
||||||
|
call strcpy
|
||||||
|
printTest(strclr1_2)
|
||||||
|
lea rdi, [rel strBuff1]
|
||||||
|
call puts
|
||||||
|
printTest(strclr2_1)
|
||||||
|
lea rdi, [rel strBuff1]
|
||||||
|
mov rsi, 2
|
||||||
|
call strclr
|
||||||
|
printTest(strclr1_4)
|
||||||
|
lea rdi, [rel strBuff1]
|
||||||
|
call puts
|
||||||
|
assert_eq(1)
|
||||||
|
printTest(strclr2_2)
|
||||||
|
lea rdi, [rel strBuff1]
|
||||||
|
add rdi, 2
|
||||||
|
call puts
|
||||||
|
assert_eq(12)
|
||||||
|
%endif
|
||||||
|
|
||||||
|
;--- strcmp()
|
||||||
|
%if TEST_strcmp
|
||||||
|
printTestHeader(_strcmp)
|
||||||
|
|
||||||
|
; TEST 1: strcmp(str1, str2)
|
||||||
|
printTest(strcmp1)
|
||||||
|
lea rdi, [rel str1]
|
||||||
|
lea rsi, [rel str2]
|
||||||
|
call strcmp
|
||||||
|
assert_eq(8)
|
||||||
|
|
||||||
|
; TEST 2: strcmp(str1, str3)
|
||||||
|
printTest(strcmp2)
|
||||||
|
lea rdi, [rel str1]
|
||||||
|
lea rsi, [rel str3]
|
||||||
|
call strcmp
|
||||||
|
assert_eq(6)
|
||||||
|
|
||||||
|
; TEST 3: strcmp(str1, strBuff1) (eq)
|
||||||
|
printTest(strcmp3_1)
|
||||||
|
lea rdi, [rel strBuff1]
|
||||||
|
lea rsi, [rel str1]
|
||||||
|
mov rdx, 64
|
||||||
|
call strcpy
|
||||||
|
printTest(strcmp3_2)
|
||||||
|
lea rdi, [rel str1]
|
||||||
|
lea rsi, [rel strBuff1]
|
||||||
|
call strcmp
|
||||||
|
assert_eq(0)
|
||||||
|
|
||||||
|
; TEST 4: strcmp(str1, strBuff1) (strBuff1 longer)
|
||||||
|
printTest(strcmp4_1)
|
||||||
|
lea rdi, [rel strBuff1]
|
||||||
|
lea rsi, [rel str1]
|
||||||
|
mov rdx, 64
|
||||||
|
call strcat
|
||||||
|
printTest(strcmp4_2)
|
||||||
|
lea rdi, [rel str1]
|
||||||
|
lea rsi, [rel strBuff1]
|
||||||
|
call strcmp
|
||||||
|
assert_eq(13)
|
||||||
|
|
||||||
|
; TEST 5: strcmp(strBuff1, str1)
|
||||||
|
printTest(strcmp5)
|
||||||
|
lea rdi, [rel strBuff1]
|
||||||
|
lea rsi, [rel str1]
|
||||||
|
call strcmp
|
||||||
|
assert_eq(14)
|
||||||
|
|
||||||
|
; TEST 6: strcmp(str1, strBuff1) (strBuff1 empty)
|
||||||
|
printTest(strcmp6_1)
|
||||||
|
lea rdi, [rel strBuff1]
|
||||||
|
mov rsi, 64
|
||||||
|
call strclr
|
||||||
|
printTest(strcmp6_2)
|
||||||
|
lea rdi, [rel str1]
|
||||||
|
lea rsi, [rel strBuff1]
|
||||||
|
call strcmp
|
||||||
|
assert_eq(0)
|
||||||
|
%endif
|
||||||
|
|
||||||
|
;--- atoi()
|
||||||
|
%if TEST_atoi
|
||||||
|
printTestHeader(_atoi)
|
||||||
|
|
||||||
|
; TEST 1
|
||||||
|
printTest(atoi1)
|
||||||
|
lea rdi, [rel atoiStr1]
|
||||||
|
call atoi
|
||||||
|
assert_u_eq(79168045)
|
||||||
|
|
||||||
|
; TEST 2
|
||||||
|
printTest(atoi2)
|
||||||
|
lea rdi, [rel atoiStr2]
|
||||||
|
call atoi
|
||||||
|
assert_eq(-79168045)
|
||||||
|
|
||||||
|
; TEST 3
|
||||||
|
printTest(atoi3)
|
||||||
|
lea rdi, [rel atoiStr3]
|
||||||
|
call atoi
|
||||||
|
assert_u_eq(0)
|
||||||
|
|
||||||
|
; TEST 4
|
||||||
|
printTest(atoi4)
|
||||||
|
lea rdi, [rel atoiStr4]
|
||||||
|
call atoi
|
||||||
|
assert_u_eq(46104682239)
|
||||||
|
|
||||||
|
; TEST 5
|
||||||
|
printTest(atoi5)
|
||||||
|
lea rdi, [rel atoiStr5]
|
||||||
|
call atoi
|
||||||
|
assert_u_eq(16751788)
|
||||||
|
|
||||||
|
; TEST 6
|
||||||
|
printTest(atoi6)
|
||||||
|
lea rdi, [rel atoiStr6]
|
||||||
|
call atoi
|
||||||
|
assert_u_eq(0)
|
||||||
|
|
||||||
|
; TEST 7
|
||||||
|
printTest(atoi7)
|
||||||
|
lea rdi, [rel atoiStr7]
|
||||||
|
call atoi
|
||||||
|
assert_u_eq(23)
|
||||||
|
|
||||||
|
; TEST 8
|
||||||
|
printTest(atoi8)
|
||||||
|
lea rdi, [rel atoiStr8]
|
||||||
|
call atoi
|
||||||
|
assert_u_eq(0)
|
||||||
|
|
||||||
|
; TEST 9
|
||||||
|
printTest(atoi9)
|
||||||
|
lea rdi, [rel atoiStr9]
|
||||||
|
call atoi
|
||||||
|
assert_u_eq(0)
|
||||||
|
%endif
|
||||||
|
|
||||||
|
;--- itoa()
|
||||||
|
%if TEST_itoa
|
||||||
|
printTestHeader(_itoa)
|
||||||
|
printTest(itoa1)
|
||||||
|
%endif
|
||||||
|
|
||||||
|
;--- utoa()
|
||||||
|
%if TEST_utoa
|
||||||
|
printTestHeader(_utoa)
|
||||||
|
printTest(utoa1)
|
||||||
|
%endif
|
||||||
|
|
||||||
;;;
|
;;;
|
||||||
;;; TEST RESULTS
|
;;; TEST RESULTS
|
||||||
;;;
|
;;;
|
||||||
|
Reference in New Issue
Block a user