File Coverage

Recursive.xs
Criterion Covered Total %
statement 10 13 76.9
branch 32 70 45.7
condition n/a
subroutine n/a
pod n/a
total 42 83 50.6


line stmt bran cond sub pod time code
1             #include
2             #include
3             #include
4             #include
5             #include
6              
7             using namespace xs;
8              
9             MODULE = Data::Recursive PACKAGE = Data::Recursive
10             PROTOTYPES: DISABLE
11              
12             BOOT {
13 14 50         Stash s(__PACKAGE__);
14 77 50         xs::exp::create_constants(s, {
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    100          
    0          
15             {"TRACK_REFS", CloneFlags::TRACK_REFS},
16             {"ARRAY_CONCAT", MergeFlags::ARRAY_CONCAT},
17             {"ARRAY_MERGE", MergeFlags::ARRAY_MERGE},
18             {"COPY_DEST", MergeFlags::COPY_DEST},
19             {"LAZY", MergeFlags::LAZY},
20             {"SKIP_UNDEF", MergeFlags::SKIP_UNDEF},
21             {"DELETE_UNDEF", MergeFlags::DELETE_UNDEF},
22             {"COPY_SOURCE", MergeFlags::COPY_SOURCE},
23             {"COPY_ALL", MergeFlags::COPY_ALL}
24 70 50         });
25             }
26              
27             Scalar lclone (SV* source) {
28 20 100         RETVAL = clone(source, 0);
    50          
29             }
30              
31             Scalar clone (SV* source, int flags = CloneFlags::TRACK_REFS) {
32 11 100         RETVAL = clone(source, flags);
    50          
33             }
34              
35             Scalar merge (SV* dest, SV* source, int flags = 0) {
36 8 50         RETVAL = merge(Sv(dest), Sv(source), flags);
    50          
37             }
38              
39             Scalar hash_merge (Hash dest, Hash source, int flags = 0) {
40 40 50         auto result = merge(dest, source, flags);
    100          
    50          
41 19 50         if (result == dest) RETVAL = ST(0); // hash not changed - return the same Ref for speed
    100          
    50          
42 5 50         else RETVAL = Ref::create(result);
43             }
44              
45             Scalar array_merge (Array dest, Array source, int flags = 0) {
46 0 0         auto result = merge(dest, source, flags);
    0          
    0          
47 0 0         if (result == dest) RETVAL = ST(0); // array not changed - return the same Ref for speed
    0          
    0          
48 0 0         else RETVAL = Ref::create(result);
49             }
50              
51 57 50         bool compare (Sv first, Sv second)