diff options
author | Vladimir Azarov <avm@intermediate-node.net> | 2025-08-18 03:59:02 +0200 |
---|---|---|
committer | Vladimir Azarov <avm@intermediate-node.net> | 2025-08-18 03:59:02 +0200 |
commit | dd775090878854ccfe65310f9457ce3e393c070d (patch) | |
tree | e942c0bc0e96e0eb170dfbcbe8d63a7635bba57a /test/benchmarks/ins-sort.c | |
parent | 177a172719f065dd32ea1217bfb35d6b640d0bad (diff) |
Diffstat (limited to 'test/benchmarks/ins-sort.c')
-rw-r--r-- | test/benchmarks/ins-sort.c | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/test/benchmarks/ins-sort.c b/test/benchmarks/ins-sort.c new file mode 100644 index 0000000..939be81 --- /dev/null +++ b/test/benchmarks/ins-sort.c @@ -0,0 +1,71 @@ +void *malloc(unsigned long); +int printf(char *, ...); +long atol(char *); +void exit(int); +int open(char *, int, int); +long read(int, void *, unsigned long); + +void insertion_sort(int *a, long n) +{ + long i, j; + for (i = 1; i < n; ++i) { + for (j = i; j > 0; --j) { + if (a[j] < a[j-1]) { + int tmp = a[j]; + a[j] = a[j-1]; + a[j-1] = tmp; + } else { + break; + } + } + } +} + +void *read_arr(int fd, int *len) +{ + int size = 1024 * 1024 * 20; + int i; + char *arr = malloc(size); + + for (i = 0; ; ) { + int rd = read(fd, arr + i, size - i); + if (rd == -1) + exit(2); + if (rd == 0) + break; + i += rd; + } + printf("input is collected\n"); + *len = i; + return arr; +} + +int main(int argc, char **argv) +{ + int i, len; + unsigned int sum = 0; + int *arr; + int fd; + + if (argc != 2) { + printf("%d\n", argc); + return 1; + } + + len = atol(argv[1]); + fd = open(argv[1], 0, 0); + if (fd == -1) + return 1; + arr = read_arr(fd, &len); + + len /= 4; + + if (len != 64000) + return 10; + + insertion_sort(arr, len); + for (i = 0; i < len; ++i) + sum = 2 * sum + arr[i]; + printf("%u\n", sum); + return 0; +} |