diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-05-26 08:22:33 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-05-26 08:22:33 +0000 |
commit | b4fd4d6018a8ad72f69912606c60ec42ee3b62b8 (patch) | |
tree | 7d8e6794c8b14219eb3a1902d6538ea27a239065 /sample/test.rb | |
parent | ea325deab0729bf17d3f366aa6369d93a4db54fd (diff) |
* eval.c (Init_Proc): Block/Proc separation. [huge change]
* eval.c (block_arity): returns exact arity number for Procs out
of methods. also gives 1 for {|a|..}.
* string.c (rb_str_match): revert use of String#index for
invocation like string =~ string.
* eval.c (rb_Array): move Object#to_a exclusion hack from
splat_value(). need to be in eval.c for a while.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3867 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'sample/test.rb')
-rw-r--r-- | sample/test.rb | 102 |
1 files changed, 96 insertions, 6 deletions
diff --git a/sample/test.rb b/sample/test.rb index 7f50141d93..c43b3c040b 100644 --- a/sample/test.rb +++ b/sample/test.rb @@ -11,13 +11,13 @@ def test_check(what) $testnum = 0 end -def test_ok(cond) +def test_ok(cond,n=1) $testnum+=1 $ntest+=1 if cond printf "ok %d\n", $testnum else - where = caller[0] + where = caller(n)[0] printf "not ok %s %d -- %s\n", $what, $testnum, where $failed+=1 end @@ -239,12 +239,9 @@ def r; return *[*[1,2]]; end; a,b,*c = r(); test_ok([a,b,c] == [1,2,[]]) f = lambda {|r,| test_ok([] == r)} f.call([], *[]) -f.yield([], *[]) f = lambda {|r,*l| test_ok([] == r); test_ok([1] == l)} f.call([], *[1]) -f.yield([], *[1]) - f = lambda{|x| x} test_ok(f.call(42) == 42) @@ -980,6 +977,96 @@ end test_ok(C.new.collect{|n| n} == [1,2,3]) +test_ok(Proc < Block) +test_ok(Proc == lambda{}.class) +test_ok(Proc == proc{}.class) +test_ok(Proc == Proc.new{}.class) +lambda{|a|test_ok(a==1)}.call(1) +def block_test(klass, &block) + test_ok(klass === block) +end + +block_test(NilClass) +block_test(Block){} + +def argument_test(state, proc, *args) + x = state + begin + proc.call(*args) + rescue ArgumentError + x = !x + end + test_ok(x,2) +end + +argument_test(true, lambda{||}) +argument_test(false, lambda{||}, 1) +argument_test(true, lambda{|a,|}, 1) +argument_test(false, lambda{|a,|}) +argument_test(false, lambda{|a,|}, 1,2) + +def get_block(&block) + block +end + +test_ok(Block == get_block{}.class) +argument_test(true, get_block{||}) +argument_test(true, get_block{||}, 1) +argument_test(true, get_block{|a,|}, 1) +argument_test(true, get_block{|a,|}) +argument_test(true, get_block{|a,|}, 1,2) + +argument_test(true, get_block(&lambda{||})) +argument_test(false, get_block(&lambda{||}),1) +argument_test(true, get_block(&lambda{|a,|}),1) +argument_test(false, get_block(&lambda{|a,|}),1,2) + +block = get_block{11} +proc = lambda{44} +test_ok(block.class == Block) +test_ok(proc.class == Proc) +test_ok(block.to_block.class == Block) +test_ok(proc.to_block.class == Proc) +test_ok(block.clone.call == 11) +test_ok(proc.clone.call == 44) + +test_ok(get_block(&block).class == Block) +test_ok(get_block(&proc).class == Proc) + +test_ok(Block.new{|a,| a}.call(1,2,3) == 1) +argument_test(false, Proc.new{|a,| p a}, 1,2) + +def ljump_test(state, proc, *args) + x = state + begin + proc.call(*args) + rescue LocalJumpError + x = !x + end + test_ok(x,2) +end + +ljump_test(false, get_block{break}) +ljump_test(true, lambda{break}) + +test_ok(block.arity == -1) +test_ok(proc.arity == -1) +test_ok(lambda{||}.arity == 0) +test_ok(lambda{|a|}.arity == 1) +test_ok(lambda{|a,|}.arity == 1) +test_ok(lambda{|a,b|}.arity == 2) + +def marity_test(m) + method = method(m) + test_ok(method.arity == method.to_block.arity) +end +marity_test(:test_ok) +marity_test(:marity_test) +marity_test(:p) + +lambda(&method(:test_ok)).call(true) +lambda(&get_block{|a,n| test_ok(a,n)}).call(true, 2) + test_check "float" test_ok(2.6.floor == 2) test_ok((-2.6).floor == -3) @@ -1111,7 +1198,7 @@ shift_test(-0xfffffffffffffffff) test_check "string & char" test_ok("abcd" == "abcd") -test_ok("abcd" =~ "abcd") +test_ok("abcd" =~ /abcd/) test_ok("abcd" === "abcd") # compile time string concatenation test_ok("ab" "cd" == "abcd") @@ -1606,6 +1693,9 @@ test_ok(ary.length == ary2.length) test_ok(ary.join(':') == ary2.join(':')) test_ok($x =~ /def/) +$x = [-1073741825] +test_ok($x.pack("q").unpack("q") == $x) + test_check "math" test_ok(Math.sqrt(4) == 2) |