...

Source file src/github.com/go-redis/redis/internal/proto/reader_test.go

Documentation: github.com/go-redis/redis/internal/proto

     1  package proto_test
     2  
     3  import (
     4  	"bytes"
     5  	"testing"
     6  
     7  	"github.com/go-redis/redis/internal/proto"
     8  )
     9  
    10  func BenchmarkReader_ParseReply_Status(b *testing.B) {
    11  	benchmarkParseReply(b, "+OK\r\n", nil, false)
    12  }
    13  
    14  func BenchmarkReader_ParseReply_Int(b *testing.B) {
    15  	benchmarkParseReply(b, ":1\r\n", nil, false)
    16  }
    17  
    18  func BenchmarkReader_ParseReply_Error(b *testing.B) {
    19  	benchmarkParseReply(b, "-Error message\r\n", nil, true)
    20  }
    21  
    22  func BenchmarkReader_ParseReply_String(b *testing.B) {
    23  	benchmarkParseReply(b, "$5\r\nhello\r\n", nil, false)
    24  }
    25  
    26  func BenchmarkReader_ParseReply_Slice(b *testing.B) {
    27  	benchmarkParseReply(b, "*2\r\n$5\r\nhello\r\n$5\r\nworld\r\n", multiBulkParse, false)
    28  }
    29  
    30  func benchmarkParseReply(b *testing.B, reply string, m proto.MultiBulkParse, wanterr bool) {
    31  	buf := new(bytes.Buffer)
    32  	for i := 0; i < b.N; i++ {
    33  		buf.WriteString(reply)
    34  	}
    35  	p := proto.NewReader(buf)
    36  	b.ResetTimer()
    37  
    38  	for i := 0; i < b.N; i++ {
    39  		_, err := p.ReadReply(m)
    40  		if !wanterr && err != nil {
    41  			b.Fatal(err)
    42  		}
    43  	}
    44  }
    45  
    46  func multiBulkParse(p *proto.Reader, n int64) (interface{}, error) {
    47  	vv := make([]interface{}, 0, n)
    48  	for i := int64(0); i < n; i++ {
    49  		v, err := p.ReadReply(multiBulkParse)
    50  		if err != nil {
    51  			return nil, err
    52  		}
    53  		vv = append(vv, v)
    54  	}
    55  	return vv, nil
    56  }
    57  

View as plain text