Commit 86c0c54d authored by Russ Cox's avatar Russ Cox

test/bench: faster fasta (mostly due to bufio fix)

R=r
https://golang.org/cl/165083
parent 0d3301a5
...@@ -62,20 +62,6 @@ type AminoAcid struct { ...@@ -62,20 +62,6 @@ type AminoAcid struct {
c byte; 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) { func AccumulateProbabilities(genelist []AminoAcid) {
for i := 1; i < len(genelist); i++ { for i := 1; i < len(genelist); i++ {
genelist[i].p += genelist[i-1].p genelist[i].p += genelist[i-1].p
...@@ -104,6 +90,14 @@ func RepeatFasta(s []byte, count int) { ...@@ -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 // Each element of genelist is a struct with a character and
// a floating point number p between 0 and 1. // a floating point number p between 0 and 1.
// RandomFasta generates a random float r and // RandomFasta generates a random float r and
...@@ -117,11 +111,15 @@ func RandomFasta(genelist []AminoAcid, count int) { ...@@ -117,11 +111,15 @@ func RandomFasta(genelist []AminoAcid, count int) {
for count > 0 { for count > 0 {
line := min(WIDTH, count); line := min(WIDTH, count);
for pos := 0; pos < line; pos++ { for pos := 0; pos < line; pos++ {
r := myrandom(); lastrandom = (lastrandom*IA + IC) % IM;
var i int; // Integer to float conversions are faster if the integer is signed.
for i = 0; genelist[i].p < r; i++ { 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'; buf[line] = '\n';
out.Write(buf[0 : line+1]); out.Write(buf[0 : line+1]);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment