Skip to content

Commit e0750be

Browse files
committed
Ensure that hardcoded hashes in unit tests are in little-endian byte order
1 parent 75944d8 commit e0750be

File tree

1 file changed

+53
-53
lines changed

1 file changed

+53
-53
lines changed

src/mongo/db/hasher_test.cpp

Lines changed: 53 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -198,187 +198,187 @@ namespace {
198198
// All of the values in the remaining tests have been determined experimentally.
199199
TEST( BSONElementHasher, HashIntOrLongOrDouble ) {
200200
BSONObj o = BSON( "check" << 42 );
201-
ASSERT_EQUALS( hashIt( o ), -944302157085130861LL );
201+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(-944302157085130861LL) );
202202
o = BSON( "check" << 42.123 );
203-
ASSERT_EQUALS( hashIt( o ), -944302157085130861LL );
203+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(-944302157085130861LL) );
204204
o = BSON( "check" << (long long) 42 );
205-
ASSERT_EQUALS( hashIt( o ), -944302157085130861LL );
205+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(-944302157085130861LL) );
206206

207207
o = BSON( "check" << 0 );
208-
ASSERT_EQUALS( hashIt( o ), 4854801880128277513LL );
208+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(4854801880128277513LL) );
209209
o = BSON( "check" << 0.456 );
210-
ASSERT_EQUALS( hashIt( o ), 4854801880128277513LL );
210+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(4854801880128277513LL) );
211211
o = BSON( "check" << (long long) 0 );
212-
ASSERT_EQUALS( hashIt( o ), 4854801880128277513LL );
212+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(4854801880128277513LL) );
213213
// NAN is treated as zero.
214214
o = BSON( "check" << std::numeric_limits<double>::signaling_NaN() );
215-
ASSERT_EQUALS( hashIt( o ), 4854801880128277513LL );
215+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(4854801880128277513LL) );
216216
o = BSON( "check" << std::numeric_limits<double>::quiet_NaN() );
217-
ASSERT_EQUALS( hashIt( o ), 4854801880128277513LL );
217+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(4854801880128277513LL) );
218218

219219
o = BSON( "check" << 1 );
220-
ASSERT_EQUALS( hashIt( o ), 5902408780260971510LL );
220+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(5902408780260971510LL) );
221221
o = BSON( "check" << 1.987 );
222-
ASSERT_EQUALS( hashIt( o ), 5902408780260971510LL );
222+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(5902408780260971510LL) );
223223
o = BSON( "check" << (long long) 1 );
224-
ASSERT_EQUALS( hashIt( o ), 5902408780260971510LL );
224+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(5902408780260971510LL) );
225225

226226
o = BSON( "check" << -1 );
227-
ASSERT_EQUALS( hashIt( o ), 1140205862565771219LL );
227+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(1140205862565771219LL) );
228228
o = BSON( "check" << -1.789 );
229-
ASSERT_EQUALS( hashIt( o ), 1140205862565771219LL );
229+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(1140205862565771219LL) );
230230
o = BSON( "check" << (long long) -1 );
231-
ASSERT_EQUALS( hashIt( o ), 1140205862565771219LL );
231+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(1140205862565771219LL) );
232232

233233
o = BSON( "check" << std::numeric_limits<int>::min() );
234-
ASSERT_EQUALS( hashIt( o ), 6165898260261354870LL );
234+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(6165898260261354870LL) );
235235
o = BSON( "check" << (double) std::numeric_limits<int>::min() );
236-
ASSERT_EQUALS( hashIt( o ), 6165898260261354870LL );
236+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(6165898260261354870LL) );
237237
o = BSON( "check" << (long long) std::numeric_limits<int>::min() );
238-
ASSERT_EQUALS( hashIt( o ), 6165898260261354870LL );
238+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(6165898260261354870LL) );
239239

240240
o = BSON( "check" << std::numeric_limits<int>::max() );
241-
ASSERT_EQUALS( hashIt( o ), 1143184177162245883LL );
241+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(1143184177162245883LL) );
242242
o = BSON( "check" << (double) std::numeric_limits<int>::max() );
243-
ASSERT_EQUALS( hashIt( o ), 1143184177162245883LL );
243+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(1143184177162245883LL) );
244244
o = BSON( "check" << (long long) std::numeric_limits<int>::max() );
245-
ASSERT_EQUALS( hashIt( o ), 1143184177162245883LL );
245+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(1143184177162245883LL) );
246246

247247
// Large/small double values.
248248
ASSERT( std::numeric_limits<long long>::max() < std::numeric_limits<double>::max() );
249249
o = BSON( "check" << std::numeric_limits<double>::max() );
250-
ASSERT_EQUALS( hashIt( o ), 921523596458303250LL );
250+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(921523596458303250LL) );
251251
o = BSON( "check" << std::numeric_limits<long long>::max() ); // 9223372036854775807
252-
ASSERT_EQUALS( hashIt( o ), 921523596458303250LL );
252+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(921523596458303250LL) );
253253

254254
// Have to create our own small double.
255255
// std::numeric_limits<double>::lowest() - Not available until C++11
256256
// std::numeric_limits<double>::min() - Closest positive value to zero, not most negative.
257257
double smallDouble = - std::numeric_limits<double>::max();
258258
ASSERT( smallDouble < static_cast<double>( std::numeric_limits<long long>::min() ) );
259259
o = BSON( "check" << smallDouble );
260-
ASSERT_EQUALS( hashIt( o ), 4532067210535695462LL );
260+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(4532067210535695462LL) );
261261
o = BSON( "check" << std::numeric_limits<long long>::min() ); // -9223372036854775808
262-
ASSERT_EQUALS( hashIt( o ), 4532067210535695462LL );
262+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(4532067210535695462LL) );
263263
}
264264

265265
TEST( BSONElementHasher, HashMinKey ) {
266266
BSONObj o = BSON( "check" << MINKEY );
267-
ASSERT_EQUALS( hashIt( o ), 7961148599568647290LL );
267+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(7961148599568647290LL) );
268268
}
269269

270270
TEST( BSONElementHasher, HashMaxKey ) {
271271
BSONObj o = BSON( "check" << MAXKEY );
272-
ASSERT_EQUALS( hashIt( o ), 5504842513779440750LL );
272+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(5504842513779440750LL) );
273273
}
274274

275275
TEST( BSONElementHasher, HashUndefined ) {
276276
BSONObj o = BSON( "check" << BSONUndefined );
277-
ASSERT_EQUALS( hashIt( o ), 40158834000849533LL );
277+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(40158834000849533LL) );
278278
}
279279

280280
TEST( BSONElementHasher, HashNull ) {
281281
BSONObj o = BSON( "check" << BSONNULL );
282-
ASSERT_EQUALS( hashIt( o ), 2338878944348059895LL );
282+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(2338878944348059895LL) );
283283
}
284284

285285
TEST( BSONElementHasher, HashString ) {
286286
BSONObj o = BSON( "check" << "abc" );
287-
ASSERT_EQUALS( hashIt( o ), 8478485326885698097LL );
287+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(8478485326885698097LL) );
288288
o = BSON( "check" << BSONSymbol( "abc" ) );
289-
ASSERT_EQUALS( hashIt( o ), 8478485326885698097LL );
289+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(8478485326885698097LL) );
290290

291291
o = BSON( "check" << "" );
292-
ASSERT_EQUALS( hashIt( o ), 2049396243249673340LL );
292+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(2049396243249673340LL) );
293293
o = BSON( "check" << BSONSymbol( "" ) );
294-
ASSERT_EQUALS( hashIt( o ), 2049396243249673340LL );
294+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(2049396243249673340LL) );
295295
}
296296

297297
TEST( BSONElementHasher, HashObject ) {
298298
BSONObj o = BSON( "check" << BSON( "a" << "abc" << "b" << 123LL ) );
299-
ASSERT_EQUALS( hashIt( o ), 4771603801758380216LL );
299+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(4771603801758380216LL) );
300300

301301
o = BSON( "check" << BSONObj() );
302-
ASSERT_EQUALS( hashIt( o ), 7980500913326740417LL );
302+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(7980500913326740417LL) );
303303
}
304304

305305
TEST( BSONElementHasher, HashArray ) {
306306
BSONObj o = BSON( "check" << BSON_ARRAY( "bar" << "baz" << "qux" ) );
307-
ASSERT_EQUALS( hashIt( o ), -2938911267422831539LL );
307+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(-2938911267422831539LL) );
308308

309309
o = BSON( "check" << BSONArray() );
310-
ASSERT_EQUALS( hashIt( o ), 8849948234993459283LL );
310+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(8849948234993459283LL) );
311311
}
312312

313313
TEST( BSONElementHasher, HashBinary ) {
314314
uint8_t bytes[] = { 0, 1, 2, 3, 4, 6 };
315315
BSONObj o = BSON( "check" << BSONBinData( bytes, 6, BinDataGeneral ) );
316-
ASSERT_EQUALS( hashIt( o ), 7252465090394235301LL );
316+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(7252465090394235301LL) );
317317

