You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

50 lines
1.4 KiB

  1. // Copyright 2012 The Gorilla Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style
  3. // license that can be found in the LICENSE file.
  4. package mux
  5. import (
  6. "net/http"
  7. "net/http/httptest"
  8. "testing"
  9. )
  10. func BenchmarkMux(b *testing.B) {
  11. router := new(Router)
  12. handler := func(w http.ResponseWriter, r *http.Request) {}
  13. router.HandleFunc("/v1/{v1}", handler)
  14. request, _ := http.NewRequest("GET", "/v1/anything", nil)
  15. for i := 0; i < b.N; i++ {
  16. router.ServeHTTP(nil, request)
  17. }
  18. }
  19. func BenchmarkMuxAlternativeInRegexp(b *testing.B) {
  20. router := new(Router)
  21. handler := func(w http.ResponseWriter, r *http.Request) {}
  22. router.HandleFunc("/v1/{v1:(?:a|b)}", handler)
  23. requestA, _ := http.NewRequest("GET", "/v1/a", nil)
  24. requestB, _ := http.NewRequest("GET", "/v1/b", nil)
  25. for i := 0; i < b.N; i++ {
  26. router.ServeHTTP(nil, requestA)
  27. router.ServeHTTP(nil, requestB)
  28. }
  29. }
  30. func BenchmarkManyPathVariables(b *testing.B) {
  31. router := new(Router)
  32. handler := func(w http.ResponseWriter, r *http.Request) {}
  33. router.HandleFunc("/v1/{v1}/{v2}/{v3}/{v4}/{v5}", handler)
  34. matchingRequest, _ := http.NewRequest("GET", "/v1/1/2/3/4/5", nil)
  35. notMatchingRequest, _ := http.NewRequest("GET", "/v1/1/2/3/4", nil)
  36. recorder := httptest.NewRecorder()
  37. for i := 0; i < b.N; i++ {
  38. router.ServeHTTP(nil, matchingRequest)
  39. router.ServeHTTP(recorder, notMatchingRequest)
  40. }
  41. }