1#!perl 2 3use v5.36; 4use Test::More; 5 6use XS::APItest; 7 8my $plain_av = [1,2,3]; 9is_deeply newAVav($plain_av), [1,2,3], 'newAVav on plain array'; 10 11newAVav($plain_av)->[0]++; 12is $plain_av->[0], 1, 'newAVav returns fresh storage'; 13 14{ 15 package TiedArray { 16 sub TIEARRAY { return bless [], "TiedArray"; } 17 18 sub FETCHSIZE { return 3; } 19 sub FETCH { return $_[1] + 4; } 20 } 21 tie my @tied_av, "TiedArray"; 22 23 is_deeply newAVav(\@tied_av), [4,5,6], 'newAVav on tied array'; 24} 25 26# Just use one key at first so order doesn't matter 27my $plain_hv = {key => "value"}; 28is_deeply newAVhv($plain_hv), [key => "value"], 'newAVhv on plain hash'; 29 30newAVhv($plain_hv)->[1] .= "X"; 31is $plain_hv->{key}, "value", 'newAVhv returns fresh storage'; 32 33is_deeply [ sort +newAVhv({a => 1, b => 2, c => 3})->@* ], [ 1, 2, 3, "a", "b", "c" ], 34 'newAVhv on multiple keys'; 35 36{ 37 package TiedHash { 38 sub TIEHASH { return bless [], "TiedHash"; } 39 40 sub FETCH { return $_[1] eq "k" ? "v" : undef } 41 sub FIRSTKEY { return "k" } 42 sub NEXTKEY { return; } 43 } 44 tie my %tied_hv, "TiedHash"; 45 46 is_deeply newAVhv(\%tied_hv), [k => "v"], 'newAVhv on tied hash'; 47} 48 49done_testing; 50