[前][次][番号順一覧][スレッド一覧]

ruby-changes:3845

From: ko1@a...
Date: Wed, 30 Jan 2008 01:26:25 +0900 (JST)
Subject: [ruby-changes:3845] mame - Ruby:r15334 (trunk): * test/ruby/test_range.rb: add tests to achieve over 90% test coverage

mame	2008-01-30 01:26:07 +0900 (Wed, 30 Jan 2008)

  New Revision: 15334

  Modified files:
    trunk/ChangeLog
    trunk/test/ruby/test_range.rb

  Log:
    * test/ruby/test_range.rb: add tests to achieve over 90% test coverage
      of range.c.


  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=15334&r2=15333&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/test/ruby/test_range.rb?r1=15334&r2=15333&diff_format=u

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 15333)
+++ ChangeLog	(revision 15334)
@@ -1,3 +1,8 @@
+Wed Jan 30 01:25:16 2008  Yusuke Endoh  <mame@t...>
+
+	* test/ruby/test_range.rb: add tests to achieve over 90% test coverage
+	  of range.c.
+
 Wed Jan 30 00:09:37 2008  Tanaka Akira  <akr@f...>
 
 	* enc/euc_tw.c (euctw_mbc_enc_len): validation implemented.
Index: test/ruby/test_range.rb
===================================================================
--- test/ruby/test_range.rb	(revision 15333)
+++ test/ruby/test_range.rb	(revision 15334)
@@ -71,4 +71,192 @@
     r = Marshal.load(s)
     assert_nothing_raised { r.instance_eval { initialize 5, 6} }
   end
+
+  def test_bad_value
+    assert_raise(ArgumentError) { (1 .. :a) }
+  end
+
+  def test_exclude_end
+    assert(!((0..1).exclude_end?))
+    assert((0...1).exclude_end?)
+  end
+
+  def test_eq
+    r = (0..1)
+    assert(r == r)
+    assert(r == (0..1))
+    assert(r != 0)
+    assert(r != (1..2))
+    assert(r != (0..2))
+    assert(r != (0...1))
+  end
+
+  def test_eql
+    r = (0..1)
+    assert(r.eql?(r))
+    assert(r.eql?(0..1))
+    assert(!r.eql?(0))
+    assert(!r.eql?(1..2))
+    assert(!r.eql?(0..2))
+    assert(!r.eql?(0...1))
+  end
+
+  def test_hash
+    assert((0..1).hash.is_a?(Fixnum))
+  end
+
+  def test_step
+    a = []
+    (0..10).step {|x| a << x }
+    assert_equal([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], a)
+
+    a = []
+    (0..10).step(2) {|x| a << x }
+    assert_equal([0, 2, 4, 6, 8, 10], a)
+
+    o = Object.new
+    def o.to_int; 2; end
+    a = []
+    (0..10).step(o) {|x| a << x }
+    assert_equal([0, 2, 4, 6, 8, 10], a)
+
+    assert_raise(ArgumentError) { (0..10).step(-1) { } }
+    assert_raise(ArgumentError) { (0..10).step(0) { } }
+
+    a = []
+    ("a" .. "z").step(2) {|x| a << x }
+    assert_equal(%w(a c e g i k m o q s u w y), a)
+
+    a = []
+    ("a" .. "z").step(2**32) {|x| a << x }
+    assert_equal(["a"], a)
+
+    a = []
+    (2**32-1 .. 2**32+1).step(2) {|x| a << x }
+    assert_equal([4294967295, 4294967297], a)
+    zero = (2**32).coerce(0).first
+    assert_raise(ArgumentError) { (2**32-1 .. 2**32+1).step(zero) { } }
+
+    o1 = Object.new
+    o2 = Object.new
+    def o1.<=>(x); -1; end
+    def o2.<=>(x); 0; end
+    assert_raise(TypeError) { (o1..o2).step(1) { } }
+
+    class << o1; self; end.class_eval do
+      define_method(:succ) { o2 }
+    end
+    a = []
+    (o1..o2).step(1) {|x| a << x }
+    assert_equal([o1, o2], a)
+
+    a = []
+    (o1...o2).step(1) {|x| a << x }
+    assert_equal([o1], a)
+  end
+
+  def test_each
+    a = []
+    (0..10).each {|x| a << x }
+    assert_equal([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], a)
+
+    o1 = Object.new
+    o2 = Object.new
+    def o1.<=>(x); -1; end
+    def o2.<=>(x); 0; end
+    class << o1; self; end.class_eval do
+      define_method(:succ) { o2 }
+    end
+
+    r1 = (o1..o2)
+    r2 = (o1...o2)
+
+    a = []
+    r1.each {|x| a << x }
+    assert_equal([o1, o2], a)
+
+    a = []
+    r2.each {|x| a << x }
+    assert_equal([o1], a)
+
+    def o2.<=>(x); 1; end
+
+    a = []
+    r1.each {|x| a << x }
+    assert_equal([o1], a)
+
+    def o2.<=>(x); nil; end
+
+    a = []
+    r1.each {|x| a << x }
+    assert_equal([o1], a)
+
+    def o1.<=>(x); nil; end
+
+    a = []
+    r2.each {|x| a << x }
+    assert_equal([], a)
+  end
+
+  def test_begin_end
+    assert_equal(0, (0..1).begin)
+    assert_equal(1, (0..1).end)
+  end
+
+  def test_first_last
+    assert_equal([0, 1, 2], (0..10).first(3))
+    assert_equal([8, 9, 10], (0..10).last(3))
+  end
+
+  def test_to_s
+    assert_equal("0..1", (0..1).to_s)
+    assert_equal("0...1", (0...1).to_s)
+  end
+
+  def test_inspect
+    assert_equal("0..1", (0..1).inspect)
+    assert_equal("0...1", (0...1).inspect)
+  end
+
+  def test_eqq
+    assert((0..10) === 5)
+    assert(!((0..10) === 11))
+  end
+
+  def test_include
+    assert(("a".."z").include?("c"))
+    assert(!(("a".."z").include?("5")))
+    assert(("a"..."z").include?("y"))
+    assert(!(("a"..."z").include?("z")))
+    assert(!(("a".."z").include?("cc")))
+    assert((0...10).include?(5))
+  end
+
+  def test_cover
+    assert(("a".."z").cover?("c"))
+    assert(!(("a".."z").cover?("5")))
+    assert(("a"..."z").cover?("y"))
+    assert(!(("a"..."z").cover?("z")))
+    assert(("a".."z").cover?("cc"))
+  end
+
+  def test_beg_len
+    o = Object.new
+    assert_raise(TypeError) { [][o] }
+    def o.begin; -10; end
+    assert_raise(TypeError) { [][o] }
+    def o.end; 0; end
+    assert_raise(NoMethodError) { [][o] }
+    def o.exclude_end?; false; end
+    assert_nil([0][o])
+    assert_raise(RangeError) { [0][o] = 1 }
+    def o.begin; 10; end
+    def o.end; 10; end
+    assert_nil([0][o])
+    def o.begin; 0; end
+    assert_equal([0], [0][o])
+    def o.begin; 2; end
+    def o.end; 0; end
+    assert_equal([], [0, 1, 2][o])
+  end
 end

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]