@@ -219,7 +219,8 @@ ValueGetter<TType> hashGetter<TType>(HashingEstimator.ColumnOptions colInfo)
219219 Assert . Equal ( expectedCombinedSparse , result ) ;
220220 }
221221
222- private void HashTestPositiveIntegerCore ( ulong value , uint expected , uint expectedOrdered , uint expectedOrdered3 , uint expectedCombined , uint expectedCombinedSparse )
222+ private void HashTestPositiveIntegerCore32Bits ( ulong value , uint expected , uint expectedOrdered , uint expectedOrdered3 , uint expectedCombined , uint expectedCombinedSparse )
223+
223224 {
224225 uint eKey = value == 0 ? 0 : expected ;
225226 uint eoKey = value == 0 ? 0 : expectedOrdered ;
@@ -241,29 +242,44 @@ private void HashTestPositiveIntegerCore(ulong value, uint expected, uint expect
241242 HashTestCore ( ( uint ) value , NumberDataViewType . UInt32 , expected , expectedOrdered , expectedOrdered3 , expectedCombined , expectedCombinedSparse ) ;
242243 HashTestCore ( ( uint ) value , new KeyDataViewType ( typeof ( uint ) , int . MaxValue - 1 ) , eKey , eoKey , e3Key , ecKey , 0 ) ;
243244 }
244- HashTestCore ( value , NumberDataViewType . UInt64 , expected , expectedOrdered , expectedOrdered3 , expectedCombined , expectedCombinedSparse ) ;
245- HashTestCore ( ( ulong ) value , new KeyDataViewType ( typeof ( ulong ) , int . MaxValue - 1 ) , eKey , eoKey , e3Key , ecKey , 0 ) ;
246245
247246 HashTestCore ( new DataViewRowId ( value , 0 ) , RowIdDataViewType . Instance , expected , expectedOrdered , expectedOrdered3 , expectedCombined , expectedCombinedSparse ) ;
247+ HashTestCore ( ( ulong ) value , new KeyDataViewType ( typeof ( ulong ) , int . MaxValue - 1 ) , eKey , eoKey , e3Key , ecKey , 0 ) ;
248248
249249 // Next let's check signed numbers.
250-
251250 if ( value <= ( ulong ) sbyte . MaxValue )
252251 HashTestCore ( ( sbyte ) value , NumberDataViewType . SByte , expected , expectedOrdered , expectedOrdered3 , expectedCombined , expectedCombinedSparse ) ;
253252 if ( value <= ( ulong ) short . MaxValue )
254253 HashTestCore ( ( short ) value , NumberDataViewType . Int16 , expected , expectedOrdered , expectedOrdered3 , expectedCombined , expectedCombinedSparse ) ;
255254 if ( value <= int . MaxValue )
256255 HashTestCore ( ( int ) value , NumberDataViewType . Int32 , expected , expectedOrdered , expectedOrdered3 , expectedCombined , expectedCombinedSparse ) ;
256+ }
257+
258+ private void HashTestPositiveIntegerCore64Bits ( ulong value , uint expected , uint expectedOrdered , uint expectedOrdered3 , uint expectedCombined , uint expectedCombinedSparse )
259+
260+ {
261+ uint eKey = value == 0 ? 0 : expected ;
262+ uint eoKey = value == 0 ? 0 : expectedOrdered ;
263+ uint e3Key = value == 0 ? 0 : expectedOrdered3 ;
264+ uint ecKey = value == 0 ? 0 : expectedCombined ;
265+
266+ HashTestCore ( value , NumberDataViewType . UInt64 , expected , expectedOrdered , expectedOrdered3 , expectedCombined , expectedCombinedSparse ) ;
267+
268+ // Next let's check signed numbers.
257269 if ( value <= long . MaxValue )
258- HashTestCore ( ( long ) value , NumberDataViewType . Int64 , expected , expectedOrdered , expectedOrdered3 , expectedCombined , expectedCombinedSparse ) ;
270+ HashTestCore ( ( long ) value , NumberDataViewType . Int64 , expected , expectedOrdered , expectedOrdered3 , expectedCombined , expectedCombinedSparse ) ;
259271 }
260272
261273 [ Fact ]
262274 public void TestHashIntegerNumbers ( )
263275 {
264- HashTestPositiveIntegerCore ( 0 , 842 , 358 , 20 , 882 , 1010 ) ;
265- HashTestPositiveIntegerCore ( 1 , 502 , 537 , 746 , 588 , 286 ) ;
266- HashTestPositiveIntegerCore ( 2 , 407 , 801 , 652 , 696 , 172 ) ;
276+ HashTestPositiveIntegerCore32Bits ( 0 , 842 , 358 , 20 , 882 , 1010 ) ;
277+ HashTestPositiveIntegerCore32Bits ( 1 , 502 , 537 , 746 , 588 , 286 ) ;
278+ HashTestPositiveIntegerCore32Bits ( 2 , 407 , 801 , 652 , 696 , 172 ) ;
279+
280+ HashTestPositiveIntegerCore64Bits ( 0 , 512 , 851 , 795 , 1010 , 620 ) ;
281+ HashTestPositiveIntegerCore64Bits ( 1 , 329 , 190 , 574 , 491 , 805 ) ;
282+ HashTestPositiveIntegerCore64Bits ( 2 , 484 , 713 , 128 , 606 , 326 ) ;
267283 }
268284
269285 [ Fact ]
@@ -279,10 +295,10 @@ public void TestHashFloatingPointNumbers()
279295 HashTestCore ( 1f , NumberDataViewType . Single , 463 , 855 , 732 , 75 , 487 ) ;
280296 HashTestCore ( - 1f , NumberDataViewType . Single , 252 , 612 , 780 , 179 , 80 ) ;
281297 HashTestCore ( 0f , NumberDataViewType . Single , 842 , 358 , 20 , 882 , 1010 ) ;
282- // Note that while we have the hash for numeric types be equal, the same is not necessarily the case for floating point numbers.
283- HashTestCore ( 1d , NumberDataViewType . Double , 937 , 667 , 424 , 727 , 510 ) ;
284- HashTestCore ( - 1d , NumberDataViewType . Double , 930 , 78 , 813 , 582 , 179 ) ;
285- HashTestCore ( 0d , NumberDataViewType . Double , 842 , 358 , 20 , 882 , 1010 ) ;
298+
299+ HashTestCore ( 1d , NumberDataViewType . Double , 188 , 57 , 690 , 727 , 36 ) ;
300+ HashTestCore ( - 1d , NumberDataViewType . Double , 885 , 804 , 22 , 582 , 346 ) ;
301+ HashTestCore ( 0d , NumberDataViewType . Double , 512 , 851 , 795 , 1010 , 620 ) ;
286302 }
287303
288304 [ Fact ]
0 commit comments