Skip to content

Commit

Permalink
perf(dict): Benchmark cased maps
Browse files Browse the repository at this point in the history
  • Loading branch information
epage committed Dec 30, 2024
1 parent 0844617 commit b635234
Show file tree
Hide file tree
Showing 7 changed files with 249,005 additions and 8 deletions.
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 7 additions & 5 deletions crates/dictgen/src/map.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,13 @@ impl MapGen<'_> {
self
}

pub fn write<'d, W: std::io::Write, V: std::fmt::Display>(
pub fn write<W: std::io::Write, V: std::fmt::Display>(
&self,
file: &mut W,
data: impl Iterator<Item = (&'d str, V)>,
data: impl Iterator<Item = (impl AsRef<str>, V)>,
) -> Result<(), std::io::Error> {
let mut data: Vec<_> = data.collect();
data.sort_unstable_by_key(|v| unicase::UniCase::new(v.0));
data.sort_unstable_by_key(|v| unicase::UniCase::new(v.0.as_ref().to_owned()));

let name = self.gen.name;
let key_type = self.key_type();
Expand All @@ -32,6 +32,7 @@ impl MapGen<'_> {
let mut smallest = usize::MAX;
let mut largest = usize::MIN;
for (key, _) in data.iter() {
let key = key.as_ref();
smallest = std::cmp::min(smallest, key.len());
largest = std::cmp::max(largest, key.len());
}
Expand All @@ -50,6 +51,7 @@ impl MapGen<'_> {
let data = data
.iter()
.map(|(key, value)| {
let key = key.as_ref();
(
if key.is_ascii() {
crate::InsensitiveStr::Ascii(key)
Expand All @@ -70,7 +72,7 @@ impl MapGen<'_> {
let mut builder = phf_codegen::Map::new();
let data = data
.iter()
.map(|(key, value)| (crate::InsensitiveAscii(key), value.to_string()))
.map(|(key, value)| (crate::InsensitiveAscii(key.as_ref()), value.to_string()))
.collect::<Vec<_>>();
for (key, value) in data.iter() {
builder.entry(key, value.as_str());
Expand All @@ -85,7 +87,7 @@ impl MapGen<'_> {
.map(|(key, value)| (key, value.to_string()))
.collect::<Vec<_>>();
for (key, value) in data.iter() {
builder.entry(key, value.as_str());
builder.entry(key.as_ref(), value.as_str());
}
let builder = builder.build();
writeln!(file, " map: {builder},")?;
Expand Down
7 changes: 4 additions & 3 deletions crates/dictgen/src/ordered_map.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,13 @@ impl OrderedMapGen<'_> {
self
}

pub fn write<'d, W: std::io::Write, V: std::fmt::Display>(
pub fn write<W: std::io::Write, V: std::fmt::Display>(
&self,
file: &mut W,
data: impl Iterator<Item = (&'d str, V)>,
data: impl Iterator<Item = (impl AsRef<str>, V)>,
) -> Result<(), std::io::Error> {
let mut data: Vec<_> = data.collect();
data.sort_unstable_by_key(|v| unicase::UniCase::new(v.0));
data.sort_unstable_by_key(|v| unicase::UniCase::new(v.0.as_ref().to_owned()));

let name = self.gen.name;
let key_type = self.key_type();
Expand All @@ -38,6 +38,7 @@ impl OrderedMapGen<'_> {
)?;
writeln!(file, " keys: &[")?;
for (key, _value) in data.iter() {
let key = key.as_ref();
smallest = std::cmp::min(smallest, key.len());
largest = std::cmp::max(largest, key.len());

Expand Down
1 change: 1 addition & 0 deletions crates/typos-dict/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ snapbox = "0.6.5"
indexmap = "2.2.6"
divan = "0.1.16"
phf = "0.11.2"
heck = "0.5.0"

[lints]
workspace = true
Expand Down
Loading

0 comments on commit b635234

Please sign in to comment.