So I've decided to write test for my function in golang
. The function itself looks like this:
func Insert(slice []int, element int, index int) []int {
n := len(slice)
slice = slice[:(n + 1)]
for i := index; i < n; i++ {
slice[i+1] = slice[i]
}
slice[index] = element
return slice
}
So it takes a slice, extends its length by 1 and inserts an element at given index. Now before I call it I have to do 2 things:
size := somevalue
array := make([]int, size, size+1)
and then f.e array = Insert(array, 1, len(array)/2
. Now I wrote insert_test.go
:
package sdizo
import "testing"
func benchmarkInsert(size int, b *testing.B) {
b.ResetTimer()
for n := 0; n < b.N; n++ {
array := make([]int, size, size+1)
array = Insert(array, 1, len(array)/2)
}
}
func BenchmarkInsert10k(b *testing.B) { benchmarkInsert(10000, b) }
func BenchmarkInsert20k(b *testing.B) { benchmarkInsert(20000, b) }
func BenchmarkInsert30k(b *testing.B) { benchmarkInsert(30000, b) }
func BenchmarkInsert40k(b *testing.B) { benchmarkInsert(40000, b) }
func BenchmarkInsert50k(b *testing.B) { benchmarkInsert(50000, b) }
The thing is, there are 2 operations in testing loop. I cannot move the make()
above the loop, cuz it has to make a new array everytime it tries to insert something to it (don't want to mess with capacity). It works, it gives me output, but I am curious if this make()
doesn't mess up with time measurement, and I would like to ask you if I can somehow measure the time only for Insert()
P.S Is there a convenient way to write down the results of benchmark test to a file?
Aucun commentaire:
Enregistrer un commentaire