diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5084a8c..73a2a0f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -30,6 +30,15 @@ jobs: - name: cargo test run: cargo test --locked + - name: cargo test (no default features) + run: cargo test --no-default-features --locked + + - name: cargo test ("lookup-ranges") + run: cargo test --no-default-features --features lookup-ranges --locked + + - name: cargo test ("test-regex") + run: cargo test --no-default-features --features test-regex --locked + - name: cargo clippy run: cargo clippy --all-targets --locked -- -D warnings diff --git a/CHANGES.md b/CHANGES.md index eb8d984..6ad8bf8 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,6 +1,13 @@ # shwild.Rust - CHANGES +## 0.1.6 - 10th July 2026 + +* preparatory changes; +* consistency fixes; +* added **benches/macros.rs**; + + ## 0.1.5 - 9th July 2026 * bunch of boilerplate improvements: .gitattributes; .vimrc; EXAMPLES.md; VS Code settings; ignores; license; rustfmt.toml; @@ -10,7 +17,7 @@ * added **CHANGES.md** (back-filled) and **NEWS.md**; * added **EXAMPLES.md** and per-example documentation; -* **README.md** badges, dependency links, related projects, and `null-feature` documentation; +* **README.md** badges, dependency links, related projects, and `"null-feature"` documentation; * added crate-level `//!` documentation; * added CI (`.github/workflows/ci.yml`) and quality scripts (`scripts/fmt`, checkers); * added `rust-version` (MSRV 1.79); @@ -31,16 +38,16 @@ ## 0.1.2 - 3rd November 2024 -* added `test-regex` feature — optional **regex** dependency for benchmarks and scratch programs; -* enabled `lookup-ranges` in default features; +* added `"test-regex"` feature — optional **regex** dependency for benchmarks and scratch programs; +* enabled `"lookup-ranges"` in default features; * added **cw-regex** benchmark; * added **character-play** scratch program; -* added `regex_comparision_tests` unit tests (gated on `test-regex`); +* added `regex_comparision_tests` unit tests (gated on `"test-regex"`); ## 0.1.1 - 3rd November 2024 -* added `lookup-ranges` feature — optional **collect-rs** dependency for `UnicodePointMap`-based range matching; +* added `"lookup-ranges"` feature — optional **collect-rs** dependency for `UnicodePointMap`-based range matching; * added **Cargo.lock**; * README: added Features section; clarified Wild-1 escape behaviour in pattern elements; diff --git a/Cargo.lock b/Cargo.lock index 4870982..023ca23 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "aho-corasick" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" dependencies = [ "memchr", ] @@ -28,21 +28,27 @@ checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" [[package]] name = "anstyle" -version = "1.0.10" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" +checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" [[package]] name = "autocfg" -version = "1.4.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "base-traits" -version = "0.0.8" +version = "0.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556031355dea4fc81a56aa4850032c9b433c926e7296c30780f63ece19ecf082" +checksum = "9bb2de59cca22f51f3301a09c549b0b4a32f56e8a007d0d44b02a1ce42975b37" + +[[package]] +name = "bt-rs" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4985bd0bdfcd2a13bdeaa1798240f2168998107a7939a39384c4c7608392a26" [[package]] name = "cast" @@ -62,9 +68,9 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.0" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "ciborium" @@ -95,18 +101,18 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.20" +version = "4.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97f376d85a664d5837dbae44bf546e6477a679ff6610010f17276f686d867e8" +checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51" dependencies = [ "clap_builder", ] [[package]] name = "clap_builder" -version = "4.5.20" +version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19bc80abd44e4bed93ca373a0704ccbd1b710dc5749406201bb018272808dc54" +checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" dependencies = [ "anstyle", "clap_lex", @@ -114,9 +120,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.7.2" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" +checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" [[package]] name = "collect-rs" @@ -162,15 +168,15 @@ dependencies = [ [[package]] name = "crunchy" -version = "0.2.2" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" [[package]] name = "either" -version = "1.13.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" [[package]] name = "find-msvc-tools" @@ -180,12 +186,13 @@ checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" [[package]] name = "half" -version = "2.4.1" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" +checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" dependencies = [ "cfg-if", "crunchy", + "zerocopy", ] [[package]] @@ -199,9 +206,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.11" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "libc" @@ -211,9 +218,9 @@ checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" [[package]] name = "memchr" -version = "2.7.4" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "num-traits" @@ -226,9 +233,9 @@ dependencies = [ [[package]] name = "oorandom" -version = "11.1.4" +version = "11.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b410bbe7e14ab526a0e86877eb47c6996a2bd7746f027ba551028c925390e4e9" +checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e" [[package]] name = "page_size" @@ -242,27 +249,27 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.89" +version = "1.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.37" +version = "1.0.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +checksum = "dfbc457d0c7a0759a614551b11a6409e5951f6c7537be1f1b7682b9ae9230368" dependencies = [ "proc-macro2", ] [[package]] name = "regex" -version = "1.11.1" +version = "1.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +checksum = "f1292b7759ae1cb9ec195452d1390a074f0cd8541ab7a5a8c31cd6db45d4a6ba" dependencies = [ "aho-corasick", "memchr", @@ -272,9 +279,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.8" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3" +checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" dependencies = [ "aho-corasick", "memchr", @@ -283,15 +290,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.5" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" - -[[package]] -name = "ryu" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "same-file" @@ -304,18 +305,28 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.214" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f55c3193aca71c12ad7890f1785d2b73e1b9f63a0bbc353c08ef26fe03fc56b5" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.214" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de523f781f095e28fa605cdce0f8307e451cc0fd14e2eb4cd2e98a355b147766" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", @@ -324,14 +335,15 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.132" +version = "1.0.150" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d726bfaff4b320266d395898905d0eba0345aae23b54aee3a737e260fd46db03" +checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" dependencies = [ "itoa", "memchr", - "ryu", "serde", + "serde_core", + "zmij", ] [[package]] @@ -352,9 +364,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.87" +version = "2.0.118" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" +checksum = "1b9ae57f904213ebb649ce6895b8a66c66f0203b9319718f69a5612a065b1422" dependencies = [ "proc-macro2", "quote", @@ -363,11 +375,12 @@ dependencies = [ [[package]] name = "test_help-rs" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7d2df2cc6a57f53f03c47cc937df746b8f2d0f5e63b77b7d81aa30b9ceb2842" +checksum = "860ba0c1f6ec76a108a38b90425e38a84d024597cfe4deacb4f19f5a9839541d" dependencies = [ "base-traits", + "bt-rs", ] [[package]] @@ -382,9 +395,9 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.13" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" [[package]] name = "walkdir" @@ -414,9 +427,9 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.9" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ "windows-sys", ] @@ -428,74 +441,42 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] -name = "windows-sys" -version = "0.59.0" +name = "windows-link" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" -dependencies = [ - "windows-targets", -] +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" [[package]] -name = "windows-targets" -version = "0.52.6" +name = "windows-sys" +version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_gnullvm", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows-link", ] [[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" - -[[package]] -name = "windows_i686_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" - -[[package]] -name = "windows_i686_msvc" -version = "0.52.6" +name = "zerocopy" +version = "0.8.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" +checksum = "b7cbbc0a705a0fd05cc3676525980d2bf5a9bc4adac6d6475209a7887cf59d19" +dependencies = [ + "zerocopy-derive", +] [[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.6" +name = "zerocopy-derive" +version = "0.8.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" +checksum = "e2e817b7b52d0c7358d3246da9d69935ebb18116b2b102b4230dac079b4862f5" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] [[package]] -name = "windows_x86_64_msvc" -version = "0.52.6" +name = "zmij" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" +checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" diff --git a/Cargo.toml b/Cargo.toml index f7d7f98..c4e04b2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -49,6 +49,10 @@ required-features = [ "test-regex", ] +[[bench]] +name = "macros" +harness = false + [[bench]] name = "range_string-creation_functions" harness = false @@ -97,6 +101,8 @@ null-feature = [] # Crate-specific features: # +# - "lookup-ranges" - enable lookup ranges; +# - "test-regex" - enable test regex; lookup-ranges = [ "dep:collect-rs", diff --git a/NEWS.md b/NEWS.md index 6d66629..eacb5ec 100644 --- a/NEWS.md +++ b/NEWS.md @@ -2,7 +2,9 @@ | Date | News Item | | --------------------- | ----------------------------------------- | -| 8th July 2026 | shwild.Rust 0.1.4 released | +| 9th July 2026 | shwild.Rust 0.1.6 released | +| 9th July 2026 | shwild.Rust 0.1.5 released | +| 7th July 2026 | shwild.Rust 0.1.4 released | | 28th March 2025 | shwild.Rust 0.1.3 released | | 3rd November 2024 | shwild.Rust 0.1.2 released | | 3rd November 2024 | shwild.Rust 0.1.1 released | diff --git a/benches/macros.rs b/benches/macros.rs new file mode 100644 index 0000000..d189e39 --- /dev/null +++ b/benches/macros.rs @@ -0,0 +1,325 @@ +// benches/macros.rs : evaluates performance of matching macros + +#![allow(non_snake_case)] + +use criterion::{ + criterion_group, + criterion_main, + Criterion, +}; + +use std::hint::black_box; + +use shwild::shwild_matches; + + +mod constants { + #![allow(non_upper_case_globals)] + #![allow(unused)] + + pub(crate) const EMPTY_STRING : &str = ""; + pub(crate) const S_hello : &str = "hello"; + pub(crate) const S_TQBFJOTLD : &str = "The quick brown fox jumps over the lazy dog"; + pub(crate) const S_Lorem_ipsum : &str = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."; + + pub(crate) mod patterns { + #![allow(non_upper_case_globals)] + #![allow(unused)] + + pub(crate) const NRANGE_CONTINUUM_SIMPLE : &str = r"[^a-z]"; + pub(crate) const NRANGE_CONTINUUM_REVERSE : &str = r"[^z-a]"; + pub(crate) const NRANGE_CONTINUUM_CROSSCASE : &str = r"[^a-Z]"; + pub(crate) const RANGE_CONTINUUM_SIMPLE : &str = r"[a-z]"; + pub(crate) const RANGE_CONTINUUM_REVERSE : &str = r"[z-a]"; + pub(crate) const RANGE_CONTINUUM_CROSSCASE : &str = r"[a-Z]"; + + pub(crate) const WINDOWS_PATH : &str = r"[A-Z]:\\?*\\?*.[ce][ox][em]"; + } + + pub(crate) mod windows_path_inputs { + #![allow(non_upper_case_globals)] + #![allow(unused)] + + pub(crate) const ALL : [&str; 7] = [ + "", + "C:/", + "C:/dir", + "C:/dir/stem.com", + "C:/dir/stem.exe", + "C:/directory-with-a-veeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeerrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrryyyyyyyyyyyyyyyyyyyyyyyyyyyyyy-long-name", + "C:/directory-with-a-veeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeerrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrryyyyyyyyyyyyyyyyyyyyyyyyyyyyyy-long-name/stem.com", + ]; + + pub(crate) const MATCHING : [&str; 3] = [ + r"C:\directory\file.exe", + r"X:\dir\filestem.exe", + r"D:\dir\sub-dir\filestem.exe", + ]; + + pub(crate) const NOT_MATCHING : [&str; 4] = [ + "", + r"X:\filestem.exe", + r"_:\dir\filestem.exe", + r"D:\dir\sub-dir\filestem.bat", + ]; + } +} + +mod macros_benches { + #![allow(non_snake_case)] + + use super::*; + + + pub fn shwild_matches_input_empty(c : &mut Criterion) { + let pattern = constants::EMPTY_STRING; + let input = ""; + let flags = 0; + + c.bench_function("`shwild_matches!()` - empty string", |b| { + b.iter(|| { + let r = shwild_matches!(black_box(pattern), black_box(input), black_box(flags)); + + let _ = black_box(r); + }) + }); + } + + pub fn shwild_matches_input_literal_small(c : &mut Criterion) { + let pattern = constants::EMPTY_STRING; + let input = ""; + let flags = 0; + + c.bench_function("`shwild_matches!()` - literal (small)", |b| { + b.iter(|| { + let r = shwild_matches!(black_box(pattern), black_box(input), black_box(flags)); + + let _ = black_box(r); + }) + }); + } + + pub fn shwild_matches_input_literal_medium(c : &mut Criterion) { + let pattern = constants::EMPTY_STRING; + let input = ""; + let flags = 0; + + c.bench_function("`shwild_matches!()` - literal (medium)", |b| { + b.iter(|| { + let r = shwild_matches!(black_box(pattern), black_box(input), black_box(flags)); + + let _ = black_box(r); + }) + }); + } + + pub fn shwild_matches_input_literal_large(c : &mut Criterion) { + let pattern = constants::EMPTY_STRING; + let input = ""; + let flags = 0; + + c.bench_function("`shwild_matches!()` - literal (large)", |b| { + b.iter(|| { + let r = shwild_matches!(black_box(pattern), black_box(input), black_box(flags)); + + let _ = black_box(r); + }) + }); + } + + pub fn shwild_matches_against_nrange_continuum_simple(c : &mut Criterion) { + let pattern = constants::patterns::NRANGE_CONTINUUM_SIMPLE; + let flags = 0; + + let inputs = [ + // insert list: + "", + " ", + "a", + "b", + "c", + "d", + "aa", + "_", + ]; + + c.bench_function("`shwild_matches!()` - nrange continuum (simple)", |b| { + b.iter(|| { + for input in &inputs { + let r = shwild_matches!(black_box(pattern), black_box(input), black_box(flags)); + + let _ = black_box(r); + } + }) + }); + } + + pub fn shwild_matches_against_nrange_continuum_reverse(c : &mut Criterion) { + let pattern = constants::patterns::NRANGE_CONTINUUM_REVERSE; + let flags = 0; + + let inputs = [ + // insert list: + "", + " ", + "a", + "b", + "c", + "d", + "aa", + "_", + ]; + + c.bench_function("`shwild_matches!()` - nrange continuum (reverse)", |b| { + b.iter(|| { + for input in &inputs { + let r = shwild_matches!(black_box(pattern), black_box(input), black_box(flags)); + + let _ = black_box(r); + } + }) + }); + } + + pub fn shwild_matches_against_nrange_continuum_crosscase(c : &mut Criterion) { + let pattern = constants::patterns::NRANGE_CONTINUUM_CROSSCASE; + let flags = 0; + + let inputs = [ + // insert list: + "", + " ", + "a", + "b", + "c", + "d", + "aa", + "_", + ]; + + c.bench_function("`shwild_matches!()` - nrange continuum (crosscase)", |b| { + b.iter(|| { + for input in &inputs { + let r = shwild_matches!(black_box(pattern), black_box(input), black_box(flags)); + + let _ = black_box(r); + } + }) + }); + } + + pub fn shwild_matches_against_range_continuum_simple(c : &mut Criterion) { + let pattern = constants::patterns::RANGE_CONTINUUM_SIMPLE; + let flags = 0; + + let inputs = [ + // insert list: + "", + " ", + "a", + "b", + "c", + "d", + "aa", + "_", + ]; + + c.bench_function("`shwild_matches!()` - range continuum (simple)", |b| { + b.iter(|| { + for input in &inputs { + let r = shwild_matches!(black_box(pattern), black_box(input), black_box(flags)); + + let _ = black_box(r); + } + }) + }); + } + + pub fn shwild_matches_against_range_continuum_reverse(c : &mut Criterion) { + let pattern = constants::patterns::RANGE_CONTINUUM_REVERSE; + let flags = 0; + + let inputs = [ + // insert list: + "", + " ", + "a", + "b", + "c", + "d", + "aa", + "_", + ]; + + c.bench_function("`shwild_matches!()` - range continuum (reverse)", |b| { + b.iter(|| { + for input in &inputs { + let r = shwild_matches!(black_box(pattern), black_box(input), black_box(flags)); + + let _ = black_box(r); + } + }) + }); + } + + pub fn shwild_matches_against_range_continuum_crosscase(c : &mut Criterion) { + let pattern = constants::patterns::RANGE_CONTINUUM_CROSSCASE; + let flags = 0; + + let inputs = [ + // insert list: + "", + " ", + "a", + "b", + "c", + "d", + "aa", + "_", + ]; + + c.bench_function("`shwild_matches!()` - range continuum (crosscase)", |b| { + b.iter(|| { + for input in &inputs { + let r = shwild_matches!(black_box(pattern), black_box(input), black_box(flags)); + + let _ = black_box(r); + } + }) + }); + } + + pub fn shwild_matches_test_against_pattern_WindowsPath(c : &mut Criterion) { + let pattern = constants::patterns::WINDOWS_PATH; + let flags = 0; + let inputs = constants::windows_path_inputs::ALL; + + c.bench_function("`shwild_matches!()` - Windows Path", |b| { + b.iter(|| { + for input in &inputs { + let r = shwild_matches!(black_box(pattern), black_box(input), black_box(flags)); + + let _ = black_box(r); + } + }) + }); + } +} + + +criterion_group!( + shwild_matches_benches, + macros_benches::shwild_matches_input_empty, + macros_benches::shwild_matches_input_literal_small, + macros_benches::shwild_matches_input_literal_medium, + macros_benches::shwild_matches_input_literal_large, + macros_benches::shwild_matches_test_against_pattern_WindowsPath, + macros_benches::shwild_matches_against_nrange_continuum_simple, + macros_benches::shwild_matches_against_nrange_continuum_reverse, + macros_benches::shwild_matches_against_nrange_continuum_crosscase, + macros_benches::shwild_matches_against_range_continuum_simple, + macros_benches::shwild_matches_against_range_continuum_reverse, + macros_benches::shwild_matches_against_range_continuum_crosscase, +); + +criterion_main!(shwild_matches_benches); diff --git a/benches/range_string-creation_functions.rs b/benches/range_string-creation_functions.rs index a6e5fc0..bffe66b 100644 --- a/benches/range_string-creation_functions.rs +++ b/benches/range_string-creation_functions.rs @@ -66,7 +66,6 @@ mod utils { chars.dedup(); chars.into_iter().collect() // appears to be (marginally) faster for `Vec<>`, although it's very close - // chars.as_slice().iter().collect() } pub(super) fn range_string_from_slice_1( @@ -132,7 +131,6 @@ mod utils { chars.dedup(); chars.into_iter().collect() // appears to be (marginally) faster for `Vec<>`, although it's very close - // chars.as_slice().iter().collect() } pub(super) fn range_string_from_slice_3( @@ -164,7 +162,6 @@ mod utils { chars.dedup(); chars.into_iter().collect() - // chars.as_slice().iter().collect() } pub(super) fn range_string_from_slice_4( @@ -207,7 +204,6 @@ mod utils { chars.dedup(); chars.into_iter().collect() - // chars.as_slice().iter().collect() } pub(super) fn range_string_from_slice_5( @@ -236,7 +232,6 @@ mod utils { chars.dedup(); chars.into_iter().collect() - // chars.as_slice().iter().collect() } pub(super) fn range_string_from_slice_7(