test runner

This commit is contained in:
2025-06-02 18:24:19 +02:00
parent 656bf7fb4f
commit 98f01350f8
3 changed files with 89 additions and 52 deletions

View File

@@ -114,39 +114,9 @@ extern fread
extern rewind extern rewind
extern system extern system
extern exit extern exit
extern gettimeofday
copystr equ strdup copystr equ strdup
isqrt:
xor rax, rax
mov rcx, 1
mov rbx, rdi
shl rcx, 62
.isqrt.1:
cmp rcx, 0
je .isqrt.5
cmp rcx, rbx
jbe .isqrt.2
shr rcx, 2
jmp .isqrt.1
.isqrt.2:
cmp rcx, 0
je .isqrt.5
mov rdx, rax
add rdx, rcx
cmp rbx, rdx
jb .isqrt.3
sub rbx, rdx
shr rax, 1
add rax, rcx
jmp .isqrt.4
.isqrt.3:
shr rax, 1
.isqrt.4:
shr rcx, 2
jmp .isqrt.2
.isqrt.5:
ret
nth: nth:
movzx rax, byte [rdi + rsi] movzx rax, byte [rdi + rsi]
ret ret
@@ -154,6 +124,54 @@ nth:
set: set:
mov [rdi + rsi], dl mov [rdi + rsi], dl
ret ret
time:
push rbx
sub rsp, 16
mov rbx, rsp
mov rdi, rbx
xor esi, esi
call gettimeofday
imul rcx, qword [rbx], 1000
mov rax, qword [rbx+8]
mov esi, 1000
cqo
idiv rsi
add rax, rcx
add rsp, 16
pop rbx
ret
isqrt:
xor rax, rax
mov rcx, 1
mov rbx, rdi
shl rcx, 62
.isqrt.1:
cmp rcx, 0
je .isqrt.5
cmp rcx, rbx
jbe .isqrt.2
shr rcx, 2
jmp .isqrt.1
.isqrt.2:
cmp rcx, 0
je .isqrt.5
mov rdx, rax
add rdx, rcx
cmp rbx, rdx
jb .isqrt.3
sub rbx, rdx
shr rax, 1
add rax, rcx
jmp .isqrt.4
.isqrt.3:
shr rax, 1
.isqrt.4:
shr rcx, 2
jmp .isqrt.2
.isqrt.5:
ret
", ",
); );
Ok(()) Ok(())

21
test.py
View File

@@ -1,21 +0,0 @@
import os
import sys
import time
os.system("cargo build --release")
for x in os.listdir("examples/"):
print(
"\033[93mBuilding %s...\033[0m" % x,
end="",
flush=True,
)
t = time.time()
if os.system("./target/release/zern examples/" + x) != 0:
sys.exit(1)
print(" %sms" % round((time.time() - t) * 1000, 2))
t = time.time()
if os.system("./out") != 0:
sys.exit(1)
print("\033[93mRunning %s...\033[0m %sms" % (x, round((time.time() - t) * 1000, 2)))

40
test.zr Normal file
View File

@@ -0,0 +1,40 @@
func run_test[x: String] : I64
printf("Building %s...", x)
let cmd: String = concat("./target/release/zern examples/", x)
let build_start_time: I64 = time()
if system(cmd) != 0
exit(1)
let build_end_time: I64 = time()
free(cmd)
printf(" %ldms\n", build_end_time - build_start_time)
let run_start_time: I64 = time()
if system("./out") != 0
exit(1)
let run_end_time: I64 = time()
printf("Running %s... %ldms\n", x, run_end_time - run_start_time)
func main[] : I64
system("cargo build --release")
// TODO
run_test("euler1.zr")
run_test("euler2.zr")
run_test("euler3.zr")
run_test("euler4.zr")
run_test("euler5.zr")
run_test("euler6.zr")
run_test("euler7.zr")
run_test("euler8.zr")
run_test("euler9.zr")
run_test("euler10.zr")
run_test("euler12.zr")
run_test("euler13.zr")
run_test("euler14.zr")
run_test("euler15.zr")
run_test("fib.zr")
run_test("hello.zr")
run_test("strings.zr")