Last active
April 17, 2026 07:37
-
-
Save staciax/967b6c3314c5e0764d4fcf513a3015f7 to your computer and use it in GitHub Desktop.
swift-split-benchmark
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import Benchmark | |
| import Foundation | |
| let desc = "a.b.c.d.e.f.g.h" | |
| let benchmarks: @Sendable () -> Void = { | |
| Benchmark("components-separatedBy") { benchmark in | |
| for _ in benchmark.scaledIterations { | |
| blackHole(desc.components(separatedBy: ".").last ?? desc) | |
| } | |
| } | |
| Benchmark("split-separator") { benchmark in | |
| for _ in benchmark.scaledIterations { | |
| blackHole(desc.split(separator: ".").last.map(String.init) ?? desc) | |
| } | |
| } | |
| Benchmark("lastIndex") { benchmark in | |
| for _ in benchmark.scaledIterations { | |
| blackHole( | |
| desc.lastIndex(of: ".").map { | |
| String(desc[desc.index(after: $0)...]) | |
| } ?? desc) | |
| } | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| scarlet $ swift package benchmark --target SplitBenchmarkTarget | |
| Building for debugging... | |
| ld: warning: building for macOS-13.0, but linking with dylib '/opt/homebrew/opt/jemalloc/lib/libjemalloc.2.dylib' which was built for newer version 15.0 | |
| [5/5] Applying BenchmarkTool-tool | |
| Build of product 'BenchmarkTool' complete! (3.87s) | |
| Build complete! | |
| Building BenchmarkTool in release mode... | |
| Building benchmark targets in release mode for benchmark run... | |
| Building SplitBenchmarkTarget | |
| ================== | |
| Running Benchmarks | |
| ================== | |
| 0% [ ] ETA: 00:00:00 | SplitBenchmarkTarget:comp 1% [ ] ETA: 00:00:01 | SplitBenchmarkTarget:comp 5% [--- ] ETA: 00:00:01 | SplitBenchmarkTarget:comp 10% [------ ] ETA: 00:00:01 | SplitBenchmarkTarget:comp 20% [------------ ] ETA: 00:00:01 | SplitBenchmarkTarget:comp 30% [------------------ ] ETA: 00:00:01 | SplitBenchmarkTarget:comp 40% [------------------------ ] ETA: 00:00:01 | SplitBenchmarkTarget:comp 45% [--------------------------- ] ETA: 00:00:01 | SplitBenchmarkTarget:comp 50% [------------------------------ ] ETA: 00:00:01 | SplitBenchmarkTarget:comp 60% [------------------------------------ ] ETA: 00:00:01 | SplitBenchmarkTarget:comp 70% [------------------------------------------ ] ETA: 00:00:01 | SplitBenchmarkTarget:comp 80% [------------------------------------------------ ] ETA: 00:00:01 | SplitBenchmarkTarget:comp 90% [------------------------------------------------------ ] ETA: 00:00:01 | SplitBenchmarkTarget:comp100% [------------------------------------------------------------] ETA: 00:00:00 | SplitBenchmarkTarget:comp100% [------------------------------------------------------------] ETA: 00:00:00 | SplitBenchmarkTarget:components-separatedBy | |
| 0% [ ] ETA: 00:00:00 | SplitBenchmarkTarget:last 1% [ ] ETA: 00:00:01 | SplitBenchmarkTarget:last 6% [--- ] ETA: 00:00:01 | SplitBenchmarkTarget:last 15% [--------- ] ETA: 00:00:01 | SplitBenchmarkTarget:last 25% [--------------- ] ETA: 00:00:01 | SplitBenchmarkTarget:last 35% [--------------------- ] ETA: 00:00:01 | SplitBenchmarkTarget:last 45% [--------------------------- ] ETA: 00:00:01 | SplitBenchmarkTarget:last 55% [--------------------------------- ] ETA: 00:00:01 | SplitBenchmarkTarget:last 65% [--------------------------------------- ] ETA: 00:00:01 | SplitBenchmarkTarget:last 75% [--------------------------------------------- ] ETA: 00:00:01 | SplitBenchmarkTarget:last 85% [--------------------------------------------------- ] ETA: 00:00:01 | SplitBenchmarkTarget:last 90% [------------------------------------------------------ ] ETA: 00:00:01 | SplitBenchmarkTarget:last 95% [--------------------------------------------------------- ] ETA: 00:00:01 | SplitBenchmarkTarget:last100% [------------------------------------------------------------] ETA: 00:00:00 | SplitBenchmarkTarget:last100% [------------------------------------------------------------] ETA: 00:00:00 | SplitBenchmarkTarget:lastIndex | |
| 0% [ ] ETA: 00:00:00 | SplitBenchmarkTarget:spli 1% [ ] ETA: 00:00:01 | SplitBenchmarkTarget:spli 6% [--- ] ETA: 00:00:01 | SplitBenchmarkTarget:spli 15% [--------- ] ETA: 00:00:01 | SplitBenchmarkTarget:spli 25% [--------------- ] ETA: 00:00:01 | SplitBenchmarkTarget:spli 35% [--------------------- ] ETA: 00:00:01 | SplitBenchmarkTarget:spli 40% [------------------------ ] ETA: 00:00:01 | SplitBenchmarkTarget:spli 50% [------------------------------ ] ETA: 00:00:01 | SplitBenchmarkTarget:spli 60% [------------------------------------ ] ETA: 00:00:01 | SplitBenchmarkTarget:spli 70% [------------------------------------------ ] ETA: 00:00:01 | SplitBenchmarkTarget:spli 80% [------------------------------------------------ ] ETA: 00:00:01 | SplitBenchmarkTarget:spli 90% [------------------------------------------------------ ] ETA: 00:00:01 | SplitBenchmarkTarget:spli100% [------------------------------------------------------------] ETA: 00:00:00 | SplitBenchmarkTarget:spli100% [------------------------------------------------------------] ETA: 00:00:00 | SplitBenchmarkTarget:split-separator | |
| ============================================================================================================= | |
| Baseline 'Current_run' | |
| ============================================================================================================= | |
| Host 'STACIAs-MacBook-Air.local' with 8 'arm64' processors with 16 GB memory, running: | |
| Darwin Kernel Version 24.6.0: Fri Feb 27 19:34:52 PST 2026; root:xnu-11417.140.69.709.8~1/RELEASE_ARM64_T8122 | |
| ==================== | |
| SplitBenchmarkTarget | |
| ==================== | |
| components-separatedBy | |
| ╒═══════════════════════════════╤═══════════╤═══════════╤═══════════╤═══════════╤═══════════╤═══════════╤═══════════╤═══════════╕ | |
| │ Metric │ p0 │ p25 │ p50 │ p75 │ p90 │ p99 │ p100 │ Samples │ | |
| ╞═══════════════════════════════╪═══════════╪═══════════╪═══════════╪═══════════╪═══════════╪═══════════╪═══════════╪═══════════╡ | |
| │ Instructions (K) * │ 34 │ 34 │ 34 │ 34 │ 34 │ 34 │ 60 │ 10000 │ | |
| ├───────────────────────────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┤ | |
| │ Malloc (total) * │ 4 │ 4 │ 4 │ 4 │ 4 │ 4 │ 4 │ 10000 │ | |
| ├───────────────────────────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┤ | |
| │ Memory (resident peak) (K) │ 7930 │ 8262 │ 8278 │ 8294 │ 8307 │ 8307 │ 8307 │ 10000 │ | |
| ├───────────────────────────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┤ | |
| │ Throughput (# / s) (K) │ 220 │ 212 │ 207 │ 155 │ 133 │ 91 │ 3 │ 10000 │ | |
| ├───────────────────────────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┤ | |
| │ Time (total CPU) (ns) * │ 6833 │ 7043 │ 7211 │ 9631 │ 11295 │ 17759 │ 97125 │ 10000 │ | |
| ├───────────────────────────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┤ | |
| │ Time (wall clock) (ns) * │ 4541 │ 4711 │ 4835 │ 6459 │ 7543 │ 11007 │ 356917 │ 10000 │ | |
| ╘═══════════════════════════════╧═══════════╧═══════════╧═══════════╧═══════════╧═══════════╧═══════════╧═══════════╧═══════════╛ | |
| lastIndex | |
| ╒═══════════════════════════════╤═══════════╤═══════════╤═══════════╤═══════════╤═══════════╤═══════════╤═══════════╤═══════════╕ | |
| │ Metric │ p0 │ p25 │ p50 │ p75 │ p90 │ p99 │ p100 │ Samples │ | |
| ╞═══════════════════════════════╪═══════════╪═══════════╪═══════════╪═══════════╪═══════════╪═══════════╪═══════════╪═══════════╡ | |
| │ Instructions * │ 1819 │ 1822 │ 1822 │ 1822 │ 1822 │ 1822 │ 18115 │ 10000 │ | |
| ├───────────────────────────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┤ | |
| │ Malloc (total) * │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 10000 │ | |
| ├───────────────────────────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┤ | |
| │ Memory (resident peak) (K) │ 7946 │ 8278 │ 8294 │ 8311 │ 8323 │ 8323 │ 8323 │ 10000 │ | |
| ├───────────────────────────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┤ | |
| │ Throughput (# / s) (K) │ 1092 │ 1000 │ 961 │ 857 │ 827 │ 649 │ 65 │ 10000 │ | |
| ├───────────────────────────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┤ | |
| │ Time (total CPU) (ns) * │ 3999 │ 4127 │ 4211 │ 4835 │ 4959 │ 7791 │ 63124 │ 10000 │ | |
| ├───────────────────────────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┤ | |
| │ Time (wall clock) (ns) * │ 916 │ 1000 │ 1041 │ 1167 │ 1209 │ 1500 │ 15500 │ 10000 │ | |
| ╘═══════════════════════════════╧═══════════╧═══════════╧═══════════╧═══════════╧═══════════╧═══════════╧═══════════╧═══════════╛ | |
| split-separator | |
| ╒═══════════════════════════════╤═══════════╤═══════════╤═══════════╤═══════════╤═══════════╤═══════════╤═══════════╤═══════════╕ | |
| │ Metric │ p0 │ p25 │ p50 │ p75 │ p90 │ p99 │ p100 │ Samples │ | |
| ╞═══════════════════════════════╪═══════════╪═══════════╪═══════════╪═══════════╪═══════════╪═══════════╪═══════════╪═══════════╡ | |
| │ Instructions (K) * │ 25 │ 25 │ 25 │ 25 │ 25 │ 26 │ 64 │ 10000 │ | |
| ├───────────────────────────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┤ | |
| │ Malloc (total) * │ 4 │ 4 │ 4 │ 4 │ 4 │ 4 │ 4 │ 10000 │ | |
| ├───────────────────────────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┤ | |
| │ Memory (resident peak) (K) │ 7913 │ 8245 │ 8245 │ 8278 │ 8290 │ 8290 │ 8290 │ 10000 │ | |
| ├───────────────────────────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┤ | |
| │ Throughput (# / s) (K) │ 218 │ 179 │ 155 │ 153 │ 151 │ 87 │ 10 │ 10000 │ | |
| ├───────────────────────────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┤ | |
| │ Time (total CPU) (ns) * │ 7166 │ 8711 │ 10047 │ 10215 │ 10423 │ 20095 │ 74125 │ 10000 │ | |
| ├───────────────────────────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┤ | |
| │ Time (wall clock) (ns) * │ 4583 │ 5583 │ 6459 │ 6543 │ 6627 │ 11463 │ 100167 │ 10000 │ | |
| ╘═══════════════════════════════╧═══════════╧═══════════╧═══════════╧═══════════╧═══════════╧═══════════╧═══════════╧═══════════╛ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment