Skip to content

Commit 298f018

Browse files
committed
GH-586: Add unit test for first time key and value initialization
1 parent 91e1b6a commit 298f018

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed

vector/src/test/java/org/apache/arrow/vector/TestMapVector.java

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import static org.junit.jupiter.api.Assertions.assertFalse;
2222
import static org.junit.jupiter.api.Assertions.assertNull;
2323
import static org.junit.jupiter.api.Assertions.assertSame;
24+
import static org.junit.jupiter.api.Assertions.assertThrows;
2425
import static org.junit.jupiter.api.Assertions.assertTrue;
2526

2627
import java.nio.ByteBuffer;
@@ -1536,4 +1537,47 @@ public void testFixedSizeBinaryWriter() {
15361537
assertArrayEquals(new byte[] {32, 21}, (byte[]) resultStruct.get(MapVector.VALUE_NAME));
15371538
}
15381539
}
1540+
1541+
@Test
1542+
public void testFixedSizeBinaryFirstInitialization() {
1543+
try (MapVector mapVector = MapVector.empty("map_vector", allocator, false)) {
1544+
UnionMapWriter writer = mapVector.getWriter();
1545+
writer.allocate();
1546+
1547+
// populate input vector with the following records
1548+
// {[11, 22] -> [32, 21]}
1549+
FixedSizeBinaryHolder holder1 = getFixedSizeBinaryHolder(new byte[] {11, 22});
1550+
FixedSizeBinaryHolder holder2 = getFixedSizeBinaryHolder(new byte[] {32, 21});
1551+
1552+
writer.setPosition(0); // optional
1553+
writer.startMap();
1554+
writer.startEntry();
1555+
// require byteWidth parameter for first-time initialization of `key` or `value` writers
1556+
assertThrows(NullPointerException.class, () -> writer.key().fixedSizeBinary().write(holder1));
1557+
assertThrows(
1558+
NullPointerException.class, () -> writer.value().fixedSizeBinary().write(holder2));
1559+
writer.key().fixedSizeBinary(holder1.byteWidth).write(holder1);
1560+
writer.value().fixedSizeBinary(holder2.byteWidth).write(holder2);
1561+
writer.endEntry();
1562+
holder1.buffer.close();
1563+
holder2.buffer.close();
1564+
writer.endMap();
1565+
1566+
writer.setValueCount(1);
1567+
1568+
// assert the output vector is correct
1569+
FieldReader reader = mapVector.getReader();
1570+
assertTrue(reader.isSet(), "shouldn't be null");
1571+
1572+
/* index 0 */
1573+
Object result = mapVector.getObject(0);
1574+
ArrayList<?> resultSet = (ArrayList<?>) result;
1575+
assertEquals(1, resultSet.size());
1576+
Map<?, ?> resultStruct = (Map<?, ?>) resultSet.get(0);
1577+
assertTrue(resultStruct.containsKey(MapVector.KEY_NAME));
1578+
assertTrue(resultStruct.containsKey(MapVector.VALUE_NAME));
1579+
assertArrayEquals(new byte[] {11, 22}, (byte[]) resultStruct.get(MapVector.KEY_NAME));
1580+
assertArrayEquals(new byte[] {32, 21}, (byte[]) resultStruct.get(MapVector.VALUE_NAME));
1581+
}
1582+
}
15391583
}

0 commit comments

Comments
 (0)