Rewrite tests (most accidentally done in previous commit), add TODO (bugfix) in strcmp()
This commit is contained in:
@ -98,6 +98,7 @@ strcat:
|
||||
;----- strcmp(char* str1, char* str2) -----;
|
||||
; return value: 0 if both strings are the same, otherwise index in array str1 where strings are to become different
|
||||
; returns -1 if str2 is longer than str1 and no difference was found before that happens
|
||||
; TODO: FIX length 13 for TEST strcmp(strBuff1, str1) (see tests.asm, test 1)
|
||||
strcmp:
|
||||
push rbp
|
||||
mov rbp, rsp
|
||||
|
143
tests.asm
143
tests.asm
@ -56,13 +56,13 @@ section .rodata
|
||||
prntStrs db "PRINT strings:",NL,"> str1: %s",NL,"> str2: %s",NL,"> str3: %s",NL,"> str4: %s",NL,EOS
|
||||
|
||||
; print()
|
||||
msgPrint db "# print()",NL,EOS
|
||||
msgPrint db NL,"# print()",NL,EOS
|
||||
msgPrint1 db "print() test",EOS
|
||||
; puts()
|
||||
msgPuts db NL,"# puts()",NL,EOS
|
||||
msgPuts db NL,NL,"# puts()",NL,EOS
|
||||
msgPuts1 db "puts() test",EOS
|
||||
; min() / minu()
|
||||
msgMin db "# min() / minu()",EOS
|
||||
msgMin db NL,"# min() / minu()",EOS
|
||||
msgMin1 db "TEST min(num1, num2): %d",NL,EOS
|
||||
msgMin2 db "TEST minu(num1, num2): %d",NL,EOS
|
||||
msgMin3 db "TEST min(num1, num3): %d",NL,EOS
|
||||
@ -72,7 +72,7 @@ section .rodata
|
||||
msgMin7 db "TEST min(num2, num4): %d",NL,EOS
|
||||
msgMin8 db "TEST minu(num2, num4): %d",NL,EOS
|
||||
; max() / maxu()
|
||||
msgMax db "# max() / maxu()",EOS
|
||||
msgMax db NL,"# max() / maxu()",EOS
|
||||
msgMax1 db "TEST max(num1, num2): %d",NL,EOS
|
||||
msgMax2 db "TEST maxu(num1, num2): %d",NL,EOS
|
||||
msgMax3 db "TEST max(num1, num3): %d",NL,EOS
|
||||
@ -82,54 +82,63 @@ section .rodata
|
||||
msgMax7 db "TEST max(num2, num4): %d",NL,EOS
|
||||
msgMax8 db "TEST maxu(num2, num4): %d",NL,EOS
|
||||
; strlen()
|
||||
msgStrlen db "# strlen()",EOS
|
||||
msgStrlen db NL,"# strlen()",EOS
|
||||
msgStrlen1 db "TEST strlen(str1): %d",NL,EOS
|
||||
msgStrlen2 db "TEST strlen(str2): %d",NL,EOS
|
||||
msgStrlen3 db "TEST strlen(str3): %d",NL,EOS
|
||||
msgStrlen4 db "TEST strlen(str4): %d",NL,EOS
|
||||
; islower()
|
||||
msgIslower db "# islower()",EOS
|
||||
msgIslower db NL,"# islower()",EOS
|
||||
msgIslower1 db "TEST islower(str1[0]): %d",NL,EOS ;str1[0] => 'H'
|
||||
msgIslower2 db "TEST islower(str1[1]): %d",NL,EOS ;str1[1] => 'e'
|
||||
msgIslower3 db "TEST islower(str1[5]): %d",NL,EOS ;str1[5] => ','
|
||||
; isupper()
|
||||
msgIsupper db "# isupper()",EOS
|
||||
msgIsupper db NL,"# isupper()",EOS
|
||||
msgIsupper1 db "TEST isupper(str1[0]): %d",NL,EOS ;str1[0] => 'H'
|
||||
msgIsupper2 db "TEST isupper(str1[1]): %d",NL,EOS ;str1[1] => 'e'
|
||||
msgIsupper3 db "TEST isupper(str1[5]): %d",NL,EOS ;str1[5] => ','
|
||||
; strcpy()
|
||||
msgStrcpy db "# strcpy()",EOS
|
||||
msgStrcpy db NL,"# strcpy()",EOS
|
||||
msgStrcpy1 db "TEST strcpy(strBuff1, str4): %s",NL,EOS
|
||||
msgStrcpy2 db "TEST strcpy(strBuff1, str2): %s",NL,EOS
|
||||
msgStrcpy3 db "TEST strcpy(strBuff1, str1): %s",NL,EOS
|
||||
; strlcpy()
|
||||
msgStrlcpy db "# strlcpy()",EOS
|
||||
msgStrlcpy db NL,"# strlcpy()",EOS
|
||||
msgStrlcpy1 db "TEST strlcpy(strBuff2, str1, -1) (%d): %s",NL,EOS
|
||||
msgStrlcpy2 db "TEST strlcpy(strBuff2, str1, 0) (%d): %s",NL,EOS
|
||||
msgStrlcpy3 db "TEST strlcpy(strBuff2, str1, 5) (%d): %s",NL,EOS
|
||||
msgStrlcpy4 db "TEST strlcpy(strBuff2, str4, 8) (%d): %s",NL,EOS
|
||||
; strclr()
|
||||
msgStrclr db "# strclr()",EOS
|
||||
msgStrclr db NL,"# strclr()",EOS
|
||||
msgStrclr1 db "TEST strclr(strBuff1): (%d) %s",NL,EOS
|
||||
msgStrclr2 db "> strcpy(strBuff1, str3). strBuff1 => %s",NL,EOS
|
||||
msgStrclr3 db "TEST strclr(strBuff1): (%d) %s",NL,EOS
|
||||
; strlclr()
|
||||
msgStrlclr db "# strlclr()",EOS
|
||||
msgStrlclr db NL,"# strlclr()",EOS
|
||||
msgStrlclr1 db "TEST strlclr(strbuff1, 32): %s",NL,EOS
|
||||
msgStrlclr2 db "> strcpy(strBuff1, str3). strBuff1 => %s",NL,EOS
|
||||
msgStrlclr3 db "TEST strlclr(strBuff1, 32): %s",NL,EOS
|
||||
; strcat()
|
||||
msgStrcat db "# strcat()",EOS
|
||||
msgStrcat db NL,"# strcat()",EOS
|
||||
msgStrcat1 db "TEST strcat(strBuff1, str3): %s", NL,EOS
|
||||
msgStrcat2 db "> strclr(strBuff1)",EOS
|
||||
msgStrcat3 db "TEST strcat(strBuff1, str1): %s",NL,EOS
|
||||
msgStrcat4 db "TEST strcat(strBuff1, str3): %s",NL,EOS
|
||||
; tolower()
|
||||
msgTolower db "# tolower()",NL,"> strcpy(strBuff1, str3)",EOS
|
||||
msgTolower db NL,"# tolower()",NL,"> strcpy(strBuff1, str3)",EOS
|
||||
msgTolower1 db "TEST tolower(strBuff1[0]): %c",NL,EOS
|
||||
msgTolower2 db "TEST tolower for whole strBuff1: %s",NL,EOS
|
||||
; toupper()
|
||||
msgToupper db NL,"# toupper()",NL,"> strcpy(strBuff1, str3)",EOS
|
||||
msgToupper1 db "TEST toupper(strBuff1[0]): %c",NL,EOS
|
||||
msgToupper2 db "TEST toupper for whole strBuff1: %s",NL,EOS
|
||||
; strcmp()
|
||||
msgStrcmp db NL,"# strcmp()",NL,"> strlclr(strBuff1, 32)",NL,"> strcpy(strBuff1, str1)",EOS
|
||||
msgStrcmpStrs db "> str1: %s",NL,"> str2: %s",NL,"> str4: %s",NL,"> strBuff1: %s",NL,EOS
|
||||
msgStrcmp1 db "TEST strcmp(strBuff1, str1): %d",NL,EOS
|
||||
msgStrcmp2 db "TEST strcmp(strBuff1, str2): %d",NL,EOS
|
||||
msgStrcmp3 db "TEST strcmp(str4, str1): %d",NL,EOS
|
||||
msgStrcmp4 db "TEST strcmp(str1, str4): %d",NL,EOS
|
||||
section .bss
|
||||
strBuff1 resb 32
|
||||
strBuff2 resb 8
|
||||
@ -566,6 +575,7 @@ main:
|
||||
|
||||
lea rdi, [rel strBuff1]
|
||||
lea rsi, [rel str3]
|
||||
call strcpy
|
||||
|
||||
; TEST: tolower(strBuff1[0])
|
||||
lea rdi, [rel strBuff1]
|
||||
@ -576,9 +586,110 @@ main:
|
||||
call printf
|
||||
|
||||
; TEST: tolower() whole strBuff1
|
||||
;lea rdi, [rel strBuff1]
|
||||
;.tolowerLoop:
|
||||
|
||||
lea rdi, [rel strBuff1]
|
||||
call strlen
|
||||
mov rcx, rax
|
||||
.tolowerLoop:
|
||||
movzx r10, byte [rdi]
|
||||
mov byte [rdi], r10b
|
||||
mov r11, rcx
|
||||
call tolower
|
||||
mov rcx, r11
|
||||
mov byte [rdi], al
|
||||
inc rdi
|
||||
inc r10
|
||||
loop .tolowerLoop
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgTolower2]
|
||||
lea rsi, [rel strBuff1]
|
||||
call printf
|
||||
%ENDIF
|
||||
%IF TEST_toupper
|
||||
lea rdi, [rel msgToupper]
|
||||
call puts
|
||||
|
||||
lea rdi, [rel strBuff1]
|
||||
lea rsi, [rel str3]
|
||||
call strcpy
|
||||
|
||||
; TEST: tolupper(strBuff1[0])
|
||||
lea rdi, [rel strBuff1]
|
||||
call toupper
|
||||
mov rsi, rax
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgToupper1]
|
||||
call printf
|
||||
|
||||
; TEST: toupper() whole strBuff1
|
||||
lea rdi, [rel strBuff1]
|
||||
call strlen
|
||||
mov rcx, rax
|
||||
.toupperLoop:
|
||||
movzx r10, byte [rdi]
|
||||
mov byte [rdi], r10b
|
||||
mov r11, rcx
|
||||
call toupper
|
||||
mov rcx, r11
|
||||
mov byte [rdi], al
|
||||
inc rdi
|
||||
inc r10
|
||||
loop .toupperLoop
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgTolower2]
|
||||
lea rsi, [rel strBuff1]
|
||||
call printf
|
||||
%ENDIF
|
||||
%IF TEST_strcmp
|
||||
lea rdi, [rel msgStrcmp]
|
||||
call puts
|
||||
|
||||
lea rdi, [rel strBuff1]
|
||||
mov rsi, 32
|
||||
call strlclr
|
||||
lea rdi, [rel strBuff1]
|
||||
lea rsi, [rel str1]
|
||||
call strcpy
|
||||
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgStrcmpStrs]
|
||||
lea rsi, [rel str1]
|
||||
lea rdx, [rel str2]
|
||||
lea rcx, [rel str4]
|
||||
lea r8, [rel strBuff1]
|
||||
call printf
|
||||
|
||||
; TEST: strcmp(strbuff1, str1)
|
||||
lea rdi, [rel strBuff1]
|
||||
lea rsi, [rel str1]
|
||||
call strcmp
|
||||
mov rsi, rax
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgStrcmp1]
|
||||
call printf
|
||||
; TEST: strcmp(strBuff1, str2)
|
||||
lea rdi, [rel strBuff1]
|
||||
lea rsi, [rel str2]
|
||||
call strcmp
|
||||
mov rsi, rax
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgStrcmp2]
|
||||
call printf
|
||||
; TEST: strcmp(str4, str1)
|
||||
lea rdi, [rel str4]
|
||||
lea rsi, [rel str1]
|
||||
call strcmp
|
||||
mov rsi, rax
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgStrcmp3]
|
||||
call printf
|
||||
; TEST: strcmp(str1, str4)
|
||||
lea rdi, [rel str1]
|
||||
lea rsi, [rel str4]
|
||||
call strcmp
|
||||
mov rsi, rax
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgStrcmp4]
|
||||
call printf
|
||||
%ENDIF
|
||||
|
||||
leave
|
||||
|
Reference in New Issue
Block a user