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
|
#include <u.h>
#include <libn.h>
#include <libbio.h>
#include <time.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");
}
}
|