summaryrefslogtreecommitdiff
path: root/support/texlab/benches/benchmarks/completion.rs
diff options
context:
space:
mode:
Diffstat (limited to 'support/texlab/benches/benchmarks/completion.rs')
-rw-r--r--support/texlab/benches/benchmarks/completion.rs135
1 files changed, 135 insertions, 0 deletions
diff --git a/support/texlab/benches/benchmarks/completion.rs b/support/texlab/benches/benchmarks/completion.rs
new file mode 100644
index 0000000000..4653102460
--- /dev/null
+++ b/support/texlab/benches/benchmarks/completion.rs
@@ -0,0 +1,135 @@
+use criterion::criterion_group;
+use criterion::{BenchmarkId, Criterion};
+use futures::executor::block_on;
+use indoc::indoc;
+use std::time::Duration;
+use texlab::{completion::CompletionProvider, feature::FeatureTester};
+
+fn criterion_benchmark(criterion: &mut Criterion) {
+ criterion.bench_with_input(
+ BenchmarkId::new("Completion", "LaTeX Word"),
+ &LATEX_CODE,
+ |b, code| {
+ b.iter(|| {
+ block_on(async {
+ FeatureTester::new()
+ .file("main.tex", *code)
+ .main("main.tex")
+ .position(0, 0)
+ .test_completion(CompletionProvider::new())
+ .await
+ });
+ });
+ },
+ );
+
+ criterion.bench_with_input(
+ BenchmarkId::new("Completion", "LaTeX Command (Filtered)"),
+ &LATEX_CODE,
+ |b, code| {
+ b.iter(|| {
+ block_on(async {
+ FeatureTester::new()
+ .file("main.tex", *code)
+ .main("main.tex")
+ .position(0, 1)
+ .test_completion(CompletionProvider::new())
+ .await
+ });
+ });
+ },
+ );
+
+ criterion.bench_with_input(
+ BenchmarkId::new("Completion", "LaTeX Command (Unfiltered)"),
+ &LATEX_CODE,
+ |b, code| {
+ b.iter(|| {
+ block_on(async {
+ FeatureTester::new()
+ .file("main.tex", *code)
+ .main("main.tex")
+ .position(30, 1)
+ .test_completion(CompletionProvider::new())
+ .await
+ });
+ });
+ },
+ );
+
+ criterion.bench_with_input(
+ BenchmarkId::new("Completion", "LaTeX Environment"),
+ &LATEX_CODE,
+ |b, code| {
+ b.iter(|| {
+ block_on(async {
+ FeatureTester::new()
+ .file("main.tex", *code)
+ .main("main.tex")
+ .position(9, 9)
+ .test_completion(CompletionProvider::new())
+ .await
+ });
+ })
+ },
+ );
+
+ criterion.bench_with_input(
+ BenchmarkId::new("Completion", "LaTeX Label"),
+ &LATEX_CODE,
+ |b, code| {
+ b.iter(|| {
+ block_on(async {
+ FeatureTester::new()
+ .file("main.tex", *code)
+ .main("main.tex")
+ .position(15, 7)
+ .test_completion(CompletionProvider::new())
+ .await
+ });
+ })
+ },
+ );
+}
+
+criterion_group! {
+ name = benches;
+ config = Criterion::default().measurement_time(Duration::from_secs(60));
+ targets = criterion_benchmark
+}
+
+static LATEX_CODE: &str = indoc!(
+ r#"
+ \documentclass{article}
+ \usepackage{amsmath}
+ \usepackage{lipsum}
+ \usepackage{geometry}
+ \usepackage[utf8]{inputenc}
+ \newcommand{\foo}{foo}
+ \DeclareMathOperator{\bar}{bar}
+ \include{child1}
+ \input{child2.tex}
+ \begin{document}
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec fermentum lectus placerat, suscipit ligula quis.
+ \begin{equation*}\label{eq:foo}
+ e^{i \pi} + 1 = 0
+ \end{equation*}
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec fermentum lectus placerat, suscipit ligula quis.
+ \ref{eq:foo}
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec fermentum lectus placerat, suscipit ligula quis.
+ \section{Foo}\label{sec:foo}
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec fermentum lectus placerat, suscipit ligula quis.
+ \subsection{Bar}\label{sec:bar}
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec fermentum lectus placerat, suscipit ligula quis.
+ \include{foo}
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec fermentum lectus placerat, suscipit ligula quis.
+ \input{bar.tex}
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec fermentum lectus placerat, suscipit ligula quis.
+ \cite{foo, bar, baz}
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec fermentum lectus placerat, suscipit ligula quis.
+ \nocite{*}
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec fermentum lectus placerat, suscipit ligula quis.
+ \end{document}
+ \
+ "#
+);