• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

biojppm / rapidyaml / 18062142151

27 Sep 2025 04:22PM UTC coverage: 97.35% (+0.04%) from 97.312%
18062142151

Pull #536

github

web-flow
Merge 66a33ee20 into 9a044c88b
Pull Request #536: Int handler

959 of 990 new or added lines in 15 files covered. (96.87%)

2 existing lines in 1 file now uncovered.

13007 of 13361 relevant lines covered (97.35%)

765169.41 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

98.47
/src_extra/c4/yml/extra/event_handler_ints_utils.cpp
1
#ifndef _C4_YML_EXTRA_EVENT_HANDLER_INTS_UTILS_HPP_
2
#include "c4/yml/extra/event_handler_ints_utils.hpp"
3
#endif
4

5
#ifndef _C4_YML_EXTRA_SCALAR_HPP_
6
#include "c4/yml/extra/scalar.hpp"
7
#endif
8

9
C4_SUPPRESS_WARNING_GCC_WITH_PUSH("-Wold-style-cast")
10
C4_SUPPRESS_WARNING_CLANG_WITH_PUSH("-Wold-style-cast")
11
// NOLINTBEGIN(hicpp-signed-bitwise)
12

13
namespace c4 {
14
namespace yml {
15
namespace extra {
16

17
void print_events_ints(csubstr parsed_yaml, csubstr arena, ievt::DataType const* evts, ievt::DataType evts_sz)
13,880✔
18
{
19
    char buf[200];
20
    for(ievt::DataType evtpos = 0, evtnumber = 0;
13,880✔
21
        evtpos < evts_sz;
214,340✔
22
        ++evtnumber,
200,460✔
23
            evtpos += ((evts[evtpos] & ievt::WSTR) ? 3 : 1))
200,460✔
24
    {
25
        ievt::DataType evt = evts[evtpos];
200,460✔
26
        {
27
            csubstr str = ievt::mkstring(evt, buf);
200,460✔
28
            printf("[%d][%d] %.*s(0x%x)", evtnumber, evtpos, (int)str.len, str.str, evt);
200,460✔
29
        }
30
        if (evt & ievt::WSTR)
200,460✔
31
        {
32
            bool in_arena = evt & ievt::AREN;
84,932✔
33
            csubstr region = !in_arena ? parsed_yaml : arena;
84,932✔
34
            bool safe = (evts[evtpos + 1] >= 0)
169,864✔
35
                && (evts[evtpos + 2] >= 0)
84,932✔
36
                && (evts[evtpos + 1] <= (int)region.len)
84,932✔
37
                && ((evts[evtpos + 1] + evts[evtpos + 2]) <= (int)region.len);
169,864✔
38
            const char *str = safe ? (region.str + evts[evtpos + 1]) : "ERR!!!";
84,932✔
39
            int len = safe ? evts[evtpos + 2] : 6;
84,932✔
40
            printf(": %d [%d]~~~%.*s~~~", evts[evtpos+1], evts[evtpos+2], len, str);
84,932✔
41
            if(in_arena)
84,932✔
42
                printf(" (arenasz=%zu)", arena.len);
512✔
43
            else
44
                printf(" (srcsz=%zu)", parsed_yaml.len);
84,420✔
45
        }
46
        printf("\n");
200,460✔
47
    }
48
}
13,880✔
49

50
size_t emit_events_test_suite_from_ints(csubstr parsed_yaml,
63,664✔
51
                                        csubstr arena,
52
                                        ievt::DataType const* evts_ints,
53
                                        ievt::DataType evts_ints_sz,
54
                                        substr evts_test_suite)
55
{
56
    auto getstr = [&](ievt::DataType i){
411,200✔
57
        bool in_arena = evts_ints[i] & ievt::AREN;
411,200✔
58
        csubstr region = !in_arena ? parsed_yaml : arena;
411,200✔
59
        return region.sub((size_t)evts_ints[i+1], (size_t)evts_ints[i+2]);
822,400✔
60
    };
63,664✔
61
    size_t sz = 0;
63,664✔
62
    auto append = [&](csubstr s){
2,244,000✔
63
        size_t next = sz + s.len;
2,244,000✔
64
        if (s.len && (next <= evts_test_suite.len && evts_test_suite.len))
2,244,000✔
65
            memcpy(evts_test_suite.str + sz, s.str, s.len);
1,121,992✔
66
        sz = next;
2,244,000✔
67
    };
2,307,664✔
68
    bool has_tag = false;
63,664✔
69
    csubstr tag;
63,664✔
70
    auto maybe_append_tag = [&]{
454,112✔
71
        if(has_tag)
454,112✔
72
        {
73
            if(tag.begins_with('<'))
39,632✔
74
            {
NEW
75
                append(" ");
×
NEW
76
                append(tag);
×
77
            }
78
            else if(tag.begins_with("!<"))
39,632✔
79
            {
80
                append(" ");
560✔
81
                append(tag.sub(1));
1,120✔
82
            }
83
            else if(tag.begins_with('!'))
39,072✔
84
            {
85
                append(" <");
37,552✔
86
                append(tag);
37,552✔
87
                append(">");
37,552✔
88
            }
89
            else
90
            {
91
                append(" <!");
1,520✔
92
                append(tag);
1,520✔
93
                append(">");
1,520✔
94
            }
95
        }
96
        has_tag = false;
454,112✔
97
    };
517,776✔
98
    bool has_anchor = false;
63,664✔
99
    csubstr anchor;
63,664✔
100
    auto maybe_append_anchor = [&]{
454,112✔
101
        if(has_anchor)
454,112✔
102
        {
103
            append(" &");
39,408✔
104
            append(anchor);
39,408✔
105
        }
106
        has_anchor = false;
454,112✔
107
    };
517,776✔
108
    auto append_cont = [&](csubstr evt, csubstr style){
128,032✔
109
        append(evt);
128,032✔
110
        if(style.len)
128,032✔
111
        {
112
            append(" ");
34,912✔
113
            append(style);
34,912✔
114
        }
115
        maybe_append_anchor();
128,032✔
116
        maybe_append_tag();
128,032✔
117
        append("\n");
128,032✔
118
    };
191,696✔
119
    auto append_val = [&](csubstr evt, csubstr val){
326,080✔
120
        append("=VAL");
326,080✔
121
        maybe_append_anchor();
326,080✔
122
        maybe_append_tag();
326,080✔
123
        append(" ");
326,080✔
124
        append(evt);
326,080✔
125
        substr buf = sz <= evts_test_suite.len ? evts_test_suite.sub(sz) : evts_test_suite.last(0);
489,120✔
126
        sz += escape_scalar(buf, val);
326,080✔
127
        append("\n");
326,080✔
128
    };
326,080✔
129
    for(ievt::DataType i = 0; i < evts_ints_sz; )
1,001,296✔
130
    {
131
        ievt::DataType evt = evts_ints[i];
937,632✔
132
        if(evt & ievt::SCLR)
937,632✔
133
        {
134
            csubstr s = getstr(i);
326,080✔
135
            if(evt & ievt::SQUO)
326,080✔
136
                append_val("'", s);
6,256✔
137
            else if(evt & ievt::DQUO)
319,824✔
138
                append_val("\"", s);
15,344✔
139
            else if(evt & ievt::LITL)
304,480✔
140
                append_val("|", s);
9,456✔
141
            else if(evt & ievt::FOLD)
295,024✔
142
                append_val(">", s);
5,648✔
143
            else //if(evt & ievt::PLAI)
144
                append_val(":", s);
289,376✔
145
        }
146
        else if(evt & ievt::BSEQ)
611,552✔
147
        {
148
            if(evt & ievt::FLOW)
42,016✔
149
                append_cont("+SEQ", "[]");
15,584✔
150
            else
151
                append_cont("+SEQ", "");
26,432✔
152
        }
153
        else if(evt & ievt::ESEQ)
569,536✔
154
        {
155
            append("-SEQ\n");
42,016✔
156
        }
157
        else if(evt & ievt::BMAP)
527,520✔
158
        {
159
            if(evt & ievt::FLOW)
86,016✔
160
                append_cont("+MAP", "{}");
19,328✔
161
            else
162
                append_cont("+MAP", "");
66,688✔
163
        }
164
        else if(evt & ievt::EMAP)
441,504✔
165
        {
166
            append("-MAP\n");
86,016✔
167
        }
168
        else if(evt & ievt::ALIA)
355,488✔
169
        {
170
            append("=ALI *");
6,080✔
171
            append(getstr(i));
6,080✔
172
            append("\n");
6,080✔
173
        }
174
        else if(evt & ievt::TAG_)
349,408✔
175
        {
176
            has_tag = true;
39,632✔
177
            tag = getstr(i);
39,632✔
178
        }
179
        else if(evt & ievt::ANCH)
309,776✔
180
        {
181
            has_anchor = true;
39,408✔
182
            anchor = getstr(i);
39,408✔
183
        }
184
        else if(evt & ievt::BDOC)
270,368✔
185
        {
186
            if(evt & ievt::EXPL)
71,520✔
187
                append("+DOC ---\n");
22,144✔
188
            else
189
                append("+DOC\n");
49,376✔
190
        }
191
        else if(evt & ievt::EDOC)
198,848✔
192
        {
193
            if(evt & ievt::EXPL)
71,520✔
194
                append("-DOC ...\n");
5,264✔
195
            else
196
                append("-DOC\n");
66,256✔
197
        }
198
        else if(evt & ievt::BSTR)
127,328✔
199
        {
200
             append("+STR\n");
63,664✔
201
        }
202
        else if(evt & ievt::ESTR)
63,664✔
203
        {
204
            append("-STR\n");
63,664✔
205
        }
206

207
        i += (evt & ievt::WSTR) ? 3 : 1;
937,632✔
208
    }
209
    return sz;
63,664✔
210
}
211

212
} // namespace extra
213
} // namespace yml
214
} // namespace c4
215

216
// NOLINTEND(hicpp-signed-bitwise)
217
C4_SUPPRESS_WARNING_CLANG_POP
218
C4_SUPPRESS_WARNING_GCC_POP
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc