mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Update to ruby/spec@bacedc5
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60973 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
821d9a2d30
commit
4d7b0b9112
104 changed files with 2105 additions and 510 deletions
|
@ -96,6 +96,12 @@ static VALUE numeric_spec_rb_num_coerce_relop(VALUE self, VALUE x, VALUE y, VALU
|
|||
}
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_RB_ABSINT_SINGLEBIT_P
|
||||
static VALUE numeric_spec_rb_absint_singlebit_p(VALUE self, VALUE num) {
|
||||
return INT2FIX(rb_absint_singlebit_p(num));
|
||||
}
|
||||
#endif
|
||||
|
||||
void Init_numeric_spec(void) {
|
||||
VALUE cls;
|
||||
cls = rb_define_class("CApiNumericSpecs", rb_cObject);
|
||||
|
@ -159,6 +165,10 @@ void Init_numeric_spec(void) {
|
|||
#ifdef HAVE_RB_NUM_COERCE_RELOP
|
||||
rb_define_method(cls, "rb_num_coerce_relop", numeric_spec_rb_num_coerce_relop, 3);
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_RB_ABSINT_SINGLEBIT_P
|
||||
rb_define_method(cls, "rb_absint_singlebit_p", numeric_spec_rb_absint_singlebit_p, 1);
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
|
@ -5,6 +5,32 @@
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_FL_ABLE
|
||||
static VALUE object_spec_FL_ABLE(VALUE self, VALUE obj) {
|
||||
if (FL_ABLE(obj)) {
|
||||
return Qtrue;
|
||||
} else {
|
||||
return Qfalse;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_FL_TEST
|
||||
static int object_spec_FL_TEST_flag(VALUE flag_string) {
|
||||
char *flag_cstr = StringValueCStr(flag_string);
|
||||
if (strcmp(flag_cstr, "FL_TAINT") == 0) {
|
||||
return FL_TAINT;
|
||||
} else if (strcmp(flag_cstr, "FL_FREEZE") == 0) {
|
||||
return FL_FREEZE;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static VALUE object_spec_FL_TEST(VALUE self, VALUE obj, VALUE flag) {
|
||||
return INT2FIX(FL_TEST(obj, object_spec_FL_TEST_flag(flag)));
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_OBJ_TAINT
|
||||
static VALUE object_spec_OBJ_TAINT(VALUE self, VALUE obj) {
|
||||
OBJ_TAINT(obj);
|
||||
|
@ -204,7 +230,11 @@ static VALUE object_spec_rb_method_boundp(VALUE self, VALUE obj, VALUE method, V
|
|||
|
||||
#ifdef HAVE_RB_SPECIAL_CONST_P
|
||||
static VALUE object_spec_rb_special_const_p(VALUE self, VALUE value) {
|
||||
return rb_special_const_p(value);
|
||||
if (rb_special_const_p(value)) {
|
||||
return Qtrue;
|
||||
} else {
|
||||
return Qfalse;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -404,6 +434,14 @@ void Init_object_spec(void) {
|
|||
VALUE cls;
|
||||
cls = rb_define_class("CApiObjectSpecs", rb_cObject);
|
||||
|
||||
#ifdef HAVE_FL_ABLE
|
||||
rb_define_method(cls, "FL_ABLE", object_spec_FL_ABLE, 1);
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_FL_TEST
|
||||
rb_define_method(cls, "FL_TEST", object_spec_FL_TEST, 2);
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_OBJ_TAINT
|
||||
rb_define_method(cls, "OBJ_TAINT", object_spec_OBJ_TAINT, 1);
|
||||
#endif
|
||||
|
|
|
@ -422,6 +422,7 @@
|
|||
#define HAVE_RB_NUM_COERCE_BIN 1
|
||||
#define HAVE_RB_NUM_COERCE_CMP 1
|
||||
#define HAVE_RB_NUM_COERCE_RELOP 1
|
||||
#define HAVE_RB_ABSINT_SINGLEBIT_P 1
|
||||
#define HAVE_RB_NUM_ZERODIV 1
|
||||
|
||||
/* Fixnum */
|
||||
|
@ -431,6 +432,8 @@
|
|||
#endif
|
||||
|
||||
/* Object */
|
||||
#define HAVE_FL_ABLE 1
|
||||
#define HAVE_FL_TEST 1
|
||||
#define HAVE_OBJ_TAINT 1
|
||||
#define HAVE_OBJ_TAINTED 1
|
||||
#define HAVE_OBJ_INFECT 1
|
||||
|
|
|
@ -429,4 +429,19 @@ describe "CApiNumericSpecs" do
|
|||
lambda { @s.rb_num_coerce_relop(2, obj, :<) }.should raise_error(ArgumentError)
|
||||
end
|
||||
end
|
||||
|
||||
describe "rb_absint_singlebit_p" do
|
||||
it "returns 1 if absolute value fits into a bit" do
|
||||
@s.rb_absint_singlebit_p(1).should == 1
|
||||
@s.rb_absint_singlebit_p(2).should == 1
|
||||
@s.rb_absint_singlebit_p(3).should == 0
|
||||
@s.rb_absint_singlebit_p(-1).should == 1
|
||||
@s.rb_absint_singlebit_p(-2).should == 1
|
||||
@s.rb_absint_singlebit_p(-3).should == 0
|
||||
@s.rb_absint_singlebit_p(bignum_value).should == 1
|
||||
@s.rb_absint_singlebit_p(bignum_value(1)).should == 0
|
||||
@s.rb_absint_singlebit_p(-bignum_value).should == 1
|
||||
@s.rb_absint_singlebit_p(-bignum_value(1)).should == 0
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -404,6 +404,31 @@ describe "CApiObject" do
|
|||
end
|
||||
end
|
||||
|
||||
describe "FL_ABLE" do
|
||||
it "returns correct boolean for type" do
|
||||
@o.FL_ABLE(Object.new).should be_true
|
||||
@o.FL_ABLE(true).should be_false
|
||||
@o.FL_ABLE(nil).should be_false
|
||||
@o.FL_ABLE(1).should be_false
|
||||
end
|
||||
end
|
||||
|
||||
describe "FL_TEST" do
|
||||
it "returns correct status for FL_TAINT" do
|
||||
obj = Object.new
|
||||
@o.FL_TEST(obj, "FL_TAINT").should == 0
|
||||
obj.taint
|
||||
@o.FL_TEST(obj, "FL_TAINT").should_not == 0
|
||||
end
|
||||
|
||||
it "returns correct status for FL_FREEZE" do
|
||||
obj = Object.new
|
||||
@o.FL_TEST(obj, "FL_FREEZE").should == 0
|
||||
obj.freeze
|
||||
@o.FL_TEST(obj, "FL_FREEZE").should_not == 0
|
||||
end
|
||||
end
|
||||
|
||||
describe "rb_inspect" do
|
||||
it "returns a string with the inspect representation" do
|
||||
@o.rb_inspect(nil).should == "nil"
|
||||
|
|
|
@ -105,6 +105,16 @@ describe "C-API Util function" do
|
|||
ScratchPad.recorded.should == [1, h]
|
||||
end
|
||||
|
||||
it "assigns required and Hash arguments with optional Hash" do
|
||||
@o.rb_scan_args([1], "1:", 2, @acc).should == 1
|
||||
ScratchPad.recorded.should == [1, nil]
|
||||
end
|
||||
|
||||
it "assigns required and Hash arguments with nil Hash" do
|
||||
@o.rb_scan_args([1, nil], "1:", 2, @acc).should == 1
|
||||
ScratchPad.recorded.should == [1, nil]
|
||||
end
|
||||
|
||||
it "assigns required, optional, splat, post-splat, Hash and block arguments" do
|
||||
h = {a: 1, b: 2}
|
||||
@o.rb_scan_args([1, 2, 3, 4, 5, h], "11*1:&", 6, @acc, &@prc).should == 5
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue