go.x2ox.com/sorbifolia/httprouter@v0.0.0-20230619134115-60a7da6b92ca/router_benchmark_test.go (about) 1 package httprouter 2 3 import ( 4 "net/http" 5 "testing" 6 ) 7 8 func BenchmarkOneRoute(B *testing.B) { 9 server := NewServer() 10 server.GET("/", func(c *Context) {}) 11 runRequest(B, server, "GET", "/ping") 12 } 13 14 func BenchmarkManyRoutesFist(B *testing.B) { 15 router := NewServer() 16 router.Any("/ping", func(c *Context) {}) 17 runRequest(B, router, "GET", "/ping") 18 } 19 20 func BenchmarkOneRouteJson(B *testing.B) { 21 router := NewServer() 22 router.GET("/hi", func(c *Context) { 23 c.JSON("hello world") 24 }) 25 runRequest(B, router, "GET", "/hi") 26 } 27 28 func Benchmark404(B *testing.B) { 29 router := NewServer() 30 router.Any("/something", func(c *Context) {}) 31 runRequest(B, router, "GET", "/ping") 32 } 33 34 func runRequest(B *testing.B, r *Server, method, path string) { 35 // create fake request 36 req, err := http.NewRequest(method, path, nil) 37 if err != nil { 38 panic(err) 39 } 40 w := newMockWriter() 41 B.ReportAllocs() 42 B.ResetTimer() 43 for i := 0; i < B.N; i++ { 44 r.ServeHTTP(w, req) 45 } 46 } 47 48 type mockWriter struct { 49 headers http.Header 50 } 51 52 func newMockWriter() *mockWriter { 53 return &mockWriter{ 54 http.Header{}, 55 } 56 } 57 58 func (m *mockWriter) Header() (h http.Header) { 59 return m.headers 60 } 61 62 func (m *mockWriter) Write(p []byte) (n int, err error) { 63 return len(p), nil 64 } 65 66 func (m *mockWriter) WriteString(s string) (n int, err error) { 67 return len(s), nil 68 } 69 70 func (m *mockWriter) WriteHeader(int) {}