parser_test.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package redis
  2. import (
  3. "testing"
  4. "gopkg.in/bufio.v1"
  5. )
  6. func BenchmarkParseReplyStatus(b *testing.B) {
  7. benchmarkParseReply(b, "+OK\r\n", nil, false)
  8. }
  9. func BenchmarkParseReplyInt(b *testing.B) {
  10. benchmarkParseReply(b, ":1\r\n", nil, false)
  11. }
  12. func BenchmarkParseReplyError(b *testing.B) {
  13. benchmarkParseReply(b, "-Error message\r\n", nil, true)
  14. }
  15. func BenchmarkParseReplyString(b *testing.B) {
  16. benchmarkParseReply(b, "$5\r\nhello\r\n", nil, false)
  17. }
  18. func BenchmarkParseReplySlice(b *testing.B) {
  19. benchmarkParseReply(b, "*2\r\n$5\r\nhello\r\n$5\r\nworld\r\n", parseSlice, false)
  20. }
  21. func benchmarkParseReply(b *testing.B, reply string, p multiBulkParser, wanterr bool) {
  22. b.StopTimer()
  23. buf := &bufio.Buffer{}
  24. rd := bufio.NewReader(buf)
  25. for i := 0; i < b.N; i++ {
  26. buf.WriteString(reply)
  27. }
  28. b.StartTimer()
  29. for i := 0; i < b.N; i++ {
  30. _, err := parseReply(rd, p)
  31. if !wanterr && err != nil {
  32. panic(err)
  33. }
  34. }
  35. }
  36. func BenchmarkAppendArgs(b *testing.B) {
  37. buf := make([]byte, 0, 64)
  38. args := []string{"hello", "world", "foo", "bar"}
  39. for i := 0; i < b.N; i++ {
  40. appendArgs(buf, args)
  41. }
  42. }