95 lines
2.4 KiB
Markdown
95 lines
2.4 KiB
Markdown
|
# TimingBench
|
||
|
|
||
|
`TimingBench` is a Go module for benchmarking the execution time of a
|
||
|
function. It runs the function a specified number of times and returns the
|
||
|
minimum, maximum, mean, and median execution times, along with other
|
||
|
relevant statistics. It also supports context for cancellation.
|
||
|
|
||
|
## Features
|
||
|
|
||
|
- Measure min, max, mean, and median execution times of a function.
|
||
|
- Support for context-based cancellation.
|
||
|
- Provides detailed timing statistics.
|
||
|
|
||
|
## Installation
|
||
|
|
||
|
To install the `timingbench` package, use the following command:
|
||
|
|
||
|
```sh
|
||
|
go get git.eeqj.de/sneak/timingbench
|
||
|
```
|
||
|
|
||
|
## Usage
|
||
|
|
||
|
Here's a simple example of how to use the `timingbench` module:
|
||
|
|
||
|
```go
|
||
|
package main
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"fmt"
|
||
|
"math/rand"
|
||
|
"time"
|
||
|
"git.eeqj.de/sneak/timingbench"
|
||
|
)
|
||
|
|
||
|
// Example function to benchmark
|
||
|
func sampleFunction() error {
|
||
|
time.Sleep(time.Duration(rand.Intn(100)) * time.Millisecond)
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func main() {
|
||
|
// Seed the random number generator.
|
||
|
rand.Seed(time.Now().UnixNano())
|
||
|
|
||
|
// Define the number of iterations.
|
||
|
iterations := 10
|
||
|
|
||
|
// Create a context with a timeout for cancellation.
|
||
|
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
|
||
|
defer cancel()
|
||
|
|
||
|
// Measure the execution times of the sample function.
|
||
|
result, err := timingbench.TimeFunction(ctx, sampleFunction, iterations)
|
||
|
if err != nil {
|
||
|
fmt.Printf("Error measuring function: %v\n", err)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// Print the timing results.
|
||
|
fmt.Println(result.String())
|
||
|
}
|
||
|
```
|
||
|
|
||
|
## TimingResult
|
||
|
|
||
|
The `TimingResult` struct holds the timing statistics for the function executions:
|
||
|
|
||
|
```go
|
||
|
type TimingResult struct {
|
||
|
Min time.Duration // Minimum execution time
|
||
|
Max time.Duration // Maximum execution time
|
||
|
Mean time.Duration // Mean execution time
|
||
|
Median time.Duration // Median execution time
|
||
|
StartTime time.Time // Start time of the benchmarking
|
||
|
EndTime time.Time // End time of the benchmarking
|
||
|
Duration time.Duration // Total duration of the benchmarking
|
||
|
Iterations int // Number of iterations
|
||
|
}
|
||
|
```
|
||
|
|
||
|
## License
|
||
|
|
||
|
This project is licensed under the WTFPL License. See the
|
||
|
[LICENSE](./LICENSE) file for details.
|
||
|
|
||
|
## Contributing
|
||
|
|
||
|
Contributions are welcome! Please send patches via email.
|
||
|
|
||
|
## Author
|
||
|
|
||
|
`timingbench` was written by [sneak](mailto:sneak@sneak.berlin) ([website](https://sneak.berlin)).
|