我一直在尝试对我为使用 Golang 练习而编写的 Radix Tree 实现进行基准测试。
但是我在“我应该如何对其进行基准测试?”上遇到了一个问题。在下面的代码中显示了两种情况,或者说我想对 LookUp 函数进行基准测试的不同方式。
案例1:使用树上存在的一个字节片,这意味着它将通过所有子节点等成功查找......
案例 2:使用 func 从树中的现有数据生成随机切片,这意味着它也将成功查找...
我知道时间花费将取决于树的深度......我认为案例 2 是否接近现实世界的实现?
问题:哪种情况对基准测试更有效或更有用?
基准:
func BenchmarkLookUp(b *testing.B) {
radix := New()
insertData(radix, sampleData2)
textToLookUp := randomBytes()
for i := 0; i < b.N; i++ {
radix.LookUp(textToLookUp) // Case 1
//radix.LookUp(randomBytes()) // Case 2
}
}
func randomBytes() []byte {
strings := sampleData2()
return []byte(strings[random(0, len(strings))])
}
func sampleData2() []string {
return []string{
"romane",
"romanus",
"romulus",
...
}
}
结果案例一:
PASS
BenchmarkLookUp-4 10000000 146 ns/op
ok github.com/falmar/goradix 2.068s
PASS
BenchmarkLookUp-4 10000000 149 ns/op
ok github.com/falmar/goradix 2.244s
结果案例2:
PASS
BenchmarkLookUp-4 3000000 546 ns/op
ok github.com/falmar/goradix 3.094s
PASS
BenchmarkLookUp-4 3000000 538 ns/op
ok github.com/falmar/goradix 4.481s
不匹配时的结果:
PASS
BenchmarkLookUp-4 10000000 194 ns/op
ok github.com/falmar/goradix 3.189s
PASS
BenchmarkLookUp-4 10000000 191 ns/op
ok github.com/falmar/goradix 3.243s