diff options
| -rw-r--r-- | twasm/asm/main.asm | 36 | ||||
| -rw-r--r-- | twasm/asm/tests.asm | 65 |
2 files changed, 101 insertions, 0 deletions
diff --git a/twasm/asm/main.asm b/twasm/asm/main.asm index 1ed4932..7262a8f 100644 --- a/twasm/asm/main.asm +++ b/twasm/asm/main.asm @@ -1446,6 +1446,42 @@ elemb: 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 ; ; description: diff --git a/twasm/asm/tests.asm b/twasm/asm/tests.asm index 5df2152..ab1cc5c 100644 --- a/twasm/asm/tests.asm +++ b/twasm/asm/tests.asm @@ -14,6 +14,9 @@ run_tests: call print.test call clear_test_arena + call test_djb2 + + call clear_test_arena call test_elemb call clear_test_arena @@ -110,6 +113,68 @@ test_elemb: .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 ; ; description: |
