github.com/anacrolix/torrent@v1.61.0/bencode/bench_test.go (about) 1 package bencode_test 2 3 import ( 4 "net" 5 "reflect" 6 "testing" 7 8 "github.com/anacrolix/dht/v2/krpc" 9 10 "github.com/anacrolix/torrent/bencode" 11 ) 12 13 func marshalAndUnmarshal(tb testing.TB, orig krpc.Msg) (ret krpc.Msg) { 14 b, err := bencode.Marshal(orig) 15 if err != nil { 16 tb.Fatal(err) 17 } 18 err = bencode.Unmarshal(b, &ret) 19 if err != nil { 20 tb.Fatal(err) 21 } 22 // ret.Q = "what" 23 return 24 } 25 26 func BenchmarkMarshalThenUnmarshalKrpcMsg(tb *testing.B) { 27 orig := krpc.Msg{ 28 T: "420", 29 Y: "r", 30 R: &krpc.Return{ 31 Token: func() *string { t := "re-up"; return &t }(), 32 }, 33 IP: krpc.NodeAddr{IP: net.ParseIP("1.2.3.4"), Port: 1337}, 34 ReadOnly: true, 35 } 36 first := marshalAndUnmarshal(tb, orig) 37 if !reflect.DeepEqual(orig, first) { 38 tb.Fail() 39 } 40 tb.ReportAllocs() 41 tb.ResetTimer() 42 for i := 0; i < tb.N; i += 1 { 43 marshalAndUnmarshal(tb, orig) 44 } 45 }