Skip to content

Commit aed021b

Browse files
committed
Simplify double array result processing and updates to tests.
1 parent 9aacf93 commit aed021b

File tree

2 files changed

+211
-21
lines changed

2 files changed

+211
-21
lines changed

src/StackExchange.Redis/ResultProcessor.cs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1091,15 +1091,11 @@ private sealed class NullableDoubleArrayProcessor : ResultProcessor<double?[]>
10911091
{
10921092
protected override bool SetResultCore(PhysicalConnection connection, Message message, in RawResult result)
10931093
{
1094-
switch (result.Type)
1094+
if (result.Type == ResultType.MultiBulk && !result.IsNull)
10951095
{
1096-
case ResultType.Integer:
1097-
case ResultType.SimpleString:
1098-
case ResultType.BulkString:
1099-
case ResultType.MultiBulk:
1100-
var values = result.GetItemsAsDoubles()!;
1101-
SetResult(message, values);
1102-
return true;
1096+
var arr = result.GetItemsAsDoubles()!;
1097+
SetResult(message, arr);
1098+
return true;
11031099
}
11041100
return false;
11051101
}

tests/StackExchange.Redis.Tests/SortedSets.cs

Lines changed: 207 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -649,18 +649,79 @@ public void SortedSetScoreSingle()
649649
var db = conn.GetDatabase();
650650
var me = Me();
651651

652-
var setKey = $"{me}:ZScoreSet";
653-
var memberName = $"{me}:ZScoreMember";
652+
var setKey = $"{me}:ZScoreSetSingle";
653+
var memberName = "member";
654654

655+
db.KeyDelete(setKey);
655656
db.SortedSetAdd(setKey, memberName, 1.5);
657+
656658
var score = db.SortedSetScore(setKey, memberName);
657659

658660
Assert.NotNull(score);
659661
Assert.Equal((double)1.5, score.Value);
660662
}
661663

662664
[Fact]
663-
public void SortedSetScoreSingle_ReturnsNull()
665+
public async Task SortedSetScoreSingleAsync()
666+
{
667+
using var conn = Create();
668+
Skip.IfBelow(conn, RedisFeatures.v2_1_0);
669+
670+
var db = conn.GetDatabase();
671+
var me = Me();
672+
673+
var setKey = $"{me}:ZScoreSetSingleAsync";
674+
var memberName = "member";
675+
676+
await db.KeyDeleteAsync(setKey);
677+
await db.SortedSetAddAsync(setKey, memberName, 1.5);
678+
679+
var score = await db.SortedSetScoreAsync(setKey, memberName);
680+
681+
Assert.NotNull(score);
682+
Assert.Equal((double)1.5, score.Value);
683+
}
684+
685+
[Fact]
686+
public void SortedSetScoreSingle_MissingSetStillReturnsNull()
687+
{
688+
using var conn = Create();
689+
Skip.IfBelow(conn, RedisFeatures.v2_1_0);
690+
691+
var db = conn.GetDatabase();
692+
var me = Me();
693+
694+
var setKey = $"{me}:ZScoreMissingSetSingle";
695+
696+
db.KeyDelete(setKey);
697+
698+
// Attempt to retrieve score for a missing set, should still return null.
699+
var score = db.SortedSetScore(setKey, "bogusMemberName");
700+
701+
Assert.Null(score);
702+
}
703+
704+
[Fact]
705+
public async Task SortedSetScoreSingle_MissingSetStillReturnsNullAsync()
706+
{
707+
using var conn = Create();
708+
Skip.IfBelow(conn, RedisFeatures.v2_1_0);
709+
710+
var db = conn.GetDatabase();
711+
var me = Me();
712+
713+
var setKey = $"{me}:ZScoreMissingSetSingleAsync";
714+
715+
await db.KeyDeleteAsync(setKey);
716+
717+
// Attempt to retrieve score for a missing set, should still return null.
718+
var score = await db.SortedSetScoreAsync(setKey, "bogusMemberName");
719+
720+
Assert.Null(score);
721+
}
722+
723+
[Fact]
724+
public void SortedSetScoreSingle_ReturnsNullForMissingMember()
664725
{
665726
using var conn = Create();
666727
Skip.IfBelow(conn, RedisFeatures.v2_1_0);
@@ -669,11 +730,36 @@ public void SortedSetScoreSingle_ReturnsNull()
669730
var me = Me();
670731

671732
var setKey = $"{me}:ZScoreSetNullValue";
733+
734+
db.KeyDelete(setKey);
735+
db.SortedSetAdd(setKey, "member1", 1.5);
736+
737+
// Attempt to retrieve score for a missing member, should return null.
672738
var score = db.SortedSetScore(setKey, "bogusMemberName");
673739

674740
Assert.Null(score);
675741
}
676742

