diff options
author | Greg Brown <gmb60@cam.ac.uk> | 2021-02-06 13:37:03 +0000 |
---|---|---|
committer | Greg Brown <gmb60@cam.ac.uk> | 2021-02-06 13:37:03 +0000 |
commit | 51ec48e03b2e02be02ccb9826b4638d312df67b4 (patch) | |
tree | d284d34eea27e086658170fd3cc56999cfa931c0 | |
parent | bd6d4e22a3980ff937ab3e2df48c064bdc2918bd (diff) |
Add `chomp-bench` crate so benchmarks can use a build script.
-rw-r--r-- | Cargo.toml | 2 | ||||
-rw-r--r-- | chomp-bench/Cargo.toml | 16 | ||||
-rw-r--r-- | chomp-bench/benches/json.rs | 43 | ||||
-rw-r--r-- | chomp-bench/src/json/mod.rs (renamed from chomp-macro/benches/json/main.rs) | 47 | ||||
-rw-r--r-- | chomp-bench/src/json/nibble.rs (renamed from chomp-macro/benches/json/nibble.rs) | 0 | ||||
-rw-r--r-- | chomp-bench/src/lib.rs | 1 | ||||
-rw-r--r-- | chomp-macro/Cargo.toml | 8 |
7 files changed, 64 insertions, 53 deletions
@@ -5,7 +5,7 @@ authors = ["Greg Brown <gmb60@cam.ac.uk>"] edition = "2018" [workspace] -members = ["autochomp", "chewed", "chomp-macro"] +members = ["autochomp", "chewed", "chomp-bench", "chomp-macro"] [dependencies] heck = "0.3.2" diff --git a/chomp-bench/Cargo.toml b/chomp-bench/Cargo.toml new file mode 100644 index 0000000..3d62434 --- /dev/null +++ b/chomp-bench/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "chomp-bench" +version = "0.1.0" +authors = ["Greg Brown <gmb60@cam.ac.uk>"] +edition = "2018" + +[dependencies] +chewed = {path = "../chewed"} +chomp-macro = {path = "../chomp-macro"} + +[dev-dependencies] +criterion = "0.3.3" + +[[bench]] +name = "json" +harness = false diff --git a/chomp-bench/benches/json.rs b/chomp-bench/benches/json.rs new file mode 100644 index 0000000..9d9bf36 --- /dev/null +++ b/chomp-bench/benches/json.rs @@ -0,0 +1,43 @@ +use chewed::{IterWrapper, Parser}; +use chomp_bench::json::*; +use criterion::{ + criterion_group, criterion_main, AxisScale, BenchmarkId, Criterion, PlotConfiguration, + Throughput, +}; + +const INPUTS: &[&str] = &[ + r#"true"#, + r#"[true, false]"#, + r#"{"first" : null, "second" : 123}"#, + r#"{"first": [ true, "Hello there" ], "second": [123, -12.4e-7]}"#, + r#"{"first": [ true, "Hello there" ], "second": [123, -12.4e-7], "third": {"left": "Random text", "right": ["\ud83c\udf24\ufe0f"]}}"#, +]; + +fn parse_chewed(input: &str) -> Value { + IterWrapper::new(input.chars()) + .parse::<nibble::Ast>() + .unwrap() + .into() +} + +fn parse_handwritten(input: &str) -> Value { + IterWrapper::new(input.chars()).parse().unwrap() +} + +fn bench_parse(c: &mut Criterion) { + let plot_config = PlotConfiguration::default().summary_scale(AxisScale::Logarithmic); + let mut group = c.benchmark_group("JSON"); + group.plot_config(plot_config); + for (i, input) in INPUTS.iter().enumerate() { + group.throughput(Throughput::Bytes(input.len() as u64)); + group.bench_with_input(BenchmarkId::new("Chewed", i), *input, |b, i| { + b.iter(|| parse_chewed(i)) + }); + group.bench_with_input(BenchmarkId::new("Handwritten", i), *input, |b, i| { + b.iter(|| parse_handwritten(i)) + }); + } +} + +criterion_group!(benches, bench_parse); +criterion_main!(benches); diff --git a/chomp-macro/benches/json/main.rs b/chomp-bench/src/json/mod.rs index f5587b3..442200c 100644 --- a/chomp-macro/benches/json/main.rs +++ b/chomp-bench/src/json/mod.rs @@ -1,12 +1,8 @@ use std::{collections::HashMap, convert::TryInto, fmt, ops::RangeInclusive}; -use chewed::{IterWrapper, Parse, Parser, TakeError}; -use criterion::{ - criterion_group, criterion_main, AxisScale, BenchmarkId, Criterion, PlotConfiguration, - Throughput, -}; +use chewed::{Parse, TakeError}; -mod nibble; +pub mod nibble; fn decode_pair(one: u16, other: u16) -> u32 { // Ranges are confusingly backwards @@ -26,7 +22,7 @@ fn decode_pair(one: u16, other: u16) -> u32 { } #[derive(Debug)] -enum Value { +pub enum Value { Null, Bool(bool), Number(f64), @@ -246,40 +242,3 @@ impl Parse for Value { Ok(res) } } - -const INPUTS: &[&str] = &[ - r#"true"#, - r#"[true, false]"#, - r#"{"first" : null, "second" : 123}"#, - r#"{"first": [ true, "Hello there" ], "second": [123, -12.4e-7]}"#, - r#"{"first": [ true, "Hello there" ], "second": [123, -12.4e-7], "third": {"left": "Random text", "right": ["\ud83c\udf24\ufe0f"]}}"#, -]; - -fn parse_chewed(input: &str) -> Value { - IterWrapper::new(input.chars()) - .parse::<nibble::Ast>() - .unwrap() - .into() -} - -fn parse_handwritten(input: &str) -> Value { - IterWrapper::new(input.chars()).parse().unwrap() -} - -fn bench_parse(c: &mut Criterion) { - let plot_config = PlotConfiguration::default().summary_scale(AxisScale::Logarithmic); - let mut group = c.benchmark_group("JSON"); - group.plot_config(plot_config); - for (i, input) in INPUTS.iter().enumerate() { - group.throughput(Throughput::Bytes(input.len() as u64)); - group.bench_with_input(BenchmarkId::new("Chewed", i), *input, |b, i| { - b.iter(|| parse_chewed(i)) - }); - group.bench_with_input(BenchmarkId::new("Handwritten", i), *input, |b, i| { - b.iter(|| parse_handwritten(i)) - }); - } -} - -criterion_group!(benches, bench_parse); -criterion_main!(benches); diff --git a/chomp-macro/benches/json/nibble.rs b/chomp-bench/src/json/nibble.rs index 511c54a..511c54a 100644 --- a/chomp-macro/benches/json/nibble.rs +++ b/chomp-bench/src/json/nibble.rs diff --git a/chomp-bench/src/lib.rs b/chomp-bench/src/lib.rs new file mode 100644 index 0000000..22fdbb3 --- /dev/null +++ b/chomp-bench/src/lib.rs @@ -0,0 +1 @@ +pub mod json; diff --git a/chomp-macro/Cargo.toml b/chomp-macro/Cargo.toml index 3bae0ef..ae6df66 100644 --- a/chomp-macro/Cargo.toml +++ b/chomp-macro/Cargo.toml @@ -11,13 +11,5 @@ chomp = {path = ".."} version = "1.0.58" features = ["parsing", "proc-macro"] -[dev-dependencies] -chewed = {path = "../chewed"} -criterion = "0.3.3" - [lib] proc_macro = true - -[[bench]] -name = "json" -harness = false |