You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mi...@apache.org on 2010/11/29 22:01:19 UTC

svn commit: r1040290 - in /lucene/dev/trunk/lucene/src/test/org/apache/lucene: index/RandomIndexWriter.java search/BaseTestRangeFilter.java store/MockDirectoryWrapper.java

Author: mikemccand
Date: Mon Nov 29 21:01:19 2010
New Revision: 1040290

URL: http://svn.apache.org/viewvc?rev=1040290&view=rev
Log:
fix false random test failure; make private random instance for RandomIndexWriter and MockDirWrapper so tests are reproducible from seeds when using eg CMS

Modified:
    lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/RandomIndexWriter.java
    lucene/dev/trunk/lucene/src/test/org/apache/lucene/search/BaseTestRangeFilter.java
    lucene/dev/trunk/lucene/src/test/org/apache/lucene/store/MockDirectoryWrapper.java

Modified: lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/RandomIndexWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/RandomIndexWriter.java?rev=1040290&r1=1040289&r2=1040290&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/RandomIndexWriter.java (original)
+++ lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/RandomIndexWriter.java Mon Nov 29 21:01:19 2010
@@ -50,7 +50,10 @@ public class RandomIndexWriter implement
 
     public MockIndexWriter(Random r,Directory dir, IndexWriterConfig conf) throws IOException {
       super(dir, conf);
-      this.r = r;
+      // must make a private random since our methods are
+      // called from different threads; else test failures may
+      // not be reproducible from the original seed
+      this.r = new Random(r.nextInt());
     }
 
     @Override

Modified: lucene/dev/trunk/lucene/src/test/org/apache/lucene/search/BaseTestRangeFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/test/org/apache/lucene/search/BaseTestRangeFilter.java?rev=1040290&r1=1040289&r2=1040290&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/test/org/apache/lucene/search/BaseTestRangeFilter.java (original)
+++ lucene/dev/trunk/lucene/src/test/org/apache/lucene/search/BaseTestRangeFilter.java Mon Nov 29 21:01:19 2010
@@ -127,20 +127,43 @@ public class BaseTestRangeFilter extends
     doc.add(idField);
     doc.add(randField);
     doc.add(bodyField);
-    
-    for (int d = minId; d <= maxId; d++) {
-      idField.setValue(pad(d));
-      int r = index.allowNegativeRandomInts ? random.nextInt() : random
+
+    int minCount = 0;
+    int maxCount = 0;
+
+    while(true) {
+
+      for (int d = minId; d <= maxId; d++) {
+        idField.setValue(pad(d));
+        int r = index.allowNegativeRandomInts ? random.nextInt() : random
           .nextInt(Integer.MAX_VALUE);
-      if (index.maxR < r) {
-        index.maxR = r;
+        if (index.maxR < r) {
+          index.maxR = r;
+          maxCount = 1;
+        } else if (index.maxR == r) {
+          maxCount++;
+        }
+
+        if (r < index.minR) {
+          index.minR = r;
+          minCount = 1;
+        } else if (r == index.minR) {
+          minCount++;
+        }
+        randField.setValue(pad(r));
+        bodyField.setValue("body");
+        writer.addDocument(doc);
       }
-      if (r < index.minR) {
-        index.minR = r;
+
+      if (minCount == 1 && maxCount == 1) {
+        // our subclasses rely on only 1 doc having the min or
+        // max, so, we loop until we satisfy that.  it should be
+        // exceedingly rare (Yonik calculates 1 in ~429,000)
+        // times) that this loop requires more than one try:
+        break;
       }
-      randField.setValue(pad(r));
-      bodyField.setValue("body");
-      writer.addDocument(doc);
+
+      // try again
     }
     
     IndexReader ir = writer.getReader();

Modified: lucene/dev/trunk/lucene/src/test/org/apache/lucene/store/MockDirectoryWrapper.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/test/org/apache/lucene/store/MockDirectoryWrapper.java?rev=1040290&r1=1040289&r2=1040290&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/test/org/apache/lucene/store/MockDirectoryWrapper.java (original)
+++ lucene/dev/trunk/lucene/src/test/org/apache/lucene/store/MockDirectoryWrapper.java Mon Nov 29 21:01:19 2010
@@ -80,7 +80,10 @@ public class MockDirectoryWrapper extend
 
   public MockDirectoryWrapper(Random random, Directory delegate) {
     this.delegate = delegate;
-    this.randomState = random;
+    // must make a private random since our methods are
+    // called from different threads; else test failures may
+    // not be reproducible from the original seed
+    this.randomState = new Random(random.nextInt());
     init();
   }