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 ;
@@ -884,7 +885,7 @@ public void CanDoSCARDCommandsLC()
884
885
}
885
886
886
887
[ Test ]
887
- public void CanDoSRANDMEMBERWithCountCommandLC ( )
888
+ public unsafe void CanDoSRANDMEMBERWithCountCommandLC ( )
888
889
{
889
890
var myset = new HashSet < string > { "one" , "two" , "three" , "four" , "five" } ;
890
891
@@ -902,43 +903,31 @@ public void CanDoSRANDMEMBERWithCountCommandLC()
902
903
CreateLongSet ( ) ;
903
904
904
905
response = lightClientRequest . SendCommand ( "SRANDMEMBER myset" , 1 ) ;
905
- var strLen = Encoding . ASCII . GetString ( response ) . Substring ( 1 , 1 ) ;
906
- var item = Encoding . ASCII . GetString ( response ) . Substring ( 4 , Int32 . Parse ( strLen ) ) ;
906
+ var strLen = Encoding . ASCII . GetString ( response , 1 , 1 ) ;
907
+ var item = Encoding . ASCII . GetString ( response , 4 , int . Parse ( strLen ) ) ;
907
908
ClassicAssert . IsTrue ( myset . Contains ( item ) ) ;
908
909
909
910
// Get three random members
910
911
response = lightClientRequest . SendCommand ( "SRANDMEMBER myset 3" , 3 ) ;
911
- TestUtils . AssertEqualUpToExpectedLength ( "*" , response ) ;
912
-
913
- var strResponse = Encoding . ASCII . GetString ( response ) ;
914
- var arrLenEndIdx = strResponse . IndexOf ( "\r \n " , StringComparison . InvariantCultureIgnoreCase ) ;
915
- ClassicAssert . IsTrue ( arrLenEndIdx > 1 ) ;
916
-
917
- var strArrLen = strResponse . AsSpan ( ) . Slice ( 1 , arrLenEndIdx - 1 ) ;
918
- ClassicAssert . IsTrue ( int . TryParse ( strArrLen , out var arrLen ) ) ;
919
- ClassicAssert . AreEqual ( 3 , arrLen ) ;
912
+ TestUtils . AssertEqualUpToExpectedLength ( "*3\r \n " , response ) ;
920
913
921
914
// Get 6 random members and verify that at least two elements are the same
922
915
response = lightClientRequest . SendCommand ( "SRANDMEMBER myset -6" , 6 ) ;
923
- var strReponse = Encoding . ASCII . GetString ( response ) ;
924
- arrLenEndIdx = strReponse . IndexOf ( "\r \n " , StringComparison . InvariantCultureIgnoreCase ) ;
925
- strArrLen = strReponse . AsSpan ( ) . Slice ( 1 , arrLenEndIdx - 1 ) ;
926
- ClassicAssert . IsTrue ( int . TryParse ( strArrLen , out arrLen ) ) ;
927
-
928
- var members = new HashSet < string > ( ) ;
929
- var repeatedMembers = false ;
930
- for ( var i = 0 ; i < arrLen ; i ++ )
916
+ TestUtils . AssertEqualUpToExpectedLength ( "*6\r \n " , response ) ;
917
+
918
+ string [ ] results ;
919
+
920
+ fixed ( byte * p = & response [ 0 ] )
931
921
{
932
- var member = strReponse . Substring ( arrLenEndIdx + 2 , response . Length - arrLenEndIdx - 5 ) ;
933
- if ( members . Contains ( member ) )
934
- {
935
- repeatedMembers = true ;
936
- break ;
937
- }
938
- members . Add ( member ) ;
922
+ var ptr = p ;
923
+ ClassicAssert . IsTrue (
924
+ RespReadUtils . TryReadStringArrayWithLengthHeader ( out results , ref ptr ,
925
+ p + ( TestUtils . MaxLongDigits * 10 ) )
926
+ ) ;
939
927
}
940
928
941
- ClassicAssert . IsTrue ( repeatedMembers , "At least two members are repeated." ) ;
929
+ ClassicAssert . IsTrue ( results . Distinct ( ) . Count ( ) != results . Length ,
930
+ "At least two members are repeated." ) ;
942
931
}
943
932
944
933
[ Test ]
@@ -973,31 +962,15 @@ public void CanDoSPOPWithCountCommandLC()
973
962
974
963
var lightClientRequest = TestUtils . CreateRequest ( ) ;
975
964
var response = lightClientRequest . SendCommand ( "SPOP myset 3" , 3 ) ;
976
- TestUtils . AssertEqualUpToExpectedLength ( "*" , response ) ;
977
-
978
- var strResponse = Encoding . ASCII . GetString ( response ) ;
979
- var arrLenEndIdx = strResponse . IndexOf ( "\r \n " , StringComparison . InvariantCultureIgnoreCase ) ;
980
- ClassicAssert . IsTrue ( arrLenEndIdx > 1 ) ;
981
-
982
- var strArrLen = strResponse . AsSpan ( ) . Slice ( 1 , arrLenEndIdx - 1 ) ;
983
- ClassicAssert . IsTrue ( int . TryParse ( strArrLen , out var arrLen ) ) ;
984
- ClassicAssert . AreEqual ( 3 , arrLen ) ;
965
+ TestUtils . AssertEqualUpToExpectedLength ( "*3\r \n " , response ) ;
985
966
986
967
response = lightClientRequest . SendCommands ( "SCARD myset" , "PING" , 1 , 1 ) ;
987
968
var expectedResponse = ":2\r \n +PONG\r \n " ;
988
969
TestUtils . AssertEqualUpToExpectedLength ( expectedResponse , response ) ;
989
970
990
971
// Test for popping set until empty
991
972
response = lightClientRequest . SendCommand ( "SPOP myset 2" , 2 ) ;
992
- TestUtils . AssertEqualUpToExpectedLength ( "*" , response ) ;
993
-
994
- strResponse = Encoding . ASCII . GetString ( response ) ;
995
- arrLenEndIdx = strResponse . IndexOf ( "\r \n " , StringComparison . InvariantCultureIgnoreCase ) ;
996
- ClassicAssert . IsTrue ( arrLenEndIdx > 1 ) ;
997
-
998
- strArrLen = strResponse . AsSpan ( ) . Slice ( 1 , arrLenEndIdx - 1 ) ;
999
- ClassicAssert . IsTrue ( int . TryParse ( strArrLen , out arrLen ) ) ;
1000
- ClassicAssert . AreEqual ( 2 , arrLen ) ;
973
+ TestUtils . AssertEqualUpToExpectedLength ( "*2\r \n " , response ) ;
1001
974
}
1002
975
1003
976
[ Test ]
@@ -1008,15 +981,7 @@ public void CanDoSPOPWithMoreCountThanSetSizeCommandLC()
1008
981
var lightClientRequest = TestUtils . CreateRequest ( ) ;
1009
982
1010
983
var response = lightClientRequest . SendCommand ( "SPOP myset 10" , 5 ) ;
1011
- TestUtils . AssertEqualUpToExpectedLength ( "*" , response ) ;
1012
-
1013
- var strResponse = Encoding . ASCII . GetString ( response ) ;
1014
- var arrLenEndIdx = strResponse . IndexOf ( "\r \n " , StringComparison . InvariantCultureIgnoreCase ) ;
1015
- ClassicAssert . IsTrue ( arrLenEndIdx > 1 ) ;
1016
-
1017
- var strArrLen = strResponse . AsSpan ( ) . Slice ( 1 , arrLenEndIdx - 1 ) ;
1018
- ClassicAssert . IsTrue ( int . TryParse ( strArrLen , out var arrLen ) ) ;
1019
- ClassicAssert . IsTrue ( arrLen == 5 ) ;
984
+ TestUtils . AssertEqualUpToExpectedLength ( "*5\r \n " , response ) ;
1020
985
1021
986
var lightClientRequest2 = TestUtils . CreateRequest ( ) ;
1022
987
response = lightClientRequest2 . SendCommand ( "SADD myset one" ) ;
0 commit comments