File Coverage

t/svapi/sv.cc
Criterion Covered Total %
statement 428 428 100.0
branch 1634 4246 38.4
condition n/a
subroutine n/a
pod n/a
total 2062 4674 44.1


line stmt bran cond sub pod time code
1             #include "test.h"
2             #include
3             using Test = TestSv;
4              
5             template
6 6           static void test_cast (SV* good, SV* bad) {
7 6           auto rcnt = SvREFCNT(good);
8 12           Sv o(good);
9 6 50         T* r = o;
    50          
    50          
    50          
    50          
10 6 50         REQUIRE(r == (T*)good);
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
11 6 50         REQUIRE(SvREFCNT(good) == rcnt+1);
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
12              
13 6 50         if (!bad) return;
    50          
    50          
    50          
    50          
    50          
14 5           auto rcnt_bad = SvREFCNT(bad);
15 5 50         o = bad;
    50          
    50          
    50          
    50          
    0          
16 5 50         REQUIRE(SvREFCNT(good) == rcnt);
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
17 5 50         REQUIRE(SvREFCNT(bad) == rcnt_bad+1);
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
18 6 50         REQUIRE((T*)o == nullptr);
    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          
    0          
    0          
    0          
    0          
    0          
    50          
    0          
    0          
19             }
20              
21             template
22 6           static void test_get (SV* good, SV* bad) {
23 6           auto rcnt = SvREFCNT(good);
24 12           Sv o(good);
25 6 50         REQUIRE(o.get() == (T*)good);
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
26 6 50         REQUIRE(SvREFCNT(good) == rcnt+1);
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
27              
28 6 50         if (!bad) return;
    50          
    50          
    50          
    50          
    50          
29 5           auto rcnt_bad = SvREFCNT(bad);
30 5 50         o = bad;
    50          
    50          
    50          
    50          
    0          
31 5 50         REQUIRE(SvREFCNT(good) == rcnt);
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
32 5 50         REQUIRE(SvREFCNT(bad) == rcnt_bad+1);
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
33 6 50         REQUIRE(o.get() == (T*)bad);
    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          
    50          
    0          
    0          
34             }
35              
36 97           TEST_CASE("Sv", "[Sv]") {
37 126 50         perlvars vars;
38 126           Sv my(vars.iv);
39              
40 79 50         SECTION("ctor") {
    50          
    50          
    50          
    100          
41 17 50         SECTION("empty") {
    50          
    50          
    50          
    100          
42 2           Sv sv;
43 1 50         REQUIRE(!sv);
    50          
    50          
    50          
    0          
    0          
44             }
45 17 50         SECTION("undef") {
    50          
    50          
    50          
    100          
46 2 50         auto sv = Sv::create();
47 1 50         REQUIRE(sv);
    50          
    50          
    50          
    0          
    0          
48 1 50         REQUIRE(!SvOK(sv));
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
49             }
50 16 50         SECTION("SV") { Test::ctor(vars.iv, behaviour_t::VALID); }
    50          
    50          
    50          
    100          
    50          
51 16 50         SECTION("AV") { Test::ctor(vars.av, behaviour_t::VALID); }
    50          
    50          
    50          
    100          
    50          
52 16 50         SECTION("HV") { Test::ctor(vars.hv, behaviour_t::VALID); }
    50          
    50          
    50          
    100          
    50          
53 16 50         SECTION("CV") { Test::ctor(vars.cv, behaviour_t::VALID); }
    50          
    50          
    50          
    100          
    50          
54 16 50         SECTION("GV") { Test::ctor(vars.gv, behaviour_t::VALID); }
    50          
    50          
    50          
    100          
    50          
55 16 50         SECTION("IO") { Test::ctor(vars.io, behaviour_t::VALID); }
    50          
    50          
    50          
    100          
    50          
56 16 50         SECTION("Sv") { Test::ctor(my, behaviour_t::VALID); }
    50          
    50          
    50          
    100          
    50          
57             }
58              
59 79 50         SECTION("operator=") {
    50          
    50          
    50          
    100          
60 32 50         auto o = Sv::create();
61 16 50         SECTION("SV") { Test::assign(o, vars.pv, behaviour_t::VALID); }
    50          
    50          
    50          
    100          
    50          
62 16 50         SECTION("AV") { Test::assign(o, vars.av, behaviour_t::VALID); }
    50          
    50          
    50          
    100          
    50          
63 16 50         SECTION("HV") { Test::assign(o, vars.hv, behaviour_t::VALID); }
    50          
    50          
    50          
    100          
    50          
64 16 50         SECTION("CV") { Test::assign(o, vars.cv, behaviour_t::VALID); }
    50          
    50          
    50          
    100          
    50          
65 16 50         SECTION("GV") { Test::assign(o, vars.gv, behaviour_t::VALID); }
    50          
    50          
    50          
    100          
    50          
66 16 50         SECTION("IO") { Test::assign(o, vars.io, behaviour_t::VALID); }
    50          
    50          
    50          
    100          
    50          
67 16 50         SECTION("Sv") { Test::assign(o, my, behaviour_t::VALID); }
    50          
    50          
    50          
    100          
    50          
68             }
69              
70 64 50         SECTION("reset") {
    50          
    50          
    50          
    100          
71 2           Sv sv;
72 1 50         REQUIRE(!sv);
    50          
    50          
    50          
    0          
    0          
73 1 50         sv.reset();
74 1 50         REQUIRE(!sv);
    50          
    50          
    50          
    0          
    0          
75              
76 1           auto cnt = SvREFCNT(vars.iv);
77 1 50         sv = vars.iv;
78 1 50         REQUIRE(SvREFCNT(vars.iv) == cnt+1);
    50          
    50          
    50          
    50          
    0          
    0          
79 1 50         sv.reset();
80 1 50         REQUIRE(!sv);
    50          
    50          
    50          
    0          
    0          
81 1 50         REQUIRE(SvREFCNT(vars.iv) == cnt);
    50          
    50          
    50          
    50          
    0          
    0          
82             }
83              
84 69 50         SECTION("cast") {
    50          
    50          
    50          
    100          
85 6 50         SECTION("to SV") { test_cast(vars.iv, NULL); }
    50          
    50          
    50          
    100          
    50          
86 6 50         SECTION("to AV") { test_cast((SV*)vars.av, vars.iv); }
    50          
    50          
    50          
    100          
    50          
87 6 50         SECTION("to HV") { test_cast((SV*)vars.hv, vars.pv); }
    50          
    50          
    50          
    100          
    50          
88 6 50         SECTION("to CV") { test_cast((SV*)vars.cv, vars.iv); }
    50          
    50          
    50          
    100          
    50          
89 6 50         SECTION("to GV") { test_cast((SV*)vars.gv, vars.iv); }
    50          
    50          
    50          
    100          
    50          
90 6 50         SECTION("to IO") { test_cast((SV*)vars.io, vars.iv); }
    50          
    50          
    50          
    100          
    50          
91             }
92              
93 69 50         SECTION("get") {
    50          
    50          
    50          
    100          
94 6 50         SECTION("SV") { test_get(vars.iv, NULL); }
    50          
    50          
    50          
    100          
    50          
95 6 50         SECTION("AV") { test_get((SV*)vars.av, vars.iv); }
    50          
    50          
    50          
    100          
    50          
96 6 50         SECTION("HV") { test_get((SV*)vars.hv, vars.pv); }
    50          
    50          
    50          
    100          
    50          
97 6 50         SECTION("CV") { test_get((SV*)vars.cv, vars.iv); }
    50          
    50          
    50          
    100          
    50          
98 6 50         SECTION("GV") { test_get((SV*)vars.gv, vars.iv); }
    50          
    50          
    50          
    100          
    50          
99 6 50         SECTION("IO") { test_get((SV*)vars.io, vars.iv); }
    50          
    50          
    50          
    100          
    50          
100             }
101              
102 63 50         SECTION("noinc") { Test::noinc(vars.iv, behaviour_t::VALID); }
    50          
    50          
    50          
    100          
    50          
103              
104 64 50         SECTION("to bool / defined / is_true") {
    50          
    50          
    50          
    100          
105 2           Sv sv;
106 1 50         REQUIRE(!sv);
    50          
    50          
    50          
    0          
    0          
107 1 50         REQUIRE(!sv.defined());
    50          
    50          
    50          
    0          
    0          
108 1 50         REQUIRE(!sv.is_true());
    50          
    50          
    50          
    50          
    0          
    0          
109              
110 1 50         sv = &PL_sv_undef;
111 1 50         REQUIRE(sv);
    50          
    50          
    50          
    0          
    0          
112 1 50         REQUIRE(!sv.defined());
    50          
    50          
    50          
    0          
    0          
113 1 50         REQUIRE(!sv.is_true());
    50          
    50          
    50          
    50          
    0          
    0          
114              
115 1 50         sv = sv_2mortal(newSViv(0));
    50          
    50          
116 1 50         REQUIRE(sv);
    50          
    50          
    50          
    0          
    0          
117 1 50         REQUIRE(sv.defined());
    50          
    50          
    50          
    0          
    0          
118 1 50         REQUIRE(!sv.is_true());
    50          
    50          
    50          
    50          
    0          
    0          
119              
120 1 50         sv = sv_2mortal(newSViv(10));
    50          
    50          
121 1 50         REQUIRE(sv);
    50          
    50          
    50          
    0          
    0          
122 1 50         REQUIRE(sv.defined());
    50          
    50          
    50          
    0          
    0          
123 1 50         REQUIRE(sv.is_true());
    50          
    50          
    50          
    50          
    0          
    0          
124              
125 1 50         sv = vars.av;
126 1 50         REQUIRE(sv);
    50          
    50          
    50          
    0          
    0          
127 1 50         REQUIRE(!sv.defined());
    50          
    50          
    50          
    0          
    0          
128 1 50         REQUIRE(!sv.is_true());
    50          
    50          
    50          
    50          
    0          
    0          
129              
130 1 50         sv = vars.hv;
131 1 50         REQUIRE(sv);
    50          
    50          
    50          
    0          
    0          
132 1 50         REQUIRE(!sv.defined());
    50          
    50          
    50          
    0          
    0          
133 1 50         REQUIRE(!sv.is_true());
    50          
    50          
    50          
    50          
    0          
    0          
134              
135 1 50         sv = vars.cv;
136 1 50         REQUIRE(sv);
    50          
    50          
    50          
    0          
    0          
137 1 50         REQUIRE(!sv.defined());
    50          
    50          
    50          
    0          
    0          
138 1 50         REQUIRE(!sv.is_true());
    50          
    50          
    50          
    50          
    0          
    0          
139              
140 1 50         sv = vars.gv;
141 1 50         REQUIRE(sv);
    50          
    50          
    50          
    0          
    0          
142 1 50         REQUIRE(sv.defined());
    50          
    50          
    50          
    0          
    0          
143 1 50         REQUIRE(sv.is_true());
    50          
    50          
    50          
    50          
    0          
    0          
144              
145 1 50         sv = vars.io;
146 1 50         REQUIRE(sv);
    50          
    50          
    50          
    0          
    0          
147 1 50         REQUIRE(!sv.defined());
    50          
    50          
    50          
    0          
    0          
148 1 50         REQUIRE(!sv.is_true());
    50          
    50          
    50          
    50          
    0          
    0          
149             }
150              
151 64 50         SECTION("type") {
    50          
    50          
    50          
    100          
152 2           Sv sv(vars.iv);
153 1 50         REQUIRE(sv.type() == SVt_IV);
    50          
    50          
    50          
    50          
    0          
    0          
154 1 50         sv = vars.pv;
155 1 50         REQUIRE(sv.type() == SVt_PV);
    50          
    50          
    50          
    50          
    0          
    0          
156 1 50         sv_setiv(sv, 10);
157 1 50         REQUIRE(sv.type() == SVt_PVIV);
    50          
    50          
    50          
    50          
    0          
    0          
158 1 50         sv = vars.av;
159 1 50         REQUIRE(sv.type() == SVt_PVAV);
    50          
    50          
    50          
    50          
    0          
    0          
160 1 50         sv = vars.hv;
161 1 50         REQUIRE(sv.type() == SVt_PVHV);
    50          
    50          
    50          
    50          
    0          
    0          
162 1 50         sv = vars.cv;
163 1 50         REQUIRE(sv.type() == SVt_PVCV);
    50          
    50          
    50          
    50          
    0          
    0          
164 1 50         sv = vars.ov;
165 1 50         REQUIRE(sv.type() == SVt_PVMG);
    50          
    50          
    50          
    50          
    0          
    0          
166 1 50         sv = vars.gv;
167 1 50         REQUIRE(sv.type() == SVt_PVGV);
    50          
    50          
    50          
    50          
    0          
    0          
168 1 50         sv = vars.io;
169 1 50         REQUIRE(sv.type() == SVt_PVIO);
    50          
    50          
    50          
    50          
    0          
    0          
170             }
171              
172 64 50         SECTION("readonly") {
    50          
    50          
    50          
    100          
173 1 50         REQUIRE(Sv::undef.readonly());
    50          
    50          
    50          
    0          
    0          
174 2           Sv sv(vars.iv);
175 1 50         REQUIRE(!sv.readonly());
    50          
    50          
    50          
    0          
    0          
176 1           sv.readonly(true);
177 1 50         REQUIRE(sv.readonly());
    50          
    50          
    50          
    0          
    0          
178 1           sv.readonly(false);
179 1 50         REQUIRE(!sv.readonly());
    50          
    50          
    50          
    0          
    0          
180             }
181              
182 64 50         SECTION("static undef/yes/no") {
    50          
    50          
    50          
    100          
183 1 50         REQUIRE(Sv::undef.readonly());
    50          
    50          
    50          
    0          
    0          
184 1 50         REQUIRE(Sv::yes.readonly());
    50          
    50          
    50          
    0          
    0          
185 1 50         REQUIRE(Sv::no.readonly());
    50          
    50          
    50          
    0          
    0          
186              
187 1 50         REQUIRE(Sv::undef);
    50          
    50          
    50          
    0          
    0          
188 1 50         REQUIRE(Sv::yes);
    50          
    50          
    50          
    0          
    0          
189 1 50         REQUIRE(Sv::no);
    50          
    50          
    50          
    0          
    0          
190              
191 1 50         REQUIRE(!Sv::undef.defined());
    50          
    50          
    50          
    0          
    0          
192 1 50         REQUIRE(Sv::yes.defined());
    50          
    50          
    50          
    0          
    0          
193 1 50         REQUIRE(Sv::no.defined());
    50          
    50          
    50          
    0          
    0          
194              
195 1 50         REQUIRE(!Sv::undef.defined());
    50          
    50          
    50          
    0          
    0          
196 1 50         REQUIRE(Sv::yes.is_true());
    50          
    50          
    50          
    50          
    0          
    0          
197 1 50         REQUIRE(!Sv::no.is_true());
    50          
    50          
    50          
    50          
    0          
    0          
198             }
199              
200 64 50         SECTION("upgrade") {
    50          
    50          
    50          
    100          
201 2 50         Sv sv = Sv::create();
202              
203 1 50         sv.upgrade(SVt_IV);
204 1 50         REQUIRE(sv.type() == SVt_IV);
    50          
    50          
    50          
    50          
    0          
    0          
205 1           SvIV_set(sv, 10);
206 1 50         REQUIRE(SvIVX(sv) == 10);
    50          
    50          
    50          
    50          
    0          
    0          
207              
208 1 50         sv.upgrade(SVt_PV);
209 1 50         REQUIRE(sv.type() == SVt_PVIV);
    50          
    50          
    50          
    50          
    0          
    0          
210              
211 1 50         sv = Sv::create();
212 1 50         sv.upgrade(SVt_PVAV);
213 1 50         REQUIRE(sv.type() == SVt_PVAV);
    50          
    50          
    50          
    50          
    0          
    0          
214 1 50         REQUIRE((AV*)sv);
    50          
    50          
    50          
    50          
    0          
    0          
215              
216 1 50         sv = Sv::create();
217 1 50         sv.upgrade(SVt_PVHV);
218 1 50         REQUIRE(sv.type() == SVt_PVHV);
    50          
    50          
    50          
    50          
    0          
    0          
219 1 50         REQUIRE((HV*)sv);
    50          
    50          
    50          
    50          
    0          
    0          
220             }
221              
222 64 50         SECTION("operator <<") {
    50          
    50          
    50          
    100          
223 2           Sv sv = vars.iv;
224 2 50         std::stringstream ss;
225 1 50         ss << sv << ' ';
    50          
226 1 50         REQUIRE(ss.str() == "1000 ");
    50          
    50          
    50          
    50          
    50          
    0          
    0          
227              
228 1 50         sv = vars.pv;
229 1 50         ss << sv << ' ';
    50          
230 1 50         REQUIRE(ss.str() == "1000 hello ");
    50          
    50          
    50          
    50          
    50          
    0          
    0          
231              
232 1 50         sv = vars.rv;
233 1 50         ss << sv << ' ';
    50          
234 1 50         REQUIRE(ss.str().substr(0, 18) == "1000 hello SCALAR(");
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
235             }
236              
237 64 50         SECTION("is_scalar") {
    50          
    50          
    50          
    100          
238 2           Sv o;
239 1 50         REQUIRE(!o.is_scalar());
    50          
    50          
    50          
    50          
    0          
    0          
240 1 50         REQUIRE(Sv::undef.is_scalar());
    50          
    50          
    50          
    50          
    0          
    0          
241 1 50         o = vars.iv;
242 1 50         REQUIRE(o.is_scalar());
    50          
    50          
    50          
    50          
    0          
    0          
243 1 50         o = vars.pv;
244 1 50         REQUIRE(o.is_scalar());
    50          
    50          
    50          
    50          
    0          
    0          
245 1 50         o = vars.av;
246 1 50         REQUIRE(!o.is_scalar());
    50          
    50          
    50          
    50          
    0          
    0          
247 1 50         o = vars.hv;
248 1 50         REQUIRE(!o.is_scalar());
    50          
    50          
    50          
    50          
    0          
    0          
249 1 50         o = vars.rv;
250 1 50         REQUIRE(o.is_scalar());
    50          
    50          
    50          
    50          
    0          
    0          
251 1 50         o = vars.cv;
252 1 50         REQUIRE(!o.is_scalar());
    50          
    50          
    50          
    50          
    0          
    0          
253 1 50         o = vars.ov;
254 1 50         REQUIRE(o.is_scalar());
    50          
    50          
    50          
    50          
    0          
    0          
255 1 50         o = vars.stash;
256 1 50         REQUIRE(!o.is_scalar());
    50          
    50          
    50          
    50          
    0          
    0          
257 1 50         o = vars.gv;
258 1 50         REQUIRE(o.is_scalar());
    50          
    50          
    50          
    50          
    0          
    0          
259 1 50         o = vars.io;
260 1 50         REQUIRE(!o.is_scalar());
    50          
    50          
    50          
    50          
    0          
    0          
261             }
262              
263 64 50         SECTION("is_ref") {
    50          
    50          
    50          
    100          
264 2           Sv o;
265 1 50         REQUIRE(!o.is_ref());
    50          
    50          
    50          
    0          
    0          
266 1 50         o = vars.iv;
267 1 50         REQUIRE(!o.is_ref());
    50          
    50          
    50          
    0          
    0          
268 1 50         o = vars.pv;
269 1 50         REQUIRE(!o.is_ref());
    50          
    50          
    50          
    0          
    0          
270 1 50         o = vars.av;
271 1 50         REQUIRE(!o.is_ref());
    50          
    50          
    50          
    0          
    0          
272 1 50         o = vars.hv;
273 1 50         REQUIRE(!o.is_ref());
    50          
    50          
    50          
    0          
    0          
274 1 50         o = vars.rv;
275 1 50         REQUIRE(o.is_ref());
    50          
    50          
    50          
    0          
    0          
276 1 50         o = vars.cv;
277 1 50         REQUIRE(!o.is_ref());
    50          
    50          
    50          
    0          
    0          
278 1 50         o = vars.ov;
279 1 50         REQUIRE(!o.is_ref());
    50          
    50          
    50          
    0          
    0          
280 1 50         o = vars.stash;
281 1 50         REQUIRE(!o.is_ref());
    50          
    50          
    50          
    0          
    0          
282 1 50         o = vars.gv;
283 1 50         REQUIRE(!o.is_ref());
    50          
    50          
    50          
    0          
    0          
284 1 50         o = vars.io;
285 1 50         REQUIRE(!o.is_ref());
    50          
    50          
    50          
    0          
    0          
286             }
287              
288 64 50         SECTION("is_simple") {
    50          
    50          
    50          
    100          
289 2           Sv o;
290 1 50         REQUIRE(!o.is_simple());
    50          
    50          
    50          
    0          
    0          
291 1 50         REQUIRE(Sv::undef.is_simple());
    50          
    50          
    50          
    0          
    0          
292 1 50         o = vars.iv;
293 1 50         REQUIRE(o.is_simple());
    50          
    50          
    50          
    0          
    0          
294 1 50         o = vars.pv;
295 1 50         REQUIRE(o.is_simple());
    50          
    50          
    50          
    0          
    0          
296 1 50         o = vars.av;
297 1 50         REQUIRE(!o.is_simple());
    50          
    50          
    50          
    0          
    0          
298 1 50         o = vars.hv;
299 1 50         REQUIRE(!o.is_simple());
    50          
    50          
    50          
    0          
    0          
300 1 50         o = vars.rv;
301 1 50         REQUIRE(!o.is_simple());
    50          
    50          
    50          
    0          
    0          
302 1 50         o = vars.cv;
303 1 50         REQUIRE(!o.is_simple());
    50          
    50          
    50          
    0          
    0          
304 1 50         o = vars.ov;
305 1 50         REQUIRE(o.is_simple());
    50          
    50          
    50          
    0          
    0          
306 1 50         o = vars.stash;
307 1 50         REQUIRE(!o.is_simple());
    50          
    50          
    50          
    0          
    0          
308 1 50         o = vars.gv;
309 1 50         REQUIRE(!o.is_simple());
    50          
    50          
    50          
    0          
    0          
310 1 50         o = vars.io;
311 1 50         REQUIRE(!o.is_simple());
    50          
    50          
    50          
    0          
    0          
312             }
313              
314 64 50         SECTION("is_array") {
    50          
    50          
    50          
    100          
315 2           Sv o;
316 1 50         REQUIRE(!o.is_array());
    50          
    50          
    50          
    0          
    0          
317 1 50         REQUIRE(!Sv::undef.is_array());
    50          
    50          
    50          
    0          
    0          
318 1 50         o = vars.iv;
319 1 50         REQUIRE(!o.is_array());
    50          
    50          
    50          
    0          
    0          
320 1 50         o = vars.pv;
321 1 50         REQUIRE(!o.is_array());
    50          
    50          
    50          
    0          
    0          
322 1 50         o = vars.av;
323 1 50         REQUIRE(o.is_array());
    50          
    50          
    50          
    0          
    0          
324 1 50         o = vars.hv;
325 1 50         REQUIRE(!o.is_array());
    50          
    50          
    50          
    0          
    0          
326 1 50         o = vars.rv;
327 1 50         REQUIRE(!o.is_array());
    50          
    50          
    50          
    0          
    0          
328 1 50         o = vars.cv;
329 1 50         REQUIRE(!o.is_array());
    50          
    50          
    50          
    0          
    0          
330 1 50         o = vars.oav;
331 1 50         REQUIRE(o.is_array());
    50          
    50          
    50          
    0          
    0          
332 1 50         o = vars.stash;
333 1 50         REQUIRE(!o.is_array());
    50          
    50          
    50          
    0          
    0          
334 1 50         o = vars.gv;
335 1 50         REQUIRE(!o.is_array());
    50          
    50          
    50          
    0          
    0          
336 1 50         o = vars.io;
337 1 50         REQUIRE(!o.is_array());
    50          
    50          
    50          
    0          
    0          
338             }
339              
340 64 50         SECTION("is_hash") {
    50          
    50          
    50          
    100          
341 2           Sv o;
342 1 50         REQUIRE(!o.is_hash());
    50          
    50          
    50          
    0          
    0          
343 1 50         REQUIRE(!Sv::undef.is_hash());
    50          
    50          
    50          
    0          
    0          
344 1 50         o = vars.iv;
345 1 50         REQUIRE(!o.is_hash());
    50          
    50          
    50          
    0          
    0          
346 1 50         o = vars.pv;
347 1 50         REQUIRE(!o.is_hash());
    50          
    50          
    50          
    0          
    0          
348 1 50         o = vars.av;
349 1 50         REQUIRE(!o.is_hash());
    50          
    50          
    50          
    0          
    0          
350 1 50         o = vars.hv;
351 1 50         REQUIRE(o.is_hash());
    50          
    50          
    50          
    0          
    0          
352 1 50         o = vars.rv;
353 1 50         REQUIRE(!o.is_hash());
    50          
    50          
    50          
    0          
    0          
354 1 50         o = vars.cv;
355 1 50         REQUIRE(!o.is_hash());
    50          
    50          
    50          
    0          
    0          
356 1 50         o = vars.ohv;
357 1 50         REQUIRE(o.is_hash());
    50          
    50          
    50          
    0          
    0          
358 1 50         o = vars.stash;
359 1 50         REQUIRE(o.is_hash());
    50          
    50          
    50          
    0          
    0          
360 1 50         o = vars.gv;
361 1 50         REQUIRE(!o.is_hash());
    50          
    50          
    50          
    0          
    0          
362 1 50         o = vars.io;
363 1 50         REQUIRE(!o.is_hash());
    50          
    50          
    50          
    0          
    0          
364             }
365              
366 64 50         SECTION("is_sub") {
    50          
    50          
    50          
    100          
367 2           Sv o;
368 1 50         REQUIRE(!o.is_sub());
    50          
    50          
    50          
    0          
    0          
369 1 50         REQUIRE(!Sv::undef.is_sub());
    50          
    50          
    50          
    0          
    0          
370 1 50         o = vars.iv;
371 1 50         REQUIRE(!o.is_sub());
    50          
    50          
    50          
    0          
    0          
372 1 50         o = vars.pv;
373 1 50         REQUIRE(!o.is_sub());
    50          
    50          
    50          
    0          
    0          
374 1 50         o = vars.av;
375 1 50         REQUIRE(!o.is_sub());
    50          
    50          
    50          
    0          
    0          
376 1 50         o = vars.hv;
377 1 50         REQUIRE(!o.is_sub());
    50          
    50          
    50          
    0          
    0          
378 1 50         o = vars.rv;
379 1 50         REQUIRE(!o.is_sub());
    50          
    50          
    50          
    0          
    0          
380 1 50         o = vars.cv;
381 1 50         REQUIRE(o.is_sub());
    50          
    50          
    50          
    0          
    0          
382 1 50         o = vars.ov;
383 1 50         REQUIRE(!o.is_sub());
    50          
    50          
    50          
    0          
    0          
384 1 50         o = vars.stash;
385 1 50         REQUIRE(!o.is_sub());
    50          
    50          
    50          
    0          
    0          
386 1 50         o = vars.gv;
387 1 50         REQUIRE(!o.is_sub());
    50          
    50          
    50          
    0          
    0          
388 1 50         o = vars.io;
389 1 50         REQUIRE(!o.is_sub());
    50          
    50          
    50          
    0          
    0          
390             }
391              
392 64 50         SECTION("is_object") {
    50          
    50          
    50          
    100          
393 2           Sv o;
394 1 50         REQUIRE(!o.is_object());
    50          
    50          
    50          
    0          
    0          
395 1 50         REQUIRE(!Sv::undef.is_object());
    50          
    50          
    50          
    0          
    0          
396 1 50         o = vars.iv;
397 1 50         REQUIRE(!o.is_object());
    50          
    50          
    50          
    0          
    0          
398 1 50         o = vars.pv;
399 1 50         REQUIRE(!o.is_object());
    50          
    50          
    50          
    0          
    0          
400 1 50         o = vars.av;
401 1 50         REQUIRE(!o.is_object());
    50          
    50          
    50          
    0          
    0          
402 1 50         o = vars.hv;
403 1 50         REQUIRE(!o.is_object());
    50          
    50          
    50          
    0          
    0          
404 1 50         o = vars.rv;
405 1 50         REQUIRE(!o.is_object());
    50          
    50          
    50          
    0          
    0          
406 1 50         o = vars.cv;
407 1 50         REQUIRE(!o.is_object());
    50          
    50          
    50          
    0          
    0          
408 1 50         o = vars.ov;
409 1 50         REQUIRE(o.is_object());
    50          
    50          
    50          
    0          
    0          
410 1 50         o = vars.stash;
411 1 50         REQUIRE(!o.is_object());
    50          
    50          
    50          
    0          
    0          
412 1 50         o = vars.gv;
413 1 50         REQUIRE(!o.is_object());
    50          
    50          
    50          
    0          
    0          
414 1 50         o = vars.io;
415 1 50         REQUIRE(o.is_object());
    50          
    50          
    50          
    0          
    0          
416             }
417              
418 64 50         SECTION("is_stash") {
    50          
    50          
    50          
    100          
419 2           Sv o;
420 1 50         REQUIRE(!o.is_stash());
    50          
    50          
    50          
    0          
    0          
421 1 50         REQUIRE(!Sv::undef.is_stash());
    50          
    50          
    50          
    0          
    0          
422 1 50         o = vars.iv;
423 1 50         REQUIRE(!o.is_stash());
    50          
    50          
    50          
    0          
    0          
424 1 50         o = vars.pv;
425 1 50         REQUIRE(!o.is_stash());
    50          
    50          
    50          
    0          
    0          
426 1 50         o = vars.av;
427 1 50         REQUIRE(!o.is_stash());
    50          
    50          
    50          
    0          
    0          
428 1 50         o = vars.hv;
429 1 50         REQUIRE(!o.is_stash());
    50          
    50          
    50          
    0          
    0          
430 1 50         o = vars.rv;
431 1 50         REQUIRE(!o.is_stash());
    50          
    50          
    50          
    0          
    0          
432 1 50         o = vars.cv;
433 1 50         REQUIRE(!o.is_stash());
    50          
    50          
    50          
    0          
    0          
434 1 50         o = vars.ov;
435 1 50         REQUIRE(!o.is_stash());
    50          
    50          
    50          
    0          
    0          
436 1 50         o = vars.stash;
437 1 50         REQUIRE(o.is_stash());
    50          
    50          
    50          
    0          
    0          
438 1 50         o = vars.gv;
439 1 50         REQUIRE(!o.is_stash());
    50          
    50          
    50          
    0          
    0          
440 1 50         o = vars.io;
441 1 50         REQUIRE(!o.is_stash());
    50          
    50          
    50          
    0          
    0          
442             }
443              
444 64 50         SECTION("is_glob") {
    50          
    50          
    50          
    100          
445 2           Sv o;
446 1 50         REQUIRE(!o.is_glob());
    50          
    50          
    50          
    0          
    0          
447 1 50         REQUIRE(!Sv::undef.is_glob());
    50          
    50          
    50          
    0          
    0          
448 1 50         o = vars.iv;
449 1 50         REQUIRE(!o.is_glob());
    50          
    50          
    50          
    0          
    0          
450 1 50         o = vars.pv;
451 1 50         REQUIRE(!o.is_glob());
    50          
    50          
    50          
    0          
    0          
452 1 50         o = vars.av;
453 1 50         REQUIRE(!o.is_glob());
    50          
    50          
    50          
    0          
    0          
454 1 50         o = vars.hv;
455 1 50         REQUIRE(!o.is_glob());
    50          
    50          
    50          
    0          
    0          
456 1 50         o = vars.rv;
457 1 50         REQUIRE(!o.is_glob());
    50          
    50          
    50          
    0          
    0          
458 1 50         o = vars.cv;
459 1 50         REQUIRE(!o.is_glob());
    50          
    50          
    50          
    0          
    0          
460 1 50         o = vars.ov;
461 1 50         REQUIRE(!o.is_glob());
    50          
    50          
    50          
    0          
    0          
462 1 50         o = vars.stash;
463 1 50         REQUIRE(!o.is_glob());
    50          
    50          
    50          
    0          
    0          
464 1 50         o = vars.gv;
465 1 50         REQUIRE(o.is_glob());
    50          
    50          
    50          
    0          
    0          
466 1 50         o = vars.io;
467 1 50         REQUIRE(!o.is_glob());
    50          
    50          
    50          
    0          
    0          
468             }
469              
470 64 50         SECTION("operator==") {
    50          
    50          
    50          
    100          
471 2           Sv o(vars.iv);
472 1 50         REQUIRE(o == vars.iv);
    50          
    50          
    50          
    50          
    0          
    0          
473 1 50         REQUIRE(vars.iv == o);
    50          
    50          
    50          
    50          
    0          
    0          
474 1 50         REQUIRE(o == Sv(vars.iv));
    50          
    50          
    50          
    50          
    0          
    0          
475 1 50         o = vars.av;
476 1 50         REQUIRE(o == vars.av);
    50          
    50          
    50          
    50          
    0          
    0          
477 1 50         REQUIRE(vars.av == o);
    50          
    50          
    50          
    50          
    0          
    0          
478 1 50         o = vars.hv;
479 1 50         REQUIRE(o == vars.hv);
    50          
    50          
    50          
    50          
    0          
    0          
480 1 50         REQUIRE(vars.hv == o);
    50          
    50          
    50          
    50          
    0          
    0          
481 1 50         o = vars.cv;
482 1 50         REQUIRE(o == vars.cv);
    50          
    50          
    50          
    50          
    0          
    0          
483 1 50         REQUIRE(vars.cv == o);
    50          
    50          
    50          
    50          
    0          
    0          
484 1 50         o = vars.gv;
485 1 50         REQUIRE(o == vars.gv);
    50          
    50          
    50          
    50          
    0          
    0          
486 1 50         REQUIRE(vars.gv == o);
    50          
    50          
    50          
    50          
    0          
    0          
487 1 50         o = vars.io;
488 1 50         REQUIRE(o == vars.io);
    50          
    50          
    50          
    50          
    0          
    0          
489 1 50         REQUIRE(vars.io == o);
    50          
    50          
    50          
    50          
    0          
    0          
490             }
491              
492 64 50         SECTION("detach") {
    50          
    50          
    50          
    100          
493 2           Sv o;
494 1 50         REQUIRE(o.detach() == nullptr);
    50          
    50          
    50          
    50          
    0          
    0          
495 1 50         o.reset();
496 1 50         o = vars.iv;
497 1           auto rcnt = o.use_count();
498 1           SV* sv = o.detach();
499 1 50         REQUIRE(sv == vars.iv);
    50          
    50          
    50          
    50          
    0          
    0          
500 1 50         REQUIRE(SvREFCNT(sv) == rcnt);
    50          
    50          
    50          
    50          
    0          
    0          
501 1 50         o.reset();
502 1 50         REQUIRE(SvREFCNT(sv) == rcnt);
    50          
    50          
    50          
    50          
    0          
    0          
503 1 50         SvREFCNT_dec(sv);
504             }
505 199 50         }
    50