test/test_Data_Object.cpp in rice-1.0.2 vs test/test_Data_Object.cpp in rice-1.1.0
- old
+ new
@@ -8,12 +8,20 @@
TESTSUITE(Data_Object);
namespace
{
struct Foo { Foo() : x_(42) { } int x_; };
+
+ bool test_ruby_mark__marked = false;
}
+template<>
+void ruby_mark(Foo * foo)
+{
+ test_ruby_mark__marked = true;
+}
+
SETUP(Data_Object)
{
ruby_init();
if(!Data_Type<Foo>::is_bound())
@@ -33,12 +41,18 @@
Data_Type<Foo> rb_cFoo;
Foo * foo = new Foo;
Data_Object<Foo> wrapped_foo(foo);
ASSERT_EQUAL(foo, wrapped_foo.get());
ASSERT_EQUAL(Data_Type<Foo>::klass(), wrapped_foo.class_of());
- ASSERT_EQUAL(RUBY_DATA_FUNC(0), RDATA(wrapped_foo.value())->dmark);
+ typedef void (*Mark_Func)(void *);
+ typedef void (*Mark_Func_Foo)(Foo *);
+ Mark_Func expected_mark_func =
+ Mark_Func(Mark_Func_Foo(ruby_mark<Foo>));
ASSERT_EQUAL(
+ expected_mark_func,
+ RDATA(wrapped_foo.value())->dmark);
+ ASSERT_EQUAL(
RUBY_DATA_FUNC(Default_Allocation_Strategy<Foo>::free),
RUBY_DATA_FUNC(RDATA(wrapped_foo.value())->dfree));
ASSERT_EQUAL(foo, DATA_PTR(wrapped_foo.value()));
}
@@ -47,12 +61,18 @@
Data_Type<Foo> rb_cFoo;
Foo * foo = new Foo;
Data_Object<Foo> wrapped_foo(foo, Data_Type<Foo>::klass());
ASSERT_EQUAL(foo, wrapped_foo.get());
ASSERT_EQUAL(Data_Type<Foo>::klass(), wrapped_foo.class_of());
- ASSERT_EQUAL(RUBY_DATA_FUNC(0), RDATA(wrapped_foo.value())->dmark);
+ typedef void (*Mark_Func)(void *);
+ typedef void (*Mark_Func_Foo)(Foo *);
+ Mark_Func expected_mark_func =
+ Mark_Func(Mark_Func_Foo(ruby_mark<Foo>));
ASSERT_EQUAL(
+ expected_mark_func,
+ RDATA(wrapped_foo.value())->dmark);
+ ASSERT_EQUAL(
RUBY_DATA_FUNC(Default_Allocation_Strategy<Foo>::free),
RUBY_DATA_FUNC(RDATA(wrapped_foo.value())->dfree));
ASSERT_EQUAL(foo, DATA_PTR(wrapped_foo.value()));
}
@@ -61,12 +81,18 @@
Data_Type<Foo> rb_cFoo;
Foo * foo = new Foo;
Data_Object<Foo> wrapped_foo(foo, rb_cObject);
ASSERT_EQUAL(foo, wrapped_foo.get());
ASSERT_EQUAL(rb_cObject, CLASS_OF(wrapped_foo.value()));
- ASSERT_EQUAL(RUBY_DATA_FUNC(0), RDATA(wrapped_foo.value())->dmark);
+ typedef void (*Mark_Func)(void *);
+ typedef void (*Mark_Func_Foo)(Foo *);
+ Mark_Func expected_mark_func =
+ Mark_Func(Mark_Func_Foo(ruby_mark<Foo>));
ASSERT_EQUAL(
+ expected_mark_func,
+ RDATA(wrapped_foo.value())->dmark);
+ ASSERT_EQUAL(
RUBY_DATA_FUNC(Default_Allocation_Strategy<Foo>::free),
RUBY_DATA_FUNC(RDATA(wrapped_foo.value())->dfree));
ASSERT_EQUAL(foo, DATA_PTR(wrapped_foo.value()));
}
@@ -231,5 +257,19 @@
Data_Type<Foo> rb_cFoo;
Foo * foo = new Foo;
Data_Object<Foo> wrapped_foo(foo);
ASSERT_EQUAL(foo->x_, from_ruby<Foo>(wrapped_foo).x_);
}
+
+TESTCASE(ruby_mark)
+{
+ Data_Type<Foo> rb_cFoo;
+ Foo * foo = new Foo;
+ Data_Object<Foo> wrapped_foo(foo);
+
+ test_ruby_mark__marked = false;
+
+ rb_gc_start();
+
+ ASSERT_EQUAL(true, test_ruby_mark__marked);
+}
+