This commit is contained in:
andromeda
2026-03-23 17:00:32 +01:00
parent 50e635332c
commit b952210561
2 changed files with 101 additions and 0 deletions

View File

@@ -1445,6 +1445,42 @@ elemb:
mov rax, 1 ; return 1; dl an element of list
ret
; ------------------------------------------------------------------------------
; djb2
;
; description:
; gets the djb2 hash of a given string
;
; parameters:
; rdi = size of string
; rsi -> start of string
;
; returned:
; rax = hash
; ------------------------------------------------------------------------------
djb2:
xor ecx, ecx ; rcx = index
mov rax, 5381 ; rax = hash
.loop:
cmp rcx, rdi
jge .break
mov rdx, rax
shl rax, 5
add rax, rdx
xor edx, edx
mov dl, [rsi + rcx] ; dl = current byte
add rax, rdx
inc rcx
jmp .loop
.break:
ret
; ------------------------------------------------------------------------------
; trim_trailing_whitespace
;

View File

@@ -13,6 +13,9 @@ run_tests:
mov rsi, .msg
call print.test
call clear_test_arena
call test_djb2
call clear_test_arena
call test_elemb
@@ -109,6 +112,68 @@ test_elemb:
.case1 db 0x54, 0x00, 0x21, 0x20, 0x34
.msg db "test_elemb...", 0x00
; ------------------------------------------------------------------------------
; test_djb2
;
; description:
; tests djb2 described functionality
; ------------------------------------------------------------------------------
test_djb2:
mov rsi, .msg
call print.test
mov rsi, .case0
mov rdi, 0
call djb2
cmp rax, 5381
jne .fail
mov rsi, .case1
mov rdi, 1
call djb2
cmp rax, 177670
jne .fail
mov rsi, .case2
mov rdi, 2
call djb2
cmp rax, 5863208
jne .fail
; why am I testing this, of course it's without side effects xD
mov rsi, .case0
mov rdi, 0
call djb2
cmp rax, 5381
jne .fail
mov rsi, .case1
mov rdi, 1
call djb2
cmp rax, 177670
jne .fail
mov rsi, .case2
mov rdi, 2
call djb2
cmp rax, 5863208
jne .fail
.pass:
mov rsi, msg_pass
call print
ret
.fail:
mov rsi, msg_fail
call print
ret
.case0 db ""
.case1 db "a"
.case2 db "ab"
.msg db "test_djb2...", 0x00
; ------------------------------------------------------------------------------
; test_get_tte_type
;