summaryrefslogtreecommitdiff
path: root/test/benchmarks/ins-sort.c
diff options
context:
space:
mode:
authorVladimir Azarov <avm@intermediate-node.net>2025-08-18 03:59:02 +0200
committerVladimir Azarov <avm@intermediate-node.net>2025-08-18 03:59:02 +0200
commitdd775090878854ccfe65310f9457ce3e393c070d (patch)
treee942c0bc0e96e0eb170dfbcbe8d63a7635bba57a /test/benchmarks/ins-sort.c
parent177a172719f065dd32ea1217bfb35d6b640d0bad (diff)
Benchmark filesHEADmaster
Diffstat (limited to 'test/benchmarks/ins-sort.c')
-rw-r--r--test/benchmarks/ins-sort.c71
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;
+}