зеркало из https://github.com/github/ruby.git
* range.c: Use div instead of / for bsearch
* test/ruby/test_range.rb: Test showing bug when requiring mathn git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@39059 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
1677cbce9d
Коммит
e29e4b55ab
|
@ -1,3 +1,9 @@
|
|||
Tue Feb 5 12:50:47 2013 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
|
||||
|
||||
* range.c: Use div instead of / for bsearch
|
||||
|
||||
* test/ruby/test_range.rb: Test showing bug when requiring mathn
|
||||
|
||||
Tue Feb 5 12:48:38 2013 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
|
||||
|
||||
* enumerator.c: Use to_enum for Enumerable methods returning
|
||||
|
|
5
range.c
5
range.c
|
@ -20,7 +20,7 @@
|
|||
#include <math.h>
|
||||
|
||||
VALUE rb_cRange;
|
||||
static ID id_cmp, id_succ, id_beg, id_end, id_excl, id_integer_p;
|
||||
static ID id_cmp, id_succ, id_beg, id_end, id_excl, id_integer_p, id_div;
|
||||
|
||||
#define RANGE_BEG(r) (RSTRUCT(r)->as.ary[0])
|
||||
#define RANGE_END(r) (RSTRUCT(r)->as.ary[1])
|
||||
|
@ -656,7 +656,7 @@ range_bsearch(VALUE range)
|
|||
org_high = high;
|
||||
|
||||
while (rb_cmpint(rb_funcall(low, id_cmp, 1, high), low, high) < 0) {
|
||||
mid = rb_funcall(rb_funcall(high, '+', 1, low), '/', 1, INT2FIX(2));
|
||||
mid = rb_funcall(rb_funcall(high, '+', 1, low), id_div, 1, INT2FIX(2));
|
||||
BSEARCH_CHECK(mid);
|
||||
if (smaller) {
|
||||
high = mid;
|
||||
|
@ -1311,6 +1311,7 @@ Init_Range(void)
|
|||
id_end = rb_intern("end");
|
||||
id_excl = rb_intern("excl");
|
||||
id_integer_p = rb_intern("integer?");
|
||||
id_div = rb_intern("div");
|
||||
|
||||
rb_cRange = rb_struct_define_without_accessor(
|
||||
"Range", rb_cObject, range_alloc,
|
||||
|
|
|
@ -2,6 +2,7 @@ require 'test/unit'
|
|||
require 'delegate'
|
||||
require 'timeout'
|
||||
require 'bigdecimal'
|
||||
require_relative 'envutil'
|
||||
|
||||
class TestRange < Test::Unit::TestCase
|
||||
def test_range_string
|
||||
|
@ -535,4 +536,8 @@ class TestRange < Test::Unit::TestCase
|
|||
|
||||
assert_raise(TypeError) { ("a".."z").bsearch {} }
|
||||
end
|
||||
|
||||
def test_bsearch_with_mathn
|
||||
assert_in_out_err ['-r', 'mathn', '-e', 'puts (1..(1<<100)).bsearch{|x| raise "#{x} should be integer" unless x.integer?; x >= 42}'], "", ["42"], [], '[ruby-core:25740]'
|
||||
end
|
||||
end
|
||||
|
|
Загрузка…
Ссылка в новой задаче