* 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:
parent
501407d3af
commit
75feee0968
@ -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>
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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)}"
|
||||||
|
@ -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)}"
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
@ -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) }
|
||||||
|
|
||||||
|
@ -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
@ -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)
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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)
|
||||||
|
@ -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
106
id.h
@ -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__;
|
||||||
|
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user