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 16:19:56 UTC

svn commit: r1356242 - in /lucene/dev/branches/branch_4x/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 14:19:55 2012
New Revision: 1356242

URL: http://svn.apache.org/viewvc?rev=1356242&view=rev
Log:
PackedInts: backward-compatibility tests (merged from r1356228).

Modified:
    lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/util/packed/PackedInts.java
    lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/util/packed/TestPackedInts.java

Modified: lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/util/packed/PackedInts.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/util/packed/PackedInts.java?rev=1356242&r1=1356241&r2=1356242&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/util/packed/PackedInts.java (original)
+++ lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/util/packed/PackedInts.java Mon Jul  2 14:19:55 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/branches/branch_4x/lucene/core/src/test/org/apache/lucene/util/packed/TestPackedInts.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/util/packed/TestPackedInts.java?rev=1356242&r1=1356241&r2=1356242&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/util/packed/TestPackedInts.java (original)
+++ lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/util/packed/TestPackedInts.java Mon Jul  2 14:19:55 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);