6
6
using System . Linq ;
7
7
using System . Text ;
8
8
using System . Threading . Tasks ;
9
+ using Garnet . common ;
9
10
using Garnet . server ;
10
11
using NUnit . Framework ;
11
12
using NUnit . Framework . Legacy ;
@@ -1007,7 +1008,7 @@ public void CanDoSCARDCommandsLC()
1007
1008
}
1008
1009
1009
1010
[ Test ]
1010
- public void CanDoSRANDMEMBERWithCountCommandLC ( )
1011
+ public unsafe void CanDoSRANDMEMBERWithCountCommandLC ( )
1011
1012
{
1012
1013
var myset = new HashSet < string > { "one" , "two" , "three" , "four" , "five" } ;
1013
1014
@@ -1025,43 +1026,31 @@ public void CanDoSRANDMEMBERWithCountCommandLC()
1025
1026
CreateLongSet ( ) ;
1026
1027
1027
1028
response = lightClientRequest . SendCommand ( "SRANDMEMBER myset" , 1 ) ;
1028
- var strLen = Encoding . ASCII . GetString ( response ) . Substring ( 1 , 1 ) ;
1029
- var item = Encoding . ASCII . GetString ( response ) . Substring ( 4 , Int32 . Parse ( strLen ) ) ;
1029
+ var strLen = Encoding . ASCII . GetString ( response , 1 , 1 ) ;
1030
+ var item = Encoding . ASCII . GetString ( response , 4 , int . Parse ( strLen ) ) ;
1030
1031
ClassicAssert . IsTrue ( myset . Contains ( item ) ) ;
1031
1032
1032
1033
// Get three random members
1033
1034
response = lightClientRequest . SendCommand ( "SRANDMEMBER myset 3" , 3 ) ;
1034
- TestUtils . AssertEqualUpToExpectedLength ( "*" , response ) ;
1035
-
1036
- var strResponse = Encoding . ASCII . GetString ( response ) ;
1037
- var arrLenEndIdx = strResponse . IndexOf ( "\r \n " , StringComparison . InvariantCultureIgnoreCase ) ;
1038
- ClassicAssert . IsTrue ( arrLenEndIdx > 1 ) ;
1039
-
1040
- var strArrLen = strResponse . AsSpan ( ) . Slice ( 1 , arrLenEndIdx - 1 ) ;
1041
- ClassicAssert . IsTrue ( int . TryParse ( strArrLen , out var arrLen ) ) ;
1042
- ClassicAssert . AreEqual ( 3 , arrLen ) ;
1035
+ TestUtils . AssertEqualUpToExpectedLength ( "*3\r \n " , response ) ;
1043
1036
1044
1037
// Get 6 random members and verify that at least two elements are the same
1045
1038
response = lightClientRequest . SendCommand ( "SRANDMEMBER myset -6" , 6 ) ;
1046
- var strReponse = Encoding . ASCII . GetString ( response ) ;
1047
- arrLenEndIdx = strReponse . IndexOf ( "\r \n " , StringComparison . InvariantCultureIgnoreCase ) ;
1048
- strArrLen = strReponse . AsSpan ( ) . Slice ( 1 , arrLenEndIdx - 1 ) ;
1049
- ClassicAssert . IsTrue ( int . TryParse ( strArrLen , out arrLen ) ) ;
1050
-
1051
- var members = new HashSet < string > ( ) ;
1052
- var repeatedMembers = false ;
1053
- for ( var i = 0 ; i < arrLen ; i ++ )
1039
+ TestUtils . AssertEqualUpToExpectedLength ( "*6\r \n " , response ) ;
1040
+
1041
+ string [ ] results ;
1042
+
1043
+ fixed ( byte * p = & response [ 0 ] )
1054
1044
{
1055
- var member = strReponse . Substring ( arrLenEndIdx + 2 , response . Length - arrLenEndIdx - 5 ) ;
1056
- if ( members . Contains ( member ) )
1057
- {
1058
- repeatedMembers = true ;
1059
- break ;
1060
- }
1061
- members . Add ( member ) ;
1045
+ var ptr = p ;
1046
+ ClassicAssert . IsTrue (
1047
+ RespReadUtils . TryReadStringArrayWithLengthHeader ( out results , ref ptr ,
1048
+ p + ( Garnet . common . NumUtils . MaximumFormatInt64Length * 10 ) )
1049
+ ) ;
1062
1050
}
1063
1051
1064
- ClassicAssert . IsTrue ( repeatedMembers , "At least two members are repeated." ) ;
1052
+ ClassicAssert . IsTrue ( results . Distinct ( ) . Count ( ) != results . Length ,
1053
+ "At least two members are repeated." ) ;
1065
1054
}
1066
1055
1067
1056
[ Test ]
@@ -1096,31 +1085,15 @@ public void CanDoSPOPWithCountCommandLC()
1096
1085
1097
1086
var lightClientRequest = TestUtils . CreateRequest ( ) ;
1098
1087
var response = lightClientRequest . SendCommand ( "SPOP myset 3" , 3 ) ;
1099
- TestUtils . AssertEqualUpToExpectedLength ( "*" , response ) ;
1100
-
1101
- var strResponse = Encoding . ASCII . GetString ( response ) ;
1102
- var arrLenEndIdx = strResponse . IndexOf ( "\r \n " , StringComparison . InvariantCultureIgnoreCase ) ;
1103
- ClassicAssert . IsTrue ( arrLenEndIdx > 1 ) ;
1104
-
1105
- var strArrLen = strResponse . AsSpan ( ) . Slice ( 1 , arrLenEndIdx - 1 ) ;
1106
- ClassicAssert . IsTrue ( int . TryParse ( strArrLen , out var arrLen ) ) ;
1107
- ClassicAssert . AreEqual ( 3 , arrLen ) ;
1088
+ TestUtils . AssertEqualUpToExpectedLength ( "*3\r \n " , response ) ;
1108
1089
1109
1090
response = lightClientRequest . SendCommands ( "SCARD myset" , "PING" , 1 , 1 ) ;
1110
1091
var expectedResponse = ":2\r \n +PONG\r \n " ;
1111
1092
TestUtils . AssertEqualUpToExpectedLength ( expectedResponse , response ) ;
1112
1093
1113
1094
// Test for popping set until empty
1114
1095
response = lightClientRequest . SendCommand ( "SPOP myset 2" , 2 ) ;
1115
- TestUtils . AssertEqualUpToExpectedLength ( "*" , response ) ;
1116
-
1117
- strResponse = Encoding . ASCII . GetString ( response ) ;
1118
- arrLenEndIdx = strResponse . IndexOf ( "\r \n " , StringComparison . InvariantCultureIgnoreCase ) ;
1119
- ClassicAssert . IsTrue ( arrLenEndIdx > 1 ) ;
1120
-
1121
- strArrLen = strResponse . AsSpan ( ) . Slice ( 1 , arrLenEndIdx - 1 ) ;
1122
- ClassicAssert . IsTrue ( int . TryParse ( strArrLen , out arrLen ) ) ;
1123
- ClassicAssert . AreEqual ( 2 , arrLen ) ;
1096
+ TestUtils . AssertEqualUpToExpectedLength ( "*2\r \n " , response ) ;
1124
1097
}
1125
1098
1126
1099
[ Test ]
@@ -1131,15 +1104,7 @@ public void CanDoSPOPWithMoreCountThanSetSizeCommandLC()
1131
1104
var lightClientRequest = TestUtils . CreateRequest ( ) ;
1132
1105
1133
1106
var response = lightClientRequest . SendCommand ( "SPOP myset 10" , 5 ) ;
1134
- TestUtils . AssertEqualUpToExpectedLength ( "*" , response ) ;
1135
-
1136
- var strResponse = Encoding . ASCII . GetString ( response ) ;
1137
- var arrLenEndIdx = strResponse . IndexOf ( "\r \n " , StringComparison . InvariantCultureIgnoreCase ) ;
1138
- ClassicAssert . IsTrue ( arrLenEndIdx > 1 ) ;
1139
-
1140
- var strArrLen = strResponse . AsSpan ( ) . Slice ( 1 , arrLenEndIdx - 1 ) ;
1141
- ClassicAssert . IsTrue ( int . TryParse ( strArrLen , out var arrLen ) ) ;
1142
- ClassicAssert . IsTrue ( arrLen == 5 ) ;
1107
+ TestUtils . AssertEqualUpToExpectedLength ( "*5\r \n " , response ) ;
1143
1108
1144
1109
var lightClientRequest2 = TestUtils . CreateRequest ( ) ;
1145
1110
response = lightClientRequest2 . SendCommand ( "SADD myset one" ) ;
0 commit comments