318318
o = BSON( "check" << BSONBinData( bytes, 6, bdtCustom ) );
319-
ASSERT_EQUALS( hashIt( o ), 5736670452907618262LL );
319+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(5736670452907618262LL) );
320320

321321
uint8_t uuidBytes[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
322322
o = BSON( "check" << BSONBinData( uuidBytes, 16, newUUID ) );
323-
ASSERT_EQUALS( hashIt( o ), 6084661258071355978LL );
323+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(6084661258071355978LL) );
324324
}
325325

326326
TEST( BSONElementHasher, HashObjectId ) {
327327
BSONObj o = BSON( "check" << OID( "010203040506070809101112" ) );
328-
ASSERT_EQUALS( hashIt( o ), -5588663249627035708LL );
328+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(-5588663249627035708LL) );
329329

330330
o = BSON( "check" << OID( "000000000000000000000000" ) );
331-
ASSERT_EQUALS( hashIt( o ), -4293118519463489418LL );
331+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(-4293118519463489418LL) );
332332
}
333333

334334
TEST( BSONElementHasher, HashBoolean ) {
335335
BSONObj o = BSON( "check" << true );
336-
ASSERT_EQUALS( hashIt( o ), 6405873908747105701LL );
336+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(6405873908747105701LL) );
337337

338338
o = BSON( "check" << false );
339-
ASSERT_EQUALS( hashIt( o ), 6289544573401934092LL );
339+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(6289544573401934092LL) );
340340
}
341341

342342
TEST( BSONElementHasher, HashTimeStamp ) {
343343
BSONObjBuilder builder1;
344344
BSONObjBuilder builder2;
345345

346346
BSONObj o = BSON( "check" << Date_t( 0x5566778811223344LL ) );
347-
ASSERT_EQUALS( hashIt( o ), 4476222765095560467LL );
347+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(4476222765095560467LL) );
348348
o = builder1.appendTimestamp( "check", 0x55667788LL * 1000LL, 0x11223344LL ).obj();
349-
ASSERT_EQUALS( hashIt( o ), 4476222765095560467LL );
349+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(4476222765095560467LL) );
350350

351351
o = BSON( "check" << Date_t( 0 ) );
352-
ASSERT_EQUALS( hashIt( o ), -1178696894582842035LL );
352+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(-1178696894582842035LL) );
353353
o = builder2.appendTimestamp( "check", 0 ).obj();
354-
ASSERT_EQUALS( hashIt( o ), -1178696894582842035LL );
354+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(-1178696894582842035LL) );
355355
}
356356

357357
TEST( BSONElementHasher, HashRegEx ) {
358358
BSONObj o = BSON( "check" << BSONRegEx( "mongodb" ) );
359-
ASSERT_EQUALS( hashIt( o ), -7275792090268217043LL );
359+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(-7275792090268217043LL) );
360360

361361
o = BSON( "check" << BSONRegEx( ".*", "i" ) );
362-
ASSERT_EQUALS( hashIt( o ), 7095855029187981886LL );
362+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(7095855029187981886LL) );
363363
}
364364

365365
TEST( BSONElementHasher, HashDBRef ) {
366366
BSONObj o = BSON( "check" << BSONDBRef( "c", OID( "010203040506070809101112" ) ) );
367-
ASSERT_EQUALS( hashIt( o ), 940175826736461384LL );
367+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(940175826736461384LL) );
368368

369369
o = BSON( "check" << BSONDBRef( "db.c", OID( "010203040506070809101112" ) ) );
370-
ASSERT_EQUALS( hashIt( o ), 2426768198104018194LL );
370+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(2426768198104018194LL) );
371371
}
372372

373373
TEST( BSONElementHasher, HashCode ) {
374374
BSONObj o = BSON( "check" << BSONCode( "func f() { return 1; }" ) );
375-
ASSERT_EQUALS( hashIt( o ), 6861638109178014270LL );
375+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(6861638109178014270LL) );
376376
}
377377

378378
TEST( BSONElementHasher, HashCodeWScope ) {
379379
BSONObj o = BSON( "check" <<
380380
BSONCodeWScope( "func f() { return 1; }", BSON( "c" << true ) ) );
381-
ASSERT_EQUALS( hashIt( o ), 501342939894575968LL );
381+
ASSERT_EQUALS( hashIt( o ), littleEndian<long long>(501342939894575968LL) );
382382
}
383383

384384
} // namespace

0 commit comments

Comments
 (0)