Skip to content

Commit ba2e441

Browse files
committed
adding bear
1 parent 80db2c8 commit ba2e441

File tree

6 files changed

+116
-0
lines changed

6 files changed

+116
-0
lines changed

Diff for: bench_test.go

+24
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,12 @@ func BenchmarkAce_Param(b *testing.B) {
7171
r, _ := http.NewRequest("GET", "/user/gordon", nil)
7272
benchRequest(b, router, r)
7373
}
74+
func BenchmarkBear_Param(b *testing.B) {
75+
router := loadBearSingle("GET", "/user/{name}", bearHandler)
76+
77+
r, _ := http.NewRequest("GET", "/user/gordon", nil)
78+
benchRequest(b, router, r)
79+
}
7480
func BenchmarkBeego_Param(b *testing.B) {
7581
router := loadBeegoSingle("GET", "/user/:name", beegoHandler)
7682

@@ -219,6 +225,12 @@ func BenchmarkAce_Param5(b *testing.B) {
219225
r, _ := http.NewRequest("GET", fiveRoute, nil)
220226
benchRequest(b, router, r)
221227
}
228+
func BenchmarkBear_Param5(b *testing.B) {
229+
router := loadBearSingle("GET", fiveBrace, bearHandler)
230+
231+
r, _ := http.NewRequest("GET", fiveRoute, nil)
232+
benchRequest(b, router, r)
233+
}
222234
func BenchmarkBeego_Param5(b *testing.B) {
223235
router := loadBeegoSingle("GET", fiveColon, beegoHandler)
224236

@@ -367,6 +379,12 @@ func BenchmarkAce_Param20(b *testing.B) {
367379
r, _ := http.NewRequest("GET", twentyRoute, nil)
368380
benchRequest(b, router, r)
369381
}
382+
func BenchmarkBear_Param20(b *testing.B) {
383+
router := loadBearSingle("GET", twentyBrace, bearHandler)
384+
385+
r, _ := http.NewRequest("GET", twentyRoute, nil)
386+
benchRequest(b, router, r)
387+
}
370388
func BenchmarkBeego_Param20(b *testing.B) {
371389
router := loadBeegoSingle("GET", twentyColon, beegoHandler)
372390

@@ -511,6 +529,12 @@ func BenchmarkAce_ParamWrite(b *testing.B) {
511529
r, _ := http.NewRequest("GET", "/user/gordon", nil)
512530
benchRequest(b, router, r)
513531
}
532+
func BenchmarkBear_ParamWrite(b *testing.B) {
533+
router := loadBearSingle("GET", "/user/{name}", bearHandlerWrite)
534+
535+
r, _ := http.NewRequest("GET", "/user/gordon", nil)
536+
benchRequest(b, router, r)
537+
}
514538
func BenchmarkBeego_ParamWrite(b *testing.B) {
515539
router := loadBeegoSingle("GET", "/user/:name", beegoHandlerWrite)
516540

Diff for: github_test.go

+15
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,7 @@ var githubAPI = []route{
275275

276276
var (
277277
githubAce http.Handler
278+
githubBear http.Handler
278279
githubBeego http.Handler
279280
githubBone http.Handler
280281
githubDenco http.Handler
@@ -305,6 +306,9 @@ func init() {
305306
calcMem("Ace", func() {
306307
githubAce = loadAce(githubAPI)
307308
})
309+
calcMem("Bear", func() {
310+
githubBear = loadBear(githubAPI)
311+
})
308312
calcMem("Beego", func() {
309313
githubBeego = loadBeego(githubAPI)
310314
})
@@ -380,6 +384,10 @@ func BenchmarkAce_GithubStatic(b *testing.B) {
380384
req, _ := http.NewRequest("GET", "/user/repos", nil)
381385
benchRequest(b, githubAce, req)
382386
}
387+
func BenchmarkBear_GithubStatic(b *testing.B) {
388+
req, _ := http.NewRequest("GET", "/user/repos", nil)
389+
benchRequest(b, githubBear, req)
390+
}
383391
func BenchmarkBeego_GithubStatic(b *testing.B) {
384392
req, _ := http.NewRequest("GET", "/user/repos", nil)
385393
benchRequest(b, githubBeego, req)
@@ -474,6 +482,10 @@ func BenchmarkAce_GithubParam(b *testing.B) {
474482
req, _ := http.NewRequest("GET", "/repos/julienschmidt/httprouter/stargazers", nil)
475483
benchRequest(b, githubAce, req)
476484
}
485+
func BenchmarkBear_GithubParam(b *testing.B) {
486+
req, _ := http.NewRequest("GET", "/repos/julienschmidt/httprouter/stargazers", nil)
487+
benchRequest(b, githubBear, req)
488+
}
477489
func BenchmarkBeego_GithubParam(b *testing.B) {
478490
req, _ := http.NewRequest("GET", "/repos/julienschmidt/httprouter/stargazers", nil)
479491
benchRequest(b, githubBeego, req)
@@ -567,6 +579,9 @@ func BenchmarkZeus_GithubParam(b *testing.B) {
567579
func BenchmarkAce_GithubAll(b *testing.B) {
568580
benchRoutes(b, githubAce, githubAPI)
569581
}
582+
func BenchmarkBear_GithubAll(b *testing.B) {
583+
benchRoutes(b, githubBear, githubAPI)
584+
}
570585
func BenchmarkBeego_GithubAll(b *testing.B) {
571586
benchRoutes(b, githubBeego, githubAPI)
572587
}

Diff for: gplus_test.go

+19
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ var gplusAPI = []route{
3737

3838
var (
3939
gplusAce http.Handler
40+
gplusBear http.Handler
4041
gplusBeego http.Handler
4142
gplusBone http.Handler
4243
gplusDenco http.Handler
@@ -67,6 +68,9 @@ func init() {
6768
calcMem("Ace", func() {
6869
gplusAce = loadAce(gplusAPI)
6970
})
71+
calcMem("Bear", func() {
72+
gplusBear = loadBear(gplusAPI)
73+
})
7074
calcMem("Beego", func() {
7175
gplusBeego = loadBeego(gplusAPI)
7276
})
@@ -142,6 +146,10 @@ func BenchmarkAce_GPlusStatic(b *testing.B) {
142146
req, _ := http.NewRequest("GET", "/people", nil)
143147
benchRequest(b, gplusAce, req)
144148
}
149+
func BenchmarkBear_GPlusStatic(b *testing.B) {
150+
req, _ := http.NewRequest("GET", "/people", nil)
151+
benchRequest(b, gplusBear, req)
152+
}
145153
func BenchmarkBeego_GPlusStatic(b *testing.B) {
146154
req, _ := http.NewRequest("GET", "/people", nil)
147155
benchRequest(b, gplusBeego, req)
@@ -236,6 +244,10 @@ func BenchmarkAce_GPlusParam(b *testing.B) {
236244
req, _ := http.NewRequest("GET", "/people/118051310819094153327", nil)
237245
benchRequest(b, gplusAce, req)
238246
}
247+
func BenchmarkBear_GPlusParam(b *testing.B) {
248+
req, _ := http.NewRequest("GET", "/people/118051310819094153327", nil)
249+
benchRequest(b, gplusBear, req)
250+
}
239251
func BenchmarkBeego_GPlusParam(b *testing.B) {
240252
req, _ := http.NewRequest("GET", "/people/118051310819094153327", nil)
241253
benchRequest(b, gplusBeego, req)
@@ -330,6 +342,10 @@ func BenchmarkAce_GPlus2Params(b *testing.B) {
330342
req, _ := http.NewRequest("GET", "/people/118051310819094153327/activities/123456789", nil)
331343
benchRequest(b, gplusAce, req)
332344
}
345+
func BenchmarkBear_GPlus2Params(b *testing.B) {
346+
req, _ := http.NewRequest("GET", "/people/118051310819094153327/activities/123456789", nil)
347+
benchRequest(b, gplusBear, req)
348+
}
333349
func BenchmarkBeego_GPlus2Params(b *testing.B) {
334350
req, _ := http.NewRequest("GET", "/people/118051310819094153327/activities/123456789", nil)
335351
benchRequest(b, gplusBeego, req)
@@ -423,6 +439,9 @@ func BenchmarkZeus_GPlus2Params(b *testing.B) {
423439
func BenchmarkAce_GPlusAll(b *testing.B) {
424440
benchRoutes(b, gplusAce, gplusAPI)
425441
}
442+
func BenchmarkBear_GPlusAll(b *testing.B) {
443+
benchRoutes(b, gplusBear, gplusAPI)
444+
}
426445
func BenchmarkBeego_GPlusAll(b *testing.B) {
427446
benchRoutes(b, gplusBeego, gplusAPI)
428447
}

Diff for: parse_test.go

+19
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ var parseAPI = []route{
5757

5858
var (
5959
parseAce http.Handler
60+
parseBear http.Handler
6061
parseBeego http.Handler
6162
parseBone http.Handler
6263
parseDenco http.Handler
@@ -87,6 +88,9 @@ func init() {
8788
calcMem("Ace", func() {
8889
parseAce = loadAce(parseAPI)
8990
})
91+
calcMem("Bear", func() {
92+
parseBear = loadBear(parseAPI)
93+
})
9094
calcMem("Beego", func() {
9195
parseBeego = loadBeego(parseAPI)
9296
})
@@ -162,6 +166,10 @@ func BenchmarkAce_ParseStatic(b *testing.B) {
162166
req, _ := http.NewRequest("GET", "/1/users", nil)
163167
benchRequest(b, parseAce, req)
164168
}
169+
func BenchmarkBear_ParseStatic(b *testing.B) {
170+
req, _ := http.NewRequest("GET", "/1/users", nil)
171+
benchRequest(b, parseBear, req)
172+
}
165173
func BenchmarkBeego_ParseStatic(b *testing.B) {
166174
req, _ := http.NewRequest("GET", "/1/users", nil)
167175
benchRequest(b, parseBeego, req)
@@ -256,6 +264,10 @@ func BenchmarkAce_ParseParam(b *testing.B) {
256264
req, _ := http.NewRequest("GET", "/1/classes/go", nil)
257265
benchRequest(b, parseAce, req)
258266
}
267+
func BenchmarkBear_ParseParam(b *testing.B) {
268+
req, _ := http.NewRequest("GET", "/1/classes/go", nil)
269+
benchRequest(b, parseBear, req)
270+
}
259271
func BenchmarkBeego_ParseParam(b *testing.B) {
260272
req, _ := http.NewRequest("GET", "/1/classes/go", nil)
261273
benchRequest(b, parseBeego, req)
@@ -350,6 +362,10 @@ func BenchmarkAce_Parse2Params(b *testing.B) {
350362
req, _ := http.NewRequest("GET", "/1/classes/go/123456789", nil)
351363
benchRequest(b, parseAce, req)
352364
}
365+
func BenchmarkBear_Parse2Params(b *testing.B) {
366+
req, _ := http.NewRequest("GET", "/1/classes/go/123456789", nil)
367+
benchRequest(b, parseBear, req)
368+
}
353369
func BenchmarkBeego_Parse2Params(b *testing.B) {
354370
req, _ := http.NewRequest("GET", "/1/classes/go/123456789", nil)
355371
benchRequest(b, parseBeego, req)
@@ -443,6 +459,9 @@ func BenchmarkZeus_Parse2Params(b *testing.B) {
443459
func BenchmarkAce_ParseAll(b *testing.B) {
444460
benchRoutes(b, parseAce, parseAPI)
445461
}
462+
func BenchmarkBear_ParseAll(b *testing.B) {
463+
benchRoutes(b, parseBeego, parseAPI)
464+
}
446465
func BenchmarkBeego_ParseAll(b *testing.B) {
447466
benchRoutes(b, parseBeego, parseAPI)
448467
}

Diff for: routers.go

+32
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ import (
4242
"github.com/revel/revel"
4343
"github.com/robfig/pathtree"
4444
"github.com/typepress/rivet"
45+
"github.com/ursiform/bear"
4546
goji "github.com/zenazn/goji/web"
4647
)
4748

@@ -109,6 +110,37 @@ func loadAceSingle(method, path string, handle ace.HandlerFunc) http.Handler {
109110
return router
110111
}
111112

113+
// bear
114+
func bearHandler(_ http.ResponseWriter, _ *http.Request, ctx *bear.Context) {}
115+
116+
func bearHandlerWrite(res http.ResponseWriter, _ *http.Request, ctx *bear.Context) {
117+
res.Write([]byte(ctx.Params["name"]))
118+
}
119+
func loadBear(routes []route) http.Handler {
120+
router := bear.New()
121+
re := regexp.MustCompile(":([^/]*)")
122+
for _, route := range routes {
123+
switch route.method {
124+
case "GET", "POST", "PUT", "PATCH", "DELETE":
125+
router.On(route.method, re.ReplaceAllString(route.path, "{$1}"), bearHandler)
126+
default:
127+
panic("Unknown HTTP method: " + route.method)
128+
}
129+
}
130+
return router
131+
}
132+
133+
func loadBearSingle(method string, path string, handler bear.HandlerFunc) http.Handler {
134+
router := bear.New()
135+
switch method {
136+
case "GET", "POST", "PUT", "PATCH", "DELETE":
137+
router.On(method, path, handler)
138+
default:
139+
panic("Unknown HTTP method: " + method)
140+
}
141+
return router
142+
}
143+
112144
// beego
113145
func beegoHandler(ctx *context.Context) {}
114146

Diff for: static_test.go

+7
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,7 @@ var (
173173
staticHttpServeMux http.Handler
174174

175175
staticAce http.Handler
176+
staticBear http.Handler
176177
staticBeego http.Handler
177178
staticBone http.Handler
178179
staticDenco http.Handler
@@ -211,6 +212,9 @@ func init() {
211212
calcMem("Ace", func() {
212213
staticAce = loadAce(staticRoutes)
213214
})
215+
calcMem("Bear", func() {
216+
staticBear = loadBear(staticRoutes)
217+
})
214218
calcMem("Beego", func() {
215219
staticBeego = loadBeego(staticRoutes)
216220
})
@@ -292,6 +296,9 @@ func BenchmarkHttpServeMux_StaticAll(b *testing.B) {
292296
func BenchmarkBeego_StaticAll(b *testing.B) {
293297
benchRoutes(b, staticBeego, staticRoutes)
294298
}
299+
func BenchmarkBear_StaticAll(b *testing.B) {
300+
benchRoutes(b, staticBear, staticRoutes)
301+
}
295302
func BenchmarkBone_StaticAll(b *testing.B) {
296303
benchRoutes(b, staticBone, staticRoutes)
297304
}

0 commit comments

Comments
 (0)