From ea044072a27a20e8c8e22799a9d261ef34aa8b02 Mon Sep 17 00:00:00 2001 From: Alex Ehrnschwender Date: Wed, 27 May 2015 01:57:22 -0700 Subject: [PATCH] adds ZREVRANGEBYSCORE to client along with tests --- redis.go | 9 +++++++++ redis_test.go | 15 +++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/redis.go b/redis.go index e1dc8dd..c0fc42a 100644 --- a/redis.go +++ b/redis.go @@ -985,6 +985,15 @@ func (client *Client) Zrangebyscore(key string, start float64, end float64) ([][ return res.([][]byte), nil } +func (client *Client) Zrevrangebyscore(key string, end float64, start float64) ([][]byte, error) { + res, err := client.sendCommand("ZREVRANGEBYSCORE", key, strconv.FormatFloat(end, 'f', -1, 64), strconv.FormatFloat(start, 'f', -1, 64)) + if err != nil { + return nil, err + } + + return res.([][]byte), nil +} + func (client *Client) Zcount(key string, min float64, max float64) (int, error) { res, err := client.sendCommand("ZCOUNT", key, strconv.FormatFloat(min, 'f', -1, 64), strconv.FormatFloat(max, 'f', -1, 64)) if err != nil { diff --git a/redis_test.go b/redis_test.go index 29f98b0..3789ab2 100644 --- a/redis_test.go +++ b/redis_test.go @@ -517,10 +517,14 @@ func verifyHash(t *testing.T, key string, expected map[string][]byte) { func TestSortedSet(t *testing.T) { svals := []string{"a", "b", "c", "d", "e"} + svalsInverse := []string{"e", "d", "c", "b", "a"} ranks := []float64{0.0, 1.0, 2.0, 3.0, 4.0} vals := make([][]byte, len(svals)) + valsInverse := make([][]byte, len(svalsInverse)) + for i := 0; i < len(svals); i++ { vals[i] = []byte(svals[i]) + valsInverse[i] = []byte(svalsInverse[i]) _, err := client.Zadd("zs", vals[i], ranks[i]) if err != nil { t.Fatal("zdd failed" + err.Error()) @@ -546,13 +550,24 @@ func TestSortedSet(t *testing.T) { if !reflect.DeepEqual(data, vals[0:i+1]) { t.Fatal("zrange failed") } + + revData, _ := client.Zrevrange("zs", 0, i) + if !reflect.DeepEqual(revData, valsInverse[0:i+1]) { + t.Fatal("zrevrange failed") + } } + for i := 0; i <= 4; i++ { data, _ := client.Zrangebyscore("zs", 0, float64(i)) if !reflect.DeepEqual(data, vals[0:i+1]) { t.Fatal("zrangebyscore failed") } + revData, _ := client.Zrevrangebyscore("zs", float64(i), 0) + if !reflect.DeepEqual(revData, valsInverse[4-i:5]) { + t.Fatal("zrevrangebyscore failed") + } } + //incremement for i := 0; i <= 4; i++ { client.Zincrby("zs", vals[i], 1)