Skip to content

Commit cd138f4

Browse files
committed
Merge pull request #22 from vishr/master
Added echo to the list
2 parents af5aff9 + b74234a commit cd138f4

File tree

6 files changed

+107
-0
lines changed

6 files changed

+107
-0
lines changed

bench_test.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,12 @@ func BenchmarkDenco_Param(b *testing.B) {
9595
r, _ := http.NewRequest("GET", "/user/gordon", nil)
9696
benchRequest(b, router, r)
9797
}
98+
func BenchmarkEcho_Param(b *testing.B) {
99+
router := loadEchoSingle("GET", "/user/:name", echoHandler)
100+
101+
r, _ := http.NewRequest("GET", "/user/gordon", nil)
102+
benchRequest(b, router, r)
103+
}
98104
func BenchmarkGin_Param(b *testing.B) {
99105
router := loadGinSingle("GET", "/user/:name", ginHandle)
100106

@@ -249,6 +255,12 @@ func BenchmarkDenco_Param5(b *testing.B) {
249255
r, _ := http.NewRequest("GET", fiveRoute, nil)
250256
benchRequest(b, router, r)
251257
}
258+
func BenchmarkEcho_Param5(b *testing.B) {
259+
router := loadEchoSingle("GET", fiveColon, echoHandler)
260+
261+
r, _ := http.NewRequest("GET", fiveRoute, nil)
262+
benchRequest(b, router, r)
263+
}
252264
func BenchmarkGin_Param5(b *testing.B) {
253265
router := loadGinSingle("GET", fiveColon, ginHandle)
254266

@@ -403,6 +415,12 @@ func BenchmarkDenco_Param20(b *testing.B) {
403415
r, _ := http.NewRequest("GET", twentyRoute, nil)
404416
benchRequest(b, router, r)
405417
}
418+
func BenchmarkEcho_Param20(b *testing.B) {
419+
router := loadEchoSingle("GET", twentyColon, echoHandler)
420+
421+
r, _ := http.NewRequest("GET", twentyRoute, nil)
422+
benchRequest(b, router, r)
423+
}
406424
func BenchmarkGin_Param20(b *testing.B) {
407425
router := loadGinSingle("GET", twentyColon, ginHandle)
408426

@@ -553,6 +571,12 @@ func BenchmarkDenco_ParamWrite(b *testing.B) {
553571
r, _ := http.NewRequest("GET", "/user/gordon", nil)
554572
benchRequest(b, router, r)
555573
}
574+
func BenchmarkEcho_ParamWrite(b *testing.B) {
575+
router := loadEchoSingle("GET", "/user/:name", echoHandlerWrite)
576+
577+
r, _ := http.NewRequest("GET", "/user/gordon", nil)
578+
benchRequest(b, router, r)
579+
}
556580
func BenchmarkGin_ParamWrite(b *testing.B) {
557581
router := loadGinSingle("GET", "/user/:name", ginHandleWrite)
558582

github_test.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -279,6 +279,7 @@ var (
279279
githubBeego http.Handler
280280
githubBone http.Handler
281281
githubDenco http.Handler
282+
githubEcho http.Handler
282283
githubGin http.Handler
283284
githubGocraftWeb http.Handler
284285
githubGoji http.Handler
@@ -318,6 +319,9 @@ func init() {
318319
calcMem("Denco", func() {
319320
githubDenco = loadDenco(githubAPI)
320321
})
322+
calcMem("Echo", func() {
323+
githubEcho = loadEcho(githubAPI)
324+
})
321325
calcMem("Gin", func() {
322326
githubGin = loadGin(githubAPI)
323327
})
@@ -400,6 +404,10 @@ func BenchmarkDenco_GithubStatic(b *testing.B) {
400404
req, _ := http.NewRequest("GET", "/user/repos", nil)
401405
benchRequest(b, githubDenco, req)
402406
}
407+
func BenchmarkEcho_GithubStatic(b *testing.B) {
408+
req, _ := http.NewRequest("GET", "/user/repos", nil)
409+
benchRequest(b, githubEcho, req)
410+
}
403411
func BenchmarkGin_GithubStatic(b *testing.B) {
404412
req, _ := http.NewRequest("GET", "/user/repos", nil)
405413
benchRequest(b, githubGin, req)
@@ -498,6 +506,10 @@ func BenchmarkDenco_GithubParam(b *testing.B) {
498506
req, _ := http.NewRequest("GET", "/repos/julienschmidt/httprouter/stargazers", nil)
499507
benchRequest(b, githubDenco, req)
500508
}
509+
func BenchmarkEcho_GithubParam(b *testing.B) {
510+
req, _ := http.NewRequest("GET", "/repos/julienschmidt/httprouter/stargazers", nil)
511+
benchRequest(b, githubEcho, req)
512+
}
501513
func BenchmarkGin_GithubParam(b *testing.B) {
502514
req, _ := http.NewRequest("GET", "/repos/julienschmidt/httprouter/stargazers", nil)
503515
benchRequest(b, githubGin, req)
@@ -591,6 +603,9 @@ func BenchmarkBone_GithubAll(b *testing.B) {
591603
func BenchmarkDenco_GithubAll(b *testing.B) {
592604
benchRoutes(b, githubDenco, githubAPI)
593605
}
606+
func BenchmarkEcho_GithubAll(b *testing.B) {
607+
benchRoutes(b, githubEcho, githubAPI)
608+
}
594609
func BenchmarkGin_GithubAll(b *testing.B) {
595610
benchRoutes(b, githubGin, githubAPI)
596611
}

gplus_test.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ var (
4141
gplusBeego http.Handler
4242
gplusBone http.Handler
4343
gplusDenco http.Handler
44+
gplusEcho http.Handler
4445
gplusGin http.Handler
4546
gplusGocraftWeb http.Handler
4647
gplusGoji http.Handler
@@ -80,6 +81,9 @@ func init() {
8081
calcMem("Denco", func() {
8182
gplusDenco = loadDenco(gplusAPI)
8283
})
84+
calcMem("Echo", func() {
85+
gplusEcho = loadEcho(gplusAPI)
86+
})
8387
calcMem("Gin", func() {
8488
gplusGin = loadGin(gplusAPI)
8589
})
@@ -162,6 +166,10 @@ func BenchmarkDenco_GPlusStatic(b *testing.B) {
162166
req, _ := http.NewRequest("GET", "/people", nil)
163167
benchRequest(b, gplusDenco, req)
164168
}
169+
func BenchmarkEcho_GPlusStatic(b *testing.B) {
170+
req, _ := http.NewRequest("GET", "/people", nil)
171+
benchRequest(b, gplusEcho, req)
172+
}
165173
func BenchmarkGin_GPlusStatic(b *testing.B) {
166174
req, _ := http.NewRequest("GET", "/people", nil)
167175
benchRequest(b, gplusGin, req)
@@ -260,6 +268,10 @@ func BenchmarkDenco_GPlusParam(b *testing.B) {
260268
req, _ := http.NewRequest("GET", "/people/118051310819094153327", nil)
261269
benchRequest(b, gplusDenco, req)
262270
}
271+
func BenchmarkEcho_GPlusParam(b *testing.B) {
272+
req, _ := http.NewRequest("GET", "/people/118051310819094153327", nil)
273+
benchRequest(b, gplusEcho, req)
274+
}
263275
func BenchmarkGin_GPlusParam(b *testing.B) {
264276
req, _ := http.NewRequest("GET", "/people/118051310819094153327", nil)
265277
benchRequest(b, gplusGin, req)
@@ -358,6 +370,10 @@ func BenchmarkDenco_GPlus2Params(b *testing.B) {
358370
req, _ := http.NewRequest("GET", "/people/118051310819094153327/activities/123456789", nil)
359371
benchRequest(b, gplusDenco, req)
360372
}
373+
func BenchmarkEcho_GPlus2Params(b *testing.B) {
374+
req, _ := http.NewRequest("GET", "/people/118051310819094153327/activities/123456789", nil)
375+
benchRequest(b, gplusEcho, req)
376+
}
361377
func BenchmarkGin_GPlus2Params(b *testing.B) {
362378
req, _ := http.NewRequest("GET", "/people/118051310819094153327/activities/123456789", nil)
363379
benchRequest(b, gplusGin, req)
@@ -451,6 +467,9 @@ func BenchmarkBone_GPlusAll(b *testing.B) {
451467
func BenchmarkDenco_GPlusAll(b *testing.B) {
452468
benchRoutes(b, gplusDenco, gplusAPI)
453469
}
470+
func BenchmarkEcho_GPlusAll(b *testing.B) {
471+
benchRoutes(b, gplusEcho, gplusAPI)
472+
}
454473
func BenchmarkGin_GPlusAll(b *testing.B) {
455474
benchRoutes(b, gplusGin, gplusAPI)
456475
}

parse_test.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ var (
6161
parseBeego http.Handler
6262
parseBone http.Handler
6363
parseDenco http.Handler
64+
parseEcho http.Handler
6465
parseGin http.Handler
6566
parseGocraftWeb http.Handler
6667
parseGoji http.Handler
@@ -100,6 +101,9 @@ func init() {
100101
calcMem("Denco", func() {
101102
parseDenco = loadDenco(parseAPI)
102103
})
104+
calcMem("Echo", func() {
105+
parseEcho = loadEcho(parseAPI)
106+
})
103107
calcMem("Gin", func() {
104108
parseGin = loadGin(parseAPI)
105109
})
@@ -182,6 +186,10 @@ func BenchmarkDenco_ParseStatic(b *testing.B) {
182186
req, _ := http.NewRequest("GET", "/1/users", nil)
183187
benchRequest(b, parseDenco, req)
184188
}
189+
func BenchmarkEcho_ParseStatic(b *testing.B) {
190+
req, _ := http.NewRequest("GET", "/1/users", nil)
191+
benchRequest(b, parseEcho, req)
192+
}
185193
func BenchmarkGin_ParseStatic(b *testing.B) {
186194
req, _ := http.NewRequest("GET", "/1/users", nil)
187195
benchRequest(b, parseGin, req)
@@ -280,6 +288,10 @@ func BenchmarkDenco_ParseParam(b *testing.B) {
280288
req, _ := http.NewRequest("GET", "/1/classes/go", nil)
281289
benchRequest(b, parseDenco, req)
282290
}
291+
func BenchmarkEcho_ParseParam(b *testing.B) {
292+
req, _ := http.NewRequest("GET", "/1/classes/go", nil)
293+
benchRequest(b, parseEcho, req)
294+
}
283295
func BenchmarkGin_ParseParam(b *testing.B) {
284296
req, _ := http.NewRequest("GET", "/1/classes/go", nil)
285297
benchRequest(b, parseGin, req)
@@ -378,6 +390,10 @@ func BenchmarkDenco_Parse2Params(b *testing.B) {
378390
req, _ := http.NewRequest("GET", "/1/classes/go/123456789", nil)
379391
benchRequest(b, parseDenco, req)
380392
}
393+
func BenchmarkEcho_Parse2Params(b *testing.B) {
394+
req, _ := http.NewRequest("GET", "/1/classes/go/123456789", nil)
395+
benchRequest(b, parseEcho, req)
396+
}
381397
func BenchmarkGin_Parse2Params(b *testing.B) {
382398
req, _ := http.NewRequest("GET", "/1/classes/go/123456789", nil)
383399
benchRequest(b, parseGin, req)
@@ -471,6 +487,9 @@ func BenchmarkBone_ParseAll(b *testing.B) {
471487
func BenchmarkDenco_ParseAll(b *testing.B) {
472488
benchRoutes(b, parseDenco, parseAPI)
473489
}
490+
func BenchmarkEcho_ParseAll(b *testing.B) {
491+
benchRoutes(b, parseEcho, parseAPI)
492+
}
474493
func BenchmarkGin_ParseAll(b *testing.B) {
475494
benchRoutes(b, parseGin, parseAPI)
476495
}

routers.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import (
3232
"github.com/gocraft/web"
3333
"github.com/gorilla/mux"
3434
"github.com/julienschmidt/httprouter"
35+
"github.com/labstack/echo"
3536
"github.com/lunny/tango"
3637
vulcan "github.com/mailgun/route"
3738
"github.com/naoina/denco"
@@ -274,6 +275,28 @@ func loadDencoSingle(method, path string, h denco.HandlerFunc) http.Handler {
274275
return handler
275276
}
276277

278+
// Echo
279+
func echoHandler(*echo.Context) {}
280+
281+
func echoHandlerWrite(c *echo.Context) {
282+
io.WriteString(c.Response, c.Param("name"))
283+
}
284+
285+
func loadEcho(routes []route) http.Handler {
286+
router := echo.New().Router
287+
for _, r := range routes {
288+
router.Add(r.method, r.path, echoHandler, 0)
289+
}
290+
return router
291+
}
292+
293+
func loadEchoSingle(method, path string, handler echo.HandlerFunc) http.Handler {
294+
e := echo.New()
295+
e.MaxParam(20)
296+
e.Router.Add(method, path, echoHandler, 0)
297+
return e.Router
298+
}
299+
277300
// Gin
278301
func ginHandle(_ *gin.Context) {}
279302

static_test.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,7 @@ var (
177177
staticBeego http.Handler
178178
staticBone http.Handler
179179
staticDenco http.Handler
180+
staticEcho http.Handler
180181
staticGin http.Handler
181182
staticGocraftWeb http.Handler
182183
staticGoji http.Handler
@@ -224,6 +225,9 @@ func init() {
224225
calcMem("Denco", func() {
225226
staticDenco = loadDenco(staticRoutes)
226227
})
228+
calcMem("Echo", func() {
229+
staticEcho = loadEcho(staticRoutes)
230+
})
227231
calcMem("Gin", func() {
228232
staticGin = loadGin(staticRoutes)
229233
})
@@ -305,6 +309,9 @@ func BenchmarkBone_StaticAll(b *testing.B) {
305309
func BenchmarkDenco_StaticAll(b *testing.B) {
306310
benchRoutes(b, staticDenco, staticRoutes)
307311
}
312+
func BenchmarkEcho_StaticAll(b *testing.B) {
313+
benchRoutes(b, staticEcho, staticRoutes)
314+
}
308315
func BenchmarkGin_StaticAll(b *testing.B) {
309316
benchRoutes(b, staticGin, staticRoutes)
310317
}

0 commit comments

Comments
 (0)