Commit dccca67c authored by Marc Gravell's avatar Marc Gravell

SetUnion / SetDelete : don't recreate the data if it exists and looks viable

parent 74b1ce0a
...@@ -27,13 +27,16 @@ public async Task SetMembers() ...@@ -27,13 +27,16 @@ public async Task SetMembers()
var key = Me(); var key = Me();
const int count = (int)5e6; const int count = (int)5e6;
var len = await db.SetLengthAsync(key);
conn.Wait(db.KeyDeleteAsync(key)); if (len != count)
foreach (var _ in Enumerable.Range(0, count)) {
db.SetAdd(key, Guid.NewGuid().ToByteArray(), CommandFlags.FireAndForget); await db.KeyDeleteAsync(key);
foreach (var _ in Enumerable.Range(0, count))
Assert.Equal(count, db.SetLengthAsync(key).Result); // SCARD for set db.SetAdd(key, Guid.NewGuid().ToByteArray(), CommandFlags.FireAndForget);
Assert.Equal(count, await db.SetLengthAsync(key)); // SCARD for set
}
var result = await db.SetMembersAsync(key); var result = await db.SetMembersAsync(key);
Assert.Equal(count, result.Length); // SMEMBERS result length Assert.Equal(count, result.Length); // SMEMBERS result length
} }
...@@ -50,19 +53,26 @@ public async Task SetUnion() ...@@ -50,19 +53,26 @@ public async Task SetUnion()
var key2 = Me() + ":2"; var key2 = Me() + ":2";
var dstkey = Me() + ":dst"; var dstkey = Me() + ":dst";
await db.KeyDeleteAsync(key1); const int count = (int)5e6;
await db.KeyDeleteAsync(key2);
var len1 = await db.SetLengthAsync(key1);
var len2 = await db.SetLengthAsync(key2);
await db.KeyDeleteAsync(dstkey); await db.KeyDeleteAsync(dstkey);
const int count = (int)5e6; if (len1 != count || len2 != count)
foreach (var _ in Enumerable.Range(0, count))
{ {
db.SetAdd(key1, Guid.NewGuid().ToByteArray(), CommandFlags.FireAndForget); await db.KeyDeleteAsync(key1);
db.SetAdd(key2, Guid.NewGuid().ToByteArray(), CommandFlags.FireAndForget); await db.KeyDeleteAsync(key2);
}
Assert.Equal(count, db.SetLengthAsync(key1).Result); // SCARD for set 1
Assert.Equal(count, db.SetLengthAsync(key2).Result); // SCARD for set 2
foreach (var _ in Enumerable.Range(0, count))
{
db.SetAdd(key1, Guid.NewGuid().ToByteArray(), CommandFlags.FireAndForget);
db.SetAdd(key2, Guid.NewGuid().ToByteArray(), CommandFlags.FireAndForget);
}
Assert.Equal(count, await db.SetLengthAsync(key1)); // SCARD for set 1
Assert.Equal(count, await db.SetLengthAsync(key2)); // SCARD for set 2
}
await db.SetCombineAndStoreAsync(SetOperation.Union, dstkey, key1, key2); await db.SetCombineAndStoreAsync(SetOperation.Union, dstkey, key1, key2);
var dstLen = db.SetLength(dstkey); var dstLen = db.SetLength(dstkey);
Assert.Equal(count * 2, dstLen); // SCARD for destination set Assert.Equal(count * 2, dstLen); // SCARD for destination set
......
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