You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by rm...@apache.org on 2011/08/26 04:21:59 UTC

svn commit: r1161963 - in /lucene/dev/trunk/lucene/src/test-framework/org/apache/lucene: index/RandomCodecProvider.java util/LuceneTestCase.java util/_TestUtil.java

Author: rmuir
Date: Fri Aug 26 02:21:59 2011
New Revision: 1161963

URL: http://svn.apache.org/viewvc?rev=1161963&view=rev
Log:
factor out RandomCodecProvider into a separate file

Added:
    lucene/dev/trunk/lucene/src/test-framework/org/apache/lucene/index/RandomCodecProvider.java   (with props)
Modified:
    lucene/dev/trunk/lucene/src/test-framework/org/apache/lucene/util/LuceneTestCase.java
    lucene/dev/trunk/lucene/src/test-framework/org/apache/lucene/util/_TestUtil.java

Added: lucene/dev/trunk/lucene/src/test-framework/org/apache/lucene/index/RandomCodecProvider.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/test-framework/org/apache/lucene/index/RandomCodecProvider.java?rev=1161963&view=auto
==============================================================================
--- lucene/dev/trunk/lucene/src/test-framework/org/apache/lucene/index/RandomCodecProvider.java (added)
+++ lucene/dev/trunk/lucene/src/test-framework/org/apache/lucene/index/RandomCodecProvider.java Fri Aug 26 02:21:59 2011
@@ -0,0 +1,105 @@
+package org.apache.lucene.index;
+
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Random;
+
+import org.apache.lucene.index.codecs.Codec;
+import org.apache.lucene.index.codecs.CodecProvider;
+import org.apache.lucene.index.codecs.memory.MemoryCodec;
+import org.apache.lucene.index.codecs.preflex.PreFlexCodec;
+import org.apache.lucene.index.codecs.pulsing.PulsingCodec;
+import org.apache.lucene.index.codecs.simpletext.SimpleTextCodec;
+import org.apache.lucene.index.codecs.standard.StandardCodec;
+import org.apache.lucene.util._TestUtil;
+
+/**
+ * CodecProvider that assigns per-field random codecs.
+ * <p>
+ * The same field/codec assignment will happen regardless of order,
+ * a hash is computed up front that determines the mapping.
+ * This means fields can be put into things like HashSets and added to
+ * documents in different orders and the test will still be deterministic
+ * and reproducable.
+ */
+public class RandomCodecProvider extends CodecProvider {
+  private List<Codec> knownCodecs = new ArrayList<Codec>();
+  private Map<String,Codec> previousMappings = new HashMap<String,Codec>();
+  private final int perFieldSeed;
+  
+  public RandomCodecProvider(Random random) {
+    this.perFieldSeed = random.nextInt();
+    // TODO: make it possible to specify min/max iterms per
+    // block via CL:
+    int minItemsPerBlock = _TestUtil.nextInt(random, 2, 100);
+    int maxItemsPerBlock = 2*(Math.max(2, minItemsPerBlock-1)) + random.nextInt(100);
+    register(_TestUtil.randomizeCodec(random, new StandardCodec(minItemsPerBlock, maxItemsPerBlock)));
+    register(_TestUtil.randomizeCodec(random, new PreFlexCodec()));
+    // TODO: make it possible to specify min/max iterms per
+    // block via CL:
+    minItemsPerBlock = _TestUtil.nextInt(random, 2, 100);
+    maxItemsPerBlock = 2*(Math.max(1, minItemsPerBlock-1)) + random.nextInt(100);
+    register(_TestUtil.randomizeCodec(random, new PulsingCodec( 1 + random.nextInt(20), minItemsPerBlock, maxItemsPerBlock)));
+    register(_TestUtil.randomizeCodec(random, new SimpleTextCodec()));
+    register(_TestUtil.randomizeCodec(random, new MemoryCodec()));
+    Collections.shuffle(knownCodecs, random);
+  }
+  
+  @Override
+  public synchronized void register(Codec codec) {
+    if (!codec.name.equals("PreFlex"))
+      knownCodecs.add(codec);
+    super.register(codec);
+  }
+  
+  @Override
+  public synchronized void unregister(Codec codec) {
+    knownCodecs.remove(codec);
+    super.unregister(codec);
+  }
+  
+  @Override
+  public synchronized String getFieldCodec(String name) {
+    Codec codec = previousMappings.get(name);
+    if (codec == null) {
+      codec = knownCodecs.get(Math.abs(perFieldSeed ^ name.hashCode()) % knownCodecs.size());
+      if (codec instanceof SimpleTextCodec && perFieldSeed % 5 != 0) {
+        // make simpletext rarer, choose again
+        codec = knownCodecs.get(Math.abs(perFieldSeed ^ name.toUpperCase(Locale.ENGLISH).hashCode()) % knownCodecs.size());
+      }
+      previousMappings.put(name, codec);
+    }
+    return codec.name;
+  }
+  
+  @Override
+  public synchronized boolean hasFieldCodec(String name) {
+    return true; // we have a codec for every field
+  }
+  
+  @Override
+  public synchronized String toString() {
+    return "RandomCodecProvider: " + previousMappings.toString();
+  }
+}

