aboutsummaryrefslogtreecommitdiff
path: root/sys/libbio/test.c
blob: d38bbc1b1229fe37762cde6e4913b83ff70e7317 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include <u.h>
#include <libn.h>
#include <libbio.h>

#include <time.h>
#include "kseq.h"

// -----------------------------------------------------------------------
// Point of entry for testing

error
test·newick()
{
    error err;
    bio·Tree t;
    mem·Arena *mem;
    Stream    *fd[2];

    io·Peeker     rdr;
    io·Putter     wtr;
    mem·Allocator al;

    mem = mem·newarena(mem·sys, nil);
    rdr = (io·Peeker){.get = &io·getbyte, .unget  = &io·ungetbyte};
    wtr = (io·Putter){.put = &io·putbyte, .putstr = &io·putstring};
    al  = (mem·Allocator) { .alloc = &mem·arenaalloc, .free = nil, };

    fd[0] = io·open("/home/nolln/root/data/test/example.nwk", "r");
    fd[1] = io·open("/home/nolln/root/data/test/example.proc.nwk", "w");

    t   = bio·readnewick(rdr, fd[0], al, mem);
    err = bio·writenewick(t, wtr, fd[1]);

    io·flush(fd[1]);
    io·close(fd[0]); 
    io·close(fd[1]);

    mem·freearena(mem);
    return 0;
}

error
test·fasta()
{
    error err;
    Stream           *fd;

    bio·Seq          seq;
    bio·FastaReader *rdr;

    clock_t t;

    fd  = io·open("/home/nolln/root/data/test/zika.fa", "r");

    /* Benchmark against Heng */
#if 0
    int  n, slen;
    kseq_t *kseq;

    t    = clock();
	kseq = kseq_init(fd);
	while (kseq_read(kseq) >= 0) {
		++n, slen += kseq->seq.l;
    }
    t = clock() - t;
    printf("heng's code took %f ms to execute\n", 1000.*t/CLOCKS_PER_SEC);

	kseq_destroy(kseq);

    io·seek(fd, 0, seek·set);
#endif

    rdr = bio·openfasta((io·Reader){.read = &io·read}, fd, mem·sys, nil);

    t = clock();
    err = 0;
    while (!err) {
        err = bio·readfasta(rdr, &seq);
    }
    t = clock() - t;
    printf("nick's code took %f ms to execute\n", 1000.*t/CLOCKS_PER_SEC);
    bio·closefasta(rdr);


    io·close(fd); 
    return err <= 0 ? 0 : 1;
}

error
main()
{
    error err;
    if (err = test·newick(), err) {
        errorf("test fail: newick");
    }

    if (err = test·fasta(), err) {
        errorf("test fail: fasta");
    }
}