xref: /openbsd-src/gnu/usr.bin/perl/ext/XS-APItest/t/newAV.t (revision f2a19305cfc49ea4d1a5feb55cd6c283c6f1e031)
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