aboutsummaryrefslogtreecommitdiffstats
path: root/spec/ruby/optional
diff options
context:
space:
mode:
authorBenoit Daloze <eregontp@gmail.com>2020-09-30 12:21:48 +0200
committerBenoit Daloze <eregontp@gmail.com>2020-09-30 12:21:48 +0200
commit201d50164016bc519041af302f47d92f314abac5 (patch)
tree688544ac063d8a3825d96474055f5c11ad471972 /spec/ruby/optional
parentce986b41caa1f23b6d07914b8eca62fdff24e034 (diff)
downloadruby-201d50164016bc519041af302f47d92f314abac5.tar.gz
Update to ruby/spec@9277d27
Diffstat (limited to 'spec/ruby/optional')
-rw-r--r--spec/ruby/optional/capi/ext/kernel_spec.c10
-rw-r--r--spec/ruby/optional/capi/ext/object_spec.c5
-rw-r--r--spec/ruby/optional/capi/kernel_spec.rb12
-rw-r--r--spec/ruby/optional/capi/object_spec.rb9
4 files changed, 36 insertions, 0 deletions
diff --git a/spec/ruby/optional/capi/ext/kernel_spec.c b/spec/ruby/optional/capi/ext/kernel_spec.c
index 6d074de085..4048684b2c 100644
--- a/spec/ruby/optional/capi/ext/kernel_spec.c
+++ b/spec/ruby/optional/capi/ext/kernel_spec.c
@@ -270,6 +270,15 @@ static VALUE kernel_spec_rb_yield_values(VALUE self, VALUE obj1, VALUE obj2) {
return rb_yield_values(2, obj1, obj2);
}
+static VALUE kernel_spec_rb_yield_values2(VALUE self, VALUE ary) {
+ long len = RARRAY_LEN(ary);
+ VALUE *args = (VALUE*)alloca(sizeof(VALUE) * len);
+ for (int i = 0; i < len; i++) {
+ args[i] = rb_ary_entry(ary, i);
+ }
+ return rb_yield_values2((int)len, args);
+}
+
static VALUE do_rec(VALUE obj, VALUE arg, int is_rec) {
if(is_rec) {
return obj;
@@ -351,6 +360,7 @@ void Init_kernel_spec(void) {
rb_define_method(cls, "rb_yield_indirected", kernel_spec_rb_yield_indirected, 1);
rb_define_method(cls, "rb_yield_define_each", kernel_spec_rb_yield_define_each, 1);
rb_define_method(cls, "rb_yield_values", kernel_spec_rb_yield_values, 2);
+ rb_define_method(cls, "rb_yield_values2", kernel_spec_rb_yield_values2, 1);
rb_define_method(cls, "rb_yield_splat", kernel_spec_rb_yield_splat, 1);
rb_define_method(cls, "rb_exec_recursive", kernel_spec_rb_exec_recursive, 1);
rb_define_method(cls, "rb_set_end_proc", kernel_spec_rb_set_end_proc, 1);
diff --git a/spec/ruby/optional/capi/ext/object_spec.c b/spec/ruby/optional/capi/ext/object_spec.c
index 477105aacc..fbdc19954f 100644
--- a/spec/ruby/optional/capi/ext/object_spec.c
+++ b/spec/ruby/optional/capi/ext/object_spec.c
@@ -315,6 +315,10 @@ static VALUE object_spec_rb_iv_set(VALUE self, VALUE obj, VALUE name, VALUE valu
return rb_iv_set(obj, RSTRING_PTR(name), value);
}
+static VALUE object_spec_rb_ivar_count(VALUE self, VALUE obj) {
+ return ULONG2NUM(rb_ivar_count(obj));
+}
+
static VALUE object_spec_rb_ivar_get(VALUE self, VALUE obj, VALUE sym_name) {
return rb_ivar_get(obj, SYM2ID(sym_name));
}
@@ -441,6 +445,7 @@ void Init_object_spec(void) {
rb_define_method(cls, "rb_obj_instance_eval", object_spec_rb_obj_instance_eval, 1);
rb_define_method(cls, "rb_iv_get", object_spec_rb_iv_get, 2);
rb_define_method(cls, "rb_iv_set", object_spec_rb_iv_set, 3);
+ rb_define_method(cls, "rb_ivar_count", object_spec_rb_ivar_count, 1);
rb_define_method(cls, "rb_ivar_get", object_spec_rb_ivar_get, 2);
rb_define_method(cls, "rb_ivar_set", object_spec_rb_ivar_set, 3);
rb_define_method(cls, "rb_ivar_defined", object_spec_rb_ivar_defined, 2);
diff --git a/spec/ruby/optional/capi/kernel_spec.rb b/spec/ruby/optional/capi/kernel_spec.rb
index cbd0a50dea..44cf311895 100644
--- a/spec/ruby/optional/capi/kernel_spec.rb
+++ b/spec/ruby/optional/capi/kernel_spec.rb
@@ -238,6 +238,18 @@ describe "C-API Kernel function" do
end
end
+ describe "rb_yield_values2" do
+ it "yields passed arguments" do
+ ret = nil
+ @s.rb_yield_values2([1, 2]) { |x, y| ret = x + y }
+ ret.should == 3
+ end
+
+ it "returns the result from block evaluation" do
+ @s.rb_yield_values2([1, 2]) { |x, y| x + y }.should == 3
+ end
+ end
+
describe "rb_yield_splat" do
it "yields with passed array's contents" do
ret = nil
diff --git a/spec/ruby/optional/capi/object_spec.rb b/spec/ruby/optional/capi/object_spec.rb
index 484dfb851c..e8e905b237 100644
--- a/spec/ruby/optional/capi/object_spec.rb
+++ b/spec/ruby/optional/capi/object_spec.rb
@@ -820,6 +820,15 @@ describe "CApiObject" do
end
end
+ describe "rb_ivar_count" do
+ it "returns the number of instance variables" do
+ obj = Object.new
+ @o.rb_ivar_count(obj).should == 0
+ obj.instance_variable_set(:@foo, 42)
+ @o.rb_ivar_count(obj).should == 1
+ end
+ end
+
describe "rb_ivar_get" do
it "returns the instance variable on an object" do
@o.rb_ivar_get(@test, :@foo).should == @test.instance_eval { @foo }