Skip to content

Instantly share code, notes, and snippets.

@larytet
Last active November 8, 2019 09:01
Show Gist options
  • Save larytet/c9d87611f560d57b3f81fec9af6c9cf0 to your computer and use it in GitHub Desktop.
Save larytet/c9d87611f560d57b3f81fec9af6c9cf0 to your computer and use it in GitHub Desktop.
type TestData struct {
i int
k int
}
func getIfc(data TestData) interface{} {
return data
}
func getMyData(b *testing.B, ifc interface{}, expected TestData) TestData {
data := ifc.(TestData)
if data.i != expected.i {
b.Fatalf("%d instead of %d", data.i, data.i)
}
if data.k != expected.k {
b.Fatalf("%d instead of %d", data.k, data.k)
}
return ifc.(TestData)
}
func getMyDataFast(ifc interface{}) TestData {
return ifc.(TestData)
}
func BenchmarkTypeAssert(b *testing.B) {
for i := 0; i < b.N; i++ {
for k := 0; k < 1000; k++ {
data := TestData{i, k}
myIfc := getIfc(data)
getMyData(b, myIfc, data)
}
}
}
func BenchmarkTypeAssertFast(b *testing.B) {
for i := 0; i < b.N; i++ {
for k := 0; k < 1000; k++ {
data := TestData{i, k}
myIfc := getIfc(data)
data = getMyDataFast(myIfc)
if data.i != i {
b.Fatalf("%d instead of %d", data.i, i)
}
if data.k != k {
b.Fatalf("%d instead of %d", data.k, k)
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment