Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Add basic benchmark
This is based on a one-off benchmark from #13
  • Loading branch information
Ed Page committed Apr 28, 2021
commit 5db1f9e1dc8b5dbc671ad00df87c21e9462f6417
7 changes: 7 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -26,3 +26,10 @@ travis-ci = { repository = "unicode-rs/unicode-xid" }
default = []
no_std = []
bench = []

[dev-dependencies]
criterion = "0.3"

[[bench]]
name = "xid"
harness = false
60 changes: 60 additions & 0 deletions benches/xid.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
extern crate criterion;
extern crate unicode_xid;

use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion, Throughput};
use unicode_xid::UnicodeXID;

fn bench_unicode_xid(c: &mut Criterion) {
let unicode_chars = chars(1..0x3000);
let ascii_chars = chars(1..0x80);

let mut group = c.benchmark_group("UnicodeXID");
group.throughput(Throughput::Bytes(unicode_chars.len() as u64));
group.bench_with_input(
BenchmarkId::new("is_xid_start", "unicode"),
&unicode_chars,
|b, chars| b.iter(|| chars.iter().copied().map(UnicodeXID::is_xid_start).last()),
);
group.throughput(Throughput::Bytes(ascii_chars.len() as u64));
group.bench_with_input(
BenchmarkId::new("is_xid_start", "ascii"),
&ascii_chars,
|b, chars| b.iter(|| chars.iter().copied().map(UnicodeXID::is_xid_start).last()),
);
group.throughput(Throughput::Bytes(unicode_chars.len() as u64));
group.bench_with_input(
BenchmarkId::new("is_xid_continue", "unicode"),
&unicode_chars,
|b, chars| {
b.iter(|| {
chars
.iter()
.copied()
.map(UnicodeXID::is_xid_continue)
.last()
})
},
);
group.throughput(Throughput::Bytes(ascii_chars.len() as u64));
group.bench_with_input(
BenchmarkId::new("is_xid_continue", "ascii"),
&ascii_chars,
|b, chars| {
b.iter(|| {
chars
.iter()
.copied()
.map(UnicodeXID::is_xid_continue)
.last()
})
},
);
group.finish();
}

fn chars(range: std::ops::Range<u32>) -> Vec<char> {
range.filter_map(|i| std::char::from_u32(i)).collect()
}

criterion_group!(benches, bench_unicode_xid);
criterion_main!(benches);