@@ -185,6 +185,166 @@ parity_test!(
185185 }
186186) ;
187187
188+ #[ rb_sys_test_helpers:: ruby_test]
189+ fn test_rarray_aref_basic ( ) {
190+ let ary = unsafe { rb_sys:: rb_ary_new_capa ( 3 ) } ;
191+ unsafe {
192+ rb_sys:: rb_ary_push (
193+ ary,
194+ rb_sys:: rb_str_new_cstr ( "hello\0 " . as_ptr ( ) as * const i8 ) ,
195+ ) ;
196+ rb_sys:: rb_ary_push (
197+ ary,
198+ rb_sys:: rb_str_new_cstr ( "world\0 " . as_ptr ( ) as * const i8 ) ,
199+ ) ;
200+ }
201+ let idx = 0 ;
202+
203+ assert_ne ! ( stable_api:: get_default( ) . version( ) , ( 0 , 0 ) ) ;
204+
205+ let rust_result = unsafe { stable_api:: get_default ( ) . rarray_aref ( ary, idx) } ;
206+ let compiled_c_result = unsafe { stable_api:: get_compiled ( ) . rarray_aref ( ary, idx) } ;
207+
208+ assert_eq ! (
209+ compiled_c_result, rust_result,
210+ "compiled_c was {:?}, rust was {:?}" ,
211+ compiled_c_result, rust_result
212+ ) ;
213+ }
214+
215+ #[ rb_sys_test_helpers:: ruby_test]
216+ fn test_rarray_aref_second_element ( ) {
217+ let ary = unsafe { rb_sys:: rb_ary_new_capa ( 3 ) } ;
218+ unsafe {
219+ rb_sys:: rb_ary_push (
220+ ary,
221+ rb_sys:: rb_str_new_cstr ( "hello\0 " . as_ptr ( ) as * const i8 ) ,
222+ ) ;
223+ rb_sys:: rb_ary_push (
224+ ary,
225+ rb_sys:: rb_str_new_cstr ( "world\0 " . as_ptr ( ) as * const i8 ) ,
226+ ) ;
227+ }
228+ let idx = 1 ;
229+
230+ assert_ne ! ( stable_api:: get_default( ) . version( ) , ( 0 , 0 ) ) ;
231+
232+ let rust_result = unsafe { stable_api:: get_default ( ) . rarray_aref ( ary, idx) } ;
233+ let compiled_c_result = unsafe { stable_api:: get_compiled ( ) . rarray_aref ( ary, idx) } ;
234+
235+ assert_eq ! (
236+ compiled_c_result, rust_result,
237+ "compiled_c was {:?}, rust was {:?}" ,
238+ compiled_c_result, rust_result
239+ ) ;
240+ }
241+
242+ #[ rb_sys_test_helpers:: ruby_test]
243+ fn test_rarray_aref_evaled ( ) {
244+ let ary = ruby_eval ! ( "[1, 2, 3]" ) ;
245+ let idx = 1 ;
246+
247+ assert_ne ! ( stable_api:: get_default( ) . version( ) , ( 0 , 0 ) ) ;
248+
249+ let rust_result = unsafe { stable_api:: get_default ( ) . rarray_aref ( ary, idx) } ;
250+ let compiled_c_result = unsafe { stable_api:: get_compiled ( ) . rarray_aref ( ary, idx) } ;
251+
252+ assert_eq ! (
253+ compiled_c_result, rust_result,
254+ "compiled_c was {:?}, rust was {:?}" ,
255+ compiled_c_result, rust_result
256+ ) ;
257+ }
258+
259+ #[ rb_sys_test_helpers:: ruby_test]
260+ fn test_rarray_aset_basic ( ) {
261+ let ary = unsafe { rb_sys:: rb_ary_new_capa ( 3 ) } ;
262+ unsafe {
263+ rb_sys:: rb_ary_push ( ary, rb_sys:: Qnil as rb_sys:: VALUE ) ;
264+ }
265+ let val = unsafe { rb_sys:: rb_str_new_cstr ( "test\0 " . as_ptr ( ) as * const i8 ) } ;
266+ let idx = 0 ;
267+
268+ assert_ne ! ( stable_api:: get_default( ) . version( ) , ( 0 , 0 ) ) ;
269+
270+ unsafe { stable_api:: get_default ( ) . rarray_aset ( ary, idx, val) } ;
271+ let rust_result = unsafe { stable_api:: get_default ( ) . rarray_aref ( ary, idx) } ;
272+
273+ // Reset for C test
274+ let ary2 = unsafe { rb_sys:: rb_ary_new_capa ( 3 ) } ;
275+ unsafe {
276+ rb_sys:: rb_ary_push ( ary2, rb_sys:: Qnil as rb_sys:: VALUE ) ;
277+ }
278+ unsafe { stable_api:: get_compiled ( ) . rarray_aset ( ary2, idx, val) } ;
279+ let compiled_c_result = unsafe { stable_api:: get_compiled ( ) . rarray_aref ( ary2, idx) } ;
280+
281+ assert_eq ! (
282+ compiled_c_result, rust_result,
283+ "compiled_c was {:?}, rust was {:?}" ,
284+ compiled_c_result, rust_result
285+ ) ;
286+ }
287+
288+ #[ rb_sys_test_helpers:: ruby_test]
289+ fn test_rarray_aset_replace ( ) {
290+ let ary = unsafe { rb_sys:: rb_ary_new_capa ( 3 ) } ;
291+ unsafe {
292+ rb_sys:: rb_ary_push ( ary, rb_sys:: rb_str_new_cstr ( "old\0 " . as_ptr ( ) as * const i8 ) ) ;
293+ rb_sys:: rb_ary_push (
294+ ary,
295+ rb_sys:: rb_str_new_cstr ( "value\0 " . as_ptr ( ) as * const i8 ) ,
296+ ) ;
297+ }
298+ let val = unsafe { rb_sys:: rb_str_new_cstr ( "new\0 " . as_ptr ( ) as * const i8 ) } ;
299+ let idx = 0 ;
300+
301+ assert_ne ! ( stable_api:: get_default( ) . version( ) , ( 0 , 0 ) ) ;
302+
303+ unsafe { stable_api:: get_default ( ) . rarray_aset ( ary, idx, val) } ;
304+ let rust_result = unsafe { stable_api:: get_default ( ) . rarray_aref ( ary, idx) } ;
305+
306+ // Reset for C test
307+ let ary2 = unsafe { rb_sys:: rb_ary_new_capa ( 3 ) } ;
308+ unsafe {
309+ rb_sys:: rb_ary_push ( ary2, rb_sys:: rb_str_new_cstr ( "old\0 " . as_ptr ( ) as * const i8 ) ) ;
310+ rb_sys:: rb_ary_push (
311+ ary2,
312+ rb_sys:: rb_str_new_cstr ( "value\0 " . as_ptr ( ) as * const i8 ) ,
313+ ) ;
314+ }
315+ unsafe { stable_api:: get_compiled ( ) . rarray_aset ( ary2, idx, val) } ;
316+ let compiled_c_result = unsafe { stable_api:: get_compiled ( ) . rarray_aref ( ary2, idx) } ;
317+
318+ assert_eq ! (
319+ compiled_c_result, rust_result,
320+ "compiled_c was {:?}, rust was {:?}" ,
321+ compiled_c_result, rust_result
322+ ) ;
323+ }
324+
325+ #[ rb_sys_test_helpers:: ruby_test]
326+ fn test_rarray_aset_evaled ( ) {
327+ let ary = ruby_eval ! ( "[1, 2, 3]" ) ;
328+ let val = ruby_eval ! ( "42" ) ;
329+ let idx = 1 ;
330+
331+ assert_ne ! ( stable_api:: get_default( ) . version( ) , ( 0 , 0 ) ) ;
332+
333+ unsafe { stable_api:: get_default ( ) . rarray_aset ( ary, idx, val) } ;
334+ let rust_result = unsafe { stable_api:: get_default ( ) . rarray_aref ( ary, idx) } ;
335+
336+ // Reset for C test
337+ let ary2 = ruby_eval ! ( "[1, 2, 3]" ) ;
338+ unsafe { stable_api:: get_compiled ( ) . rarray_aset ( ary2, idx, val) } ;
339+ let compiled_c_result = unsafe { stable_api:: get_compiled ( ) . rarray_aref ( ary2, idx) } ;
340+
341+ assert_eq ! (
342+ compiled_c_result, rust_result,
343+ "compiled_c was {:?}, rust was {:?}" ,
344+ compiled_c_result, rust_result
345+ ) ;
346+ }
347+
188348parity_test ! (
189349 name: test_rbasic_class_of_array,
190350 func: rbasic_class,
0 commit comments