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); +} +