743+
[Fact]
744+
public async Task SortedSetScoreSingle_ReturnsNullForMissingMemberAsync()
745+
{
746+
using var conn = Create();
747+
Skip.IfBelow(conn, RedisFeatures.v2_1_0);
748+
749+
var db = conn.GetDatabase();
750+
var me = Me();
751+
752+
var setKey = $"{me}:ZScoreSetNullValueAsync";
753+
754+
await db.KeyDeleteAsync(setKey);
755+
await db.SortedSetAddAsync(setKey, "member1", 1.5);
756+
757+
// Attempt to retrieve score for a missing member, should return null.
758+
var score = await db.SortedSetScoreAsync(setKey, "bogusMemberName");
759+
760+
Assert.Null(score);
761+
}
762+
677763
[Fact]
678764
public void SortedSetScoreMultiple()
679765
{
@@ -684,10 +770,11 @@ public void SortedSetScoreMultiple()
684770
var me = Me();
685771

686772
var setKey = $"{me}:ZScoreSetMultiple";
687-
var member1 = $"{me}:ZScoreSetMultiple_Member1";
688-
var member2 = $"{me}:ZScoreSetMultiple_Member2";
689-
var member3 = $"{me}:ZScoreSetMultiple_Member3";
773+
var member1 = "member1";
774+
var member2 = "member2";
775+
var member3 = "member3";
690776

777+
db.KeyDelete(setKey);
691778
db.SortedSetAdd(setKey, member1, 1.5);
692779
db.SortedSetAdd(setKey, member2, 1.75);
693780
db.SortedSetAdd(setKey, member3, 2);
@@ -698,23 +785,99 @@ public void SortedSetScoreMultiple()
698785
Assert.Equal(3, scores.Length);
699786
Assert.Equal((double)1.5, scores[0]);
700787
Assert.Equal((double)1.75, scores[1]);
701-
Assert.Equal((double)2, scores[2]);
788+
Assert.Equal(2, scores[2]);
702789
}
703790

