@@ -64,6 +64,31 @@ TESTCASE(CharArray)
6464 ASSERT_EQUAL (data[7 ], 1 );
6565}
6666
67+ TESTCASE (ConstChar)
68+ {
69+ define_buffer<const char >();
70+
71+ Module m = define_module (" BufferTesting" );
72+
73+ std::string code = R"( Rice::Buffer≺char const≻.new("my string"))" ;
74+ Object object = m.instance_eval (code);
75+ ASSERT_EQUAL (" Rice::Buffer≺char const≻" , object.class_name ().c_str ());
76+
77+ String bytes = object.call (" bytes" );
78+ ASSERT_EQUAL (std::string (" my string" ), bytes.str ());
79+
80+ Array array = object.call (" to_ary" );
81+ ASSERT_EQUAL (" 109, 121, 32, 115, 116, 114, 105, 110, 103" , array.join (" , " ).c_str ());
82+
83+ Object size = object.call (" size" );
84+ ASSERT_EQUAL (9 , detail::From_Ruby<int >().convert (size));
85+
86+ Data_Object<Buffer<const char >> dataObject (object);
87+ Buffer<const char > buffer = std::move (*dataObject);
88+ ASSERT_EQUAL (std::string (" my string" ), std::string (buffer.ptr (), buffer.size ()));
89+ ASSERT_EQUAL (9 , (int )buffer.size ());
90+ }
91+
6792TESTCASE (signed_char_pointer)
6893{
6994 define_buffer<signed char >();
@@ -330,6 +355,31 @@ TESTCASE(array_of_objects)
330355 Object result = m.module_eval (code);
331356 ASSERT_EQUAL (1 , detail::From_Ruby<int >().convert (result));
332357
358+ code = R"( array = [MyClass.new(0), MyClass.new(1)]
359+ buffer = Rice::Buffer≺AnonymousNamespace꞉꞉MyClass∗≻.new(array)
360+ buffer[1] = MyClass.new(2)
361+ buffer[1].id)" ;
362+
363+ result = m.module_eval (code);
364+ ASSERT_EQUAL (2 , detail::From_Ruby<int >().convert (result));
365+ }
366+
367+ TESTCASE (array_of_const_objects)
368+ {
369+ define_buffer<const MyClass*>();
370+
371+ define_class<MyClass>(" MyClass" ).
372+ define_constructor (Constructor<MyClass, int >()).
373+ define_attr (" id" , &MyClass::id);
374+
375+ std::string code = R"( array = [MyClass.new(0), MyClass.new(1)]
376+ buffer = Rice::Buffer≺AnonymousNamespace꞉꞉MyClass∗≻.new(array)
377+ buffer[1].id)" ;
378+
379+ Module m = define_module (" Testing" );
380+ Object result = m.module_eval (code);
381+ ASSERT_EQUAL (1 , detail::From_Ruby<int >().convert (result));
382+
333383 code = R"( array = [MyClass.new(0), MyClass.new(1)]
334384 buffer = Rice::Buffer≺AnonymousNamespace꞉꞉MyClass∗≻.new(array)
335385 buffer[1] = MyClass.new(2)
0 commit comments