0
我一直在嘗試使用Golang爲實踐而寫的基數樹實現進行基準測試。Golang:基準基數樹查找
但是我遇到了一個問題,「我應該如何對它進行基準測試?」。在下面的代碼中顯示了兩種情況,或者說我想用不同的方式來對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",
...
}
}
結果案例1:
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
返回的項目不多,只返回'(node,error)',如果匹配'(node,nil)'否則'(nil,error)'。爲了使用像一個httprouter,我會做一個自動完成func或其他lookups func –
我從來沒有使用過golang,但至少在C++/Java中,隨機生成器可以被'植入'一個常量('0'在上面的代碼?),這使測試可重複。 – TilmannZ