[#42503] floatの値がずれる — Sato Hiroshi <hirocy.f01@...>
hirocyと申します.
33 messages
2006/07/04
[#42504] Re: floatの値がずれる
— rubikitch <rubikitch@...>
2006/07/04
From: Sato Hiroshi <hirocy.f01@plala.to>
[#42505] Re: floatの値がずれる
— Sato Hiroshi <hirocy.f01@...>
2006/07/04
hirocyです.るびきちさん,ありがとうございます.
[#42506] Re: floatの値がずれる
— Sato Hiroshi <hirocy.f01@...>
2006/07/04
続けてですみません.hirocyです.
[#42509] Re: float の値がずれる
— Shin-ichiro HARA <sinara@...>
2006/07/04
原です。
[#42536] Array#default — take_tk <ggb03124@...>
たけ(tk)です
16 messages
2006/07/06
[#42544] Re: Array#default
— Yukihiro Matsumoto <matz@...>
2006/07/06
まつもと ゆきひろです
[#42569] JVN、スクリプト言語「Ruby」の2件の脆弱性情報を公表 — Takahiro Kambe <taca@...>
こんばんは。
19 messages
2006/07/11
[#42570] Re: JVN、スクリプト言語「Ruby」の2件の脆弱性情報を公表
— Yukihiro Matsumoto <matz@...>
2006/07/11
まつもと ゆきひろです
[#42572] Re: JVN、スクリプト言語「Ruby」の2件の脆弱性情報を公表
— Takahiro Kambe <taca@...>
2006/07/11
In message <1152619872.835566.21152.nullmailer@x31.priv.netlab.jp>
[#42575] Re: JVN、スクリプト言語「Ruby」の2件の脆弱性情報を公表
— Yukihiro Matsumoto <matz@...>
2006/07/11
まつもと ゆきひろです
[#42578] Re: JVN、スクリプト言語「Ruby」の2件の脆弱性情報を公表
— Kazuhiko <kazuhiko@...>
2006/07/12
かずひこです。
[#42579] Re: JVN、スクリプト言語「Ruby」の2件の脆弱性情報を公表
— Tanaka Akira <akr@...>
2006/07/12
In article <87irm334qa.wl%kazuhiko@fdiary.net>,
[#42592] Re: JVN、スクリプト言語「Ruby」の2件の脆弱性情報を公表
— Takahiro Kambe <taca@...>
2006/07/19
こんばんは。
[#42599] includeされたmoduleからの定数参照 — 二宗 崇 <nisyu@...>
にしゅうです。
5 messages
2006/07/26
[#42608] Debug Assertion Failed! on stable-snapshot — Shusaku <tsyk@...>
Shusakuです。
5 messages
2006/07/28
[ruby-list:42515] ちょっとしたテスト
From:
rubikitch <rubikitch@...>
Date:
2006-07-05 02:28:53 UTC
List:
ruby-list #42515
るびきちです。
1つのファイルですむレベルの短いRubyスクリプトをTDDするとき、
みなさんどうしていますか?
10分で書き上げるスクリプトのためにわざわざ別のファイルにわけてテストを
かくのは面倒ですね。かといって if __FILE__ == $0 中にテストを書こうにも、
実装メソッドとテストメソッドの距離がはなれてしまうので嫌です。それに
ちょっとしたスクリプトのテストに「おまじない」を書くのも嫌です。なので
rbtestというスクリプトを作成してみました。
rbtest script-file-name
で埋め込まれたテストを実行できます。
rbtestはRubyスクリプトを読み、
=begin test_foo
などのbeginブロックを発見したとき、
test_fooをテストメソッドにした一時テストスクリプトを作成、実行します。
実行後必ず一時テストスクリプトは消去されます。
さらにemacsのnext-errorで捕獲できるよう工夫してあります。
* 一時テストスクリプトのファイル名を実行スクリプトのファイル名に書き換える。
* 行番号を揃えておく。
#### 実行スクリプト
#!/usr/bin/env ruby
def f(x)
x+1
end
=begin test_f
# wrong test
assert_equal 120, f(11)
=end
=begin
This block is ignored!
=end
def g(x)
x**2
end
=begin test_g
assert_equal 4, g(2)
assert_equal 9, g(3)
=end
if __FILE__==$0
puts f(3)
end
#### rbtestにより生成された一時テストスクリプト
#!/usr/bin/env ruby
require 'test/unit';load 'sample1.rb';class TestByRbtest < Test::Unit::TestCase;def test_f
# wrong test
assert_equal 120, f(11)
end
def test_g
assert_equal 4, g(2)
assert_equal 9, g(3)
end
end
#### 実行結果
Loaded suite ./sample1.rb__test__
Started
F.
Finished in 0.012425 seconds.
1) Failure:
test_f(TestByRbtest) [./sample1.rb:7]:
<120> expected but was
<12>.
2 tests, 3 assertions, 1 failures, 0 errors
#!/usr/bin/env ruby
# -*- ruby -*-
# Usage:
# rbtest script [Test::Unit options]
# rbtest script output # output temporary test script
# preamble
def first_test(script_filename)
"require 'test/unit';" +
"load '#{script_filename}';" +
"class TestByRbtest < Test::Unit::TestCase;"
end
def script_to_test_script(ruby_source, script_filename)
_SKIP = "\n"
state = :start
ruby_source.map do |line|
case line
when /^#!/
line
when /^=begin (test\S*)$/ # test method block
preamble = (state == :start) ? first_test(script_filename) : ""
state = :test_method
preamble + "def #{$1}\n"
when /^=begin/ # other block
state = :begin
_SKIP
when /^=end$/
if state == :test_method
state = :script
"end\n" # /def test_xxx
else
_SKIP
end
else
if state == :test_method
line
else
_SKIP
end
end
end.join + "end\n" # /class TestByRbtest
end
def execute_test_script(test_script_filename, argv)
output = `#{test_script_filename} #{argv[1..-1].join ' '} `
print output.gsub(Regexp.new(Regexp.quote(test_script_filename)), argv.script_filename)
end
def generate_test_script(script_filename, test_script_filename)
open(test_script_filename, "w") do |f|
f.write(script_to_test_script(File.read(script_filename), script_filename))
f.chmod 0755 # executable
end
end
################
def do_test(argv)
begin
test_script_filename = "#{argv.script_filename}__test__.rb"
generate_test_script(argv.script_filename, test_script_filename)
execute_test_script(test_script_filename, argv)
ensure
File.unlink test_script_filename
end
end
def output_test_script(argv)
print(script_to_test_script(File.read(argv.script_filename), argv.script_filename))
end
class << ARGV
alias :script_filename :first
end
if __FILE__ ==$0
if ARGV[1] == "output"
action = :output_test_script
else
action = :do_test
end
__send__(action, ARGV)
end
--
rubikitch
http://www.rubyist.net/~rubikitch/