aboutsummaryrefslogtreecommitdiff
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
commit86c0c54d27eecb32d4904b57122d5543ce3f4a00 (patch)
treeb845a2ac84b43cb6cf89fff8e2039f12f129d5f3
parent0d3301a557c1c8da66e5181bb93ceefc3dd3369d (diff)
downloadgo-86c0c54d27eecb32d4904b57122d5543ce3f4a00.tar.gz
go-86c0c54d27eecb32d4904b57122d5543ce3f4a00.zip
test/bench: faster fasta (mostly due to bufio fix)
R=r https://golang.org/cl/165083
-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 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]);