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/search-naive.c | |
parent | 177a172719f065dd32ea1217bfb35d6b640d0bad (diff) |
Diffstat (limited to 'test/benchmarks/search-naive.c')
-rw-r--r-- | test/benchmarks/search-naive.c | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/test/benchmarks/search-naive.c b/test/benchmarks/search-naive.c new file mode 100644 index 0000000..420ffc9 --- /dev/null +++ b/test/benchmarks/search-naive.c @@ -0,0 +1,68 @@ +struct result_buf { + unsigned long array[24*1024*1024]; + int len; +}; + +struct result_buf rbuf; + +int read(int fd, void *buf, unsigned long len); +void *malloc(unsigned long); +long strlen(char *); +int open(char *, int flags, long mode); +int printf(char *, ...); +void exit(int); + +void str_search(char *h, int hlen, char *n, int nlen) +{ + int i; + for (i = 0; i < hlen - nlen; ++i) { + int j; + for (j = 0; j < nlen; ++j) { + if (h[i + j] != n[j]) + break; + } + if (j == nlen) + rbuf.array[rbuf.len++] = i; + } +} + +void *read_file(int fd, int *len) +{ + int size = 1500 * 1024 * 1024; + unsigned char *arr = malloc(size); + int i; + for (i = 0; ;) { + int rd = read(fd, arr + i, size - i); + if (rd < 0) + exit(2); + if (rd == 0) + break; + i += rd; + } + + *len = i; + return arr; +} + +int main(int argc, char **argv) +{ + int i, slen; + long sum = 0; + int fd; + char *buf; + char *needle = argv[2]; + + fd = open(argv[1], 0, 0); + if (fd == -1) + return 1; + buf = read_file(fd, &slen); + printf("len: %d\n", slen); + + str_search(buf, slen, needle, strlen(needle)); + + for (i = 0; i < rbuf.len; ++i) + sum += rbuf.array[i]; + printf("%ld\n", sum); + + return 0; +} |