704791
[Fact]
705-
public void SortedSetScoreMultiple_ReturnsNullItems()
792+
public async Task SortedSetScoreMultipleAsync()
706793
{
707794
using var conn = Create();
708795
Skip.IfBelow(conn, RedisFeatures.v6_2_0);
709796

710797
var db = conn.GetDatabase();
711798
var me = Me();
712799

713-
var setKey = $"{me}:ZScoreSetMultiple";
714-
var member1 = $"{me}:ZScoreSetMultiple_Member1";
715-
var member2 = $"{me}:ZScoreSetMultiple_Member2";
716-
var member3 = $"{me}:ZScoreSetMultiple_Member3";
717-
var bogusMember = $"{me}:ZScoreSetMultiple_BogusMember";
800+
var setKey = $"{me}:ZScoreSetMultipleAsync";
801+
var member1 = "member1";
802+
var member2 = "member2";
803+
var member3 = "member3";
804+
805+
await db.KeyDeleteAsync(setKey);
806+
await db.SortedSetAddAsync(setKey, member1, 1.5);
807+
await db.SortedSetAddAsync(setKey, member2, 1.75);
808+
await db.SortedSetAddAsync(setKey, member3, 2);
809+
810+
var scores = await db.SortedSetScoreAsync(setKey, new RedisValue[] { member1, member2, member3 });
811+
812+
Assert.NotNull(scores);
813+
Assert.Equal(3, scores.Length);
814+
Assert.Equal((double)1.5, scores[0]);
815+
Assert.Equal((double)1.75, scores[1]);
816+
Assert.Equal(2, scores[2]);
817+
}
818+
819+
[Fact]
820+
public void SortedSetScoreMultiple_ReturnsNullItemsForMissingSet()
821+
{
822+
using var conn = Create();
823+
Skip.IfBelow(conn, RedisFeatures.v6_2_0);
824+
825+
var db = conn.GetDatabase();
826+
var me = Me();
827+
828+
var setKey = $"{me}:ZScoreSetMultipleMissingSet";
829+
830+
db.KeyDelete(setKey);
831+
832+
// Missing set but should still return an array of nulls.
833+
var scores = db.SortedSetScore(setKey, new RedisValue[] { "bogus1", "bogus2", "bogus3" });
834+
835+
Assert.NotNull(scores);
836+
Assert.Equal(3, scores.Length);
837+
Assert.Null(scores[0]);
838+
Assert.Null(scores[1]);
839+
Assert.Null(scores[2]);
840+
}
841+
842+
[Fact]
843+
public async Task SortedSetScoreMultiple_ReturnsNullItemsForMissingSetAsync()
844+
{
845+
using var conn = Create();
846+
Skip.IfBelow(conn, RedisFeatures.v6_2_0);
847+
848+
var db = conn.GetDatabase();
849+
var me = Me();
850+
851+
var setKey = $"{me}:ZScoreSetMultipleMissingSetAsync";
852+
853+
await db.KeyDeleteAsync(setKey);
854+
855+
// Missing set but should still return an array of nulls.
856+
var scores = await db.SortedSetScoreAsync(setKey, new RedisValue[] { "bogus1", "bogus2", "bogus3" });
857+
858+
Assert.NotNull(scores);
859+
Assert.Equal(3, scores.Length);
860+
Assert.Null(scores[0]);
861+
Assert.Null(scores[1]);
862+
Assert.Null(scores[2]);
863+
}
864+
865+
[Fact]
866+
public void SortedSetScoreMultiple_ReturnsScoresAndNullItems()
867+
{
868+
using var conn = Create();
869+
Skip.IfBelow(conn, RedisFeatures.v6_2_0);
870+
871+
var db = conn.GetDatabase();
872+
var me = Me();
873+
874+
var setKey = $"{me}:ZScoreSetMultipleScoresAndNull";
875+
var member1 = "member1";
876+
var member2 = "member2";
877+
var member3 = "member3";
878+
var bogusMember = "bogusMember";
879+
880+
db.KeyDelete(setKey);
718881

719882
db.SortedSetAdd(setKey, member1, 1.5);
720883
db.SortedSetAdd(setKey, member2, 1.75);
@@ -729,5 +892,36 @@ public void SortedSetScoreMultiple_ReturnsNullItems()
729892
Assert.Equal((double)1.75, scores[2]);
730893
Assert.Equal(2, scores[3]);
731894
}
895+
896+
[Fact]
897+
public async Task SortedSetScoreMultiple_ReturnsScoresAndNullItemsAsync()
898+
{
899+
using var conn = Create();
900+
Skip.IfBelow(conn, RedisFeatures.v6_2_0);
901+
902+
var db = conn.GetDatabase();
903+
var me = Me();
904+
905+
var setKey = $"{me}:ZScoreSetMultipleScoresAndNullAsync";
906+
var member1 = "member1";
907+
var member2 = "member2";
908+
var member3 = "member3";
909+
var bogusMember = "bogusMember";
910+
911+
await db.KeyDeleteAsync(setKey);
912+
913+
await db.SortedSetAddAsync(setKey, member1, 1.5);
914+
await db.SortedSetAddAsync(setKey, member2, 1.75);
915+
await db.SortedSetAddAsync(setKey, member3, 2);
916+
917+
var scores = await db.SortedSetScoreAsync(setKey, new RedisValue[] { member1, bogusMember, member2, member3 });
918+
919+
Assert.NotNull(scores);
920+
Assert.Equal(4, scores.Length);
921+
Assert.Null(scores[1]);
922+
Assert.Equal((double)1.5, scores[0]);
923+
Assert.Equal((double)1.75, scores[2]);
924+
Assert.Equal(2, scores[3]);
925+
}
732926
}
733927
}

0 commit comments

Comments
 (0)