Skip to content

Commit 7e2cbf3

Browse files
committed
Cover VectorFastPFOR with the shared codec test suites
SkippableBasicTest exercises maxHeadlessCompressedLength, so implement it (mirroring FastPFOR) rather than throwing.
1 parent 3bdcee4 commit 7e2cbf3

3 files changed

Lines changed: 11 additions & 1 deletion

File tree

src/main/java/me/lemire/integercompression/vector/VectorFastPFOR.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@
5454
*/
5555
public class VectorFastPFOR implements IntegerCODEC, SkippableIntegerCODEC {
5656
private final static int OVERHEAD_OF_EACH_EXCEPT = 8;
57+
private static final int OVERHEAD_OF_EACH_PAGE_IN_INTS = 36;
58+
private static final int OVERHEAD_OF_EACH_BLOCK_IN_INTS = 1;
5759
public final static int DEFAULT_PAGE_SIZE = 64 << 10;
5860

5961
public final static int BLOCK_SIZE = 256;
@@ -257,7 +259,11 @@ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength,
257259

258260
@Override
259261
public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) {
260-
throw new UnsupportedOperationException("Calculating the max compressed length is not supported yet.");
262+
inlength = inlength - inlength % BLOCK_SIZE;
263+
int pageCount = (inlength + pageSize - 1) / pageSize;
264+
int blockCount = inlength / BLOCK_SIZE;
265+
int blockSizeInInts = OVERHEAD_OF_EACH_BLOCK_IN_INTS + BLOCK_SIZE;
266+
return OVERHEAD_OF_EACH_PAGE_IN_INTS * pageCount + blockSizeInInts * blockCount + 24;
261267
}
262268

263269
private void loadMetaData(int[] in, int inexcept, int bytesize) {

src/test/java/me/lemire/integercompression/BasicTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import me.lemire.integercompression.differential.IntegratedVariableByte;
1818
import me.lemire.integercompression.differential.XorBinaryPacking;
1919
import me.lemire.integercompression.synth.ClusteredDataGenerator;
20+
import me.lemire.integercompression.vector.VectorFastPFOR;
2021

2122
import org.junit.Test;
2223

@@ -43,6 +44,7 @@ public class BasicTest {
4344
new Composition(new OptPFDS16(), new VariableByte()),
4445
new Composition(new FastPFOR128(), new VariableByte()),
4546
new Composition(new FastPFOR(), new VariableByte()),
47+
new Composition(new VectorFastPFOR(), new VariableByte()),
4648
new Simple9(),
4749
new Simple16(),
4850
new GroupSimple9(),

src/test/java/me/lemire/integercompression/SkippableBasicTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import me.lemire.integercompression.differential.IntegratedVariableByte;
1414
import me.lemire.integercompression.differential.SkippableIntegratedComposition;
1515
import me.lemire.integercompression.differential.SkippableIntegratedIntegerCODEC;
16+
import me.lemire.integercompression.vector.VectorFastPFOR;
1617
import org.junit.Test;
1718

1819
import static org.junit.Assert.assertArrayEquals;
@@ -37,6 +38,7 @@ public class SkippableBasicTest {
3738
new SkippableComposition(new OptPFDS16(), new VariableByte()),
3839
new SkippableComposition(new FastPFOR128(), new VariableByte()),
3940
new SkippableComposition(new FastPFOR(), new VariableByte()),
41+
new SkippableComposition(new VectorFastPFOR(), new VariableByte()),
4042
new Simple9(),
4143
new Simple16() };
4244

0 commit comments

Comments
 (0)