mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
3293322a39
Makefile.in: Clone benchmark-driver repository in benchmark/benchmark-driver `make update-benchmark-driver`, like simplecov. win32/Makefile.sub: Roughly do the same thing. .gitignore: Ignore the cloned repository. common.mk: Trigger `make update-benchmark-driver` to run `make benchmark` and adjust arguments for benchmark_driver.gem. benchmark/require.yml: renamed from benchmark/bm_require.rb, benchmark/prepare_require.rb benchmark/require_thread.yml: renamed from benchmark/bm_require_thread.rb, benchmark/prepare_require_thread.rb benchmark/so_count_words.yml: renamed from benchmark/bm_so_count_words.rb, benchmark/prepare_so_count_words.rb, benchmark/wc.input.base benchmark/so_k_nucleotide.yml: renamed from benchmark/bm_so_k_nucleotide.rb, benchmark/prepare_so_k_nucleotide.rb, benchmark/make_fasta_output.rb benchmark/so_reverse_complement.yml: renamed from benchmark/bm_so_reverse_complement.rb, benchmark/prepare_so_reverse_complement.rb, benchmark/make_fasta_output.rb I'm sorry but I made some duplications between benchmark/require.yml and benchmark/require_thread.yml, and between benchmark/so_k_nucleotide.yml and benchmark/so_reverse_complement.yml. If you're not comfortable with it, please combine these YAMLs to share the same prelude. One YAML file can have multiple benchmark definitions sharing prelude. benchmark/driver.rb: Replace its core feature with benchmark_driver.gem. Some old features are gone for now, but I'll add them again later. [Misc #14902] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63888 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
137 lines
3.4 KiB
YAML
137 lines
3.4 KiB
YAML
prelude: |
|
|
bm_so_fasta = <<'EOS'
|
|
# The Computer Language Shootout
|
|
# http://shootout.alioth.debian.org/
|
|
# Contributed by Sokolov Yura
|
|
|
|
$last = 42.0
|
|
def gen_random(max, im=139968, ia=3877, ic=29573)
|
|
(max * ($last = ($last * ia + ic) % im)) / im
|
|
end
|
|
|
|
alu =
|
|
"GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG"+
|
|
"GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA"+
|
|
"CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT"+
|
|
"ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA"+
|
|
"GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG"+
|
|
"AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC"+
|
|
"AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA"
|
|
|
|
iub = [
|
|
["a", 0.27],
|
|
["c", 0.12],
|
|
["g", 0.12],
|
|
["t", 0.27],
|
|
|
|
["B", 0.02],
|
|
["D", 0.02],
|
|
["H", 0.02],
|
|
["K", 0.02],
|
|
["M", 0.02],
|
|
["N", 0.02],
|
|
["R", 0.02],
|
|
["S", 0.02],
|
|
["V", 0.02],
|
|
["W", 0.02],
|
|
["Y", 0.02],
|
|
]
|
|
homosapiens = [
|
|
["a", 0.3029549426680],
|
|
["c", 0.1979883004921],
|
|
["g", 0.1975473066391],
|
|
["t", 0.3015094502008],
|
|
]
|
|
|
|
def make_repeat_fasta(id, desc, src, n)
|
|
puts ">#{id} #{desc}"
|
|
v = nil
|
|
width = 60
|
|
l = src.length
|
|
s = src * ((n / l) + 1)
|
|
s.slice!(n, l)
|
|
puts(s.scan(/.{1,#{width}}/).join("\n"))
|
|
end
|
|
|
|
def make_random_fasta(id, desc, table, n)
|
|
puts ">#{id} #{desc}"
|
|
rand, v = nil,nil
|
|
width = 60
|
|
chunk = 1 * width
|
|
prob = 0.0
|
|
table.each{|v| v[1]= (prob += v[1])}
|
|
for i in 1..(n/width)
|
|
puts((1..width).collect{
|
|
rand = gen_random(1.0)
|
|
table.find{|v| v[1]>rand}[0]
|
|
}.join)
|
|
end
|
|
if n%width != 0
|
|
puts((1..(n%width)).collect{
|
|
rand = gen_random(1.0)
|
|
table.find{|v| v[1]>rand}[0]
|
|
}.join)
|
|
end
|
|
end
|
|
|
|
|
|
n = (ARGV[0] or 250_000).to_i
|
|
|
|
make_repeat_fasta('ONE', 'Homo sapiens alu', alu, n*2)
|
|
make_random_fasta('TWO', 'IUB ambiguity codes', iub, n*3)
|
|
make_random_fasta('THREE', 'Homo sapiens frequency', homosapiens, n*5)
|
|
EOS
|
|
benchmark:
|
|
- name: so_reverse_complement
|
|
prelude: |
|
|
script = File.join(File.dirname($0), 'bm_so_fasta.rb')
|
|
File.write(script, bm_so_fasta)
|
|
|
|
def prepare_fasta_output n
|
|
filebase = File.join(File.dirname($0), 'fasta.output')
|
|
script = File.join(File.dirname($0), 'bm_so_fasta.rb')
|
|
file = "#{filebase}.#{n}"
|
|
|
|
unless FileTest.exist?(file)
|
|
STDERR.puts "preparing #{file}"
|
|
|
|
open(file, 'w'){|f|
|
|
ARGV[0] = n
|
|
$stdout = f
|
|
load script
|
|
$stdout = STDOUT
|
|
}
|
|
end
|
|
end
|
|
prepare_fasta_output(2_500_000)
|
|
script: |
|
|
# The Great Computer Language Shootout
|
|
# http://shootout.alioth.debian.org/
|
|
#
|
|
# Contributed by Peter Bjarke Olsen
|
|
# Modified by Doug King
|
|
|
|
seq=Array.new
|
|
|
|
def revcomp(seq)
|
|
seq.reverse!.tr!('wsatugcyrkmbdhvnATUGCYRKMBDHVN','WSTAACGRYMKVHDBNTAACGRYMKVHDBN')
|
|
stringlen=seq.length
|
|
0.step(stringlen-1,60) {|x| print seq.slice(x,60) , "\n"}
|
|
end
|
|
|
|
input = open(File.join(File.dirname($0), 'fasta.output.2500000'), 'rb')
|
|
|
|
while input.gets
|
|
if $_ =~ />/
|
|
if seq.length != 0
|
|
revcomp(seq.join)
|
|
seq=Array.new
|
|
end
|
|
puts $_
|
|
else
|
|
$_.sub(/\n/,'')
|
|
seq.push $_
|
|
end
|
|
end
|
|
revcomp(seq.join)
|
|
loop_count: 1
|