summaryrefslogtreecommitdiffstats
path: root/web/server/h2o/libh2o/deps/klib/test/kseq_bench.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--web/server/h2o/libh2o/deps/klib/test/kseq_bench.c69
1 files changed, 69 insertions, 0 deletions
diff --git a/web/server/h2o/libh2o/deps/klib/test/kseq_bench.c b/web/server/h2o/libh2o/deps/klib/test/kseq_bench.c
new file mode 100644
index 00000000..eeda13f7
--- /dev/null
+++ b/web/server/h2o/libh2o/deps/klib/test/kseq_bench.c
@@ -0,0 +1,69 @@
+#include <zlib.h>
+#include <stdio.h>
+#include <time.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include "kseq.h"
+
+#define BUF_SIZE 4096
+KSTREAM_INIT(gzFile, gzread, BUF_SIZE)
+
+int main(int argc, char *argv[])
+{
+ gzFile fp;
+ clock_t t;
+ if (argc == 1) {
+ fprintf(stderr, "Usage: kseq_bench <in.gz>\n");
+ return 1;
+ }
+ {
+ uint8_t *buf = malloc(BUF_SIZE);
+ fp = gzopen(argv[1], "r");
+ t = clock();
+ while (gzread(fp, buf, BUF_SIZE) > 0);
+ fprintf(stderr, "[gzread] %.2f sec\n", (float)(clock() - t) / CLOCKS_PER_SEC);
+ gzclose(fp);
+ free(buf);
+ }
+ {
+ kstream_t *ks;
+ fp = gzopen(argv[1], "r");
+ ks = ks_init(fp);
+ t = clock();
+ while (ks_getc(ks) >= 0);
+ fprintf(stderr, "[ks_getc] %.2f sec\n", (float)(clock() - t) / CLOCKS_PER_SEC);
+ ks_destroy(ks);
+ gzclose(fp);
+ }
+ {
+ kstream_t *ks;
+ kstring_t *s;
+ int dret;
+ s = calloc(1, sizeof(kstring_t));
+ fp = gzopen(argv[1], "r");
+ ks = ks_init(fp);
+ t = clock();
+ while (ks_getuntil(ks, '\n', s, &dret) >= 0);
+ fprintf(stderr, "[ks_getuntil] %.2f sec\n", (float)(clock() - t) / CLOCKS_PER_SEC);
+ ks_destroy(ks);
+ gzclose(fp);
+ free(s->s); free(s);
+ }
+ if (argc == 2) {
+ fp = gzopen(argv[1], "r");
+ t = clock();
+ while (gzgetc(fp) >= 0);
+ fprintf(stderr, "[gzgetc] %.2f sec\n", (float)(clock() - t) / CLOCKS_PER_SEC);
+ gzclose(fp);
+ }
+ if (argc == 2) {
+ char *buf = malloc(BUF_SIZE);
+ fp = gzopen(argv[1], "r");
+ t = clock();
+ while (gzgets(fp, buf, BUF_SIZE) > 0);
+ fprintf(stderr, "[gzgets] %.2f sec\n", (float)(clock() - t) / CLOCKS_PER_SEC);
+ gzclose(fp);
+ free(buf);
+ }
+ return 0;
+}