add benchmark tests for filters
This commit is contained in:
parent
732eda22d4
commit
1fe7a624c4
144
src/pkg/backup/details/details_benchmark_test.go
Normal file
144
src/pkg/backup/details/details_benchmark_test.go
Normal file
@ -0,0 +1,144 @@
|
|||||||
|
package details
|
||||||
|
|
||||||
|
import (
|
||||||
|
"math/rand"
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/google/uuid"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
details512k = detailsBuilder(512000)
|
||||||
|
details256k = detailsBuilder(256000)
|
||||||
|
details102k = detailsBuilder(102000)
|
||||||
|
)
|
||||||
|
|
||||||
|
func detailsBuilder(fileCount int) *Details {
|
||||||
|
alpha := make([]string, 26)
|
||||||
|
|
||||||
|
for i := 0; i < 26; i++ {
|
||||||
|
alpha[i] = string(rune(97 + i))
|
||||||
|
}
|
||||||
|
|
||||||
|
alphaPath := basePath.Append(alpha...)
|
||||||
|
fes := FolderEntriesForPath(alphaPath, alphaPath)
|
||||||
|
|
||||||
|
// populate items
|
||||||
|
for i := 0; i < fileCount; i++ {
|
||||||
|
var (
|
||||||
|
ri = rand.Int31n(26)
|
||||||
|
itemName = "item_" + uuid.NewString()
|
||||||
|
itemP = basePath.Append(alpha[:ri]...).Append(itemName)
|
||||||
|
)
|
||||||
|
|
||||||
|
info := ItemInfo{
|
||||||
|
OneDrive: &OneDriveInfo{
|
||||||
|
ItemName: itemName,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
ent := folderEntry{
|
||||||
|
RepoRef: itemP.String(),
|
||||||
|
ShortRef: itemP.ShortRef(),
|
||||||
|
ParentRef: itemP.Dir().String(),
|
||||||
|
Info: info,
|
||||||
|
}
|
||||||
|
|
||||||
|
fes = append(fes, ent)
|
||||||
|
}
|
||||||
|
|
||||||
|
// populate 13 empty folders with dirmeta items
|
||||||
|
for i := 0; i < 13; i++ {
|
||||||
|
var (
|
||||||
|
ri = rand.Int31n(26)
|
||||||
|
fldName = "empty_" + uuid.NewString()
|
||||||
|
fldP = basePath.Append(alpha[:ri]...).Append(fldName)
|
||||||
|
itemName = fldName + ".dirmeta"
|
||||||
|
itemP = fldP.Append(itemName)
|
||||||
|
)
|
||||||
|
|
||||||
|
// folder
|
||||||
|
info := ItemInfo{
|
||||||
|
Folder: &FolderInfo{
|
||||||
|
DisplayName: fldName,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
ent := folderEntry{
|
||||||
|
RepoRef: fldP.String(),
|
||||||
|
ShortRef: fldP.ShortRef(),
|
||||||
|
ParentRef: fldP.Dir().String(),
|
||||||
|
Info: info,
|
||||||
|
}
|
||||||
|
|
||||||
|
fes = append(fes, ent)
|
||||||
|
|
||||||
|
// dirmeta
|
||||||
|
info = ItemInfo{
|
||||||
|
OneDrive: &OneDriveInfo{
|
||||||
|
ItemName: itemName,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
ent = folderEntry{
|
||||||
|
RepoRef: itemP.String(),
|
||||||
|
ShortRef: itemP.ShortRef(),
|
||||||
|
ParentRef: itemP.Dir().String(),
|
||||||
|
Info: info,
|
||||||
|
}
|
||||||
|
|
||||||
|
fes = append(fes, ent)
|
||||||
|
}
|
||||||
|
|
||||||
|
// shuffle the array, to avoid miscalculations due to ordering
|
||||||
|
rand.Seed(time.Now().UnixNano())
|
||||||
|
rand.Shuffle(len(fes), func(i, j int) {
|
||||||
|
fes[i], fes[j] = fes[j], fes[i]
|
||||||
|
})
|
||||||
|
|
||||||
|
// return it as a details struct
|
||||||
|
return toDetails(fes)
|
||||||
|
}
|
||||||
|
|
||||||
|
var result *Details
|
||||||
|
|
||||||
|
func BenchmarkDetailsFiltering_512_both(b *testing.B) { benchmarkBoth(details512k, b) }
|
||||||
|
func BenchmarkDetailsFiltering_256_both(b *testing.B) { benchmarkBoth(details256k, b) }
|
||||||
|
func BenchmarkDetailsFiltering_102_both(b *testing.B) { benchmarkBoth(details102k, b) }
|
||||||
|
func BenchmarkDetailsFiltering_512_meta(b *testing.B) { benchmarkMeta(details512k, b) }
|
||||||
|
func BenchmarkDetailsFiltering_256_meta(b *testing.B) { benchmarkMeta(details256k, b) }
|
||||||
|
func BenchmarkDetailsFiltering_102_meta(b *testing.B) { benchmarkMeta(details102k, b) }
|
||||||
|
func BenchmarkDetailsFiltering_512_container(b *testing.B) { benchmarkContainer(details512k, b) }
|
||||||
|
func BenchmarkDetailsFiltering_256_container(b *testing.B) { benchmarkContainer(details256k, b) }
|
||||||
|
func BenchmarkDetailsFiltering_102_container(b *testing.B) { benchmarkContainer(details102k, b) }
|
||||||
|
|
||||||
|
func benchmarkBoth(d *Details, b *testing.B) {
|
||||||
|
var d2 *Details
|
||||||
|
|
||||||
|
for n := 0; n < b.N; n++ {
|
||||||
|
d2 = d.FilterMetaFiles().FilterEmptyContainers()
|
||||||
|
}
|
||||||
|
|
||||||
|
result = d2
|
||||||
|
}
|
||||||
|
|
||||||
|
func benchmarkMeta(d *Details, b *testing.B) {
|
||||||
|
var d2 *Details
|
||||||
|
|
||||||
|
for n := 0; n < b.N; n++ {
|
||||||
|
d2 = d.FilterMetaFiles()
|
||||||
|
}
|
||||||
|
|
||||||
|
result = d2
|
||||||
|
}
|
||||||
|
|
||||||
|
func benchmarkContainer(d *Details, b *testing.B) {
|
||||||
|
var d2 *Details
|
||||||
|
|
||||||
|
for n := 0; n < b.N; n++ {
|
||||||
|
d2 = d.FilterEmptyContainers()
|
||||||
|
}
|
||||||
|
|
||||||
|
result = d2
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user