Commit 565c0117 authored by Marc Gravell's avatar Marc Gravell

Fix varadic zadd bug

parent 8dff32b9
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NUnit.Framework;
namespace StackExchange.Redis.Tests
{
[TestFixture]
public class MultiAdd : TestBase
{
[Test]
public void AddSortedSetEveryWay()
{
using(var conn = Create())
{
var db = conn.GetDatabase(3);
RedisKey key = Me();
db.KeyDelete(key);
db.SortedSetAdd(key, "a", 1);
db.SortedSetAdd(key, new[] {
new SortedSetEntry("b", 2) });
db.SortedSetAdd(key, new[] {
new SortedSetEntry("c", 3),
new SortedSetEntry("d", 4)});
db.SortedSetAdd(key, new[] {
new SortedSetEntry("e", 5),
new SortedSetEntry("f", 6),
new SortedSetEntry("g", 7)});
db.SortedSetAdd(key, new[] {
new SortedSetEntry("h", 8),
new SortedSetEntry("i", 9),
new SortedSetEntry("j", 10),
new SortedSetEntry("k", 11)});
var vals = db.SortedSetRangeByScoreWithScores(key);
string s = string.Join(",", vals.OrderByDescending(x => x.Score).Select(x => x.Element));
Assert.AreEqual("k,j,i,h,g,f,e,d,c,b,a", s);
s = string.Join(",", vals.OrderBy(x => x.Score).Select(x => x.Score));
Assert.AreEqual("1,2,3,4,5,6,7,8,9,10,11", s);
}
}
[Test]
public void AddHashEveryWay()
{
using (var conn = Create())
{
var db = conn.GetDatabase(3);
RedisKey key = Me();
db.KeyDelete(key);
db.HashSet(key, "a", 1);
db.HashSet(key, new[] {
new HashEntry("b", 2) });
db.HashSet(key, new[] {
new HashEntry("c", 3),
new HashEntry("d", 4)});
db.HashSet(key, new[] {
new HashEntry("e", 5),
new HashEntry("f", 6),
new HashEntry("g", 7)});
db.HashSet(key, new[] {
new HashEntry("h", 8),
new HashEntry("i", 9),
new HashEntry("j", 10),
new HashEntry("k", 11)});
var vals = db.HashGetAll(key);
string s = string.Join(",", vals.OrderByDescending(x => (double)x.Value).Select(x => x.Name));
Assert.AreEqual("k,j,i,h,g,f,e,d,c,b,a", s);
s = string.Join(",", vals.OrderBy(x => (double)x.Value).Select(x => x.Value));
Assert.AreEqual("1,2,3,4,5,6,7,8,9,10,11", s);
}
}
[Test]
public void AddSetEveryWay()
{
using (var conn = Create())
{
var db = conn.GetDatabase(3);
RedisKey key = Me();
db.KeyDelete(key);
db.SetAdd(key, "a");
db.SetAdd(key, new RedisValue[] { "b" });
db.SetAdd(key, new RedisValue[] { "c", "d" });
db.SetAdd(key, new RedisValue[] { "e", "f", "g" });
db.SetAdd(key, new RedisValue[] { "h", "i", "j","k" });
var vals = db.SetMembers(key);
string s = string.Join(",", vals.OrderByDescending(x => (string)x));
Assert.AreEqual("k,j,i,h,g,f,e,d,c,b,a", s);
}
}
}
}
...@@ -75,6 +75,7 @@ ...@@ -75,6 +75,7 @@
<Compile Include="KeysAndValues.cs" /> <Compile Include="KeysAndValues.cs" />
<Compile Include="Lists.cs" /> <Compile Include="Lists.cs" />
<Compile Include="Locking.cs" /> <Compile Include="Locking.cs" />
<Compile Include="MultiAdd.cs" />
<Compile Include="MultiMaster.cs" /> <Compile Include="MultiMaster.cs" />
<Compile Include="Naming.cs" /> <Compile Include="Naming.cs" />
<Compile Include="PreserveOrder.cs" /> <Compile Include="PreserveOrder.cs" />
......
...@@ -1479,18 +1479,18 @@ private Message GetSortedSetAddMessage(RedisKey key, SortedSetEntry[] values, Co ...@@ -1479,18 +1479,18 @@ private Message GetSortedSetAddMessage(RedisKey key, SortedSetEntry[] values, Co
case 0: return null; case 0: return null;
case 1: case 1:
return Message.Create(Db, flags, RedisCommand.ZADD, key, return Message.Create(Db, flags, RedisCommand.ZADD, key,
values[0].element, values[0].score); values[0].score, values[0].element);
case 2: case 2:
return Message.Create(Db, flags, RedisCommand.ZADD, key, return Message.Create(Db, flags, RedisCommand.ZADD, key,
values[0].element, values[0].score, values[0].score, values[0].element,
values[1].element, values[1].score); values[1].score, values[1].element);
default: default:
var arr = new RedisValue[values.Length * 2]; var arr = new RedisValue[values.Length * 2];
int index = 0; int index = 0;
for (int i = 0; i < values.Length; i++) for (int i = 0; i < values.Length; i++)
{ {
arr[index++] = values[i].element;
arr[index++] = values[i].score; arr[index++] = values[i].score;
arr[index++] = values[i].element;
} }
return Message.Create(Db, flags, RedisCommand.ZADD, key, arr); return Message.Create(Db, flags, RedisCommand.ZADD, key, arr);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment