summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGreg Brown <gmb60@cam.ac.uk>2021-02-06 13:37:03 +0000
committerGreg Brown <gmb60@cam.ac.uk>2021-02-06 13:37:03 +0000
commit51ec48e03b2e02be02ccb9826b4638d312df67b4 (patch)
treed284d34eea27e086658170fd3cc56999cfa931c0
parentbd6d4e22a3980ff937ab3e2df48c064bdc2918bd (diff)
Add `chomp-bench` crate so benchmarks can use a build script.
-rw-r--r--Cargo.toml2
-rw-r--r--chomp-bench/Cargo.toml16
-rw-r--r--chomp-bench/benches/json.rs43
-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.rs1
-rw-r--r--chomp-macro/Cargo.toml8
7 files changed, 64 insertions, 53 deletions
diff --git a/Cargo.toml b/Cargo.toml
index 9769ca2..0d48eb1 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -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