From e6e79d684b6f26df02e12633b6f10fa589c1d67b Mon Sep 17 00:00:00 2001 From: Geoffroy Couprie Date: Wed, 17 Nov 2021 17:34:44 +0100 Subject: [PATCH] query parsing benchmark --- crates/apollo-parser/benches/peek_n.rs | 35 ++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 crates/apollo-parser/benches/peek_n.rs diff --git a/crates/apollo-parser/benches/peek_n.rs b/crates/apollo-parser/benches/peek_n.rs new file mode 100644 index 000000000..aadd4df88 --- /dev/null +++ b/crates/apollo-parser/benches/peek_n.rs @@ -0,0 +1,35 @@ +#![feature(test)] +extern crate test; +use apollo_parser::ast; +use test::{black_box, Bencher}; + +#[bench] +fn bench_peek_n(b: &mut Bencher) { + let query = "query ExampleQuery($topProductsFirst: Int) {\n me { \n id\n }\n topProducts(first: $topProductsFirst) {\n name\n price\n inStock\n weight\n test test test test test test test test test test test test }\n}"; + + b.iter(|| { + let parser = apollo_parser::Parser::new(query); + let tree = parser.parse(); + + if !tree.errors().is_empty() { + panic!("error parsing query: {:?}", tree.errors()); + } + let document = tree.document(); + + for definition in document.definitions() { + if let ast::Definition::OperationDefinition(operation) = definition { + let selection_set = operation + .selection_set() + .expect("the node SelectionSet is not optional in the spec; qed"); + for selection in selection_set.selections() { + match selection { + ast::Selection::Field(field) => { + let _selection_set = field.selection_set(); + } + _ => {} + } + } + } + } + }); +}