1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT license.
3
+
4
+ using BenchmarkDotNet . Attributes ;
5
+ using Embedded . server ;
6
+
7
+ namespace BDN . benchmark . Operations
8
+ {
9
+ /// <summary>
10
+ /// Benchmark for SortedSetOperations
11
+ /// </summary>
12
+ [ MemoryDiagnoser ]
13
+ public unsafe class SortedSetOperations : OperationsBase
14
+ {
15
+ static ReadOnlySpan < byte > ZADDREM => "*4\r \n $4\r \n ZADD\r \n $1\r \n c\r \n $1\r \n 1\r \n $1\r \n c\r \n *3\r \n $4\r \n ZREM\r \n $1\r \n c\r \n $1\r \n c\r \n "u8 ;
16
+ static ReadOnlySpan < byte > ZCARD => "*2\r \n $5\r \n ZCARD\r \n $1\r \n c\r \n "u8 ;
17
+ static ReadOnlySpan < byte > ZCOUNT => "*4\r \n $6\r \n ZCOUNT\r \n $1\r \n c\r \n $1\r \n 0\r \n $1\r \n 2\r \n "u8 ;
18
+ static ReadOnlySpan < byte > ZDIFF => "*4\r \n $5\r \n ZDIFF\r \n $1\r \n 2\r \n $1\r \n c\r \n $1\r \n h\r \n "u8 ;
19
+ static ReadOnlySpan < byte > ZDIFFSTORE => "*5\r \n $10\r \n ZDIFFSTORE\r \n $4\r \n dest\r \n $1\r \n 2\r \n $1\r \n c\r \n $1\r \n h\r \n "u8 ;
20
+ static ReadOnlySpan < byte > ZINCRBY => "*4\r \n $7\r \n ZINCRBY\r \n $1\r \n c\r \n $1\r \n 1\r \n $1\r \n d\r \n "u8 ;
21
+ static ReadOnlySpan < byte > ZINTER => "*4\r \n $6\r \n ZINTER\r \n $1\r \n 2\r \n $1\r \n c\r \n $1\r \n h\r \n "u8 ;
22
+ static ReadOnlySpan < byte > ZINTERCARD => "*4\r \n $10\r \n ZINTERCARD\r \n $1\r \n 2\r \n $1\r \n c\r \n $1\r \n h\r \n "u8 ;
23
+ static ReadOnlySpan < byte > ZINTERSTORE => "*5\r \n $11\r \n ZINTERSTORE\r \n $4\r \n dest\r \n $1\r \n 2\r \n $1\r \n c\r \n $1\r \n h\r \n "u8 ;
24
+ static ReadOnlySpan < byte > ZLEXCOUNT => "*4\r \n $9\r \n ZLEXCOUNT\r \n $1\r \n c\r \n $1\r \n -\r \n $1\r \n +\r \n "u8 ;
25
+ static ReadOnlySpan < byte > ZMPOP => "*4\r \n $5\r \n ZMPOP\r \n $1\r \n 1\r \n $1\r \n c\r \n $3\r \n MIN\r \n *4\r \n $4\r \n ZADD\r \n $1\r \n c\r \n $1\r \n 1\r \n $1\r \n d\r \n "u8 ;
26
+ static ReadOnlySpan < byte > ZMSCORE => "*3\r \n $7\r \n ZMSCORE\r \n $1\r \n c\r \n $1\r \n d\r \n "u8 ;
27
+ static ReadOnlySpan < byte > ZPOPMAX => "*2\r \n $7\r \n ZPOPMAX\r \n $1\r \n c\r \n *4\r \n $4\r \n ZADD\r \n $1\r \n c\r \n $1\r \n 1\r \n $1\r \n d\r \n "u8 ;
28
+ static ReadOnlySpan < byte > ZPOPMIN => "*2\r \n $7\r \n ZPOPMIN\r \n $1\r \n c\r \n *4\r \n $4\r \n ZADD\r \n $1\r \n c\r \n $1\r \n 1\r \n $1\r \n d\r \n "u8 ;
29
+ static ReadOnlySpan < byte > ZRANDMEMBER => "*2\r \n $10\r \n ZRANDMEMBER\r \n $1\r \n c\r \n "u8 ;
30
+ static ReadOnlySpan < byte > ZRANGE => "*4\r \n $6\r \n ZRANGE\r \n $1\r \n c\r \n $1\r \n 0\r \n $1\r \n 1\r \n "u8 ;
31
+ static ReadOnlySpan < byte > ZRANGESTORE => "*5\r \n $11\r \n ZRANGESTORE\r \n $4\r \n dest\r \n $1\r \n c\r \n $1\r \n 0\r \n $1\r \n 1\r \n "u8 ;
32
+ static ReadOnlySpan < byte > ZRANK => "*3\r \n $5\r \n ZRANK\r \n $1\r \n c\r \n $1\r \n d\r \n "u8 ;
33
+ static ReadOnlySpan < byte > ZREMRANGEBYLEX => "*4\r \n $14\r \n ZREMRANGEBYLEX\r \n $1\r \n c\r \n $1\r \n -\r \n $1\r \n +\r \n *4\r \n $4\r \n ZADD\r \n $1\r \n c\r \n $1\r \n 1\r \n $1\r \n d\r \n "u8 ;
34
+ static ReadOnlySpan < byte > ZREMRANGEBYRANK => "*4\r \n $15\r \n ZREMRANGEBYRANK\r \n $1\r \n c\r \n $1\r \n 0\r \n $1\r \n 1\r \n *4\r \n $4\r \n ZADD\r \n $1\r \n c\r \n $1\r \n 1\r \n $1\r \n d\r \n "u8 ;
35
+ static ReadOnlySpan < byte > ZREMRANGEBYSCORE => "*4\r \n $16\r \n ZREMRANGEBYSCORE\r \n $1\r \n c\r \n $1\r \n 0\r \n $1\r \n 2\r \n *4\r \n $4\r \n ZADD\r \n $1\r \n c\r \n $1\r \n 1\r \n $1\r \n d\r \n "u8 ;
36
+ static ReadOnlySpan < byte > ZREVRANK => "*3\r \n $8\r \n ZREVRANK\r \n $1\r \n c\r \n $1\r \n d\r \n "u8 ;
37
+ static ReadOnlySpan < byte > ZSCAN => "*6\r \n $5\r \n ZSCAN\r \n $1\r \n c\r \n $1\r \n 0\r \n $5\r \n COUNT\r \n $1\r \n 5\r \n "u8 ;
38
+ static ReadOnlySpan < byte > ZSCORE => "*3\r \n $6\r \n ZSCORE\r \n $1\r \n c\r \n $1\r \n d\r \n "u8 ;
39
+ static ReadOnlySpan < byte > ZUNION => "*4\r \n $6\r \n ZUNION\r \n $1\r \n 2\r \n $1\r \n c\r \n $1\r \n h\r \n "u8 ;
40
+ static ReadOnlySpan < byte > ZUNIONSTORE => "*5\r \n $11\r \n ZUNIONSTORE\r \n $4\r \n dest\r \n $1\r \n 2\r \n $1\r \n c\r \n $1\r \n h\r \n "u8 ;
41
+
42
+ Request zAddRem , zCard , zCount , zDiff , zDiffStore , zIncrby , zInter , zInterCard ,
43
+ zInterStore , zLexCount , zMPop , zMScore , zPopMax , zPopMin ,
44
+ zRandMember , zRange , zRangeStore , zRank , zRemRangeByLex ,
45
+ zRemRangeByRank , zRemRangeByScore , zRevRank , zScan ,
46
+ zScore , zUnion , zUnionStore ;
47
+
48
+ public override void GlobalSetup ( )
49
+ {
50
+ base . GlobalSetup ( ) ;
51
+
52
+ SetupOperation ( ref zAddRem , ZADDREM ) ;
53
+ SetupOperation ( ref zCard , ZCARD ) ;
54
+ SetupOperation ( ref zCount , ZCOUNT ) ;
55
+ SetupOperation ( ref zDiff , ZDIFF ) ;
56
+ SetupOperation ( ref zDiffStore , ZDIFFSTORE ) ;
57
+ SetupOperation ( ref zIncrby , ZINCRBY ) ;
58
+ SetupOperation ( ref zInter , ZINTER ) ;
59
+ SetupOperation ( ref zInterCard , ZINTERCARD ) ;
60
+ SetupOperation ( ref zInterStore , ZINTERSTORE ) ;
61
+ SetupOperation ( ref zLexCount , ZLEXCOUNT ) ;
62
+ SetupOperation ( ref zMPop , ZMPOP ) ;
63
+ SetupOperation ( ref zMScore , ZMSCORE ) ;
64
+ SetupOperation ( ref zPopMax , ZPOPMAX ) ;
65
+ SetupOperation ( ref zPopMin , ZPOPMIN ) ;
66
+ SetupOperation ( ref zRandMember , ZRANDMEMBER ) ;
67
+ SetupOperation ( ref zRange , ZRANGE ) ;
68
+ SetupOperation ( ref zRangeStore , ZRANGESTORE ) ;
69
+ SetupOperation ( ref zRank , ZRANK ) ;
70
+ SetupOperation ( ref zRemRangeByLex , ZREMRANGEBYLEX ) ;
71
+ SetupOperation ( ref zRemRangeByRank , ZREMRANGEBYRANK ) ;
72
+ SetupOperation ( ref zRemRangeByScore , ZREMRANGEBYSCORE ) ;
73
+ SetupOperation ( ref zRevRank , ZREVRANK ) ;
74
+ SetupOperation ( ref zScan , ZSCAN ) ;
75
+ SetupOperation ( ref zScore , ZSCORE ) ;
76
+ SetupOperation ( ref zUnion , ZUNION ) ;
77
+ SetupOperation ( ref zUnionStore , ZUNIONSTORE ) ;
78
+
79
+ // Pre-populate data for two sorted sets
80
+ SlowConsumeMessage ( "*4\r \n $4\r \n ZADD\r \n $1\r \n c\r \n $1\r \n 1\r \n $1\r \n d\r \n "u8 ) ;
81
+ SlowConsumeMessage ( "*6\r \n $4\r \n ZADD\r \n $1\r \n h\r \n $1\r \n 1\r \n $1\r \n d\r \n $1\r \n 2\r \n $1\r \n e\r \n "u8 ) ;
82
+ SlowConsumeMessage ( "*4\r \n $4\r \n ZADD\r \n $4\r \n dest\r \n $1\r \n 1\r \n $1\r \n d\r \n "u8 ) ;
83
+ }
84
+
85
+ [ Benchmark ]
86
+ public void ZAddRem ( )
87
+ {
88
+ Send ( zAddRem ) ;
89
+ }
90
+
91
+ [ Benchmark ]
92
+ public void ZCard ( ) => Send ( zCard ) ;
93
+
94
+ [ Benchmark ]
95
+ public void ZCount ( ) => Send ( zCount ) ;
96
+
97
+ [ Benchmark ]
98
+ public void ZDiff ( ) => Send ( zDiff ) ;
99
+
100
+ [ Benchmark ]
101
+ public void ZDiffStore ( ) => Send ( zDiffStore ) ;
102
+
103
+ [ Benchmark ]
104
+ public void ZIncrby ( ) => Send ( zIncrby ) ;
105
+
106
+ [ Benchmark ]
107
+ public void ZInter ( ) => Send ( zInter ) ;
108
+
109
+ [ Benchmark ]
110
+ public void ZInterCard ( ) => Send ( zInterCard ) ;
111
+
112
+ [ Benchmark ]
113
+ public void ZInterStore ( ) => Send ( zInterStore ) ;
114
+
115
+ [ Benchmark ]
116
+ public void ZLexCount ( ) => Send ( zLexCount ) ;
117
+
118
+ [ Benchmark ]
119
+ public void ZMPop ( ) => Send ( zMPop ) ;
120
+
121
+ [ Benchmark ]
122
+ public void ZMScore ( ) => Send ( zMScore ) ;
123
+
124
+ [ Benchmark ]
125
+ public void ZPopMax ( ) => Send ( zPopMax ) ;
126
+
127
+ [ Benchmark ]
128
+ public void ZPopMin ( ) => Send ( zPopMin ) ;
129
+
130
+ [ Benchmark ]
131
+ public void ZRandMember ( ) => Send ( zRandMember ) ;
132
+
133
+ [ Benchmark ]
134
+ public void ZRange ( ) => Send ( zRange ) ;
135
+
136
+ [ Benchmark ]
137
+ public void ZRangeStore ( ) => Send ( zRangeStore ) ;
138
+
139
+ [ Benchmark ]
140
+ public void ZRank ( ) => Send ( zRank ) ;
141
+
142
+ [ Benchmark ]
143
+ public void ZRemRangeByLex ( ) => Send ( zRemRangeByLex ) ;
144
+
145
+ [ Benchmark ]
146
+ public void ZRemRangeByRank ( ) => Send ( zRemRangeByRank ) ;
147
+
148
+ [ Benchmark ]
149
+ public void ZRemRangeByScore ( ) => Send ( zRemRangeByScore ) ;
150
+
151
+ [ Benchmark ]
152
+ public void ZRevRank ( ) => Send ( zRevRank ) ;
153
+
154
+ [ Benchmark ]
155
+ public void ZScan ( ) => Send ( zScan ) ;
156
+
157
+ [ Benchmark ]
158
+ public void ZScore ( ) => Send ( zScore ) ;
159
+
160
+ [ Benchmark ]
161
+ public void ZUnion ( ) => Send ( zUnion ) ;
162
+
163
+ [ Benchmark ]
164
+ public void ZUnionStore ( ) => Send ( zUnionStore ) ;
165
+ }
166
+ }
0 commit comments