Compile performance.md examples in tests
This commit is contained in:
parent
0e3453f7c2
commit
2115596ed3
|
@ -77,7 +77,9 @@ without bound:
|
||||||
|
|
||||||
```c++
|
```c++
|
||||||
dom::parser parser(0); // This parser will refuse to automatically grow capacity
|
dom::parser parser(0); // This parser will refuse to automatically grow capacity
|
||||||
parser.set_capacity(1024*1024); // This allocates enough capacity to handle documents <= 1MB
|
simdjson::error_code allocate_error = parser.set_capacity(1024*1024); // This allocates enough capacity to handle documents <= 1MB
|
||||||
|
if (allocate_error) { cerr << allocate_error << endl; exit(1); }
|
||||||
|
|
||||||
for (web_request request : listen()) {
|
for (web_request request : listen()) {
|
||||||
auto [doc, error] = parser.parse(request.body);
|
auto [doc, error] = parser.parse(request.body);
|
||||||
// If the document was above our limit, emit 413 = payload too large
|
// If the document was above our limit, emit 413 = payload too large
|
||||||
|
|
|
@ -93,6 +93,49 @@ void implementation_selection_4() {
|
||||||
simdjson::active_implementation = simdjson::available_implementations["fallback"];
|
simdjson::active_implementation = simdjson::available_implementations["fallback"];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void performance_1() {
|
||||||
|
dom::parser parser;
|
||||||
|
|
||||||
|
// This initializes buffers and a document big enough to handle this JSON.
|
||||||
|
dom::element doc = parser.parse("[ true, false ]"_padded);
|
||||||
|
cout << doc << endl;
|
||||||
|
|
||||||
|
// This reuses the existing buffers, and reuses and *overwrites* the old document
|
||||||
|
doc = parser.parse("[1, 2, 3]"_padded);
|
||||||
|
cout << doc << endl;
|
||||||
|
|
||||||
|
// This also reuses the existing buffers, and reuses and *overwrites* the old document
|
||||||
|
dom::element doc2 = parser.parse("true"_padded);
|
||||||
|
// Even if you keep the old reference around, doc and doc2 refer to the same document.
|
||||||
|
cout << doc << endl;
|
||||||
|
cout << doc2 << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
// The web_request part of this is aspirational, so we compile as much as we can here
|
||||||
|
void performance_2() {
|
||||||
|
dom::parser parser(1024*1024); // Never grow past documents > 1MB
|
||||||
|
// for (web_request request : listen()) {
|
||||||
|
auto [doc, error] = parser.parse("1"_padded/*request.body*/);
|
||||||
|
// // If the document was above our limit, emit 413 = payload too large
|
||||||
|
if (error == CAPACITY) { /* request.respond(413); continue; */ }
|
||||||
|
// // ...
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
|
// The web_request part of this is aspirational, so we compile as much as we can here
|
||||||
|
void performance_3() {
|
||||||
|
dom::parser parser(0); // This parser will refuse to automatically grow capacity
|
||||||
|
simdjson::error_code allocate_error = parser.set_capacity(1024*1024); // This allocates enough capacity to handle documents <= 1MB
|
||||||
|
if (allocate_error) { cerr << allocate_error << endl; exit(1); }
|
||||||
|
|
||||||
|
// for (web_request request : listen()) {
|
||||||
|
auto [doc, error] = parser.parse("1"_padded/*request.body*/);
|
||||||
|
// If the document was above our limit, emit 413 = payload too large
|
||||||
|
if (error == CAPACITY) { /* request.respond(413); continue; */ }
|
||||||
|
// ...
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue