diff options
author | Russ Cox <rsc@golang.org> | 2009-12-07 19:39:09 -0800 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2009-12-07 19:39:09 -0800 |
commit | 0703e19567be6ffdf1333bc5b37f8d10889eec86 (patch) | |
tree | 5080ccd641d2661fb5fc2c60291b87b129c16c32 | |
parent | 413c1052440fdd55c60a25e7610c41d672643117 (diff) | |
download | go-0703e19567be6ffdf1333bc5b37f8d10889eec86.tar.gz |
test/bench: faster fasta (mostly due to bufio fix)
R=r
http://codereview.appspot.com/165083
Committer: Russ Cox <rsc@golang.org>
-rw-r--r-- | test/bench/fasta.go | 34 |
1 files changed, 16 insertions, 18 deletions
diff --git a/test/bench/fasta.go b/test/bench/fasta.go index aba6b335a..9624f702c 100644 --- a/test/bench/fasta.go +++ b/test/bench/fasta.go @@ -62,20 +62,6 @@ type AminoAcid struct { c byte; } -var lastrandom uint32 = 42 - -// Random number between 0.0 and 1.0 -func myrandom() float { - const ( - IM = 139968; - IA = 3877; - IC = 29573; - ) - lastrandom = (lastrandom*IA + IC) % IM; - // Integer to float conversions are faster if the integer is signed. - return float(int32(lastrandom)) / IM; -} - func AccumulateProbabilities(genelist []AminoAcid) { for i := 1; i < len(genelist); i++ { genelist[i].p += genelist[i-1].p @@ -104,6 +90,14 @@ func RepeatFasta(s []byte, count int) { } } +var lastrandom uint32 = 42 + +const ( + IM = 139968; + IA = 3877; + IC = 29573; +) + // Each element of genelist is a struct with a character and // a floating point number p between 0 and 1. // RandomFasta generates a random float r and @@ -117,11 +111,15 @@ func RandomFasta(genelist []AminoAcid, count int) { for count > 0 { line := min(WIDTH, count); for pos := 0; pos < line; pos++ { - r := myrandom(); - var i int; - for i = 0; genelist[i].p < r; i++ { + lastrandom = (lastrandom*IA + IC) % IM; + // Integer to float conversions are faster if the integer is signed. + r := float(int32(lastrandom)) / IM; + for _, v := range genelist { + if v.p >= r { + buf[pos] = v.c; + break; + } } - buf[pos] = genelist[i].c; } buf[line] = '\n'; out.Write(buf[0 : line+1]); |