Rewrite tests (most accidentally done in previous commit), add TODO (bugfix) in strcmp()

This commit is contained in:
2025-06-24 18:45:17 +02:00
parent e2de729a87
commit 354024c1b7
2 changed files with 128 additions and 16 deletions

View File

@ -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

141
tests.asm
View File

@ -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