1use strict;
2use warnings;
3use lib 't/lib';
4use Test::More;
5use Test::Fatal;
6
7use B;
8use Package::Stash;
9use Scalar::Util qw(reftype);
10use Symbol;
11
12my $Bar = Package::Stash->new('Bar');
13
14my $pviv = 3;
15$pviv =~ s/3/4/;
16isa_ok(B::svref_2object(\$pviv), 'B::PVIV');
17is(exception { $Bar->add_symbol('$pviv', \$pviv) }, undef,
18   "can add PVIV values");
19
20my $pvnv = 4.5;
21$pvnv =~ s/4/5/;
22isa_ok(B::svref_2object(\$pvnv), 'B::PVNV');
23is(exception { $Bar->add_symbol('$pvnv', \$pvnv) }, undef,
24   "can add PVNV values");
25
26my $pvmg = "foo";
27bless \$pvmg, 'Foo';
28isa_ok(B::svref_2object(\$pvmg), 'B::PVMG');
29is(exception { $Bar->add_symbol('$pvmg', \$pvmg) }, undef,
30   "can add PVMG values");
31
32my $regexp = qr/foo/;
33isa_ok(B::svref_2object($regexp), ($] < 5.012 ? 'B::PVMG' : 'B::REGEXP'));
34is(exception { $Bar->add_symbol('$regexp', $regexp) }, undef,
35   "can add REGEXP values");
36
37my $pvgv = Symbol::gensym;
38isa_ok(B::svref_2object($pvgv), 'B::GV');
39isnt(exception { $Bar->add_symbol('$pvgv', $pvgv) }, undef,
40     "can't add PVGV values");
41
42my $pvlv = "foo";
43isa_ok(B::svref_2object(\substr($pvlv, 0, 1)), 'B::PVLV');
44is(exception { $Bar->add_symbol('$pvlv', \substr($pvlv, 0, 1)) }, undef,
45   "can add PVLV values");
46
47my $vstring = v1.2.3;
48is(reftype(\$vstring), ($] < 5.010 ? 'SCALAR' : 'VSTRING'));
49is(exception { $Bar->add_symbol('$vstring', \$vstring) }, undef,
50   "can add vstring values");
51
52done_testing;
53