From 86c0c54d27eecb32d4904b57122d5543ce3f4a00 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Mon, 7 Dec 2009 19:39:09 -0800 Subject: [PATCH] test/bench: faster fasta (mostly due to bufio fix) R=r https://golang.org/cl/165083 --- test/bench/fasta.go | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/test/bench/fasta.go b/test/bench/fasta.go index aba6b335ab..9624f702c8 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]); -- 2.50.0