6 if (! $Config{'useithreads'}) {
7 print("1..0 # SKIP Perl not compiled with 'useithreads'\n");
12 use ExtUtils::testlib;
15 my ($id, $ok, $name) = @_;
17 # You have to do it this way or VMS will get confused.
19 print("ok $id - $name\n");
22 print("not ok $id - $name\n");
23 printf("# Failed test at line %d\n", (caller)[2]);
31 print("1..19\n"); ### Number of tests that will be run ###
34 use Scalar::Util qw(dualvar);
41 ### Start of Testing ###
43 my $dv = dualvar(42, 'Fourty-Two');
44 my $pi = dualvar(3.14, 'PI');
48 # Individual assignment
49 # Verify that dualvar preserved during individual element assignment
53 ok(2, $a[0] == 42, 'IV number preserved');
54 ok(3, $a[0] eq 'Fourty-Two', 'string preserved');
55 ok(4, $a[1] == 3.14, 'NV number preserved');
56 ok(5, $a[1] eq 'PI', 'string preserved');
59 # Verify that dualvar preserved during initialization
60 my @a2 :shared = ($dv, $pi);
62 ok(6, $a2[0] == 42, 'IV number preserved');
63 ok(7, $a2[0] eq 'Fourty-Two', 'string preserved');
64 ok(8, $a2[1] == 3.14, 'NV number preserved');
65 ok(9, $a2[1] eq 'PI', 'string preserved');
68 # Verify that dualvar preserved during list assignment
69 my @a3 :shared = (0, 0);
72 ok(10, $a3[0] == 42, 'IV number preserved');
73 ok(11, $a3[0] eq 'Fourty-Two', 'string preserved');
74 ok(12, $a3[1] == 3.14, 'NV number preserved');
75 ok(13, $a3[1] eq 'PI', 'string preserved');
78 # Verify that entries are still dualvar when leaving the array
80 ok(14, $nsa[0] == 42, 'IV number preserved');
81 ok(15, $nsa[0] eq 'Fourty-Two', 'string preserved');
82 ok(16, $nsa[1] == 3.14, 'NV number preserved');
83 ok(17, $nsa[1] eq 'PI', 'string preserved');
85 # $! behaves like a dualvar, but is really implemented as a tied SV.
86 # As a result sharing $! directly only propagates the string value.
87 # However, we can create a dualvar from it.
89 my $ss :shared = dualvar($!,$!);
90 ok(18, $ss == 1, 'IV number preserved');
91 ok(19, $ss eq $!, 'string preserved');