1717
1818package org .apache .spark .shuffle .unsafe ;
1919
20- import org .junit .Assert ;
2120import org .junit .Test ;
21+ import static org .junit .Assert .*;
2222
2323import org .apache .spark .unsafe .memory .ExecutorMemoryManager ;
2424import org .apache .spark .unsafe .memory .MemoryAllocator ;
2525import org .apache .spark .unsafe .memory .MemoryBlock ;
2626import org .apache .spark .unsafe .memory .TaskMemoryManager ;
27+ import static org .apache .spark .shuffle .unsafe .PackedRecordPointer .*;
2728
2829public class PackedRecordPointerSuite {
2930
@@ -36,8 +37,8 @@ public void heap() {
3637 final long addressInPage1 = memoryManager .encodePageNumberAndOffset (page1 , 42 );
3738 PackedRecordPointer packedPointer = new PackedRecordPointer ();
3839 packedPointer .set (PackedRecordPointer .packPointer (addressInPage1 , 360 ));
39- Assert . assertEquals (360 , packedPointer .getPartitionId ());
40- Assert . assertEquals (addressInPage1 , packedPointer .getRecordPointer ());
40+ assertEquals (360 , packedPointer .getPartitionId ());
41+ assertEquals (addressInPage1 , packedPointer .getRecordPointer ());
4142 memoryManager .cleanUpAllAllocatedMemory ();
4243 }
4344
@@ -50,8 +51,43 @@ public void offHeap() {
5051 final long addressInPage1 = memoryManager .encodePageNumberAndOffset (page1 , 42 );
5152 PackedRecordPointer packedPointer = new PackedRecordPointer ();
5253 packedPointer .set (PackedRecordPointer .packPointer (addressInPage1 , 360 ));
53- Assert . assertEquals (360 , packedPointer .getPartitionId ());
54- Assert . assertEquals (addressInPage1 , packedPointer .getRecordPointer ());
54+ assertEquals (360 , packedPointer .getPartitionId ());
55+ assertEquals (addressInPage1 , packedPointer .getRecordPointer ());
5556 memoryManager .cleanUpAllAllocatedMemory ();
5657 }
58+
59+ @ Test
60+ public void maximumPartitionIdCanBeEncoded () {
61+ PackedRecordPointer packedPointer = new PackedRecordPointer ();
62+ packedPointer .set (PackedRecordPointer .packPointer (0 , MAXIMUM_PARTITION_ID ));
63+ assertEquals (MAXIMUM_PARTITION_ID , packedPointer .getPartitionId ());
64+ }
65+
66+ @ Test
67+ public void partitionIdsGreaterThanMaximumPartitionIdWillOverflowOrTriggerError () {
68+ PackedRecordPointer packedPointer = new PackedRecordPointer ();
69+ try {
70+ // Pointers greater than the maximum partition ID will overflow or trigger an assertion error
71+ packedPointer .set (PackedRecordPointer .packPointer (0 , MAXIMUM_PARTITION_ID + 1 ));
72+ assertFalse (MAXIMUM_PARTITION_ID + 1 == packedPointer .getPartitionId ());
73+ } catch (AssertionError e ) {
74+ // pass
75+ }
76+ }
77+
78+ @ Test
79+ public void maximumOffsetInPageCanBeEncoded () {
80+ PackedRecordPointer packedPointer = new PackedRecordPointer ();
81+ long address = TaskMemoryManager .encodePageNumberAndOffset (0 , MAXIMUM_PAGE_SIZE_BYTES - 1 );
82+ packedPointer .set (PackedRecordPointer .packPointer (address , 0 ));
83+ assertEquals (address , packedPointer .getRecordPointer ());
84+ }
85+
86+ @ Test
87+ public void offsetsPastMaxOffsetInPageWillOverflow () {
88+ PackedRecordPointer packedPointer = new PackedRecordPointer ();
89+ long address = TaskMemoryManager .encodePageNumberAndOffset (0 , MAXIMUM_PAGE_SIZE_BYTES );
90+ packedPointer .set (PackedRecordPointer .packPointer (address , 0 ));
91+ assertEquals (0 , packedPointer .getRecordPointer ());
92+ }
5793}
0 commit comments