1 extern crate criterion;
2 extern crate unicode_xid;
3
4 use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion, Throughput};
5 use unicode_xid::UnicodeXID;
6
bench_unicode_xid(c: &mut Criterion)7 fn bench_unicode_xid(c: &mut Criterion) {
8 let unicode_chars = chars(1..0x3000);
9 let ascii_chars = chars(1..0x80);
10
11 let mut group = c.benchmark_group("UnicodeXID");
12 group.throughput(Throughput::Bytes(unicode_chars.len() as u64));
13 group.bench_with_input(
14 BenchmarkId::new("is_xid_start", "unicode"),
15 &unicode_chars,
16 |b, chars| b.iter(|| chars.iter().copied().map(UnicodeXID::is_xid_start).last()),
17 );
18 group.throughput(Throughput::Bytes(ascii_chars.len() as u64));
19 group.bench_with_input(
20 BenchmarkId::new("is_xid_start", "ascii"),
21 &ascii_chars,
22 |b, chars| b.iter(|| chars.iter().copied().map(UnicodeXID::is_xid_start).last()),
23 );
24 group.throughput(Throughput::Bytes(unicode_chars.len() as u64));
25 group.bench_with_input(
26 BenchmarkId::new("is_xid_continue", "unicode"),
27 &unicode_chars,
28 |b, chars| {
29 b.iter(|| {
30 chars
31 .iter()
32 .copied()
33 .map(UnicodeXID::is_xid_continue)
34 .last()
35 })
36 },
37 );
38 group.throughput(Throughput::Bytes(ascii_chars.len() as u64));
39 group.bench_with_input(
40 BenchmarkId::new("is_xid_continue", "ascii"),
41 &ascii_chars,
42 |b, chars| {
43 b.iter(|| {
44 chars
45 .iter()
46 .copied()
47 .map(UnicodeXID::is_xid_continue)
48 .last()
49 })
50 },
51 );
52 group.finish();
53 }
54
chars(range: std::ops::Range<u32>) -> Vec<char>55 fn chars(range: std::ops::Range<u32>) -> Vec<char> {
56 range.filter_map(|i| std::char::from_u32(i)).collect()
57 }
58
59 criterion_group!(benches, bench_unicode_xid);
60 criterion_main!(benches);
61