You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by jp...@apache.org on 2012/07/02 15:55:47 UTC
svn commit: r1356228 - in /lucene/dev/trunk/lucene/core/src:
java/org/apache/lucene/util/packed/PackedInts.java
test/org/apache/lucene/util/packed/TestPackedInts.java
Author: jpountz
Date: Mon Jul 2 13:55:45 2012
New Revision: 1356228
URL: http://svn.apache.org/viewvc?rev=1356228&view=rev
Log:
PackedInts: backward-compatibility tests.
Modified:
lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/util/packed/PackedInts.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/util/packed/TestPackedInts.java
Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/util/packed/PackedInts.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/util/packed/PackedInts.java?rev=1356228&r1=1356227&r2=1356228&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/util/packed/PackedInts.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/util/packed/PackedInts.java Mon Jul 2 13:55:45 2012
@@ -62,9 +62,9 @@ public class PackedInts {
*/
public static final int DEFAULT_BUFFER_SIZE = 1024; // 1K
- private final static String CODEC_NAME = "PackedInts";
- private final static int VERSION_START = 0;
- private final static int VERSION_CURRENT = VERSION_START;
+ final static String CODEC_NAME = "PackedInts";
+ final static int VERSION_START = 0;
+ final static int VERSION_CURRENT = VERSION_START;
static final int PACKED = 0;
static final int PACKED_SINGLE_BLOCK = 1;
Modified: lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/util/packed/TestPackedInts.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/util/packed/TestPackedInts.java?rev=1356228&r1=1356227&r2=1356228&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/util/packed/TestPackedInts.java (original)
+++ lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/util/packed/TestPackedInts.java Mon Jul 2 13:55:45 2012
@@ -22,6 +22,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Random;
+import org.apache.lucene.codecs.CodecUtil;
import org.apache.lucene.store.*;
import org.apache.lucene.util.LuceneTestCase;
import org.apache.lucene.util._TestUtil;
@@ -53,23 +54,54 @@ public class TestPackedInts extends Luce
public void testPackedInts() throws IOException {
int num = atLeast(5);
for (int iter = 0; iter < num; iter++) {
- for(int nbits=1;nbits<63;nbits++) {
+ for(int nbits=1;nbits<=64;nbits++) {
final long maxValue = PackedInts.maxValue(nbits);
final int valueCount = 100+random().nextInt(500);
final Directory d = newDirectory();
IndexOutput out = d.createOutput("out.bin", newIOContext(random()));
PackedInts.Writer w = PackedInts.getWriter(
- out, valueCount, nbits, random().nextFloat()*PackedInts.FASTEST);
+ out, valueCount, nbits, random().nextFloat());
+ final long startFp = out.getFilePointer();
+ final int actualValueCount = random().nextBoolean() ? valueCount : _TestUtil.nextInt(random(), 0, valueCount);
final long[] values = new long[valueCount];
- for(int i=0;i<valueCount;i++) {
+ for(int i=0;i<actualValueCount;i++) {
values[i] = _TestUtil.nextLong(random(), 0, maxValue);
w.add(values[i]);
}
w.finish();
final long fp = out.getFilePointer();
out.close();
+
+ // packed writers should only write longs
+ assertEquals(0, (fp - startFp) % 8);
+ // ensure that finish() added the (valueCount-actualValueCount) missing values
+ final long bytes;
+ switch (w.getFormat()) {
+ case PackedInts.PACKED:
+ bytes = (long) Math.ceil((double) valueCount * w.bitsPerValue / 64) << 3;
+ break;
+ case PackedInts.PACKED_SINGLE_BLOCK:
+ final int valuesPerBlock = 64 / w.bitsPerValue;
+ bytes = (long) Math.ceil((double) valueCount / valuesPerBlock) << 3;
+ break;
+ default:
+ bytes = -1;
+ }
+ assertEquals(bytes, fp - startFp);
+
+ {// test header
+ IndexInput in = d.openInput("out.bin", newIOContext(random()));
+ // header = codec header | bitsPerValue | valueCount | format
+ CodecUtil.checkHeader(in, PackedInts.CODEC_NAME, PackedInts.VERSION_START, PackedInts.VERSION_CURRENT); // codec header
+ assertEquals(w.bitsPerValue, in.readVInt());
+ assertEquals(valueCount, in.readVInt());
+ assertEquals(w.getFormat(), in.readVInt());
+ assertEquals(startFp, in.getFilePointer());
+ in.close();
+ }
+
{// test reader
IndexInput in = d.openInput("out.bin", newIOContext(random()));
PackedInts.Reader r = PackedInts.getReader(in);