MCPcopy Create free account
hub / github.com/boostorg/beast / parsegrind

Method parsegrind

test/beast/http/basic_parser.cpp:156–212  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

154
155 template<class Parser, class ConstBufferSequence, class Test>
156 typename std::enable_if<
157 net::is_const_buffer_sequence<ConstBufferSequence>::value>::type
158 parsegrind(ConstBufferSequence const& buffers,
159 Test const& test, bool skip = false)
160 {
161 auto const size = buffer_bytes(buffers);
162 for(std::size_t i = 1; i < size - 1; ++i)
163 {
164 Parser p;
165 p.eager(true);
166 p.skip(skip);
167 error_code ec;
168 buffers_suffix<ConstBufferSequence> cb{buffers};
169 auto n = p.put(buffers_prefix(i, cb), ec);
170 if(! BEAST_EXPECTS(! ec ||
171 ec == error::need_more, ec.message()))
172 continue;
173 if(! BEAST_EXPECT(! p.is_done()))
174 continue;
175 cb.consume(n);
176 n = p.put(cb, ec);
177 if(! BEAST_EXPECTS(! ec, ec.message()))
178 continue;
179 if(! BEAST_EXPECT(n == buffer_bytes(cb)))
180 continue;
181 if(p.need_eof())
182 {
183 p.put_eof(ec);
184 if(! BEAST_EXPECTS(! ec, ec.message()))
185 continue;
186 }
187 if(! BEAST_EXPECT(p.is_done()))
188 continue;
189 test(p);
190 }
191 for(std::size_t i = 1; i < size - 1; ++i)
192 {
193 Parser p;
194 p.eager(true);
195 error_code ec;
196 buffers_suffix<ConstBufferSequence> cb{buffers};
197 cb.consume(i);
198 auto n = p.put(buffers_cat(
199 buffers_prefix(i, buffers), cb), ec);
200 if(! BEAST_EXPECTS(! ec, ec.message()))
201 continue;
202 if(! BEAST_EXPECT(n == size))
203 continue;
204 if(p.need_eof())
205 {
206 p.put_eof(ec);
207 if(! BEAST_EXPECTS(! ec, ec.message()))
208 continue;
209 }
210 test(p);
211 }
212 }
213

Callers

nothing calls this directly

Calls 11

buffers_prefixFunction · 0.85
testClass · 0.85
eagerMethod · 0.80
skipMethod · 0.80
messageMethod · 0.80
need_eofMethod · 0.80
putMethod · 0.45
is_doneMethod · 0.45
consumeMethod · 0.45
dataMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected