nx_quicksort_test.nx source
↩ module page · 49 lines · 1776 B
1import "nx_syscalls.nx"
2import "nx_quicksort.nx"
3
4func is_sorted_asc(arr: *i64, n: i64) -> i64 {
5 var i: i64 = 1
6 while i < n {
7 if arr[i - 1] > arr[i] { return 0 }
8 i = i + 1
9 }
10 return 1
11}
12
13func main() -> i64 {
14 let buf: *u8 = sys_mmap(80)
15 let arr: *nx_int = buf as *nx_int
16
17 // Adversarial cases: random, sorted, reverse-sorted, all-equal.
18 arr[0] = 5; arr[1] = 1; arr[2] = 4; arr[3] = 2; arr[4] = 3
19 nx_quicksort(arr, 5)
20 if arr[0] != 1 { return __syscall(93, 1, 0, 0, 0, 0, 0) }
21 if arr[4] != 5 { return __syscall(93, 2, 0, 0, 0, 0, 0) }
22 if is_sorted_asc(arr, 5) != 1 { return __syscall(93, 3, 0, 0, 0, 0, 0) }
23
24 arr[0] = 1; arr[1] = 2; arr[2] = 3; arr[3] = 4; arr[4] = 5
25 nx_quicksort(arr, 5)
26 if is_sorted_asc(arr, 5) != 1 { return __syscall(93, 4, 0, 0, 0, 0, 0) }
27
28 arr[0] = 5; arr[1] = 4; arr[2] = 3; arr[3] = 2; arr[4] = 1
29 nx_quicksort(arr, 5)
30 if is_sorted_asc(arr, 5) != 1 { return __syscall(93, 5, 0, 0, 0, 0, 0) }
31
32 arr[0] = 7; arr[1] = 7; arr[2] = 7; arr[3] = 7; arr[4] = 7
33 nx_quicksort(arr, 5)
34 if is_sorted_asc(arr, 5) != 1 { return __syscall(93, 6, 0, 0, 0, 0, 0) }
35 if arr[2] != 7 { return __syscall(93, 7, 0, 0, 0, 0, 0) }
36
37 // singletons + empty
38 nx_quicksort(arr, 0)
39 nx_quicksort(arr, 1)
40
41 // 10-element stress with negatives
42 arr[0] = -3; arr[1] = 10; arr[2] = 0; arr[3] = 7; arr[4] = -100
43 arr[5] = 42; arr[6] = 1; arr[7] = 5; arr[8] = -1; arr[9] = 3
44 nx_quicksort(arr, 10)
45 if is_sorted_asc(arr, 10) != 1 { return __syscall(93, 8, 0, 0, 0, 0, 0) }
46 if arr[0] != -100 { return __syscall(93, 9, 0, 0, 0, 0, 0) }
47 if arr[9] != 42 { return __syscall(93, 10, 0, 0, 0, 0, 0) }
48 return 0
49}