From 203e604f46e2adc95676014a8a437201f8a65bb3 Mon Sep 17 00:00:00 2001 From: hsbt Date: Sat, 16 Jan 2016 01:37:47 +0000 Subject: * common.mk: test-sample was changed to test-basic. [Feature #11982][ruby-core:72823] * basictest/runner.rb: ditto. rename from tool/rubytest.rb. * basictest/test.rb: ditto. rename from sample/test.rb. * defs/gmake.mk: picked from r53540 * sample/test.rb: backword compatibility for chkbuild. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53551 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- sample/test.rb | 2371 +------------------------------------------------------- 1 file changed, 2 insertions(+), 2369 deletions(-) (limited to 'sample') diff --git a/sample/test.rb b/sample/test.rb index 14f4d4a0f1..beb310dfaf 100755 --- a/sample/test.rb +++ b/sample/test.rb @@ -1,2369 +1,2 @@ -#! /usr/bin/env ruby -# -*- coding: us-ascii -*- - -$testnum=0 -$ntest=0 -$failed = 0 -class Progress - def initialize - @color = nil - @tty = nil - @quiet = nil - @verbose = nil - ARGV.each do |arg| - case arg - when /\A--color(?:=(?:always|(auto)|(never)|(.*)))?\z/ - warn "unknown --color argument: #$3" if $3 - @color = $1 ? nil : !$2 - when /\A--tty(=(?:yes|(no)|(.*)))?\z/ - warn "unknown --tty argument: #$3" if $3 - @tty = !$1 || !$2 - true - when /\A-(q|-quiet)\z/ - @quiet = true - when /\A-(v|-verbose)\z/ - @verbose = true - end - end - @tty = STDERR.tty? && !STDOUT.tty? && /dumb/ !~ ENV["TERM"] if @tty.nil? - @eol = @tty && !@verbose ? "\r\e[K\r" : "\n" - case @color - when nil - @color = @tty - end - if @color - # dircolors-like style - colors = (colors = ENV['TEST_COLORS']) ? Hash[colors.scan(/(\w+)=([^:\n]*)/)] : {} - begin - File.read(File.join(__dir__, "../test/colors")).scan(/(\w+)=([^:\n]*)/) do |n, c| - colors[n] ||= c - end - rescue - end - @passed = "\e[;#{colors["pass"] || "32"}m" - @failed = "\e[;#{colors["fail"] || "31"}m" - @reset = "\e[m" - else - @passed = @failed = @reset = "" - end - extend(Rotator) if @tty - end - - def passed_string - "." - end - def failed_string - "#{@failed}F#{@reset}" - end - def init_string - end - def finish_string - if @quiet - @eol - else - "#{@passed}#{@ok ? 'OK' : ''} #{$testnum}#{@reset}#{@eol}" - end - end - def pass - STDERR.print passed_string - end - def fail - @ok = false - STDERR.print failed_string - end - def init - @ok = true - STDERR.print init_string - end - def finish - STDERR.print finish_string - end - - module Rotator - ROTATOR = %w[- \\ | /] - BS = "\b" * ROTATOR[0].size - def passed_string - "#{BS}#{ROTATOR[(@count += 1) % ROTATOR.size]}" - end - def failed_string - "#{BS}#{super}#{ROTATOR[@count % ROTATOR.size]}" - end - def init_string - @count = 0 - " " - end - def finish_string - s = "#{BS}#{' ' * BS.size}#{BS}#{super}" - s.gsub!(/\n/, "\r\e[2K\r") if @quiet - s - end - end -end -PROGRESS = Progress.new - -def test_check(what) - unless $ntest.zero? - PROGRESS.finish - end - STDERR.print "sample/test.rb:#{what} " - PROGRESS.init - $what = what - $testnum = 0 -end - -def test_ok(cond,n=1) - $testnum+=1 - $ntest+=1 - where = (st = caller(n)) ? st[0] : "caller error! (n=#{n}, trace=#{caller(0).join(', ')}" - if cond - PROGRESS.pass - printf "ok %d (%s)\n", $testnum, where - else - PROGRESS.fail - printf "not ok %s %d -- %s\n", $what, $testnum, where - $failed+=1 - end - STDOUT.flush - STDERR.flush -end - -# make sure conditional operators work - -test_check "assignment" - -a=[]; a[0] ||= "bar"; -test_ok(a[0] == "bar") -h={}; h["foo"] ||= "bar"; -test_ok(h["foo"] == "bar") - -aa = 5 -aa ||= 25 -test_ok(aa == 5) -bb ||= 25 -test_ok(bb == 25) -cc &&=33 -test_ok(cc == nil) -cc = 5 -cc &&=44 -test_ok(cc == 44) - -a = nil; test_ok(a == nil) -a = 1; test_ok(a == 1) -a = []; test_ok(a == []) -a = [1]; test_ok(a == [1]) -a = [nil]; test_ok(a == [nil]) -a = [[]]; test_ok(a == [[]]) -a = [1,2]; test_ok(a == [1,2]) -a = [*[]]; test_ok(a == []) -a = [*[1]]; test_ok(a == [1]) -a = [*[1,2]]; test_ok(a == [1,2]) - -a = *[]; test_ok(a == []) -a = *[1]; test_ok(a == [1]) -a = *[nil]; test_ok(a == [nil]) -a = *[[]]; test_ok(a == [[]]) -a = *[1,2]; test_ok(a == [1,2]) -a = *[*[]]; test_ok(a == []) -a = *[*[1]]; test_ok(a == [1]) -a = *[*[1,2]]; test_ok(a == [1,2]) - -a, = nil; test_ok(a == nil) -a, = 1; test_ok(a == 1) -a, = []; test_ok(a == nil) -a, = [1]; test_ok(a == 1) -a, = [nil]; test_ok(a == nil) -a, = [[]]; test_ok(a == []) -a, = 1,2; test_ok(a == 1) -a, = [1,2]; test_ok(a == 1) -a, = [*[]]; test_ok(a == nil) -a, = [*[1]]; test_ok(a == 1) -a, = *[1,2]; test_ok(a == 1) -a, = [*[1,2]]; test_ok(a == 1) - -a, = *[]; test_ok(a == nil) -a, = *[1]; test_ok(a == 1) -a, = *[nil]; test_ok(a == nil) -a, = *[[]]; test_ok(a == []) -a, = *[1,2]; test_ok(a == 1) -a, = *[*[]]; test_ok(a == nil) -a, = *[*[1]]; test_ok(a == 1) -a, = *[*[1,2]]; test_ok(a == 1) - -*a = nil; test_ok(a == [nil]) -*a = 1; test_ok(a == [1]) -*a = []; test_ok(a == []) -*a = [1]; test_ok(a == [1]) -*a = [nil]; test_ok(a == [nil]) -*a = [[]]; test_ok(a == [[]]) -*a = [1,2]; test_ok(a == [1,2]) -*a = [*[]]; test_ok(a == []) -*a = [*[1]]; test_ok(a == [1]) -*a = [*[1,2]]; test_ok(a == [1,2]) - -*a = *[]; test_ok(a == []) -*a = *[1]; test_ok(a == [1]) -*a = *[nil]; test_ok(a == [nil]) -*a = *[[]]; test_ok(a == [[]]) -*a = *[1,2]; test_ok(a == [1,2]) -*a = *[*[]]; test_ok(a == []) -*a = *[*[1]]; test_ok(a == [1]) -*a = *[*[1,2]]; test_ok(a == [1,2]) - -a,b,*c = nil; test_ok([a,b,c] == [nil,nil,[]]) -a,b,*c = 1; test_ok([a,b,c] == [1,nil,[]]) -a,b,*c = []; test_ok([a,b,c] == [nil,nil,[]]) -a,b,*c = [1]; test_ok([a,b,c] == [1,nil,[]]) -a,b,*c = [nil]; test_ok([a,b,c] == [nil,nil,[]]) -a,b,*c = [[]]; test_ok([a,b,c] == [[],nil,[]]) -a,b,*c = [1,2]; test_ok([a,b,c] == [1,2,[]]) -a,b,*c = [*[]]; test_ok([a,b,c] == [nil,nil,[]]) -a,b,*c = [*[1]]; test_ok([a,b,c] == [1,nil,[]]) -a,b,*c = [*[1,2]]; test_ok([a,b,c] == [1,2,[]]) - -a,b,*c = *[]; test_ok([a,b,c] == [nil,nil,[]]) -a,b,*c = *[1]; test_ok([a,b,c] == [1,nil,[]]) -a,b,*c = *[nil]; test_ok([a,b,c] == [nil,nil,[]]) -a,b,*c = *[[]]; test_ok([a,b,c] == [[],nil,[]]) -a,b,*c = *[1,2]; test_ok([a,b,c] == [1,2,[]]) -a,b,*c = *[*[]]; test_ok([a,b,c] == [nil,nil,[]]) -a,b,*c = *[*[1]]; test_ok([a,b,c] == [1,nil,[]]) -a,b,*c = *[*[1,2]]; test_ok([a,b,c] == [1,2,[]]) - -def f; yield nil; end; f {|a| test_ok(a == nil)} -def f; yield 1; end; f {|a| test_ok(a == 1)} -def f; yield []; end; f {|a| test_ok(a == [])} -def f; yield [1]; end; f {|a| test_ok(a == [1])} -def f; yield [nil]; end; f {|a| test_ok(a == [nil])} -def f; yield [[]]; end; f {|a| test_ok(a == [[]])} -def f; yield [*[]]; end; f {|a| test_ok(a == [])} -def f; yield [*[1]]; end; f {|a| test_ok(a == [1])} -def f; yield [*[1,2]]; end; f {|a| test_ok(a == [1,2])} -def f; yield *[]; end; f {|a| test_ok(a == nil)} -def f; yield *[1]; end; f {|a| test_ok(a == 1)} -def f; yield *[nil]; end; f {|a| test_ok(a == nil)} -def f; yield *[[]]; end; f {|a| test_ok(a == [])} -def f; yield *[*[]]; end; f {|a| test_ok(a == nil)} -def f; yield *[*[1]]; end; f {|a| test_ok(a == 1)} -def f; yield *[*[1,2]]; end; f {|a| test_ok(a == 1)} - -def f; yield; end; f {|a,| test_ok(a == nil)} -def f; yield nil; end; f {|a,| test_ok(a == nil)} -def f; yield 1; end; f {|a,| test_ok(a == 1)} -def f; yield []; end; f {|a,| test_ok(a == nil)} -def f; yield [1]; end; f {|a,| test_ok(a == 1)} -def f; yield [nil]; end; f {|a,| test_ok(a == nil)} -def f; yield [[]]; end; f {|a,| test_ok(a == [])} -def f; yield [*[]]; end; f {|a,| test_ok(a == nil)} -def f; yield [*[1]]; end; f {|a,| test_ok(a == 1)} -def f; yield [*[1,2]]; end; f {|a,| test_ok(a == 1)} - -def f; yield *[]; end; f {|a,| test_ok(a == nil)} -def f; yield *[1]; end; f {|a,| test_ok(a == 1)} -def f; yield *[nil]; end; f {|a,| test_ok(a == nil)} -def f; yield *[[]]; end; f {|a,| test_ok(a == nil)} -def f; yield *[*[]]; end; f {|a,| test_ok(a == nil)} -def f; yield *[*[1]]; end; f {|a,| test_ok(a == 1)} -def f; yield *[*[1,2]]; end; f {|a,| test_ok(a == 1)} - -def f; yield; end; f {|*a| test_ok(a == [])} -def f; yield nil; end; f {|*a| test_ok(a == [nil])} -def f; yield 1; end; f {|*a| test_ok(a == [1])} -def f; yield []; end; f {|*a| test_ok(a == [[]])} -def f; yield [1]; end; f {|*a| test_ok(a == [[1]])} -def f; yield [nil]; end; f {|*a| test_ok(a == [[nil]])} -def f; yield [[]]; end; f {|*a| test_ok(a == [[[]]])} -def f; yield [1,2]; end; f {|*a| test_ok(a == [[1,2]])} -def f; yield [*[]]; end; f {|*a| test_ok(a == [[]])} -def f; yield [*[1]]; end; f {|*a| test_ok(a == [[1]])} -def f; yield [*[1,2]]; end; f {|*a| test_ok(a == [[1,2]])} - -def f; yield *[]; end; f {|*a| test_ok(a == [])} -def f; yield *[1]; end; f {|*a| test_ok(a == [1])} -def f; yield *[nil]; end; f {|*a| test_ok(a == [nil])} -def f; yield *[[]]; end; f {|*a| test_ok(a == [[]])} -def f; yield *[*[]]; end; f {|*a| test_ok(a == [])} -def f; yield *[*[1]]; end; f {|*a| test_ok(a == [1])} -def f; yield *[*[1,2]]; end; f {|*a| test_ok(a == [1,2])} - -def f; yield; end; f {|a,b,*c| test_ok([a,b,c] == [nil,nil,[]])} -def f; yield nil; end; f {|a,b,*c| test_ok([a,b,c] == [nil,nil,[]])} -def f; yield 1; end; f {|a,b,*c| test_ok([a,b,c] == [1,nil,[]])} -def f; yield []; end; f {|a,b,*c| test_ok([a,b,c] == [nil,nil,[]])} -def f; yield [1]; end; f {|a,b,*c| test_ok([a,b,c] == [1,nil,[]])} -def f; yield [nil]; end; f {|a,b,*c| test_ok([a,b,c] == [nil,nil,[]])} -def f; yield [[]]; end; f {|a,b,*c| test_ok([a,b,c] == [[],nil,[]])} -def f; yield [*[]]; end; f {|a,b,*c| test_ok([a,b,c] == [nil,nil,[]])} -def f; yield [*[1]]; end; f {|a,b,*c| test_ok([a,b,c] == [1,nil,[]])} -def f; yield [*[1,2]]; end; f {|a,b,*c| test_ok([a,b,c] == [1,2,[]])} - -def f; yield *[]; end; f {|a,b,*c| test_ok([a,b,c] == [nil,nil,[]])} -def f; yield *[1]; end; f {|a,b,*c| test_ok([a,b,c] == [1,nil,[]])} -def f; yield *[nil]; end; f {|a,b,*c| test_ok([a,b,c] == [nil,nil,[]])} -def f; yield *[[]]; end; f {|a,b,*c| test_ok([a,b,c] == [nil,nil,[]])} -def f; yield *[*[]]; end; f {|a,b,*c| test_ok([a,b,c] == [nil,nil,[]])} -def f; yield *[*[1]]; end; f {|a,b,*c| test_ok([a,b,c] == [1,nil,[]])} -def f; yield *[*[1,2]]; end; f {|a,b,*c| test_ok([a,b,c] == [1,2,[]])} - -def r; return; end; a = r(); test_ok(a == nil) -def r; return nil; end; a = r(); test_ok(a == nil) -def r; return 1; end; a = r(); test_ok(a == 1) -def r; return []; end; a = r(); test_ok(a == []) -def r; return [1]; end; a = r(); test_ok(a == [1]) -def r; return [nil]; end; a = r(); test_ok(a == [nil]) -def r; return [[]]; end; a = r(); test_ok(a == [[]]) -def r; return [*[]]; end; a = r(); test_ok(a == []) -def r; return [*[1]]; end; a = r(); test_ok(a == [1]) -def r; return [*[1,2]]; end; a = r(); test_ok(a == [1,2]) - -def r; return *[]; end; a = r(); test_ok(a == []) -def r; return *[1]; end; a = r(); test_ok(a == [1]) -def r; return *[nil]; end; a = r(); test_ok(a == [nil]) -def r; return *[[]]; end; a = r(); test_ok(a == [[]]) -def r; return *[*[]]; end; a = r(); test_ok(a == []) -def r; return *[*[1]]; end; a = r(); test_ok(a == [1]) -def r; return *[*[1,2]]; end; a = r(); test_ok(a == [1,2]) - -def r; return *[[]]; end; a = *r(); test_ok(a == [[]]) -def r; return *[*[1,2]]; end; a = *r(); test_ok(a == [1,2]) - -def r; return; end; *a = r(); test_ok(a == [nil]) -def r; return nil; end; *a = r(); test_ok(a == [nil]) -def r; return 1; end; *a = r(); test_ok(a == [1]) -def r; return []; end; *a = r(); test_ok(a == []) -def r; return [1]; end; *a = r(); test_ok(a == [1]) -def r; return [nil]; end; *a = r(); test_ok(a == [nil]) -def r; return [[]]; end; *a = r(); test_ok(a == [[]]) -def r; return [1,2]; end; *a = r(); test_ok(a == [1,2]) -def r; return [*[]]; end; *a = r(); test_ok(a == []) -def r; return [*[1]]; end; *a = r(); test_ok(a == [1]) -def r; return [*[1,2]]; end; *a = r(); test_ok(a == [1,2]) - -def r; return *[]; end; *a = r(); test_ok(a == []) -def r; return *[1]; end; *a = r(); test_ok(a == [1]) -def r; return *[nil]; end; *a = r(); test_ok(a == [nil]) -def r; return *[[]]; end; *a = r(); test_ok(a == [[]]) -def r; return *[1,2]; end; *a = r(); test_ok(a == [1,2]) -def r; return *[*[]]; end; *a = r(); test_ok(a == []) -def r; return *[*[1]]; end; *a = r(); test_ok(a == [1]) -def r; return *[*[1,2]]; end; *a = r(); test_ok(a == [1,2]) - -def r; return *[[]]; end; *a = *r(); test_ok(a == [[]]) -def r; return *[1,2]; end; *a = *r(); test_ok(a == [1,2]) -def r; return *[*[1,2]]; end; *a = *r(); test_ok(a == [1,2]) - -def r; return; end; a,b,*c = r(); test_ok([a,b,c] == [nil,nil,[]]) -def r; return nil; end; a,b,*c = r(); test_ok([a,b,c] == [nil,nil,[]]) -def r; return 1; end; a,b,*c = r(); test_ok([a,b,c] == [1,nil,[]]) -def r; return []; end; a,b,*c = r(); test_ok([a,b,c] == [nil,nil,[]]) -def r; return [1]; end; a,b,*c = r(); test_ok([a,b,c] == [1,nil,[]]) -def r; return [nil]; end; a,b,*c = r(); test_ok([a,b,c] == [nil,nil,[]]) -def r; return [[]]; end; a,b,*c = r(); test_ok([a,b,c] == [[],nil,[]]) -def r; return [1,2]; end; a,b,*c = r(); test_ok([a,b,c] == [1,2,[]]) -def r; return [*[]]; end; a,b,*c = r(); test_ok([a,b,c] == [nil,nil,[]]) -def r; return [*[1]]; end; a,b,*c = r(); test_ok([a,b,c] == [1,nil,[]]) -def r; return [*[1,2]]; end; a,b,*c = r(); test_ok([a,b,c] == [1,2,[]]) - -def r; return *[]; end; a,b,*c = r(); test_ok([a,b,c] == [nil,nil,[]]) -def r; return *[1]; end; a,b,*c = r(); test_ok([a,b,c] == [1,nil,[]]) -def r; return *[nil]; end; a,b,*c = r(); test_ok([a,b,c] == [nil,nil,[]]) -def r; return *[[]]; end; a,b,*c = r(); test_ok([a,b,c] == [[],nil,[]]) -def r; return *[1,2]; end; a,b,*c = r(); test_ok([a,b,c] == [1,2,[]]) -def r; return *[*[]]; end; a,b,*c = r(); test_ok([a,b,c] == [nil,nil,[]]) -def r; return *[*[1]]; end; a,b,*c = r(); test_ok([a,b,c] == [1,nil,[]]) -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 = lambda {|r,*l| test_ok([] == r); test_ok([1] == l)} -f.call([], *[1]) - -f = lambda{|x| x} -test_ok(f.call(42) == 42) -test_ok(f.call([42]) == [42]) -test_ok(f.call([[42]]) == [[42]]) -test_ok(f.call([42,55]) == [42,55]) - -f = lambda{|x,| x} -test_ok(f.call(42) == 42) -test_ok(f.call([42]) == [42]) -test_ok(f.call([[42]]) == [[42]]) -test_ok(f.call([42,55]) == [42,55]) - -f = lambda{|*x| x} -test_ok(f.call(42) == [42]) -test_ok(f.call([42]) == [[42]]) -test_ok(f.call([[42]]) == [[[42]]]) -test_ok(f.call([42,55]) == [[42,55]]) -test_ok(f.call(42,55) == [42,55]) - -f = lambda { |a, b=42, *c| [a,b,c] } -test_ok(f.call(1 ) == [1,42,[ ]] ) -test_ok(f.call(1,43 ) == [1,43,[ ]] ) -test_ok(f.call(1,43,44) == [1,43,[44]] ) - -f = lambda { |a, b=(a|16), *c, &block| [a,b,c,block&&block[]] } -test_ok(f.call(8 ) == [8,24,[ ],nil] ) -test_ok(f.call(8,43 ) == [8,43,[ ],nil] ) -test_ok(f.call(8,43,44) == [8,43,[44],nil] ) -test_ok(f.call(8 ){45} == [8,24,[ ],45 ] ) -test_ok(f.call(8,43 ){45} == [8,43,[ ],45 ] ) -test_ok(f.call(8,43,44){45} == [8,43,[44],45 ] ) - -f = lambda { |a, b=42, *c, d| [a,b,c,d] } -test_ok(f.call(1 ,99) == [1,42,[ ],99] ) -test_ok(f.call(1,43 ,99) == [1,43,[ ],99] ) -test_ok(f.call(1,43,44,99) == [1,43,[44],99] ) - -f = lambda { |a, b=(a|16), &block| [a,b,block&&block[]] } -test_ok(f.call(8 ) == [8,24,nil] ) -test_ok(f.call(8,43) == [8,43,nil] ) -test_ok(f.call(8,43) == [8,43,nil] ) -test_ok(f.call(8 ){45} == [8,24,45 ] ) -test_ok(f.call(8,43){45} == [8,43,45 ] ) -test_ok(f.call(8,43){45} == [8,43,45 ] ) - -f = lambda { |a, b=42, d| [a,b,d] } -test_ok(f.call(1 ,99) == [1,42,99] ) -test_ok(f.call(1,43,99) == [1,43,99] ) -test_ok(f.call(1,43,99) == [1,43,99] ) - -f = lambda { |b=42, *c, &block| [b,c,block&&block[]] } -test_ok(f.call( ) == [42,[ ],nil] ) -test_ok(f.call(43 ) == [43,[ ],nil] ) -test_ok(f.call(43,44) == [43,[44],nil] ) -test_ok(f.call( ){45} == [42,[ ],45 ] ) -test_ok(f.call(43 ){45} == [43,[ ],45 ] ) -test_ok(f.call(43,44){45} == [43,[44],45 ] ) - -f = lambda { |b=42, *c, d| [b,c,d] } -test_ok(f.call( 99) == [42,[ ],99] ) -test_ok(f.call(43 ,99) == [43,[ ],99] ) -test_ok(f.call(43,44,99) == [43,[44],99] ) - -f = lambda { |b=42, &block| [b,block&&block[]] } -test_ok(f.call( ) == [42,nil] ) -test_ok(f.call(43) == [43,nil] ) -test_ok(f.call(43) == [43,nil] ) -test_ok(f.call( ){45} == [42,45 ] ) -test_ok(f.call(43){45} == [43,45 ] ) -test_ok(f.call(43){45} == [43,45 ] ) - -f = lambda { |b=42, d| [b,d] } -test_ok(f.call( 99) == [42,99] ) -test_ok(f.call(43,99) == [43,99] ) -test_ok(f.call(43,99) == [43,99] ) - - -a,=*[1] -test_ok(a == 1) -a,=*[[1]] -test_ok(a == [1]) -a,=*[[[1]]] -test_ok(a == [[1]]) - -x, (y, z) = 1, 2, 3 -test_ok([1,2,nil] == [x,y,z]) -x, (y, z) = 1, [2,3] -test_ok([1,2,3] == [x,y,z]) -x, (y, z) = 1, [2] -test_ok([1,2,nil] == [x,y,z]) - -a = loop do break; end; test_ok(a == nil) -a = loop do break nil; end; test_ok(a == nil) -a = loop do break 1; end; test_ok(a == 1) -a = loop do break []; end; test_ok(a == []) -a = loop do break [1]; end; test_ok(a == [1]) -a = loop do break [nil]; end; test_ok(a == [nil]) -a = loop do break [[]]; end; test_ok(a == [[]]) -a = loop do break [*[]]; end; test_ok(a == []) -a = loop do break [*[1]]; end; test_ok(a == [1]) -a = loop do break [*[1,2]]; end; test_ok(a == [1,2]) - -a = loop do break *[]; end; test_ok(a == []) -a = loop do break *[1]; end; test_ok(a == [1]) -a = loop do break *[nil]; end; test_ok(a == [nil]) -a = loop do break *[[]]; end; test_ok(a == [[]]) -a = loop do break *[*[]]; end; test_ok(a == []) -a = loop do break *[*[1]]; end; test_ok(a == [1]) -a = loop do break *[*[1,2]]; end; test_ok(a == [1,2]) - -*a = loop do break; end; test_ok(a == [nil]) -*a = loop do break nil; end; test_ok(a == [nil]) -*a = loop do break 1; end; test_ok(a == [1]) -*a = loop do break []; end; test_ok(a == []) -*a = loop do break [1]; end; test_ok(a == [1]) -*a = loop do break [nil]; end; test_ok(a == [nil]) -*a = loop do break [[]]; end; test_ok(a == [[]]) -*a = loop do break [1,2]; end; test_ok(a == [1,2]) -*a = loop do break [*[]]; end; test_ok(a == []) -*a = loop do break [*[1]]; end; test_ok(a == [1]) -*a = loop do break [*[1,2]]; end; test_ok(a == [1,2]) - -*a = loop do break *[]; end; test_ok(a == []) -*a = loop do break *[1]; end; test_ok(a == [1]) -*a = loop do break *[nil]; end; test_ok(a == [nil]) -*a = loop do break *[[]]; end; test_ok(a == [[]]) -*a = loop do break *[1,2]; end; test_ok(a == [1,2]) -*a = loop do break *[*[]]; end; test_ok(a == []) -*a = loop do break *[*[1]]; end; test_ok(a == [1]) -*a = loop do break *[*[1,2]]; end; test_ok(a == [1,2]) - -*a = *loop do break *[[]]; end; test_ok(a == [[]]) -*a = *loop do break *[1,2]; end; test_ok(a == [1,2]) -*a = *loop do break *[*[1,2]]; end; test_ok(a == [1,2]) - -a,b,*c = loop do break; end; test_ok([a,b,c] == [nil,nil,[]]) -a,b,*c = loop do break nil; end; test_ok([a,b,c] == [nil,nil,[]]) -a,b,*c = loop do break 1; end; test_ok([a,b,c] == [1,nil,[]]) -a,b,*c = loop do break []; end; test_ok([a,b,c] == [nil,nil,[]]) -a,b,*c = loop do break [1]; end; test_ok([a,b,c] == [1,nil,[]]) -a,b,*c = loop do break [nil]; end; test_ok([a,b,c] == [nil,nil,[]]) -a,b,*c = loop do break [[]]; end; test_ok([a,b,c] == [[],nil,[]]) -a,b,*c = loop do break [1,2]; end; test_ok([a,b,c] == [1,2,[]]) -a,b,*c = loop do break [*[]]; end; test_ok([a,b,c] == [nil,nil,[]]) -a,b,*c = loop do break [*[1]]; end; test_ok([a,b,c] == [1,nil,[]]) -a,b,*c = loop do break [*[1,2]]; end; test_ok([a,b,c] == [1,2,[]]) - -a,b,*c = loop do break *[]; end; test_ok([a,b,c] == [nil,nil,[]]) -a,b,*c = loop do break *[1]; end; test_ok([a,b,c] == [1,nil,[]]) -a,b,*c = loop do break *[nil]; end; test_ok([a,b,c] == [nil,nil,[]]) -a,b,*c = loop do break *[[]]; end; test_ok([a,b,c] == [[],nil,[]]) -a,b,*c = loop do break *[1,2]; end; test_ok([a,b,c] == [1,2,[]]) -a,b,*c = loop do break *[*[]]; end; test_ok([a,b,c] == [nil,nil,[]]) -a,b,*c = loop do break *[*[1]]; end; test_ok([a,b,c] == [1,nil,[]]) -a,b,*c = loop do break *[*[1,2]]; end; test_ok([a,b,c] == [1,2,[]]) - -def r(val); a = yield(); test_ok(a == val, 2); end -r(nil){next} -r(nil){next nil} -r(1){next 1} -r([]){next []} -r([1]){next [1]} -r([nil]){next [nil]} -r([[]]){next [[]]} -r([]){next [*[]]} -r([1]){next [*[1]]} -r([1,2]){next [*[1,2]]} - -r([]){next *[]} -r([1]){next *[1]} -r([nil]){next *[nil]} -r([[]]){next *[[]]} -r([]){next *[*[]]} -r([1]){next *[*[1]]} -r([1,2]){next *[*[1,2]]} - -def r(val); *a = yield(); test_ok(a == val, 2); end -r([nil]){next} -r([nil]){next nil} -r([1]){next 1} -r([]){next []} -r([1]){next [1]} -r([nil]){next [nil]} -r([[]]){next [[]]} -r([1,2]){next [1,2]} -r([]){next [*[]]} -r([1]){next [*[1]]} -r([1,2]){next [*[1,2]]} - -def r(val); *a = *yield(); test_ok(a == val, 2); end -r([[]]){next *[[]]} -r([1,2]){next *[1,2]} -r([1,2]){next *[*[1,2]]} - -def r(val); a,b,*c = yield(); test_ok([a,b,c] == val, 2); end -r([nil,nil,[]]){next} -r([nil,nil,[]]){next nil} -r([1,nil,[]]){next 1} -r([nil,nil,[]]){next []} -r([1,nil,[]]){next [1]} -r([nil,nil,[]]){next [nil]} -r([[],nil,[]]){next [[]]} -r([1,2,[]]){next [1,2]} -r([nil,nil,[]]){next [*[]]} -r([1,nil,[]]){next [*[1]]} -r([1,2,[]]){next [*[1,2]]} - -def r(val); a,b,*c = *yield(); test_ok([a,b,c] == val, 2); end -r([[],nil,[]]){next *[[]]} -r([1,2,[]]){next *[1,2]} -r([1,2,[]]){next *[*[1,2]]} - -test_check "condition" - -$x = '0'; - -$x == $x && test_ok(true) -$x != $x && test_ok(false) -$x == $x || test_ok(false) -$x != $x || test_ok(true) - -# first test to see if we can run the tests. - -test_check "if/unless"; - -$x = 'test'; -test_ok(if $x == $x then true else false end) -$bad = false -unless $x == $x - $bad = true -end -test_ok(!$bad) -test_ok(unless $x != $x then true else false end) - -test_check "case" - -case 5 -when 1, 2, 3, 4, 6, 7, 8 - test_ok(false) -when 5 - test_ok(true) -end - -case 5 -when 5 - test_ok(true) -when 1..10 - test_ok(false) -end - -case 5 -when 1..10 - test_ok(true) -else - test_ok(false) -end - -case 5 -when 5 - test_ok(true) -else - test_ok(false) -end - -case "foobar" -when /^f.*r$/ - test_ok(true) -else - test_ok(false) -end - -test_check "while/until"; - -while_tmp = "while_tmp.#{$$}" -tmp = open(while_tmp, "w") -tmp.print "tvi925\n"; -tmp.print "tvi920\n"; -tmp.print "vt100\n"; -tmp.print "Amiga\n"; -tmp.print "paper\n"; -tmp.close - -# test break - -tmp = open(while_tmp, "r") -test_ok(tmp.kind_of?(File)) - -while line = tmp.gets() - break if /vt100/ =~ line -end - -test_ok(!tmp.eof? && /vt100/ =~ line) -tmp.close - -# test next -$bad = false -tmp = open(while_tmp, "r") -while line = tmp.gets() - next if /vt100/ =~ line - $bad = 1 if /vt100/ =~ line -end -test_ok(!(!tmp.eof? || /vt100/ =~ line || $bad)) -tmp.close - -# test redo -$bad = false -tmp = open(while_tmp, "r") -while line = tmp.gets() - lastline = line - line = line.gsub(/vt100/, 'VT100') - if lastline != line - line.gsub!('VT100', 'Vt100') - redo - end - $bad = 1 if /vt100/ =~ line - $bad = 1 if /VT100/ =~ line -end -test_ok(tmp.eof? && !$bad) -tmp.close - -sum=0 -for i in 1..10 - sum += i - i -= 1 - if i > 0 - redo - end -end -test_ok(sum == 220) - -# test interval -$bad = false -tmp = open(while_tmp, "r") -while line = tmp.gets() - break if 3 - case line - when /vt100/, /Amiga/, /paper/ - $bad = true - end -end -test_ok(!$bad) -tmp.close - -File.unlink while_tmp or `/bin/rm -f "#{while_tmp}"` -test_ok(!File.exist?(while_tmp)) - -i = 0 -until i>4 - i+=1 -end -test_ok(i>4) - - -# exception handling -test_check "exception"; - -begin - raise "this must be handled" - test_ok(false) -rescue - test_ok(true) -end - -$bad = true -begin - raise "this must be handled no.2" -rescue - if $bad - $bad = false - retry - test_ok(false) - end -end -test_ok(true) - -# exception in rescue clause -$string = "this must be handled no.3" -begin - begin - raise "exception in rescue clause" - rescue - raise $string - end - test_ok(false) -rescue => e - test_ok($! == e) - test_ok(e.message == $string) - test_ok(e != $string) -end - -# exception in ensure clause -begin - begin - raise "this must be handled no.4" - ensure - raise "exception in ensure clause" - end - test_ok(false) -rescue - test_ok(true) -end - -$bad = true -begin - begin - raise "this must be handled no.5" - ensure - $bad = false - end -rescue -end -test_ok(!$bad) - -$bad = true -begin - begin - raise "this must be handled no.6" - ensure - $bad = false - end -rescue -end -test_ok(!$bad) - -$bad = true -while true - begin - break - ensure - $bad = false - end -end -test_ok(!$bad) - -test_ok(catch(:foo) { - loop do - loop do - throw :foo, true - break - end - break - test_ok(false) # should not reach here - end - false - }) - -test_check "array" -test_ok([1, 2] + [3, 4] == [1, 2, 3, 4]) -test_ok([1, 2] * 2 == [1, 2, 1, 2]) -test_ok([1, 2] * ":" == "1:2") - -test_ok([1, 2].hash == [1, 2].hash) - -test_ok([1,2,3] & [2,3,4] == [2,3]) -test_ok([1,2,3] | [2,3,4] == [1,2,3,4]) -test_ok([1,2,3] - [2,3] == [1]) - -$x = [0, 1, 2, 3, 4, 5] -test_ok($x[2] == 2) -test_ok($x[1..3] == [1, 2, 3]) -test_ok($x[1,3] == [1, 2, 3]) - -$x[0, 2] = 10 -test_ok($x[0] == 10 && $x[1] == 2) - -$x[0, 0] = -1 -test_ok($x[0] == -1 && $x[1] == 10) - -$x[-1, 1] = 20 -test_ok($x[-1] == 20 && $x.pop == 20) - -# array and/or -test_ok(([1,2,3]&[2,4,6]) == [2]) -test_ok(([1,2,3]|[2,4,6]) == [1,2,3,4,6]) - -# compact -$x = [nil, 1, nil, nil, 5, nil, nil] -$x.compact! -test_ok($x == [1, 5]) - -# uniq -$x = [1, 1, 4, 2, 5, 4, 5, 1, 2] -$x.uniq! -test_ok($x == [1, 4, 2, 5]) - -# empty? -test_ok(!$x.empty?) -$x = [] -test_ok($x.empty?) - -# sort -$x = ["it", "came", "to", "pass", "that", "..."] -$x = $x.sort.join(" ") -test_ok($x == "... came it pass that to") -$x = [2,5,3,1,7] -$x.sort!{|a,b| a<=>b} # sort with condition -test_ok($x == [1,2,3,5,7]) -$x.sort!{|a,b| b-a} # reverse sort -test_ok($x == [7,5,3,2,1]) - -# split test -$x = "The Book of Mormon" -test_ok($x.split(//).reverse!.join == $x.reverse) -test_ok($x.reverse == $x.reverse!) -test_ok("1 byte string".split(//).reverse.join(":") == "g:n:i:r:t:s: :e:t:y:b: :1") -$x = "a b c d" -test_ok($x.split == ['a', 'b', 'c', 'd']) -test_ok($x.split(' ') == ['a', 'b', 'c', 'd']) -test_ok(defined? "a".chomp) -test_ok("abc".scan(/./) == ["a", "b", "c"]) -test_ok("1a2b3c".scan(/(\d.)/) == [["1a"], ["2b"], ["3c"]]) -# non-greedy match -test_ok("a=12;b=22".scan(/(.*?)=(\d*);?/) == [["a", "12"], ["b", "22"]]) - -$x = [1] -test_ok(($x * 5).join(":") == '1:1:1:1:1') -test_ok(($x * 1).join(":") == '1') -test_ok(($x * 0).join(":") == '') - -*$x = *(1..7).to_a -test_ok($x.size == 7) -test_ok($x == [1, 2, 3, 4, 5, 6, 7]) - -$x = [1,2,3] -$x[1,0] = $x -test_ok($x == [1,1,2,3,2,3]) - -$x = [1,2,3] -$x[-1,0] = $x -test_ok($x == [1,2,1,2,3,3]) - -$x = [1,2,3] -$x.concat($x) -test_ok($x == [1,2,3,1,2,3]) - -test_check "hash" -$x = {1=>2, 2=>4, 3=>6} - -test_ok($x[1] == 2) - -test_ok(begin - for k,v in $x - raise if k*2 != v - end - true - rescue - false - end) - -test_ok($x.length == 3) -test_ok($x.has_key?(1)) -test_ok($x.has_value?(4)) -test_ok($x.values_at(2,3) == [4,6]) -test_ok($x == {1=>2, 2=>4, 3=>6}) - -$z = $x.keys.sort.join(":") -test_ok($z == "1:2:3") - -$z = $x.values.sort.join(":") -test_ok($z == "2:4:6") -test_ok($x == $x) - -$x.shift -test_ok($x.length == 2) - -$z = [1,2] -$x[$z] = 256 -test_ok($x[$z] == 256) - -$x = Hash.new(0) -$x[1] = 1 -test_ok($x[1] == 1) -test_ok($x[2] == 0) - -$x = Hash.new([]) -test_ok($x[22] == []) -test_ok($x[22].equal?($x[22])) - -$x = Hash.new{[]} -test_ok($x[22] == []) -test_ok(!$x[22].equal?($x[22])) - -$x = Hash.new{|h,k| $z = k; h[k] = k*2} -$z = 0 -test_ok($x[22] == 44) -test_ok($z == 22) -$z = 0 -test_ok($x[22] == 44) -test_ok($z == 0) -$x.default = 5 -test_ok($x[23] == 5) - -$x = Hash.new -def $x.default(k) - $z = k - self[k] = k*2 -end -$z = 0 -test_ok($x[22] == 44) -test_ok($z == 22) -$z = 0 -test_ok($x[22] == 44) -test_ok($z == 0) - -test_check "iterator" - -test_ok(!iterator?) - -def ttt - test_ok(iterator?) -end -ttt{} - -# yield at top level -test_ok(!defined?(yield)) - -$x = [1, 2, 3, 4] -$y = [] - -# iterator over array -for i in $x - $y.push i -end -test_ok($x == $y) - -# nested iterator -def tt - 1.upto(10) {|i| - yield i - } -end - -i=0 -tt{|i| break if i == 5} -test_ok(i == 0) - -def tt2(dummy) - yield 1 -end - -def tt3(&block) - tt2(raise(ArgumentError,""),&block) -end - -$x = false -begin - tt3{} -rescue ArgumentError - $x = true -rescue Exception -end -test_ok($x) - -def tt4 &block - tt2(raise(ArgumentError,""),&block) -end -$x = false -begin - tt4{} -rescue ArgumentError - $x = true -rescue Exception -end -test_ok($x) - -# iterator break/redo/next/retry -done = true -loop{ - break - done = false # should not reach here -} -test_ok(done) - -done = false -$bad = false -loop { - break if done - done = true - next - $bad = true # should not reach here -} -test_ok(!$bad) - -done = false -$bad = false -loop { - break if done - done = true - redo - $bad = true # should not reach here -} -test_ok(!$bad) - -$x = [] -for i in 1 .. 7 - $x.push i -end -test_ok($x.size == 7) -test_ok($x == [1, 2, 3, 4, 5, 6, 7]) - -# append method to built-in class -class Array - def iter_test1 - collect{|e| [e, yield(e)]}.sort{|a,b|a[1]<=>b[1]} - end - def iter_test2 - a = collect{|e| [e, yield(e)]} - a.sort{|a,b|a[1]<=>b[1]} - end -end -$x = [[1,2],[3,4],[5,6]] -test_ok($x.iter_test1{|x|x} == $x.iter_test2{|x|x}) - -class IterTest - def initialize(e); @body = e; end - - def each0(&block); @body.each(&block); end - def each1(&block); @body.each {|*x| block.call(*x) } end - def each2(&block); @body.each {|*x| block.call(x) } end - def each3(&block); @body.each {|x| block.call(*x) } end - def each4(&block); @body.each {|x| block.call(x) } end - def each5; @body.each {|*x| yield(*x) } end - def each6; @body.each {|*x| yield(x) } end - def each7; @body.each {|x| yield(*x) } end - def each8; @body.each {|x| yield(x) } end - - def f(a) - a - end -end -test_ok(IterTest.new(nil).method(:f).to_proc.call([1]) == [1]) -m = /\w+/.match("abc") -test_ok(IterTest.new(nil).method(:f).to_proc.call([m]) == [m]) - -IterTest.new([0]).each0 {|x| test_ok(x == 0)} -IterTest.new([1]).each1 {|x| test_ok(x == 1)} -IterTest.new([2]).each2 {|x| test_ok(x == [2])} -#IterTest.new([3]).each3 {|x| test_ok(x == 3)} -IterTest.new([4]).each4 {|x| test_ok(x == 4)} -IterTest.new([5]).each5 {|x| test_ok(x == 5)} -IterTest.new([6]).each6 {|x| test_ok(x == [6])} -#IterTest.new([7]).each7 {|x| test_ok(x == 7)} -IterTest.new([8]).each8 {|x| test_ok(x == 8)} - -IterTest.new([[0]]).each0 {|x| test_ok(x == [0])} -IterTest.new([[1]]).each1 {|x| test_ok(x == [1])} -IterTest.new([[2]]).each2 {|x| test_ok(x == [[2]])} -IterTest.new([[3]]).each3 {|x| test_ok(x == 3)} -IterTest.new([[4]]).each4 {|x| test_ok(x == [4])} -IterTest.new([[5]]).each5 {|x| test_ok(x == [5])} -IterTest.new([[6]]).each6 {|x| test_ok(x == [[6]])} -IterTest.new([[7]]).each7 {|x| test_ok(x == 7)} -IterTest.new([[8]]).each8 {|x| test_ok(x == [8])} - -IterTest.new([[0,0]]).each0 {|*x| test_ok(x == [[0,0]])} -IterTest.new([[8,8]]).each8 {|*x| test_ok(x == [[8,8]])} - -def m0(v) - v -end - -def m1 - m0(block_given?) -end -test_ok(m1{p 'test'}) -test_ok(!m1) - -def m - m0(block_given?,&Proc.new{}) -end -test_ok(m1{p 'test'}) -test_ok(!m1) - -class C - include Enumerable - def initialize - @a = [1,2,3] - end - def each(&block) - @a.each(&block) - end -end - -test_ok(C.new.collect{|n| n} == [1,2,3]) - -test_ok(Proc == lambda{}.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(Proc){} - -def call_argument_test(state, proc, *args) - x = state - begin - proc.call(*args) - rescue ArgumentError - x = !x - end - test_ok(x,2) -end - -call_argument_test(true, lambda{||}) -call_argument_test(false, lambda{||}, 1) -call_argument_test(true, lambda{|a,|}, 1) -call_argument_test(false, lambda{|a,|}) -call_argument_test(false, lambda{|a,|}, 1,2) - -call_argument_test(true, Proc.new{||}) -call_argument_test(true, Proc.new{||}, 1) -call_argument_test(true, Proc.new{|a,|}, 1) -call_argument_test(true, Proc.new{|a,|}) -call_argument_test(true, Proc.new{|a,|}, 1,2) - -def block_get(&block) - block -end - -test_ok(Proc == block_get{}.class) -call_argument_test(true, block_get{||}) -call_argument_test(true, block_get{||}, 1) -call_argument_test(true, block_get{|a,|}, 1) -call_argument_test(true, block_get{|a,|}) -call_argument_test(true, block_get{|a,|}, 1,2) - -call_argument_test(true, block_get(&lambda{||})) -call_argument_test(false, block_get(&lambda{||}),1) -call_argument_test(true, block_get(&lambda{|a,|}),1) -call_argument_test(false, block_get(&lambda{|a,|}),1,2) - -blk = block_get{11} -test_ok(blk.class == Proc) -test_ok(blk.to_proc.class == Proc) -test_ok(blk.clone.call == 11) -test_ok(block_get(&blk).class == Proc) - -lmd = lambda{44} -test_ok(lmd.class == Proc) -test_ok(lmd.to_proc.class == Proc) -test_ok(lmd.clone.call == 44) -test_ok(block_get(&lmd).class == Proc) - -test_ok(Proc.new{|a,| a}.yield(1,2,3) == 1) -call_argument_test(true, Proc.new{|a,|}, 1,2) - -test_ok(Proc.new{|&b| b.call(10)}.call {|x| x} == 10) -test_ok(Proc.new{|a,&b| b.call(a)}.call(12) {|x| x} == 12) - -def test_return1 - Proc.new { - return 55 - }.yield + 5 -end -test_ok(test_return1() == 55) -def test_return2 - lambda { - return 55 - }.call + 5 -end -test_ok(test_return2() == 60) - -def proc_call(&b) - b.call -end -def proc_yield() - yield -end -def proc_return1 - lambda{return 42}.call+1 -end -test_ok(proc_return1() == 43) -def proc_return2 - ->{return 42}.call+1 -end -test_ok(proc_return2() == 43) -def proc_return3 - proc_call{return 42}+1 -end -test_ok(proc_return3() == 42) -def proc_return4 - proc_yield{return 42}+1 -end -test_ok(proc_return4() == 42) - -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, block_get{break}) -ljump_test(true, lambda{break}) - -def exit_value_test(&block) - block.call -rescue LocalJumpError - $!.exit_value -end - -test_ok(45 == exit_value_test{break 45}) - -test_ok(55 == begin - block_get{break 55}.call - rescue LocalJumpError - $!.exit_value - end) - -def block_call(&block) - block.call -end - -def test_b1 - block_call{break 11} -end -test_ok(test_b1() == 11) - -def ljump_rescue(r) - begin - yield - rescue LocalJumpError => e - r if /from proc-closure/ =~ e.message - end -end - -def test_b2 - ljump_rescue(22) do - block_get{break 21}.call - end -end -test_ok(test_b2() == 22) - -def test_b3 - ljump_rescue(33) do - Proc.new{break 31}.yield - end -end -test_ok(test_b3() == 33) - -def test_b4 - lambda{break 44}.call -end -test_ok(test_b4() == 44) - -def test_b5 - ljump_rescue(55) do - b = block_get{break 54} - block_call(&b) - end -end -test_ok(test_b5() == 55) - -def test_b6 - b = lambda{break 67} - block_call(&b) - 66 -end -test_ok(test_b6() == 66) - -def util_r7 - block_get{break 78} -end - -def test_b7 - b = util_r7() - ljump_rescue(77) do - block_call(&b) - end -end -test_ok(test_b7() == 77) - -def util_b8(&block) - block_call(&block) -end - -def test_b8 - util_b8{break 88} -end -test_ok(test_b8() == 88) - -def util_b9(&block) - lambda{block.call; 98}.call -end - -def test_b9 - util_b9{break 99} -end -test_ok(test_b9() == 99) - -def util_b10 - util_b9{break 100} -end - -def test_b10 - util_b10() -end -test_ok(test_b10() == 100) - -def test_b11 - ljump_rescue(111) do - loop do - Proc.new{break 110}.yield - break 112 - end - end -end -test_ok(test_b11() == 111) - -def test_b12 - loop do - break lambda{break 122}.call - break 121 - end -end -test_ok(test_b12() == 122) - -def test_b13 - ljump_rescue(133) do - while true - Proc.new{break 130}.yield - break 131 - end - end -end -test_ok(test_b13() == 133) - -def test_b14 - while true - break lambda{break 144}.call - break 143 - end -end -test_ok(test_b14() == 144) - -def test_b15 - [0].each {|c| yield 1 } - 156 -end -test_ok(test_b15{|e| break 155 } == 155) - -def marity_test(m) - method = method(m) - test_ok(method.arity == method.to_proc.arity, 2) -end -marity_test(:test_ok) -marity_test(:marity_test) -marity_test(:p) - -lambda(&method(:test_ok)).call(true) -lambda(&block_get{|a,n| test_ok(a,n)}).call(true, 2) - -class ITER_TEST1 - def a - block_given? - end -end - -class ITER_TEST2 < ITER_TEST1 - def a - test_ok(super) - super - end -end -test_ok(ITER_TEST2.new.a {}) - -class ITER_TEST3 - def foo x - return yield if block_given? - x - end -end - -class ITER_TEST4 < ITER_TEST3 - def foo x - test_ok(super == yield) - test_ok(super(x, &nil) == x) - end -end - -ITER_TEST4.new.foo(44){55} - -class ITER_TEST5 - def tt(aa) - aa - end - - def uu(a) - class << self - define_method(:tt) do |sym| - super(sym) - end - end - end - - def xx(*x) - x.size - end -end - -a = ITER_TEST5.new -a.uu(12) -test_ok(a.tt(1) == 1) - -class ITER_TEST6 < ITER_TEST5 - def xx(*a) - a << 12 - super - end -end - -test_ok(ITER_TEST6.new.xx([24]) == 2) - -test_check "float" -test_ok(2.6.floor == 2) -test_ok((-2.6).floor == -3) -test_ok(2.6.ceil == 3) -test_ok((-2.6).ceil == -2) -test_ok(2.6.truncate == 2) -test_ok((-2.6).truncate == -2) -test_ok(2.6.round == 3) -test_ok((-2.4).truncate == -2) -test_ok((13.4 % 1 - 0.4).abs < 0.0001) -nan = 0.0/0 -def nan_test(x,y) - test_ok(x != y) - test_ok((x < y) == false) - test_ok((x > y) == false) - test_ok((x <= y) == false) - test_ok((x >= y) == false) -end -nan_test(nan, nan) -nan_test(nan, 0) -nan_test(nan, 1) -nan_test(nan, -1) -nan_test(nan, 1000) -nan_test(nan, -1000) -nan_test(nan, 1_000_000_000_000) -nan_test(nan, -1_000_000_000_000) -nan_test(nan, 100.0); -nan_test(nan, -100.0); -nan_test(nan, 0.001); -nan_test(nan, -0.001); -nan_test(nan, 1.0/0); -nan_test(nan, -1.0/0); - -#s = "3.7517675036461267e+17" -#test_ok(s == sprintf("%.16e", s.to_f)) -f = 3.7517675036461267e+17 -test_ok(f == sprintf("%.16e", f).to_f) - - -test_check "bignum" -def fact(n) - return 1 if n == 0 - f = 1 - while n>0 - f *= n - n -= 1 - end - return f -end -$x = fact(40) -test_ok($x == $x) -test_ok($x == fact(40)) -test_ok($x < $x+2) -test_ok($x > $x-2) -test_ok($x == 815915283247897734345611269596115894272000000000) -test_ok($x != 815915283247897734345611269596115894272000000001) -test_ok($x+1 == 815915283247897734345611269596115894272000000001) -test_ok($x/fact(20) == 335367096786357081410764800000) -$x = -$x -test_ok($x == -815915283247897734345611269596115894272000000000) -test_ok(2-(2**32) == -(2**32-2)) -test_ok(2**32 - 5 == (2**32-3)-2) - -$good = true; -for i in 1000..1014 - $good = false if ((1 << i) != (2**i)) -end -test_ok($good) - -$good = true; -n1= 1 << 1000 -for i in 1000..1014 - $good = false if ((1 << i) != n1) - n1 *= 2 -end -test_ok($good) - -$good = true; -n2=n1 -for i in 1..10 - n1 = n1 / 2 - n2 = n2 >> 1 - $good = false if (n1 != n2) -end -test_ok($good) - -$good = true; -for i in 4000..4096 - n1 = 1 << i; - if (n1**2-1) / (n1+1) != (n1-1) - $good = false - end -end -test_ok($good) - -b = 10**80 -a = b * 9 + 7 -test_ok(7 == a.modulo(b)) -test_ok(-b + 7 == a.modulo(-b)) -test_ok(b + -7 == (-a).modulo(b)) -test_ok(-7 == (-a).modulo(-b)) -test_ok(7 == a.remainder(b)) -test_ok(7 == a.remainder(-b)) -test_ok(-7 == (-a).remainder(b)) -test_ok(-7 == (-a).remainder(-b)) - -test_ok(10**40+10**20 == 10000000000000000000100000000000000000000) -test_ok(10**40/10**20 == 100000000000000000000) - -a = 677330545177305025495135714080 -b = 14269972710765292560 -test_ok(a % b == 0) -test_ok(-a % b == 0) - -def shift_test(a) - b = a / (2 ** 32) - c = a >> 32 - test_ok(b == c) - - b = a * (2 ** 32) - c = a << 32 - test_ok(b == c) -end - -shift_test(-4518325415524767873) -shift_test(-0xfffffffffffffffff) - -test_check "string & char" - -test_ok("abcd" == "abcd") -test_ok("abcd" =~ /abcd/) -test_ok("abcd" === "abcd") -# compile time string concatenation -test_ok("ab" "cd" == "abcd") -test_ok("#{22}aa" "cd#{44}" == "22aacd44") -test_ok("#{22}aa" "cd#{44}" "55" "#{66}" == "22aacd445566") -test_ok("abc" !~ /^$/) -test_ok("abc\n" !~ /^$/) -test_ok("abc" !~ /^d*$/) -test_ok(("abc" =~ /d*$/) == 3) -test_ok("" =~ /^$/) -test_ok("\n" =~ /^$/) -test_ok("a\n\n" =~ /^$/) -test_ok("abcabc" =~ /.*a/ && $& == "abca") -test_ok("abcabc" =~ /.*c/ && $& == "abcabc") -test_ok("abcabc" =~ /.*?a/ && $& == "a") -test_ok("abcabc" =~ /.*?c/ && $& == "abc") -test_ok(/(.|\n)*?\n(b|\n)/ =~ "a\nb\n\n" && $& == "a\nb") - -test_ok(/^(ab+)+b/ =~ "ababb" && $& == "ababb") -test_ok(/^(?:ab+)+b/ =~ "ababb" && $& == "ababb") -test_ok(/^(ab+)+/ =~ "ababb" && $& == "ababb") -test_ok(/^(?:ab+)+/ =~ "ababb" && $& == "ababb") - -test_ok(/(\s+\d+){2}/ =~ " 1 2" && $& == " 1 2") -test_ok(/(?:\s+\d+){2}/ =~ " 1 2" && $& == " 1 2") - -$x = <') == "") - -# character constants(assumes ASCII) -test_ok("a"[0] == ?a) -test_ok(?a == ?a) -test_ok(?\C-a == "\1") -test_ok(?\M-a == "\341") -test_ok(?\M-\C-a == "\201") -test_ok("a".upcase![0] == ?A) -test_ok("A".downcase![0] == ?a) -test_ok("abc".tr!("a-z", "A-Z") == "ABC") -test_ok("aabbcccc".tr_s!("a-z", "A-Z") == "ABC") -test_ok("abcc".squeeze!("a-z") == "abc") -test_ok("abcd".delete!("bc") == "ad") - -$x = "abcdef" -$y = [ ?a, ?b, ?c, ?d, ?e, ?f ] -$bad = false -$x.each_byte {|i| - if i.chr != $y.shift - $bad = true - break - end -} -test_ok(!$bad) - -s = "a string" -s[0..s.size]="another string" -test_ok(s == "another string") - -s = < Object) == -1) -test_ok((Object <=> String) == 1) -test_ok((Array <=> String) == nil) - -test_check "clone" -foo = Object.new -def foo.test - "test" -end -bar = foo.clone -def bar.test2 - "test2" -end - -test_ok(bar.test2 == "test2") -test_ok(bar.test == "test") -test_ok(foo.test == "test") - -begin - foo.test2 - test_ok false -rescue NoMethodError - test_ok true -end - -module M001; end -module M002; end -module M003; include M002; end -module M002; include M001; end -module M003; include M002; end - -test_ok(M003.ancestors == [M003, M002, M001]) - -test_check "marshal" -$x = [1,2,3,[4,5,"foo"],{1=>"bar"},2.5,fact(30)] -$y = Marshal.dump($x) -test_ok($x == Marshal.load($y)) - -StrClone=String.clone; -test_ok(Marshal.load(Marshal.dump(StrClone.new("abc"))).class == StrClone) - -[[1,2,3,4], [81, 2, 118, 3146]].each { |w,x,y,z| - a = (x.to_f + y.to_f / z.to_f) * Math.exp(w.to_f / (x.to_f + y.to_f / z.to_f)) - ma = Marshal.dump(a) - b = Marshal.load(ma) - test_ok(a == b) -} - -test_check "pack" - -$format = "c2x5CCxsdils_l_a6"; -# Need the expression in here to force ary[5] to be numeric. This avoids -# test2 failing because ary2 goes str->numeric->str and ary does not. -ary = [1,-100,127,128,32767,987.654321098 / 100.0,12345,123456,-32767,-123456,"abcdef"] -$x = ary.pack($format) -ary2 = $x.unpack($format) - -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) - -include Math -test_ok(sqrt(4) == 2) - -test_check "struct" -struct_test = Struct.new("Test", :foo, :bar) -test_ok(struct_test == Struct::Test) - -test = struct_test.new(1, 2) -test_ok(test.foo == 1 && test.bar == 2) -test_ok(test[0] == 1 && test[1] == 2) - -a, b = test.to_a -test_ok(a == 1 && b == 2) - -test[0] = 22 -test_ok(test.foo == 22) - -test.bar = 47 -test_ok(test.bar == 47) - -test_check "variable" -test_ok($$.instance_of?(Fixnum)) - -# read-only variable -begin - $$ = 5 - test_ok false -rescue NameError - test_ok true -end - -foobar = "foobar" -$_ = foobar -test_ok($_ == foobar) - -class Gods - @@rule = "Uranus" # private to Gods - def ruler0 - @@rule - end - - def self.ruler1 # <= per method definition style - @@rule - end - class << self # <= multiple method definition style - def ruler2 - @@rule - end - end -end - -module Olympians - @@rule ="Zeus" - def ruler3 - @@rule - end -end - -class Titans < Gods - @@rule = "Cronus" # do not affect @@rule in Gods - include Olympians - def ruler4 - @@rule - end -end - -test_ok(Gods.new.ruler0 == "Cronus") -test_ok(Gods.ruler1 == "Cronus") -test_ok(Gods.ruler2 == "Cronus") -test_ok(Titans.ruler1 == "Cronus") -test_ok(Titans.ruler2 == "Cronus") -atlas = Titans.new -test_ok(atlas.ruler0 == "Cronus") -test_ok(atlas.ruler3 == "Zeus") -test_ok(atlas.ruler4 == "Cronus") - -test_check "trace" -$x = 1234 -$y = 0 -trace_var :$x, Proc.new{$y = $x} -$x = 40414 -test_ok($y == $x) - -untrace_var :$x -$x = 19660208 -test_ok($y != $x) - -trace_var :$x, Proc.new{$x *= 2} -$x = 5 -test_ok($x == 10) - -untrace_var :$x - -test_check "defined?" - -test_ok(defined?($x)) # global variable -test_ok(defined?($x) == 'global-variable')# returns description - -foo=5 -test_ok(defined?(foo)) # local variable - -test_ok(defined?(Array)) # constant -test_ok(defined?(Object.new)) # method -test_ok(!defined?(Object.print))# private method -test_ok(defined?(1 == 2)) # operator expression - -class Foo - def foo - p :foo - end - protected :foo - def bar(f) - test_ok(defined?(self.foo)) - test_ok(defined?(f.foo)) - end -end -f = Foo.new -test_ok(defined?(f.foo) == nil) -f.bar(f) - -def defined_test - return !defined?(yield) -end - -test_ok(defined_test) # not iterator -test_ok(!defined_test{}) # called as iterator - -test_check "alias" -class Alias0 - def foo; "foo" end -end -class Alias1 0 - printf "not ok/test: %d failed %d\n", $ntest, $failed -else - printf "end of test(test: %d)\n", $ntest -end +# backword compatibility for chkbuild +require_relative '../basictest/test' -- cgit v1.2.3