|
21 | 21 | import static org.junit.jupiter.api.Assertions.assertFalse; |
22 | 22 | import static org.junit.jupiter.api.Assertions.assertNull; |
23 | 23 | import static org.junit.jupiter.api.Assertions.assertSame; |
| 24 | +import static org.junit.jupiter.api.Assertions.assertThrows; |
24 | 25 | import static org.junit.jupiter.api.Assertions.assertTrue; |
25 | 26 |
|
26 | 27 | import java.nio.ByteBuffer; |
@@ -1536,4 +1537,47 @@ public void testFixedSizeBinaryWriter() { |
1536 | 1537 | assertArrayEquals(new byte[] {32, 21}, (byte[]) resultStruct.get(MapVector.VALUE_NAME)); |
1537 | 1538 | } |
1538 | 1539 | } |
| 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 | + } |
1539 | 1583 | } |
0 commit comments