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;
+ }
}