File Coverage

t/svapi/glob.cc
Criterion Covered Total %
statement 196 203 96.5
branch 1492 3488 42.7
condition n/a
subroutine n/a
pod n/a
total 1688 3691 45.7


line stmt bran cond sub pod time code
1             #include "test.h"
2              
3             using Test = TestSv;
4              
5             template SV* _get_xv (const char* name);
6 0           template <> SV* _get_xv (const char* name) { return get_sv(name, 0); }
7 38           template <> SV* _get_xv (const char* name) { return get_sv(name, 0); }
8 22           template <> SV* _get_xv (const char* name) { return (SV*)get_av(name, 0); }
9 26           template <> SV* _get_xv (const char* name) { return (SV*)get_hv(name, 0); }
10 20           template <> SV* _get_xv (const char* name) { return (SV*)get_cv(name, 0); }
11 0           template <> SV* _get_xv (const char* name) {
12 0           panda::string code = "*";
13 0 0         code += name;
14 0 0         code += "{IO}";
15 0 0         auto ret = eval_pv(code.c_str(), 1);
    0          
16 0           return ret;
17             }
18              
19             template
20 11           void test_set_slot (Glob& o, T* sv) {
21 11 50         SV* initial = o.slot();
    50          
    50          
    50          
    50          
    50          
    50          
22 11           U32 icnt = 0;
23 11           if (initial) {
24 8           SvREFCNT_inc(initial);
25 8 50         sv_2mortal(initial);
    50          
    50          
    0          
    0          
    0          
    50          
26 8           icnt = SvREFCNT(initial);
27 8 50         REQUIRE(initial == _get_xv("M1::gv2set"));
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
28             }
29 11 100         auto cnt = sv ? SvREFCNT(sv) : 0;
    100          
    100          
    50          
    50          
    50          
    100          
30 11 50         o.slot(sv);
    50          
    50          
    50          
    50          
    50          
    50          
31 11 50         if (initial) REQUIRE(SvREFCNT(initial) == icnt-1);
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    50          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    50          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
32 11 100         if (sv) REQUIRE(SvREFCNT(sv) == cnt+1);
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    100          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    100          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    100          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
33 11 50         REQUIRE(o.slot() != initial);
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
34 11 50         REQUIRE(o.slot() == _get_xv("M1::gv2set"));
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
35 11           }
36              
37             template
38 22           void test_set_slot (Glob& o, const T& sv) {
39 22 50         SV* initial = o.slot();
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
40 22           U32 icnt = 0;
41 22           if (initial) {
42 12           SvREFCNT_inc(initial);
43 12 0         sv_2mortal(initial);
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    0          
    50          
44 12           icnt = SvREFCNT(initial);
45 12 0         REQUIRE(initial == _get_xv("M1::gv2set"));
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
46             }
47 22 50         auto cnt = sv ? SvREFCNT(sv) : 0;
    100          
    100          
    100          
    100          
    100          
    100          
    100          
    100          
    50          
    50          
    50          
    100          
48 22 50         o.slot(sv);
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
49 22 50         if (initial) REQUIRE(SvREFCNT(initial) == icnt-1);
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    100          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    100          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    100          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    100          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    100          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    50          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    50          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    100          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
50 22 50         if (sv) REQUIRE(SvREFCNT(sv) == cnt+1);
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    100          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    100          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    100          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    100          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    100          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    100          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    100          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    100          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    100          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
51 22 50         REQUIRE(o.slot() != initial);
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
52 22 50         REQUIRE(o.slot() == _get_xv("M1::gv2set"));
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
53 22           }
54              
55 146           TEST_CASE("Glob", "[Sv]") {
56 224 50         perlvars vars;
57 224 50         Glob my(vars.gv);
58 224           Sv oth_valid(vars.gv), oth_invalid(vars.hv);
59              
60 143 50         SECTION("ctor") {
    50          
    50          
    50          
    100          
61 32 50         SECTION("empty") {
    50          
    50          
    50          
    100          
62 2           Glob o;
63 1 50         REQUIRE(!o);
    50          
    50          
    50          
    0          
    0          
64             }
65 53 50         SECTION("SV") {
    50          
    50          
    50          
    100          
66 22 50         SECTION("undef") { Test::ctor(vars.undef, behaviour_t::EMPTY); }
    50          
    50          
    50          
    100          
    50          
67 22 50         SECTION("number") { Test::ctor(vars.iv, behaviour_t::THROWS); }
    50          
    50          
    50          
    100          
    50          
68 22 50         SECTION("string") { Test::ctor(vars.pv, behaviour_t::THROWS); }
    50          
    50          
    50          
    100          
    50          
69 22 50         SECTION("RV") { Test::ctor(vars.rv, behaviour_t::THROWS); }
    50          
    50          
    50          
    100          
    50          
70 22 50         SECTION("AV") { Test::ctor((SV*)vars.av, behaviour_t::THROWS); }
    50          
    50          
    50          
    100          
    50          
71 22 50         SECTION("HV") { Test::ctor((SV*)vars.hv, behaviour_t::THROWS); }
    50          
    50          
    50          
    100          
    50          
72 22 50         SECTION("OHV") { Test::ctor((SV*)vars.ohv, behaviour_t::THROWS); }
    50          
    50          
    50          
    100          
    50          
73 22 50         SECTION("SHV") { Test::ctor((SV*)vars.stash, behaviour_t::THROWS); }
    50          
    50          
    50          
    100          
    50          
74 22 50         SECTION("CV") { Test::ctor((SV*)vars.cv, behaviour_t::THROWS); }
    50          
    50          
    50          
    100          
    50          
75 22 50         SECTION("GV") { Test::ctor((SV*)vars.gv, behaviour_t::VALID); }
    50          
    50          
    50          
    100          
    50          
76 22 50         SECTION("IO") { Test::ctor((SV*)vars.io, behaviour_t::THROWS); }
    50          
    50          
    50          
    100          
    50          
77             }
78 31 50         SECTION("GV") { Test::ctor(vars.gv, behaviour_t::VALID); }
    50          
    50          
    50          
    100          
    50          
79              
80 31 50         SECTION("Glob") { Test::ctor(my, behaviour_t::VALID); }
    50          
    50          
    50          
    100          
    50          
81 31 50         SECTION("valid Sv") { Test::ctor(oth_valid, behaviour_t::VALID); }
    50          
    50          
    50          
    100          
    50          
82 31 50         SECTION("invalid Sv") { Test::ctor(oth_invalid, behaviour_t::THROWS); }
    50          
    50          
    50          
    100          
    50          
83             }
84              
85 148 50         SECTION("operator=") {
    50          
    50          
    50          
    100          
86 72 50         Glob o((GV*)(*hv_fetchs(vars.stash, "_dummy", GV_ADD)));
    50          
87 58 50         SECTION("SV") {
    50          
    50          
    50          
    100          
88 22 50         SECTION("undef SV") { Test::assign(o, vars.undef, behaviour_t::EMPTY); }
    50          
    50          
    50          
    100          
    50          
89 22 50         SECTION("number SV") { Test::assign(o, vars.iv, behaviour_t::THROWS); }
    50          
    50          
    50          
    100          
    50          
90 22 50         SECTION("string SV") { Test::assign(o, vars.pv, behaviour_t::THROWS); }
    50          
    50          
    50          
    100          
    50          
91 22 50         SECTION("RV") { Test::assign(o, vars.rv, behaviour_t::THROWS); }
    50          
    50          
    50          
    100          
    50          
92 22 50         SECTION("AV") { Test::assign(o, (SV*)vars.av, behaviour_t::THROWS); }
    50          
    50          
    50          
    100          
    50          
93 22 50         SECTION("HV") { Test::assign(o, (SV*)vars.hv, behaviour_t::THROWS); }
    50          
    50          
    50          
    100          
    50          
94 22 50         SECTION("OHV") { Test::assign(o, (SV*)vars.ohv, behaviour_t::THROWS); }
    50          
    50          
    50          
    100          
    50          
95 22 50         SECTION("SHV") { Test::assign(o, (SV*)vars.stash, behaviour_t::THROWS); }
    50          
    50          
    50          
    100          
    50          
96 22 50         SECTION("CV") { Test::assign(o, (SV*)vars.cv, behaviour_t::THROWS); }
    50          
    50          
    50          
    100          
    50          
97 22 50         SECTION("GV") { Test::assign(o, (SV*)vars.gv, behaviour_t::VALID); }
    50          
    50          
    50          
    100          
    50          
98 22 50         SECTION("IO") { Test::assign(o, (SV*)vars.io, behaviour_t::THROWS); }
    50          
    50          
    50          
    100          
    50          
99             }
100 36 50         SECTION("GV") { Test::assign(o, vars.gv, behaviour_t::VALID); }
    50          
    50          
    50          
    100          
    50          
101 36 50         SECTION("Glob") { Test::assign(o, my, behaviour_t::VALID); }
    50          
    50          
    50          
    100          
    50          
102 36 50         SECTION("valid Sv") { Test::assign(o, oth_valid, behaviour_t::VALID); }
    50          
    50          
    50          
    100          
    50          
103 36 50         SECTION("invalid Sv") { Test::assign(o, oth_invalid, behaviour_t::THROWS); }
    50          
    50          
    50          
    100          
    50          
104             }
105              
106 113 50         SECTION("set") {
    50          
    50          
    50          
    100          
107 2           Glob o;
108 1           auto cnt = SvREFCNT(vars.iv);
109 1 50         o.set(vars.iv); // no checks
110 1 50         REQUIRE(o);
    50          
    50          
    50          
    0          
    0          
111 1 50         REQUIRE(SvREFCNT(vars.iv) == cnt+1);
    50          
    50          
    50          
    50          
    0          
    0          
112 1 50         REQUIRE(o.get() == vars.iv);
    50          
    50          
    50          
    50          
    0          
    0          
113             }
114              
115 114 50         SECTION("cast") {
    50          
    50          
    50          
    100          
116 4 50         Glob o(vars.gv);
117 2           auto rcnt = SvREFCNT(vars.gv);
118 3 50         SECTION("to SV") {
    50          
    50          
    50          
    100          
119 1           SV* sv = o;
120 1 50         REQUIRE(sv == (SV*)vars.gv);
    50          
    50          
    50          
    50          
    0          
    0          
121 1 50         REQUIRE(SvREFCNT(vars.gv) == rcnt);
    50          
    50          
    50          
    50          
    0          
    0          
122             }
123 3 50         SECTION("to GV") {
    50          
    50          
    50          
    100          
124 1           GV* sv = o;
125 1 50         REQUIRE(sv == vars.gv);
    50          
    50          
    50          
    50          
    0          
    0          
126 1 50         REQUIRE(SvREFCNT(vars.gv) == rcnt);
    50          
    50          
    50          
    50          
    0          
    0          
127             }
128             }
129              
130 113 50         SECTION("get") {
    50          
    50          
    50          
    100          
131 2 50         Glob o(vars.gv);
132 1           auto rcnt = SvREFCNT(vars.gv);
133 1 50         REQUIRE(o.get<>() == (SV*)vars.gv);
    50          
    50          
    50          
    50          
    0          
    0          
134 1 50         REQUIRE(o.get() == (SV*)vars.gv);
    50          
    50          
    50          
    50          
    0          
    0          
135 1 50         REQUIRE(o.get() == vars.gv);
    50          
    50          
    50          
    50          
    0          
    0          
136 1 50         REQUIRE(SvREFCNT(vars.gv) == rcnt);
    50          
    50          
    50          
    50          
    0          
    0          
137             }
138              
139 113 50         SECTION("name/effective_name") {
    50          
    50          
    50          
    100          
140 1 50         REQUIRE(my.name() == "class_method");
    50          
    50          
    50          
    50          
    0          
    0          
141 1 50         REQUIRE(my.effective_name() == "class_method");
    50          
    50          
    50          
    50          
    0          
    0          
142             }
143              
144 113 50         SECTION("stash/effective_stash") {
    50          
    50          
    50          
    100          
145 1 50         REQUIRE(my.stash() == vars.stash);
    50          
    50          
    50          
    50          
    50          
    0          
    0          
146 1 50         REQUIRE(my.effective_stash() == vars.stash);
    50          
    50          
    50          
    50          
    50          
    0          
    0          
147             }
148              
149 113 50         SECTION("get slot") {
    50          
    50          
    50          
    100          
150 2 50         Glob o = Stash(vars.stash)["allgv"];
    50          
151 1 50         REQUIRE(o.slot());
    50          
    50          
    50          
    50          
    0          
    0          
152 1 50         REQUIRE(Simple(o.slot()) == "scalar");
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
153              
154 1 50         REQUIRE(o.slot());
    50          
    50          
    50          
    50          
    0          
    0          
155 1 50         REQUIRE(Simple(o.slot()[0]) == "array");
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
156              
157 1 50         REQUIRE(o.slot());
    50          
    50          
    50          
    50          
    0          
    0          
158 1 50         REQUIRE(Simple(o.slot()["key"]) == "hash");
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
159              
160 1 50         REQUIRE(o.slot());
    50          
    50          
    50          
    50          
    0          
    0          
161 1 50         REQUIRE(o.slot() == get_cv("M1::allgv", 0));
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
162             }
163              
164 145 50         SECTION("set slot") {
    50          
    50          
    50          
    100          
165 66 50         Glob o = Stash(vars.stash)["gv2set"];
    50          
166 38 50         SECTION("SV") {
    50          
    50          
    50          
    100          
167 5 50         SECTION("simple") { test_set_slot(o, Simple(100).get()); }
    50          
    50          
    50          
    100          
    50          
    50          
168 5 50         SECTION("nullify") { test_set_slot(o, (SV*)NULL); }
    50          
    50          
    50          
    100          
    50          
169 5 50         SECTION("AV") { test_set_slot(o, Array::create().get()); }
    50          
    50          
    50          
    100          
    50          
    50          
170 5 50         SECTION("HV") { test_set_slot(o, Hash::create().get()); }
    50          
    50          
    50          
    100          
    50          
    50          
171 5 50         SECTION("CV") { test_set_slot(o, Sub("M1::dummy").get()); }
    50          
    50          
    50          
    100          
    50          
    50          
172             }
173 33 50         SECTION("AV") { test_set_slot(o, Array::create().get()); }
    50          
    50          
    50          
    100          
    50          
    50          
174 33 50         SECTION("AV-nullify") { test_set_slot(o, (AV*)NULL); }
    50          
    50          
    50          
    100          
    50          
175 33 50         SECTION("HV") { test_set_slot(o, Hash::create().get()); }
    50          
    50          
    50          
    100          
    50          
    50          
176 33 50         SECTION("HV-nullify") { test_set_slot(o, (HV*)NULL); }
    50          
    50          
    50          
    100          
    50          
177 33 50         SECTION("CV") { test_set_slot(o, Sub("M1::dummy2").get()); }
    50          
    50          
    50          
    100          
    50          
    50          
178 33 50         SECTION("CV-nullify") { test_set_slot(o, (CV*)NULL); }
    50          
    50          
    50          
    100          
    50          
179 38 50         SECTION("Sv") {
    50          
    50          
    50          
    100          
180 5 50         SECTION("simple") { test_set_slot(o, static_cast(Simple(100))); }
    50          
    50          
    50          
    100          
    50          
    50          
181 5 50         SECTION("nullify") { test_set_slot(o, Sv()); }
    50          
    50          
    50          
    100          
    50          
182 5 50         SECTION("AV") { test_set_slot(o, static_cast(Array::create())); }
    50          
    50          
    50          
    100          
    50          
    50          
183 5 50         SECTION("HV") { test_set_slot(o, static_cast(Hash::create())); }
    50          
    50          
    50          
    100          
    50          
    50          
184 5 50         SECTION("CV") { test_set_slot(o, static_cast(Sub("M1::dummy"))); }
    50          
    50          
    50          
    100          
    50          
    50          
185             }
186 33 50         SECTION("Scalar") { test_set_slot(o, Scalar(Simple(200))); }
    50          
    50          
    50          
    100          
    50          
    50          
187 33 50         SECTION("Scalar-nullify") { test_set_slot(o, Scalar()); }
    50          
    50          
    50          
    100          
    50          
188 33 50         SECTION("Simple") { test_set_slot(o, Simple(200)); }
    50          
    50          
    50          
    100          
    50          
    50          
189 33 50         SECTION("Simple-nullify") { test_set_slot(o, Simple()); }
    50          
    50          
    50          
    100          
    50          
190 33 50         SECTION("Ref") { test_set_slot(o, Ref::create(Simple(200))); }
    50          
    50          
    50          
    100          
    50          
    50          
    50          
191 33 50         SECTION("Ref-nullify") { test_set_slot(o, Ref()); }
    50          
    50          
    50          
    100          
    50          
192 33 50         SECTION("Array") { test_set_slot(o, Array::create()); }
    50          
    50          
    50          
    100          
    50          
    50          
193 33 50         SECTION("Array-nullify") { test_set_slot(o, Array()); }
    50          
    50          
    50          
    100          
    50          
194 33 50         SECTION("Hash") { test_set_slot(o, Hash::create()); }
    50          
    50          
    50          
    100          
    50          
    50          
195 33 50         SECTION("Hash-nullify") { test_set_slot(o, Hash()); }
    50          
    50          
    50          
    100          
    50          
196 33 50         SECTION("Stash") { test_set_slot(o, Stash(vars.stash)); }
    50          
    50          
    50          
    100          
    50          
    50          
197 33 50         SECTION("Stash-nullify") { test_set_slot(o, Stash()); }
    50          
    50          
    50          
    100          
    50          
198 33 50         SECTION("Sub") { test_set_slot(o, Sub("M1::dummy2")); }
    50          
    50          
    50          
    100          
    50          
    50          
199 33 50         SECTION("Sub-nullify") { test_set_slot(o, Sub()); }
    50          
    50          
    50          
    100          
    50          
200 33 50         SECTION("Object-Scalar") { test_set_slot(o, Object(vars.ov)); }
    50          
    50          
    50          
    100          
    50          
    50          
201 33 50         SECTION("Object-Nullify") { test_set_slot(o, Object()); }
    50          
    50          
    50          
    100          
    50          
202 33 50         SECTION("Object-Array") { test_set_slot(o, Object(vars.oav)); o.slot(Array()); }
    50          
    50          
    50          
    100          
    50          
    50          
    50          
203             }
204              
205 113 50         SECTION("create") {
    50          
    50          
    50          
    100          
206 2 50         Stash stash(vars.stash);
207 2 50         auto glob = Glob::create(stash, "autogen");
208 1 50         REQUIRE(glob);
    50          
    50          
    50          
    0          
    0          
209 1 50         REQUIRE(glob.stash() == vars.stash);
    50          
    50          
    50          
    50          
    50          
    0          
    0          
210 1 50         REQUIRE(glob.name() == "autogen");
    50          
    50          
    50          
    50          
    0          
    0          
211 1 50         glob.slot(Sub("M1::dummy"));
    50          
212 1 50         stash["aliased"] = glob;
    50          
213 1 50         REQUIRE(get_cv("M1::dummy", 0) == get_cv("M1::aliased", 0));
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
214             }
215              
216 113 50         SECTION("scalar") {
    50          
    50          
    50          
    100          
217 2           Glob o;
218 1 50         REQUIRE(!o.scalar());
    50          
    50          
    50          
    50          
    0          
    0          
219 1 50         o = Stash(vars.stash)["gv2set"];
    50          
220 2 50         auto v = Simple(200);
221 1 50         o.scalar(v);
222 1 50         REQUIRE(o.slot() == v);
    50          
    50          
    50          
    50          
    50          
    0          
    0          
223 1 50         REQUIRE(o.scalar() == v);
    50          
    50          
    50          
    50          
    50          
    0          
    0          
224             }
225              
226 113 50         SECTION("array") {
    50          
    50          
    50          
    100          
227 2           Glob o;
228 1 50         REQUIRE(!o.array());
    50          
    50          
    50          
    50          
    0          
    0          
229 1 50         o = Stash(vars.stash)["gv2set"];
    50          
230 2 50         auto v = Array::create();
231 1 50         o.array(v);
232 1 50         REQUIRE(o.slot() == v);
    50          
    50          
    50          
    50          
    50          
    0          
    0          
233 1 50         REQUIRE(o.array() == v);
    50          
    50          
    50          
    50          
    50          
    0          
    0          
234             }
235              
236 113 50         SECTION("hash") {
    50          
    50          
    50          
    100          
237 2           Glob o;
238 1 50         REQUIRE(!o.hash());
    50          
    50          
    50          
    50          
    0          
    0          
239 1 50         o = Stash(vars.stash)["gv2set"];
    50          
240 2 50         auto v = Hash::create();
241 1 50         o.hash(v);
242 1 50         REQUIRE(o.slot() == v);
    50          
    50          
    50          
    50          
    50          
    0          
    0          
243 1 50         REQUIRE(o.hash() == v);
    50          
    50          
    50          
    50          
    50          
    0          
    0          
244             }
245              
246 113 50         SECTION("sub") {
    50          
    50          
    50          
    100          
247 2           Glob o;
248 1 50         REQUIRE(!o.sub());
    50          
    50          
    50          
    50          
    0          
    0          
249 1 50         o = Stash(vars.stash)["gv2set"];
    50          
250 2 50         auto v = Sub("M1::dummy");
251 1 50         o.sub(v);
252 1 50         REQUIRE(o.slot() == v);
    50          
    50          
    50          
    50          
    50          
    0          
    0          
253 1 50         REQUIRE(o.sub() == v);
    50          
    50          
    50          
    50          
    50          
    0          
    0          
254             }
255 248 50         }
    50