@@ -125,59 +125,106 @@ describe('findIndexInSortedArray', () => {
125
125
const messages = generateMessages ( { sort : 'asc' } ) . map ( formatMessage ) ;
126
126
127
127
it ( 'finds index of the message with closest matching created_at' , ( ) => {
128
- const newMessage = formatMessage ( generateMsg ( { created_at : new Date ( timestamp + 22 * 1000 ) } ) as MessageResponse ) ;
129
-
130
- const index = findIndexInSortedArray ( {
131
- needle : newMessage ,
132
- sortedArray : messages ,
133
- sortDirection : 'ascending' ,
134
- selectValueToCompare : ( v ) => v . created_at . getTime ( ) ,
128
+ [
129
+ {
130
+ newMessage : formatMessage ( generateMsg ( { created_at : new Date ( timestamp + 22 * 1000 ) } ) as MessageResponse ) ,
131
+ returnOnMidMatch : true ,
132
+ } ,
133
+ {
134
+ newMessage : formatMessage ( generateMsg ( { created_at : new Date ( timestamp + 22 * 1000 ) } ) as MessageResponse ) ,
135
+ returnOnMidMatch : false ,
136
+ } ,
137
+ ] . forEach ( ( { newMessage, returnOnMidMatch } ) => {
138
+ const index = findIndexInSortedArray ( {
139
+ needle : newMessage ,
140
+ returnOnMidMatch,
141
+ sortedArray : messages ,
142
+ sortDirection : 'ascending' ,
143
+ selectValueToCompare : ( v ) => v . created_at . getTime ( ) ,
144
+ } ) ;
145
+
146
+ expect ( index ) . to . equal ( 3 ) ;
135
147
} ) ;
136
-
137
- expect ( index ) . to . equal ( 3 ) ;
138
148
} ) ;
139
149
140
150
it ( 'finds exact index' , ( ) => {
141
- const newMessage = formatMessage ( generateMsg ( { created_at : new Date ( timestamp + 20 * 1000 ) } ) as MessageResponse ) ;
142
-
143
- const index = findIndexInSortedArray ( {
144
- needle : newMessage ,
145
- sortedArray : messages ,
146
- sortDirection : 'ascending' ,
147
- selectValueToCompare : ( v ) => v . created_at . getTime ( ) ,
151
+ [
152
+ {
153
+ newMessage : formatMessage ( generateMsg ( { created_at : new Date ( timestamp + 20 * 1000 ) } ) as MessageResponse ) ,
154
+ returnOnMidMatch : true ,
155
+ } ,
156
+ {
157
+ newMessage : formatMessage ( generateMsg ( { created_at : new Date ( timestamp + 20 * 1000 ) } ) as MessageResponse ) ,
158
+ returnOnMidMatch : false ,
159
+ } ,
160
+ ] . forEach ( ( { newMessage, returnOnMidMatch } ) => {
161
+ const index = findIndexInSortedArray ( {
162
+ needle : newMessage ,
163
+ returnOnMidMatch,
164
+ sortedArray : messages ,
165
+ sortDirection : 'ascending' ,
166
+ selectValueToCompare : ( v ) => v . created_at . getTime ( ) ,
167
+ } ) ;
168
+
169
+ if ( returnOnMidMatch ) {
170
+ expect ( index ) . to . equal ( 2 ) ;
171
+ } else {
172
+ expect ( index ) . to . equal ( 3 ) ;
173
+ }
148
174
} ) ;
149
-
150
- expect ( index ) . to . equal ( 2 ) ;
151
175
} ) ;
152
176
} ) ;
153
177
154
178
describe ( 'descending order' , ( ) => {
155
179
const messages = generateMessages ( { sort : 'desc' } ) . map ( formatMessage ) ;
156
180
157
181
it ( 'finds index of the message with closest matching created_at' , ( ) => {
158
- const newMessage = formatMessage ( generateMsg ( { created_at : new Date ( timestamp + 22 * 1000 ) } ) as MessageResponse ) ;
159
-
160
- const index = findIndexInSortedArray ( {
161
- needle : newMessage ,
162
- sortedArray : messages ,
163
- sortDirection : 'descending' ,
164
- selectValueToCompare : ( v ) => v . created_at . getTime ( ) ,
182
+ [
183
+ {
184
+ newMessage : formatMessage ( generateMsg ( { created_at : new Date ( timestamp + 22 * 1000 ) } ) as MessageResponse ) ,
185
+ returnOnMidMatch : true ,
186
+ } ,
187
+ {
188
+ newMessage : formatMessage ( generateMsg ( { created_at : new Date ( timestamp + 22 * 1000 ) } ) as MessageResponse ) ,
189
+ returnOnMidMatch : false ,
190
+ } ,
191
+ ] . forEach ( ( { newMessage, returnOnMidMatch } ) => {
192
+ const index = findIndexInSortedArray ( {
193
+ needle : newMessage ,
194
+ returnOnMidMatch,
195
+ sortedArray : messages ,
196
+ sortDirection : 'descending' ,
197
+ selectValueToCompare : ( v ) => v . created_at . getTime ( ) ,
198
+ } ) ;
199
+
200
+ expect ( index ) . to . equal ( 7 ) ;
165
201
} ) ;
166
-
167
- expect ( index ) . to . equal ( 7 ) ;
168
202
} ) ;
169
203
170
204
it ( 'finds exact index' , ( ) => {
171
- const newMessage = formatMessage ( generateMsg ( { created_at : new Date ( timestamp + 10 * 1000 ) } ) as MessageResponse ) ;
172
-
173
- const index = findIndexInSortedArray ( {
174
- needle : newMessage ,
175
- sortedArray : messages ,
176
- sortDirection : 'descending' ,
177
- selectValueToCompare : ( v ) => v . created_at . getTime ( ) ,
205
+ [
206
+ {
207
+ newMessage : formatMessage ( generateMsg ( { created_at : new Date ( timestamp + 10 * 1000 ) } ) as MessageResponse ) ,
208
+ returnOnMidMatch : true ,
209
+ } ,
210
+ {
211
+ newMessage : formatMessage ( generateMsg ( { created_at : new Date ( timestamp + 10 * 1000 ) } ) as MessageResponse ) ,
212
+ returnOnMidMatch : false ,
213
+ } ,
214
+ ] . forEach ( ( { newMessage, returnOnMidMatch } ) => {
215
+ const index = findIndexInSortedArray ( {
216
+ needle : newMessage ,
217
+ returnOnMidMatch,
218
+ sortedArray : messages ,
219
+ sortDirection : 'descending' ,
220
+ selectValueToCompare : ( v ) => v . created_at . getTime ( ) ,
221
+ } ) ;
222
+ if ( returnOnMidMatch ) {
223
+ expect ( index ) . to . equal ( 8 ) ;
224
+ } else {
225
+ expect ( index ) . to . equal ( 9 ) ;
226
+ }
178
227
} ) ;
179
-
180
- expect ( index ) . to . equal ( 8 ) ;
181
228
} ) ;
182
229
} ) ;
183
230
} ) ;
0 commit comments