#![allow(clippy::unwrap_used)] #![allow(missing_docs)]
use criterion::{BenchmarkId, Criterion, criterion_group, criterion_main};
use fraiseql_core::graphql::parse_query;
const SIMPLE_QUERY: &str = "{ users { id name } }";
const COMPLEX_QUERY: &str = r"
query GetUserWithPosts($userId: Int!, $limit: Int) {
user(id: $userId) {
id
name
email
posts(limit: $limit) {
id
title
published
author { id name }
}
}
}
";
const FRAGMENT_QUERY: &str = r"
fragment UserFields on User {
id
name
email
}
fragment PostFields on Post {
id
title
published
author { ...UserFields }
}
query GetFeed($limit: Int, $offset: Int) {
feed(limit: $limit, offset: $offset) {
...PostFields
}
}
";
fn bench_graphql_parse(c: &mut Criterion) {
let mut group = c.benchmark_group("graphql_parse");
group.bench_function(BenchmarkId::new("query", "simple"), |b| {
b.iter(|| {
let _ = parse_query(criterion::black_box(SIMPLE_QUERY));
});
});
group.bench_function(BenchmarkId::new("query", "complex"), |b| {
b.iter(|| {
let _ = parse_query(criterion::black_box(COMPLEX_QUERY));
});
});
group.bench_function(BenchmarkId::new("query", "fragments"), |b| {
b.iter(|| {
let _ = parse_query(criterion::black_box(FRAGMENT_QUERY));
});
});
group.finish();
}
criterion_group!(benches, bench_graphql_parse);
criterion_main!(benches);