Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/google/swift-benchmark

A swift library to benchmark code snippets.
https://github.com/google/swift-benchmark

benchmark-framework benchmarking swift swiftpackage swiftpm

Last synced: 3 months ago
JSON representation

A swift library to benchmark code snippets.

Awesome Lists containing this project

README

        

# swift-benchmark

A Swift library for benchmarking code snippets, similar to
[google/benchmark](https://github.com/google/benchmark).

Example:

```swift
import Benchmark

benchmark("add string reserved capacity") {
var x: String = ""
x.reserveCapacity(2000)
for _ in 1...1000 {
x += "hi"
}
}

Benchmark.main()
```

At runtime, you can filter which benchmarks to run by using the `--filter` command line flag. For
more details on what options are available, pass either the `-h` or `--help` command line flags.

Example:

```terminal
$ swift run -c release BenchmarkMinimalExample --help
USAGE: benchmark-command [--allow-debug-build] [--filter ] [--filter-not ] [--iterations ] [--warmup-iterations ] [--min-time ] [--max-iterations ] [--time-unit ] [--inverse-time-unit ] [--columns ] [--format ] [--quiet]

OPTIONS:
--allow-debug-build Overrides check to verify optimized build.
--filter Run only benchmarks whose names match the regular expression.
--filter-not
Exclude benchmarks whose names match the regular expression.
--iterations
Number of iterations to run.
--warmup-iterations
Number of warm-up iterations to run.
--min-time Minimal time to run when automatically detecting number iterations.
--max-iterations
Maximum number of iterations to run when automatically detecting number iterations.
--time-unit Time unit used to report the timing results.
--inverse-time-unit
Inverse time unit used to report throughput results.
--columns Comma-separated list of column names to show.
--format Output format (valid values are: json, csv, console, none).
--quiet Only print final benchmark results.
-h, --help Show help information.

$ swift run -c release BenchmarkMinimalExample
running add string no capacity... done! (1832.52 ms)
running add string reserved capacity... done! (1813.96 ms)

name time std iterations
-----------------------------------------------------------
add string no capacity 37435 ns ± 6.22 % 37196
add string reserved capacity 37022 ns ± 1.75 % 37749
```

For more examples, see
[Sources/BenchmarkMinimalExample](./Sources/BenchmarkMinimalExample) and
[Sources/BenchmarkSuiteExample](./Sources/BenchmarkSuiteExample).

## Usage

Add this library as a SwiftPM dependency:

```swift
let package = Package(
name: ... ,
products: [
.executable(name: "Benchmarks", targets: ["Benchmarks"])
],
dependencies: [
.package(url: "https://github.com/google/swift-benchmark", from: "0.1.0")
],
targets: [
.target(
name: "Benchmarks",
dependencies: [.product(name: "Benchmark", package: "swift-benchmark")]
)
]
)
```

## Roadmap

The project is in an early stage and offers only a basic set of benchmarking
utilities. Feel free to file issues and feature requests to help us prioritize
what to do next.

## License

Please see [LICENSE](LICENSE) for details.

## Contributing

Please see [CONTRIBUTING.md] for details.

[CONTRIBUTING.md]: CONTRIBUTING.md