* set eol-style.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@13944 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2007-11-16 01:30:29 +00:00
parent 501407d3af
commit 75feee0968
27 changed files with 1744 additions and 1744 deletions

View File

@ -1,26 +1,26 @@
# #
# Create many HTML strings with ERB. # Create many HTML strings with ERB.
# #
require 'erb' require 'erb'
data = DATA.read data = DATA.read
max = 5_000 max = 5_000
title = "hello world!" title = "hello world!"
content = "hello world!\n" * 10 content = "hello world!\n" * 10
max.times{ max.times{
ERB.new(data).result(binding) ERB.new(data).result(binding)
} }
__END__ __END__
<html> <html>
<head> <%= title %> </head> <head> <%= title %> </head>
<body> <body>
<h1> <%= title %> </h1> <h1> <%= title %> </h1>
<p> <p>
<%= content %> <%= content %>
</p> </p>
</body> </body>
</html> </html>

View File

@ -1,8 +1,8 @@
require 'uri' require 'uri'
100_000.times{ 100_000.times{
uri = URI.parse('http://www.ruby-lang.org') uri = URI.parse('http://www.ruby-lang.org')
uri.scheme uri.scheme
uri.host uri.host
uri.port uri.port
} }

View File

@ -1,13 +1,13 @@
# #
# Create files # Create files
# #
max = 50_000 max = 50_000
file = './tmpfile_of_bm_io_file_create' file = './tmpfile_of_bm_io_file_create'
max.times{ max.times{
f = open(file, 'w') f = open(file, 'w')
f.close#(true) f.close#(true)
} }
File.unlink(file) File.unlink(file)

View File

@ -1,15 +1,15 @@
# #
# Seek and Read file. # Seek and Read file.
# #
require 'tempfile' require 'tempfile'
max = 20_000 max = 20_000
str = "Hello world! " * 1000 str = "Hello world! " * 1000
f = Tempfile.new('yarv-benchmark') f = Tempfile.new('yarv-benchmark')
f.write str f.write str
max.times{ max.times{
f.seek 0 f.seek 0
f.read f.read
} }

View File

@ -1,14 +1,14 @@
# #
# Seek and Write file. # Seek and Write file.
# #
require 'tempfile' require 'tempfile'
max = 20_000 max = 20_000
str = "Hello world! " * 1000 str = "Hello world! " * 1000
f = Tempfile.new('yarv-benchmark') f = Tempfile.new('yarv-benchmark')
max.times{ max.times{
f.seek 0 f.seek 0
f.write str f.write str
} }

View File

@ -1,57 +1,57 @@
# The Computer Language Shootout Benchmarks # The Computer Language Shootout Benchmarks
# http://shootout.alioth.debian.org # http://shootout.alioth.debian.org
# #
# contributed by Jesse Millikan # contributed by Jesse Millikan
# disable output # disable output
def STDOUT.write_ *args def STDOUT.write_ *args
end end
def item_check(tree) def item_check(tree)
if tree[0] == nil if tree[0] == nil
tree[1] tree[1]
else else
tree[1] + item_check(tree[0]) - item_check(tree[2]) tree[1] + item_check(tree[0]) - item_check(tree[2])
end end
end end
def bottom_up_tree(item, depth) def bottom_up_tree(item, depth)
if depth > 0 if depth > 0
item_item = 2 * item item_item = 2 * item
depth -= 1 depth -= 1
[bottom_up_tree(item_item - 1, depth), item, bottom_up_tree(item_item, depth)] [bottom_up_tree(item_item - 1, depth), item, bottom_up_tree(item_item, depth)]
else else
[nil, item, nil] [nil, item, nil]
end end
end end
max_depth = 12 # 16 # ARGV[0].to_i max_depth = 12 # 16 # ARGV[0].to_i
min_depth = 4 min_depth = 4
max_depth = min_depth + 2 if min_depth + 2 > max_depth max_depth = min_depth + 2 if min_depth + 2 > max_depth
stretch_depth = max_depth + 1 stretch_depth = max_depth + 1
stretch_tree = bottom_up_tree(0, stretch_depth) stretch_tree = bottom_up_tree(0, stretch_depth)
puts "stretch tree of depth #{stretch_depth}\t check: #{item_check(stretch_tree)}" puts "stretch tree of depth #{stretch_depth}\t check: #{item_check(stretch_tree)}"
stretch_tree = nil stretch_tree = nil
long_lived_tree = bottom_up_tree(0, max_depth) long_lived_tree = bottom_up_tree(0, max_depth)
min_depth.step(max_depth + 1, 2) do |depth| min_depth.step(max_depth + 1, 2) do |depth|
iterations = 2**(max_depth - depth + min_depth) iterations = 2**(max_depth - depth + min_depth)
check = 0 check = 0
for i in 1..iterations for i in 1..iterations
temp_tree = bottom_up_tree(i, depth) temp_tree = bottom_up_tree(i, depth)
check += item_check(temp_tree) check += item_check(temp_tree)
temp_tree = bottom_up_tree(-i, depth) temp_tree = bottom_up_tree(-i, depth)
check += item_check(temp_tree) check += item_check(temp_tree)
end end
puts "#{iterations * 2}\t trees of depth #{depth}\t check: #{check}" puts "#{iterations * 2}\t trees of depth #{depth}\t check: #{check}"
end end
puts "long lived tree of depth #{max_depth}\t check: #{item_check(long_lived_tree)}" puts "long lived tree of depth #{max_depth}\t check: #{item_check(long_lived_tree)}"

View File

@ -1,45 +1,45 @@
# The Computer Language Shootout # The Computer Language Shootout
# http://shootout.alioth.debian.org/ # http://shootout.alioth.debian.org/
# Contributed by Sokolov Yura # Contributed by Sokolov Yura
# Modified by Ryan Williams # Modified by Ryan Williams
def fannkuch(n) def fannkuch(n)
maxFlips, m, r, check = 0, n-1, n, 0 maxFlips, m, r, check = 0, n-1, n, 0
count = (1..n).to_a count = (1..n).to_a
perm = (1..n).to_a perm = (1..n).to_a
while true while true
if check < 30 if check < 30
puts "#{perm}" puts "#{perm}"
check += 1 check += 1
end end
while r != 1 while r != 1
count[r-1] = r count[r-1] = r
r -= 1 r -= 1
end end
if perm[0] != 1 and perm[m] != n if perm[0] != 1 and perm[m] != n
perml = perm.clone #.dup perml = perm.clone #.dup
flips = 0 flips = 0
while (k = perml.first ) != 1 while (k = perml.first ) != 1
perml = perml.slice!(0, k).reverse + perml perml = perml.slice!(0, k).reverse + perml
flips += 1 flips += 1
end end
maxFlips = flips if flips > maxFlips maxFlips = flips if flips > maxFlips
end end
while true while true
if r==n then return maxFlips end if r==n then return maxFlips end
perm.insert r,perm.shift perm.insert r,perm.shift
break if (count[r] -= 1) > 0 break if (count[r] -= 1) > 0
r += 1 r += 1
end end
end end
end end
def puts *args def puts *args
end end
N = 10 # (ARGV[0] || 1).to_i N = 10 # (ARGV[0] || 1).to_i
puts "Pfannkuchen(#{N}) = #{fannkuch(N)}" puts "Pfannkuchen(#{N}) = #{fannkuch(N)}"

View File

@ -1,81 +1,81 @@
# The Computer Language Shootout # The Computer Language Shootout
# http://shootout.alioth.debian.org/ # http://shootout.alioth.debian.org/
# Contributed by Sokolov Yura # Contributed by Sokolov Yura
$last = 42.0 $last = 42.0
def gen_random (max,im=139968,ia=3877,ic=29573) def gen_random (max,im=139968,ia=3877,ic=29573)
(max * ($last = ($last * ia + ic) % im)) / im (max * ($last = ($last * ia + ic) % im)) / im
end end
alu = alu =
"GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG"+ "GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG"+
"GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA"+ "GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA"+
"CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT"+ "CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT"+
"ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA"+ "ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA"+
"GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG"+ "GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG"+
"AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC"+ "AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC"+
"AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA" "AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA"
iub = [ iub = [
["a", 0.27], ["a", 0.27],
["c", 0.12], ["c", 0.12],
["g", 0.12], ["g", 0.12],
["t", 0.27], ["t", 0.27],
["B", 0.02], ["B", 0.02],
["D", 0.02], ["D", 0.02],
["H", 0.02], ["H", 0.02],
["K", 0.02], ["K", 0.02],
["M", 0.02], ["M", 0.02],
["N", 0.02], ["N", 0.02],
["R", 0.02], ["R", 0.02],
["S", 0.02], ["S", 0.02],
["V", 0.02], ["V", 0.02],
["W", 0.02], ["W", 0.02],
["Y", 0.02], ["Y", 0.02],
] ]
homosapiens = [ homosapiens = [
["a", 0.3029549426680], ["a", 0.3029549426680],
["c", 0.1979883004921], ["c", 0.1979883004921],
["g", 0.1975473066391], ["g", 0.1975473066391],
["t", 0.3015094502008], ["t", 0.3015094502008],
] ]
def make_repeat_fasta(id, desc, src, n) def make_repeat_fasta(id, desc, src, n)
puts ">#{id} #{desc}" puts ">#{id} #{desc}"
v = nil v = nil
width = 60 width = 60
l = src.length l = src.length
s = src * ((n / l) + 1) s = src * ((n / l) + 1)
s.slice!(n, l) s.slice!(n, l)
puts(s.scan(/.{1,#{width}}/).join("\n")) puts(s.scan(/.{1,#{width}}/).join("\n"))
end end
def make_random_fasta(id, desc, table, n) def make_random_fasta(id, desc, table, n)
puts ">#{id} #{desc}" puts ">#{id} #{desc}"
rand, v = nil,nil rand, v = nil,nil
width = 60 width = 60
chunk = 1 * width chunk = 1 * width
prob = 0.0 prob = 0.0
table.each{|v| v[1]= (prob += v[1])} table.each{|v| v[1]= (prob += v[1])}
for i in 1..(n/width) for i in 1..(n/width)
puts((1..width).collect{ puts((1..width).collect{
rand = gen_random(1.0) rand = gen_random(1.0)
table.find{|v| v[1]>rand}[0] table.find{|v| v[1]>rand}[0]
}.join) }.join)
end end
if n%width != 0 if n%width != 0
puts((1..(n%width)).collect{ puts((1..(n%width)).collect{
rand = gen_random(1.0) rand = gen_random(1.0)
table.find{|v| v[1]>rand}[0] table.find{|v| v[1]>rand}[0]
}.join) }.join)
end end
end end
n = (ARGV[0] or 250_000).to_i n = (ARGV[0] or 250_000).to_i
make_repeat_fasta('ONE', 'Homo sapiens alu', alu, n*2) make_repeat_fasta('ONE', 'Homo sapiens alu', alu, n*2)
make_random_fasta('TWO', 'IUB ambiguity codes', iub, n*3) make_random_fasta('TWO', 'IUB ambiguity codes', iub, n*3)
make_random_fasta('THREE', 'Homo sapiens frequency', homosapiens, n*5) make_random_fasta('THREE', 'Homo sapiens frequency', homosapiens, n*5)

View File

@ -1,48 +1,48 @@
# The Computer Language Shootout # The Computer Language Shootout
# http://shootout.alioth.debian.org # http://shootout.alioth.debian.org
# #
# contributed by jose fco. gonzalez # contributed by jose fco. gonzalez
# modified by Sokolov Yura # modified by Sokolov Yura
seq = String.new seq = String.new
def frecuency( seq,length ) def frecuency( seq,length )
n, table = seq.length - length + 1, Hash.new(0) n, table = seq.length - length + 1, Hash.new(0)
f, i = nil, nil f, i = nil, nil
(0 ... length).each do |f| (0 ... length).each do |f|
(f ... n).step(length) do |i| (f ... n).step(length) do |i|
table[seq[i,length]] += 1 table[seq[i,length]] += 1
end end
end end
[n,table] [n,table]
end end
def sort_by_freq( seq,length ) def sort_by_freq( seq,length )
n,table = frecuency( seq,length ) n,table = frecuency( seq,length )
a, b, v = nil, nil, nil a, b, v = nil, nil, nil
table.sort{|a,b| b[1] <=> a[1]}.each do |v| table.sort{|a,b| b[1] <=> a[1]}.each do |v|
puts "%s %.3f" % [v[0].upcase,((v[1]*100).to_f/n)] puts "%s %.3f" % [v[0].upcase,((v[1]*100).to_f/n)]
end end
puts puts
end end
def find_seq( seq,s ) def find_seq( seq,s )
n,table = frecuency( seq,s.length ) n,table = frecuency( seq,s.length )
puts "#{table[s].to_s}\t#{s.upcase}" puts "#{table[s].to_s}\t#{s.upcase}"
end end
input = open(File.join(File.dirname($0), 'fasta.output.100000'), 'rb') input = open(File.join(File.dirname($0), 'fasta.output.100000'), 'rb')
line = input.gets while line !~ /^>THREE/ line = input.gets while line !~ /^>THREE/
line = input.gets line = input.gets
while (line !~ /^>/) & line do while (line !~ /^>/) & line do
seq << line.chomp seq << line.chomp
line = input.gets line = input.gets
end end
[1,2].each {|i| sort_by_freq( seq,i ) } [1,2].each {|i| sort_by_freq( seq,i ) }
%w(ggt ggta ggtatt ggtattttaatt ggtattttaatttatagt).each{|s| find_seq( seq,s) } %w(ggt ggta ggtatt ggtattttaatt ggtattttaatttatagt).each{|s| find_seq( seq,s) }

View File

@ -1,57 +1,57 @@
# The Computer Language Benchmarks Game # The Computer Language Benchmarks Game
# http://shootout.alioth.debian.org/ # http://shootout.alioth.debian.org/
# #
# contributed by Karl von Laudermann # contributed by Karl von Laudermann
# modified by Jeremy Echols # modified by Jeremy Echols
size = 600 # ARGV[0].to_i size = 600 # ARGV[0].to_i
puts "P4\n#{size} #{size}" puts "P4\n#{size} #{size}"
ITER = 49 # Iterations - 1 for easy for..in looping ITER = 49 # Iterations - 1 for easy for..in looping
LIMIT_SQUARED = 4.0 # Presquared limit LIMIT_SQUARED = 4.0 # Presquared limit
byte_acc = 0 byte_acc = 0
bit_num = 0 bit_num = 0
count_size = size - 1 # Precomputed size for easy for..in looping count_size = size - 1 # Precomputed size for easy for..in looping
# For..in loops are faster than .upto, .downto, .times, etc. # For..in loops are faster than .upto, .downto, .times, etc.
for y in 0..count_size for y in 0..count_size
for x in 0..count_size for x in 0..count_size
zr = 0.0 zr = 0.0
zi = 0.0 zi = 0.0
cr = (2.0*x/size)-1.5 cr = (2.0*x/size)-1.5
ci = (2.0*y/size)-1.0 ci = (2.0*y/size)-1.0
escape = false escape = false
# To make use of the for..in code, we use a dummy variable, # To make use of the for..in code, we use a dummy variable,
# like one would in C # like one would in C
for dummy in 0..ITER for dummy in 0..ITER
tr = zr*zr - zi*zi + cr tr = zr*zr - zi*zi + cr
ti = 2*zr*zi + ci ti = 2*zr*zi + ci
zr, zi = tr, ti zr, zi = tr, ti
if (zr*zr+zi*zi) > LIMIT_SQUARED if (zr*zr+zi*zi) > LIMIT_SQUARED
escape = true escape = true
break break
end end
end end
byte_acc = (byte_acc << 1) | (escape ? 0b0 : 0b1) byte_acc = (byte_acc << 1) | (escape ? 0b0 : 0b1)
bit_num += 1 bit_num += 1
# Code is very similar for these cases, but using separate blocks # Code is very similar for these cases, but using separate blocks
# ensures we skip the shifting when it's unnecessary, which is most cases. # ensures we skip the shifting when it's unnecessary, which is most cases.
if (bit_num == 8) if (bit_num == 8)
print byte_acc.chr print byte_acc.chr
byte_acc = 0 byte_acc = 0
bit_num = 0 bit_num = 0
elsif (x == count_size) elsif (x == count_size)
byte_acc <<= (8 - bit_num) byte_acc <<= (8 - bit_num)
print byte_acc.chr print byte_acc.chr
byte_acc = 0 byte_acc = 0
bit_num = 0 bit_num = 0
end end
end end
end end

File diff suppressed because it is too large Load Diff

View File

@ -1,148 +1,148 @@
# The Computer Language Shootout # The Computer Language Shootout
# http://shootout.alioth.debian.org # http://shootout.alioth.debian.org
# #
# Optimized for Ruby by Jesse Millikan # Optimized for Ruby by Jesse Millikan
# From version ported by Michael Neumann from the C gcc version, # From version ported by Michael Neumann from the C gcc version,
# which was written by Christoph Bauer. # which was written by Christoph Bauer.
SOLAR_MASS = 4 * Math::PI**2 SOLAR_MASS = 4 * Math::PI**2
DAYS_PER_YEAR = 365.24 DAYS_PER_YEAR = 365.24
def _puts *args def _puts *args
end end
class Planet class Planet
attr_accessor :x, :y, :z, :vx, :vy, :vz, :mass attr_accessor :x, :y, :z, :vx, :vy, :vz, :mass
def initialize(x, y, z, vx, vy, vz, mass) def initialize(x, y, z, vx, vy, vz, mass)
@x, @y, @z = x, y, z @x, @y, @z = x, y, z
@vx, @vy, @vz = vx * DAYS_PER_YEAR, vy * DAYS_PER_YEAR, vz * DAYS_PER_YEAR @vx, @vy, @vz = vx * DAYS_PER_YEAR, vy * DAYS_PER_YEAR, vz * DAYS_PER_YEAR
@mass = mass * SOLAR_MASS @mass = mass * SOLAR_MASS
end end
def move_from_i(bodies, nbodies, dt, i) def move_from_i(bodies, nbodies, dt, i)
while i < nbodies while i < nbodies
b2 = bodies[i] b2 = bodies[i]
dx = @x - b2.x dx = @x - b2.x
dy = @y - b2.y dy = @y - b2.y
dz = @z - b2.z dz = @z - b2.z
distance = Math.sqrt(dx * dx + dy * dy + dz * dz) distance = Math.sqrt(dx * dx + dy * dy + dz * dz)
mag = dt / (distance * distance * distance) mag = dt / (distance * distance * distance)
b_mass_mag, b2_mass_mag = @mass * mag, b2.mass * mag b_mass_mag, b2_mass_mag = @mass * mag, b2.mass * mag
@vx -= dx * b2_mass_mag @vx -= dx * b2_mass_mag
@vy -= dy * b2_mass_mag @vy -= dy * b2_mass_mag
@vz -= dz * b2_mass_mag @vz -= dz * b2_mass_mag
b2.vx += dx * b_mass_mag b2.vx += dx * b_mass_mag
b2.vy += dy * b_mass_mag b2.vy += dy * b_mass_mag
b2.vz += dz * b_mass_mag b2.vz += dz * b_mass_mag
i += 1 i += 1
end end
@x += dt * @vx @x += dt * @vx
@y += dt * @vy @y += dt * @vy
@z += dt * @vz @z += dt * @vz
end end
end end
def energy(bodies) def energy(bodies)
e = 0.0 e = 0.0
nbodies = bodies.size nbodies = bodies.size
for i in 0 ... nbodies for i in 0 ... nbodies
b = bodies[i] b = bodies[i]
e += 0.5 * b.mass * (b.vx * b.vx + b.vy * b.vy + b.vz * b.vz) e += 0.5 * b.mass * (b.vx * b.vx + b.vy * b.vy + b.vz * b.vz)
for j in (i + 1) ... nbodies for j in (i + 1) ... nbodies
b2 = bodies[j] b2 = bodies[j]
dx = b.x - b2.x dx = b.x - b2.x
dy = b.y - b2.y dy = b.y - b2.y
dz = b.z - b2.z dz = b.z - b2.z
distance = Math.sqrt(dx * dx + dy * dy + dz * dz) distance = Math.sqrt(dx * dx + dy * dy + dz * dz)
e -= (b.mass * b2.mass) / distance e -= (b.mass * b2.mass) / distance
end end
end end
e e
end end
def offset_momentum(bodies) def offset_momentum(bodies)
px, py, pz = 0.0, 0.0, 0.0 px, py, pz = 0.0, 0.0, 0.0
for b in bodies for b in bodies
m = b.mass m = b.mass
px += b.vx * m px += b.vx * m
py += b.vy * m py += b.vy * m
pz += b.vz * m pz += b.vz * m
end end
b = bodies[0] b = bodies[0]
b.vx = - px / SOLAR_MASS b.vx = - px / SOLAR_MASS
b.vy = - py / SOLAR_MASS b.vy = - py / SOLAR_MASS
b.vz = - pz / SOLAR_MASS b.vz = - pz / SOLAR_MASS
end end
BODIES = [ BODIES = [
# sun # sun
Planet.new(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0), Planet.new(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0),
# jupiter # jupiter
Planet.new( Planet.new(
4.84143144246472090e+00, 4.84143144246472090e+00,
-1.16032004402742839e+00, -1.16032004402742839e+00,
-1.03622044471123109e-01, -1.03622044471123109e-01,
1.66007664274403694e-03, 1.66007664274403694e-03,
7.69901118419740425e-03, 7.69901118419740425e-03,
-6.90460016972063023e-05, -6.90460016972063023e-05,
9.54791938424326609e-04), 9.54791938424326609e-04),
# saturn # saturn
Planet.new( Planet.new(
8.34336671824457987e+00, 8.34336671824457987e+00,
4.12479856412430479e+00, 4.12479856412430479e+00,
-4.03523417114321381e-01, -4.03523417114321381e-01,
-2.76742510726862411e-03, -2.76742510726862411e-03,
4.99852801234917238e-03, 4.99852801234917238e-03,
2.30417297573763929e-05, 2.30417297573763929e-05,
2.85885980666130812e-04), 2.85885980666130812e-04),
# uranus # uranus
Planet.new( Planet.new(
1.28943695621391310e+01, 1.28943695621391310e+01,
-1.51111514016986312e+01, -1.51111514016986312e+01,
-2.23307578892655734e-01, -2.23307578892655734e-01,
2.96460137564761618e-03, 2.96460137564761618e-03,
2.37847173959480950e-03, 2.37847173959480950e-03,
-2.96589568540237556e-05, -2.96589568540237556e-05,
4.36624404335156298e-05), 4.36624404335156298e-05),
# neptune # neptune
Planet.new( Planet.new(
1.53796971148509165e+01, 1.53796971148509165e+01,
-2.59193146099879641e+01, -2.59193146099879641e+01,
1.79258772950371181e-01, 1.79258772950371181e-01,
2.68067772490389322e-03, 2.68067772490389322e-03,
1.62824170038242295e-03, 1.62824170038242295e-03,
-9.51592254519715870e-05, -9.51592254519715870e-05,
5.15138902046611451e-05) 5.15138902046611451e-05)
] ]
init = 200_000 # ARGV[0] init = 200_000 # ARGV[0]
n = Integer(init) n = Integer(init)
offset_momentum(BODIES) offset_momentum(BODIES)
puts "%.9f" % energy(BODIES) puts "%.9f" % energy(BODIES)
nbodies = BODIES.size nbodies = BODIES.size
dt = 0.01 dt = 0.01
n.times do n.times do
i = 0 i = 0
while i < nbodies while i < nbodies
b = BODIES[i] b = BODIES[i]
b.move_from_i(BODIES, nbodies, dt, i + 1) b.move_from_i(BODIES, nbodies, dt, i + 1)
i += 1 i += 1
end end
end end
puts "%.9f" % energy(BODIES) puts "%.9f" % energy(BODIES)

View File

@ -1,35 +1,35 @@
# The Computer Language Shootout # The Computer Language Shootout
# http://shootout.alioth.debian.org/ # http://shootout.alioth.debian.org/
# #
# contributed by Glenn Parker, March 2005 # contributed by Glenn Parker, March 2005
# modified by Evan Phoenix, Sept 2006 # modified by Evan Phoenix, Sept 2006
def sieve(m) def sieve(m)
flags = Flags.dup[0,m] flags = Flags.dup[0,m]
count = 0 count = 0
pmax = m - 1 pmax = m - 1
p = 2 p = 2
while p <= pmax while p <= pmax
unless flags[p].zero? unless flags[p].zero?
count += 1 count += 1
mult = p mult = p
while mult <= pmax while mult <= pmax
flags[mult] = 0 flags[mult] = 0
mult += p mult += p
end end
end end
p += 1 p += 1
end end
count count
end end
n = 9 # (ARGV[0] || 2).to_i n = 9 # (ARGV[0] || 2).to_i
Flags = ("\x1" * ( 2 ** n * 10_000)).unpack("c*") Flags = ("\x1" * ( 2 ** n * 10_000)).unpack("c*")
n.downto(n-2) do |exponent| n.downto(n-2) do |exponent|
break if exponent < 0 break if exponent < 0
m = (1 << exponent) * 10_000 m = (1 << exponent) * 10_000
# m = (2 ** exponent) * 10_000 # m = (2 ** exponent) * 10_000
count = sieve(m) count = sieve(m)
printf "Primes up to %8d %8d\n", m, count printf "Primes up to %8d %8d\n", m, count
end end

View File

@ -1,42 +1,42 @@
#!/usr/bin/ruby #!/usr/bin/ruby
# #
# The Great Computer Language Shootout # The Great Computer Language Shootout
# http://shootout.alioth.debian.org/ # http://shootout.alioth.debian.org/
# #
# nsieve-bits in Ruby # nsieve-bits in Ruby
# Contributed by Glenn Parker, March 2005 # Contributed by Glenn Parker, March 2005
CharExponent = 3 CharExponent = 3
BitsPerChar = 1 << CharExponent BitsPerChar = 1 << CharExponent
LowMask = BitsPerChar - 1 LowMask = BitsPerChar - 1
def sieve(m) def sieve(m)
items = "\xFF" * ((m / BitsPerChar) + 1) items = "\xFF" * ((m / BitsPerChar) + 1)
masks = "" masks = ""
BitsPerChar.times do |b| BitsPerChar.times do |b|
masks << (1 << b).chr masks << (1 << b).chr
end end
count = 0 count = 0
pmax = m - 1 pmax = m - 1
2.step(pmax, 1) do |p| 2.step(pmax, 1) do |p|
if items[p >> CharExponent][p & LowMask] == 1 if items[p >> CharExponent][p & LowMask] == 1
count += 1 count += 1
p.step(pmax, p) do |mult| p.step(pmax, p) do |mult|
a = mult >> CharExponent a = mult >> CharExponent
b = mult & LowMask b = mult & LowMask
items[a] -= masks[b] if items[a][b] != 0 items[a] -= masks[b] if items[a][b] != 0
end end
end end
end end
count count
end end
n = 9 # (ARGV[0] || 2).to_i n = 9 # (ARGV[0] || 2).to_i
n.step(n - 2, -1) do |exponent| n.step(n - 2, -1) do |exponent|
break if exponent < 0 break if exponent < 0
m = 2 ** exponent * 10_000 m = 2 ** exponent * 10_000
count = sieve(m) count = sieve(m)
printf "Primes up to %8d %8d\n", m, count printf "Primes up to %8d %8d\n", m, count
end end

View File

@ -1,31 +1,31 @@
n = 2_500_000 # (ARGV.shift || 1).to_i n = 2_500_000 # (ARGV.shift || 1).to_i
alt = 1.0 ; s0 = s1 = s2 = s3 = s4 = s5 = s6 = s7 = s8 = 0.0 alt = 1.0 ; s0 = s1 = s2 = s3 = s4 = s5 = s6 = s7 = s8 = 0.0
1.upto(n) do |d| 1.upto(n) do |d|
d = d.to_f ; d2 = d * d ; d3 = d2 * d ; ds = Math.sin(d) ; dc = Math.cos(d) d = d.to_f ; d2 = d * d ; d3 = d2 * d ; ds = Math.sin(d) ; dc = Math.cos(d)
s0 += (2.0 / 3.0) ** (d - 1.0) s0 += (2.0 / 3.0) ** (d - 1.0)
s1 += 1.0 / Math.sqrt(d) s1 += 1.0 / Math.sqrt(d)
s2 += 1.0 / (d * (d + 1.0)) s2 += 1.0 / (d * (d + 1.0))
s3 += 1.0 / (d3 * ds * ds) s3 += 1.0 / (d3 * ds * ds)
s4 += 1.0 / (d3 * dc * dc) s4 += 1.0 / (d3 * dc * dc)
s5 += 1.0 / d s5 += 1.0 / d
s6 += 1.0 / d2 s6 += 1.0 / d2
s7 += alt / d s7 += alt / d
s8 += alt / (2.0 * d - 1.0) s8 += alt / (2.0 * d - 1.0)
alt = -alt alt = -alt
end end
if false if false
printf("%.9f\t(2/3)^k\n", s0) printf("%.9f\t(2/3)^k\n", s0)
printf("%.9f\tk^-0.5\n", s1) printf("%.9f\tk^-0.5\n", s1)
printf("%.9f\t1/k(k+1)\n", s2) printf("%.9f\t1/k(k+1)\n", s2)
printf("%.9f\tFlint Hills\n", s3) printf("%.9f\tFlint Hills\n", s3)
printf("%.9f\tCookson Hills\n", s4) printf("%.9f\tCookson Hills\n", s4)
printf("%.9f\tHarmonic\n", s5) printf("%.9f\tHarmonic\n", s5)
printf("%.9f\tRiemann Zeta\n", s6) printf("%.9f\tRiemann Zeta\n", s6)
printf("%.9f\tAlternating Harmonic\n", s7) printf("%.9f\tAlternating Harmonic\n", s7)
printf("%.9f\tGregory\n", s8) printf("%.9f\tGregory\n", s8)
end end

View File

@ -1,92 +1,92 @@
# The Great Computer Language Shootout # The Great Computer Language Shootout
# http://shootout.alioth.debian.org/ # http://shootout.alioth.debian.org/
# #
# contributed by Gabriele Renzi # contributed by Gabriele Renzi
class PiDigitSpigot class PiDigitSpigot
def initialize() def initialize()
@z = Transformation.new 1,0,0,1 @z = Transformation.new 1,0,0,1
@x = Transformation.new 0,0,0,0 @x = Transformation.new 0,0,0,0
@inverse = Transformation.new 0,0,0,0 @inverse = Transformation.new 0,0,0,0
end end
def next! def next!
@y = @z.extract(3) @y = @z.extract(3)
if safe? @y if safe? @y
@z = produce(@y) @z = produce(@y)
@y @y
else else
@z = consume @x.next!() @z = consume @x.next!()
next!() next!()
end end
end end
def safe?(digit) def safe?(digit)
digit == @z.extract(4) digit == @z.extract(4)
end end
def produce(i) def produce(i)
@inverse.qrst(10,-10*i,0,1).compose(@z) @inverse.qrst(10,-10*i,0,1).compose(@z)
end end
def consume(a) def consume(a)
@z.compose(a) @z.compose(a)
end end
end end
class Transformation class Transformation
attr_reader :q, :r, :s, :t attr_reader :q, :r, :s, :t
def initialize (q, r, s, t) def initialize (q, r, s, t)
@q,@r,@s,@t,@k = q,r,s,t,0 @q,@r,@s,@t,@k = q,r,s,t,0
end end
def next!() def next!()
@q = @k = @k + 1 @q = @k = @k + 1
@r = 4 * @k + 2 @r = 4 * @k + 2
@s = 0 @s = 0
@t = 2 * @k + 1 @t = 2 * @k + 1
self self
end end
def extract(j) def extract(j)
(@q * j + @r) / (@s * j + @t) (@q * j + @r) / (@s * j + @t)
end end
def compose(a) def compose(a)
self.class.new( @q * a.q, self.class.new( @q * a.q,
@q * a.r + r * a.t, @q * a.r + r * a.t,
@s * a.q + t * a.s, @s * a.q + t * a.s,
@s * a.r + t * a.t @s * a.r + t * a.t
) )
end end
def qrst *args def qrst *args
initialize *args initialize *args
self self
end end
end end
WIDTH = 10 WIDTH = 10
n = 2_500 # Integer(ARGV[0]) n = 2_500 # Integer(ARGV[0])
j = 0 j = 0
digits = PiDigitSpigot.new digits = PiDigitSpigot.new
while n > 0 while n > 0
if n >= WIDTH if n >= WIDTH
WIDTH.times {print digits.next!} WIDTH.times {print digits.next!}
j += WIDTH j += WIDTH
else else
n.times {print digits.next!} n.times {print digits.next!}
(WIDTH-n).times {print " "} (WIDTH-n).times {print " "}
j += n j += n
end end
puts "\t:"+j.to_s puts "\t:"+j.to_s
n -= WIDTH n -= WIDTH
end end

View File

@ -1,30 +1,30 @@
#!/usr/bin/ruby #!/usr/bin/ruby
# The Great Computer Language Shootout # The Great Computer Language Shootout
# http://shootout.alioth.debian.org/ # http://shootout.alioth.debian.org/
# #
# Contributed by Peter Bjarke Olsen # Contributed by Peter Bjarke Olsen
# Modified by Doug King # Modified by Doug King
seq=Array.new seq=Array.new
def revcomp(seq) def revcomp(seq)
seq.reverse!.tr!('wsatugcyrkmbdhvnATUGCYRKMBDHVN','WSTAACGRYMKVHDBNTAACGRYMKVHDBN') seq.reverse!.tr!('wsatugcyrkmbdhvnATUGCYRKMBDHVN','WSTAACGRYMKVHDBNTAACGRYMKVHDBN')
stringlen=seq.length stringlen=seq.length
0.step(stringlen-1,60) {|x| print seq.slice(x,60) , "\n"} 0.step(stringlen-1,60) {|x| print seq.slice(x,60) , "\n"}
end end
input = open(File.join(File.dirname($0), 'fasta.output.2500000'), 'rb') input = open(File.join(File.dirname($0), 'fasta.output.2500000'), 'rb')
while input.gets while input.gets
if $_ =~ />/ if $_ =~ />/
if seq.length != 0 if seq.length != 0
revcomp(seq.join) revcomp(seq.join)
seq=Array.new seq=Array.new
end end
puts $_ puts $_
else else
$_.sub(/\n/,'') $_.sub(/\n/,'')
seq.push $_ seq.push $_
end end
end end
revcomp(seq.join) revcomp(seq.join)

View File

@ -1,50 +1,50 @@
# The Computer Language Shootout # The Computer Language Shootout
# http://shootout.alioth.debian.org/ # http://shootout.alioth.debian.org/
# Contributed by Sokolov Yura # Contributed by Sokolov Yura
def eval_A(i,j) def eval_A(i,j)
return 1.0/((i+j)*(i+j+1)/2+i+1) return 1.0/((i+j)*(i+j+1)/2+i+1)
end end
def eval_A_times_u(u) def eval_A_times_u(u)
v, i = nil, nil v, i = nil, nil
(0..u.length-1).collect { |i| (0..u.length-1).collect { |i|
v = 0 v = 0
for j in 0..u.length-1 for j in 0..u.length-1
v += eval_A(i,j)*u[j] v += eval_A(i,j)*u[j]
end end
v v
} }
end end
def eval_At_times_u(u) def eval_At_times_u(u)
v, i = nil, nil v, i = nil, nil
(0..u.length-1).collect{|i| (0..u.length-1).collect{|i|
v = 0 v = 0
for j in 0..u.length-1 for j in 0..u.length-1
v += eval_A(j,i)*u[j] v += eval_A(j,i)*u[j]
end end
v v
} }
end end
def eval_AtA_times_u(u) def eval_AtA_times_u(u)
return eval_At_times_u(eval_A_times_u(u)) return eval_At_times_u(eval_A_times_u(u))
end end
n = 500 # ARGV[0].to_i n = 500 # ARGV[0].to_i
u=[1]*n u=[1]*n
for i in 1..10 for i in 1..10
v=eval_AtA_times_u(u) v=eval_AtA_times_u(u)
u=eval_AtA_times_u(v) u=eval_AtA_times_u(v)
end end
vBv=0 vBv=0
vv=0 vv=0
for i in 0..n-1 for i in 0..n-1
vBv += u[i]*v[i] vBv += u[i]*v[i]
vv += v[i]*v[i] vv += v[i]*v[i]
end end
str = "%0.9f" % (Math.sqrt(vBv/vv)), "\n" str = "%0.9f" % (Math.sqrt(vBv/vv)), "\n"
# print str # print str

View File

@ -1,6 +1,6 @@
i = 0 i = 0
while i<30_000_000 # while loop 1 while i<30_000_000 # while loop 1
i+= 1 i+= 1
@a = 1 @a = 1
@b = 2 @b = 2
end end

View File

@ -1,6 +1,6 @@
i=0 i=0
while i<6000000 # benchmark loop 2 while i<6000000 # benchmark loop 2
i+=1 i+=1
eval("1") eval("1")
end end

View File

@ -1,238 +1,238 @@
# #
# Ruby Benchmark driver # Ruby Benchmark driver
# #
require 'optparse' require 'optparse'
require 'benchmark' require 'benchmark'
require 'pp' require 'pp'
class BenchmarkDriver class BenchmarkDriver
def self.benchmark(opt) def self.benchmark(opt)
driver = self.new(opt[:execs], opt[:dir], opt) driver = self.new(opt[:execs], opt[:dir], opt)
begin begin
driver.run driver.run
ensure ensure
driver.show_results driver.show_results
end end
end end
def output *args def output *args
puts(*args) puts(*args)
@output and @output.puts(*args) @output and @output.puts(*args)
end end
def message *args def message *args
output(*args) if @verbose output(*args) if @verbose
end end
def message_print *args def message_print *args
if @verbose if @verbose
print(*args) print(*args)
STDOUT.flush STDOUT.flush
@output and @output.print(*args) @output and @output.print(*args)
end end
end end
def progress_message *args def progress_message *args
unless STDOUT.tty? unless STDOUT.tty?
STDERR.print(*args) STDERR.print(*args)
STDERR.flush STDERR.flush
end end
end end
def initialize execs, dir, opt = {} def initialize execs, dir, opt = {}
@execs = execs.map{|e| @execs = execs.map{|e|
e.strip! e.strip!
next if e.empty? next if e.empty?
if /(.+)::(.+)/ =~ e if /(.+)::(.+)/ =~ e
# ex) ruby-a::/path/to/ruby-a # ex) ruby-a::/path/to/ruby-a
v = $1.strip v = $1.strip
e = $2 e = $2
else else
v = `#{e} -v`.chomp v = `#{e} -v`.chomp
v.sub!(/ patchlevel \d+/, '') v.sub!(/ patchlevel \d+/, '')
end end
[e, v] [e, v]
}.compact }.compact
@dir = dir @dir = dir
@repeat = opt[:repeat] || 1 @repeat = opt[:repeat] || 1
@repeat = 1 if @repeat < 1 @repeat = 1 if @repeat < 1
@pattern = opt[:pattern] || nil @pattern = opt[:pattern] || nil
@verbose = opt[:quiet] ? false : (opt[:verbose] || false) @verbose = opt[:quiet] ? false : (opt[:verbose] || false)
@output = opt[:output] ? open(opt[:output], 'w') : nil @output = opt[:output] ? open(opt[:output], 'w') : nil
@loop_wl1 = @loop_wl2 = nil @loop_wl1 = @loop_wl2 = nil
@opt = opt @opt = opt
# [[name, [[r-1-1, r-1-2, ...], [r-2-1, r-2-2, ...]]], ...] # [[name, [[r-1-1, r-1-2, ...], [r-2-1, r-2-2, ...]]], ...]
@results = [] @results = []
if @verbose if @verbose
@start_time = Time.now @start_time = Time.now
message @start_time message @start_time
@execs.each_with_index{|(e, v), i| @execs.each_with_index{|(e, v), i|
message "target #{i}: #{v}" message "target #{i}: #{v}"
} }
end end
end end
def show_results def show_results
output output
if @verbose if @verbose
message '-----------------------------------------------------------' message '-----------------------------------------------------------'
message 'raw data:' message 'raw data:'
message message
message PP.pp(@results, "", 79) message PP.pp(@results, "", 79)
message message
message "Elapesed time: #{Time.now - @start_time} (sec)" message "Elapesed time: #{Time.now - @start_time} (sec)"
end end
output '-----------------------------------------------------------' output '-----------------------------------------------------------'
output 'benchmark results:' output 'benchmark results:'
if @verbose and @repeat > 1 if @verbose and @repeat > 1
output "minimum results in each #{@repeat} measurements." output "minimum results in each #{@repeat} measurements."
end end
output "name\t#{@execs.map{|(e, v)| v}.join("\t")}" output "name\t#{@execs.map{|(e, v)| v}.join("\t")}"
@results.each{|v, result| @results.each{|v, result|
rets = [] rets = []
s = nil s = nil
result.each_with_index{|e, i| result.each_with_index{|e, i|
r = e.min r = e.min
case v case v
when /^vm1_/ when /^vm1_/
if @loop_wl1 if @loop_wl1
r -= @loop_wl1[i] r -= @loop_wl1[i]
s = '*' s = '*'
end end
when /^vm2_/ when /^vm2_/
if @loop_wl2 if @loop_wl2
r -= @loop_wl2[i] r -= @loop_wl2[i]
s = '*' s = '*'
end end
end end
rets << sprintf("%.3f", r) rets << sprintf("%.3f", r)
} }
output "#{v}#{s}\t#{rets.join("\t")}" output "#{v}#{s}\t#{rets.join("\t")}"
} }
end end
def files def files
flag = {} flag = {}
vm1 = vm2 = wl1 = wl2 = false vm1 = vm2 = wl1 = wl2 = false
@files = Dir.glob(File.join(@dir, 'bm*.rb')).map{|file| @files = Dir.glob(File.join(@dir, 'bm*.rb')).map{|file|
next if @pattern && /#{@pattern}/ !~ File.basename(file) next if @pattern && /#{@pattern}/ !~ File.basename(file)
case file case file
when /bm_(vm[12])_/, /bm_loop_(whileloop2?).rb/ when /bm_(vm[12])_/, /bm_loop_(whileloop2?).rb/
flag[$1] = true flag[$1] = true
end end
file file
}.compact }.compact
if flag['vm1'] && !flag['whileloop'] if flag['vm1'] && !flag['whileloop']
@files << File.join(@dir, 'bm_loop_whileloop.rb') @files << File.join(@dir, 'bm_loop_whileloop.rb')
elsif flag['vm2'] && !flag['whileloop2'] elsif flag['vm2'] && !flag['whileloop2']
@files << File.join(@dir, 'bm_loop_whileloop2.rb') @files << File.join(@dir, 'bm_loop_whileloop2.rb')
end end
@files.sort! @files.sort!
progress_message "total: #{@files.size * @repeat} trial(s) (#{@repeat} trial(s) for #{@files.size} benchmark(s))\n" progress_message "total: #{@files.size * @repeat} trial(s) (#{@repeat} trial(s) for #{@files.size} benchmark(s))\n"
@files @files
end end
def run def run
files.each_with_index{|file, i| files.each_with_index{|file, i|
@i = i @i = i
r = measure_file(file) r = measure_file(file)
if /bm_loop_whileloop.rb/ =~ file if /bm_loop_whileloop.rb/ =~ file
@loop_wl1 = r[1].map{|e| e.min} @loop_wl1 = r[1].map{|e| e.min}
elsif /bm_loop_whileloop2.rb/ =~ file elsif /bm_loop_whileloop2.rb/ =~ file
@loop_wl2 = r[1].map{|e| e.min} @loop_wl2 = r[1].map{|e| e.min}
end end
} }
end end
def measure_file file def measure_file file
name = File.basename(file, '.rb').sub(/^bm_/, '') name = File.basename(file, '.rb').sub(/^bm_/, '')
prepare_file = File.join(File.dirname(file), "prepare_#{name}.rb") prepare_file = File.join(File.dirname(file), "prepare_#{name}.rb")
load prepare_file if FileTest.exist?(prepare_file) load prepare_file if FileTest.exist?(prepare_file)
if @verbose if @verbose
output output
output '-----------------------------------------------------------' output '-----------------------------------------------------------'
output name output name
output output
output File.read(file) output File.read(file)
output output
end end
result = [name] result = [name]
result << @execs.map{|(e, v)| result << @execs.map{|(e, v)|
(0...@repeat).map{ (0...@repeat).map{
message_print "#{v}\t" message_print "#{v}\t"
progress_message '.' progress_message '.'
m = measure(e, file) m = measure(e, file)
message "#{m}" message "#{m}"
m m
} }
} }
@results << result @results << result
result result
end end
def measure executable, file def measure executable, file
cmd = "#{executable} #{file}" cmd = "#{executable} #{file}"
m = Benchmark.measure{ m = Benchmark.measure{
`#{cmd}` `#{cmd}`
} }
if $? != 0 if $? != 0
raise "Benchmark process exited with abnormal status (#{$?})" raise "Benchmark process exited with abnormal status (#{$?})"
end end
m.real m.real
end end
end end
if __FILE__ == $0 if __FILE__ == $0
opt = { opt = {
:execs => ['ruby'], :execs => ['ruby'],
:dir => './', :dir => './',
:repeat => 1, :repeat => 1,
:output => "bmlog-#{Time.now.strftime('%Y%m%d-%H%M%S')}.#{$$}", :output => "bmlog-#{Time.now.strftime('%Y%m%d-%H%M%S')}.#{$$}",
} }
parser = OptionParser.new{|o| parser = OptionParser.new{|o|
o.on('-e', '--executables [EXECS]', o.on('-e', '--executables [EXECS]',
"Specify benchmark one or more targets. (exec1; exec2; exec3, ...)"){|e| "Specify benchmark one or more targets. (exec1; exec2; exec3, ...)"){|e|
opt[:execs] = e.split(/;/) opt[:execs] = e.split(/;/)
} }
o.on('-d', '--directory [DIRECTORY]', "Benchmark suites directory"){|d| o.on('-d', '--directory [DIRECTORY]', "Benchmark suites directory"){|d|
opt[:dir] = d opt[:dir] = d
} }
o.on('-p', '--pattern [PATTERN]', "Benchmark name pattern"){|p| o.on('-p', '--pattern [PATTERN]', "Benchmark name pattern"){|p|
opt[:pattern] = p opt[:pattern] = p
} }
o.on('-r', '--repeat-count [NUM]', "Repeat count"){|n| o.on('-r', '--repeat-count [NUM]', "Repeat count"){|n|
opt[:repeat] = n.to_i opt[:repeat] = n.to_i
} }
o.on('-o', '--output-file [FILE]', "Output file"){|o| o.on('-o', '--output-file [FILE]', "Output file"){|o|
opt[:output] = o opt[:output] = o
} }
o.on('-q', '--quiet', "Run without notify information except result table."){|q| o.on('-q', '--quiet', "Run without notify information except result table."){|q|
opt[:quiet] = q opt[:quiet] = q
} }
o.on('-v', '--verbose'){|v| o.on('-v', '--verbose'){|v|
opt[:verbose] = v opt[:verbose] = v
} }
} }
parser.parse!(ARGV) parser.parse!(ARGV)
BenchmarkDriver.benchmark(opt) BenchmarkDriver.benchmark(opt)
end end

View File

@ -1,19 +1,19 @@
# prepare 'fasta.output' # prepare 'fasta.output'
def prepare_fasta_output n def prepare_fasta_output n
filebase = File.join(File.dirname($0), 'fasta.output') filebase = File.join(File.dirname($0), 'fasta.output')
script = File.join(File.dirname($0), 'bm_so_fasta.rb') script = File.join(File.dirname($0), 'bm_so_fasta.rb')
file = "#{filebase}.#{n}" file = "#{filebase}.#{n}"
unless FileTest.exist?(file) unless FileTest.exist?(file)
STDERR.puts "preparing #{file}" STDERR.puts "preparing #{file}"
open(file, 'w'){|f| open(file, 'w'){|f|
ARGV[0] = n ARGV[0] = n
$stdout = f $stdout = f
load script load script
$stdout = STDOUT $stdout = STDOUT
} }
end end
end end

View File

@ -1,15 +1,15 @@
# prepare 'wc.input' # prepare 'wc.input'
def prepare_wc_input def prepare_wc_input
wcinput = File.join(File.dirname($0), 'wc.input') wcinput = File.join(File.dirname($0), 'wc.input')
wcbase = File.join(File.dirname($0), 'wc.input.base') wcbase = File.join(File.dirname($0), 'wc.input.base')
unless FileTest.exist?(wcinput) unless FileTest.exist?(wcinput)
data = File.read(wcbase) data = File.read(wcbase)
13.times{ 13.times{
data << data data << data
} }
open(wcinput, 'w'){|f| f.write data} open(wcinput, 'w'){|f| f.write data}
end end
end end
prepare_wc_input prepare_wc_input

View File

@ -1,2 +1,2 @@
require File.join(File.dirname(__FILE__), 'make_fasta_output') require File.join(File.dirname(__FILE__), 'make_fasta_output')
prepare_fasta_output(100_000) prepare_fasta_output(100_000)

View File

@ -1,2 +1,2 @@
require File.join(File.dirname(__FILE__), 'make_fasta_output') require File.join(File.dirname(__FILE__), 'make_fasta_output')
prepare_fasta_output(2_500_000) prepare_fasta_output(2_500_000)

106
id.h
View File

@ -1,53 +1,53 @@
/********************************************************************** /**********************************************************************
id.h - id.h -
$Author: ko1 $ $Author: ko1 $
$Date: $ $Date: $
created at: Thu Jul 12 04:38:07 2007 created at: Thu Jul 12 04:38:07 2007
Copyright (C) 2007 Koichi Sasada Copyright (C) 2007 Koichi Sasada
**********************************************************************/ **********************************************************************/
extern VALUE symIFUNC; extern VALUE symIFUNC;
extern VALUE symCFUNC; extern VALUE symCFUNC;
extern ID idPLUS; extern ID idPLUS;
extern ID idMINUS; extern ID idMINUS;
extern ID idMULT; extern ID idMULT;
extern ID idDIV; extern ID idDIV;
extern ID idMOD; extern ID idMOD;
extern ID idLT; extern ID idLT;
extern ID idLTLT; extern ID idLTLT;
extern ID idLE; extern ID idLE;
extern ID idGT; extern ID idGT;
extern ID idGE; extern ID idGE;
extern ID idEq; extern ID idEq;
extern ID idEqq; extern ID idEqq;
extern ID idBackquote; extern ID idBackquote;
extern ID idEqTilde; extern ID idEqTilde;
extern ID idThrowState; extern ID idThrowState;
extern ID idAREF; extern ID idAREF;
extern ID idASET; extern ID idASET;
extern ID idIntern; extern ID idIntern;
extern ID idMethodMissing; extern ID idMethodMissing;
extern ID idLength; extern ID idLength;
extern ID idGets; extern ID idGets;
extern ID idSucc; extern ID idSucc;
extern ID idEach; extern ID idEach;
extern ID idLambda; extern ID idLambda;
extern ID idRangeEachLT; extern ID idRangeEachLT;
extern ID idRangeEachLE; extern ID idRangeEachLE;
extern ID idArrayEach; extern ID idArrayEach;
extern ID idTimes; extern ID idTimes;
extern ID idEnd; extern ID idEnd;
extern ID idBitblt; extern ID idBitblt;
extern ID idAnswer; extern ID idAnswer;
extern ID idSend; extern ID idSend;
extern ID idSendBang; extern ID idSendBang;
extern ID id__send; extern ID id__send;
extern ID id__send_bang; extern ID id__send_bang;
extern ID id__send__; extern ID id__send__;

View File

@ -1,47 +1,47 @@
require 'test/unit' require 'test/unit'
class TestEnumerator < Test::Unit::TestCase class TestEnumerator < Test::Unit::TestCase
def enum_test obj def enum_test obj
i = 0 i = 0
obj.map{|e| obj.map{|e|
e e
}.sort }.sort
end end
def test_iterators def test_iterators
assert_equal [0, 1, 2], enum_test(3.times) assert_equal [0, 1, 2], enum_test(3.times)
assert_equal [:x, :y, :z], enum_test([:x, :y, :z].each) assert_equal [:x, :y, :z], enum_test([:x, :y, :z].each)
assert_equal [[:x, 1], [:y, 2]], enum_test({:x=>1, :y=>2}) assert_equal [[:x, 1], [:y, 2]], enum_test({:x=>1, :y=>2})
end end
## Enumerator as Iterator ## Enumerator as Iterator
def test_next def test_next
e = 3.times e = 3.times
3.times{|i| 3.times{|i|
assert_equal i, e.next assert_equal i, e.next
} }
assert_raise(StopIteration){e.next} assert_raise(StopIteration){e.next}
end end
def test_loop def test_loop
e = 3.times e = 3.times
i = 0 i = 0
loop{ loop{
assert_equal(i, e.next) assert_equal(i, e.next)
i += 1 i += 1
} }
end end
def test_nested_itaration def test_nested_itaration
def (o = Object.new).each def (o = Object.new).each
yield :ok1 yield :ok1
yield [:ok2, :x].each.next yield [:ok2, :x].each.next
end end
e = o.to_enum e = o.to_enum
assert_equal :ok1, e.next assert_equal :ok1, e.next
assert_equal :ok2, e.next assert_equal :ok2, e.next
assert_raise(StopIteration){e.next} assert_raise(StopIteration){e.next}
end end
end end