github.com/ActiveState/cli@v0.0.0-20240508170324-6801f60cd051/internal/testhelpers/performance/timeit.go (about)

     1  package performance
     2  
     3  import (
     4  	"testing"
     5  	"time"
     6  
     7  	"github.com/ActiveState/cli/internal/errs"
     8  )
     9  
    10  // TimeIt tests if the average duration of the function is less than the maxDuration
    11  func TimeIt(t *testing.T, f func(), attempts int, maxDuration time.Duration) error {
    12  	durations := make([]time.Duration, attempts)
    13  	avgDuration := time.Duration(0)
    14  	for i := 0; i < attempts; i++ {
    15  		start := time.Now()
    16  		f()
    17  		durations[i] = time.Since(start)
    18  		avgDuration += durations[i]
    19  	}
    20  
    21  	avgDuration /= time.Duration(attempts)
    22  
    23  	if avgDuration > maxDuration {
    24  		return errs.New("Average duration of %s exceeded max duration of %s, individual durations: %#v", avgDuration, maxDuration, durations)
    25  	}
    26  
    27  	return nil
    28  }