Modified: lucene/dev/trunk/lucene/src/test-framework/org/apache/lucene/util/LuceneTestCase.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/test-framework/org/apache/lucene/util/LuceneTestCase.java?rev=1161963&r1=1161962&r2=1161963&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/test-framework/org/apache/lucene/util/LuceneTestCase.java (original)
+++ lucene/dev/trunk/lucene/src/test-framework/org/apache/lucene/util/LuceneTestCase.java Fri Aug 26 02:21:59 2011
@@ -50,9 +50,6 @@ import org.apache.lucene.index.codecs.mo
 import org.apache.lucene.index.codecs.preflex.PreFlexCodec;
 import org.apache.lucene.index.codecs.preflexrw.PreFlexRWCodec;
 import org.apache.lucene.index.codecs.pulsing.PulsingCodec;
-import org.apache.lucene.index.codecs.simpletext.SimpleTextCodec;
-import org.apache.lucene.index.codecs.standard.StandardCodec;
-import org.apache.lucene.index.codecs.memory.MemoryCodec;
 import org.apache.lucene.search.BooleanQuery;
 import org.apache.lucene.search.FieldCache;
 import org.apache.lucene.search.FieldCache.CacheEntry;
@@ -242,7 +239,7 @@ public abstract class LuceneTestCase ext
     if (prior != null) {
       cp.unregister(prior);
     }
-    cp.register(randomizCodec(random, c));
+    cp.register(_TestUtil.randomizeCodec(random, c));
   }
 
   // returns current default codec
@@ -293,11 +290,6 @@ public abstract class LuceneTestCase ext
     return cp.lookup(codec);
   }
   
-  public static Codec randomizCodec(Random random, Codec codec) {
-    codec.setDocValuesUseCFS(random.nextBoolean());
-    return codec;
-  }
-
   // returns current PreFlex codec
   static void removeTestCodecs(Codec codec, CodecProvider cp) {
     if (codec.name.equals("PreFlex")) {
@@ -1558,67 +1550,6 @@ public abstract class LuceneTestCase ext
     }
   }
 
-  private static class RandomCodecProvider extends CodecProvider {
-    private List<Codec> knownCodecs = new ArrayList<Codec>();
-    private Map<String,Codec> previousMappings = new HashMap<String,Codec>();
-    private final int perFieldSeed;
-
-    RandomCodecProvider(Random random) {
-      this.perFieldSeed = random.nextInt();
-      // TODO: make it possible to specify min/max iterms per
-      // block via CL:
-      int minItemsPerBlock = _TestUtil.nextInt(random, 2, 100);
-      int maxItemsPerBlock = 2*(Math.max(2, minItemsPerBlock-1)) + random.nextInt(100);
-      register(randomizCodec(random, new StandardCodec(minItemsPerBlock, maxItemsPerBlock)));
-      register(randomizCodec(random, new PreFlexCodec()));
-      // TODO: make it possible to specify min/max iterms per
-      // block via CL:
-      minItemsPerBlock = _TestUtil.nextInt(random, 2, 100);
-      maxItemsPerBlock = 2*(Math.max(1, minItemsPerBlock-1)) + random.nextInt(100);
-      register(randomizCodec(random, new PulsingCodec( 1 + random.nextInt(20), minItemsPerBlock, maxItemsPerBlock)));
-      register(randomizCodec(random, new SimpleTextCodec()));
-      register(randomizCodec(random, new MemoryCodec()));
-      Collections.shuffle(knownCodecs, random);
-    }
-
-    @Override
-    public synchronized void register(Codec codec) {
-      if (!codec.name.equals("PreFlex"))
-        knownCodecs.add(codec);
-      super.register(codec);
-    }
-
-    @Override
-    public synchronized void unregister(Codec codec) {
-      knownCodecs.remove(codec);
-      super.unregister(codec);
-    }
-
-    @Override
-    public synchronized String getFieldCodec(String name) {
-      Codec codec = previousMappings.get(name);
-      if (codec == null) {
-        codec = knownCodecs.get(Math.abs(perFieldSeed ^ name.hashCode()) % knownCodecs.size());
-        if (codec instanceof SimpleTextCodec && perFieldSeed % 5 != 0) {
-          // make simpletext rarer, choose again
-          codec = knownCodecs.get(Math.abs(perFieldSeed ^ name.toUpperCase(Locale.ENGLISH).hashCode()) % knownCodecs.size());
-        }
-        previousMappings.put(name, codec);
-      }
-      return codec.name;
-    }
-
-    @Override
-    public synchronized boolean hasFieldCodec(String name) {
-      return true; // we have a codec for every field
-    }
-
-    @Override
-    public synchronized String toString() {
-      return "RandomCodecProvider: " + previousMappings.toString();
-    }
-  }
-
   @Ignore("just a hack")
   public final void alwaysIgnoredTestMethod() {}
 }

Modified: lucene/dev/trunk/lucene/src/test-framework/org/apache/lucene/util/_TestUtil.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/test-framework/org/apache/lucene/util/_TestUtil.java?rev=1161963&r1=1161962&r2=1161963&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/test-framework/org/apache/lucene/util/_TestUtil.java (original)
+++ lucene/dev/trunk/lucene/src/test-framework/org/apache/lucene/util/_TestUtil.java Fri Aug 26 02:21:59 2011
@@ -518,4 +518,9 @@ public class _TestUtil {
 
     return doc2;
   }
+  
+  public static Codec randomizeCodec(Random random, Codec codec) {
+    codec.setDocValuesUseCFS(random.nextBoolean());
+    return codec;
+  }
 }