summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2009-12-07 19:39:09 -0800
committerRuss Cox <rsc@golang.org>2009-12-07 19:39:09 -0800
commit0703e19567be6ffdf1333bc5b37f8d10889eec86 (patch)
tree5080ccd641d2661fb5fc2c60291b87b129c16c32
parent413c1052440fdd55c60a25e7610c41d672643117 (diff)
downloadgo-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.go34
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]);