@Test public void testBitVector() { final MaterializedField field = MaterializedField.create(EMPTY_SCHEMA_PATH, BitHolder.TYPE); // Create a new value vector for 1024 integers try (final BitVector vector = new BitVector(field, allocator)) { final BitVector.Mutator m = vector.getMutator(); vector.allocateNew(1024); // Put and set a few values m.set(0, 1); m.set(1, 0); m.set(100, 0); m.set(1022, 1); final BitVector.Accessor accessor = vector.getAccessor(); assertEquals(1, accessor.get(0)); assertEquals(0, accessor.get(1)); assertEquals(0, accessor.get(100)); assertEquals(1, accessor.get(1022)); // test setting the same value twice m.set(0, 1); m.set(0, 1); m.set(1, 0); m.set(1, 0); assertEquals(1, accessor.get(0)); assertEquals(0, accessor.get(1)); // test toggling the values m.set(0, 0); m.set(1, 1); assertEquals(0, accessor.get(0)); assertEquals(1, accessor.get(1)); // Ensure unallocated space returns 0 assertEquals(0, accessor.get(3)); } }
@Test public void testBitVector() { // Build a required boolean field definition MajorType.Builder typeBuilder = MajorType.newBuilder(); FieldDef.Builder defBuilder = FieldDef.newBuilder(); typeBuilder.setMinorType(MinorType.BIT).setMode(DataMode.REQUIRED).setWidth(4); defBuilder.setMajorType(typeBuilder.build()); MaterializedField field = MaterializedField.create(defBuilder.build()); // Create a new value vector for 1024 integers BitVector v = new BitVector(field, allocator); BitVector.Mutator m = v.getMutator(); v.allocateNew(1024); // Put and set a few values m.set(0, 1); m.set(1, 0); m.set(100, 0); m.set(1022, 1); assertEquals(1, v.getAccessor().get(0)); assertEquals(0, v.getAccessor().get(1)); assertEquals(0, v.getAccessor().get(100)); assertEquals(1, v.getAccessor().get(1022)); // test setting the same value twice m.set(0, 1); m.set(0, 1); m.set(1, 0); m.set(1, 0); assertEquals(1, v.getAccessor().get(0)); assertEquals(0, v.getAccessor().get(1)); // test toggling the values m.set(0, 0); m.set(1, 1); assertEquals(0, v.getAccessor().get(0)); assertEquals(1, v.getAccessor().get(1)); // Ensure unallocated space returns 0 assertEquals(0, v.getAccessor().get(3)); }
@Test(expected = OversizedAllocationException.class) public void testBitVectorReallocation() { final MaterializedField field = MaterializedField.create(EMPTY_SCHEMA_PATH, UInt4Holder.TYPE); final BitVector vector = new BitVector(field, allocator); // edge case 1: buffer size ~ max value capacity final int expectedValueCapacity = 1 << 29; try { vector.allocateNew(expectedValueCapacity); assertEquals(expectedValueCapacity, vector.getValueCapacity()); vector.reAlloc(); assertEquals(expectedValueCapacity * 2, vector.getValueCapacity()); } finally { vector.close(); } // common: value count < MAX_VALUE_ALLOCATION try { vector.allocateNew(expectedValueCapacity); for (int i = 0; i < 3; i++) { vector.reAlloc(); // expand buffer size } assertEquals(Integer.MAX_VALUE, vector.getValueCapacity()); vector.reAlloc(); // buffer size ~ max allocation assertEquals(Integer.MAX_VALUE, vector.getValueCapacity()); vector.reAlloc(); // overflow } finally { vector.close(); } }