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 2010/07/13 18:12:24 UTC

svn commit: r963780 [3/6] - in /lucene/dev/branches/branch_3x: ./ lucene/ lucene/backwards/src/ lucene/backwards/src/test/org/apache/lucene/analysis/ lucene/backwards/src/test/org/apache/lucene/document/ lucene/backwards/src/test/org/apache/lucene/inde...

Modified: lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestDateSort.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestDateSort.java?rev=963780&r1=963779&r2=963780&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestDateSort.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestDateSort.java Tue Jul 13 16:12:21 2010
@@ -25,8 +25,9 @@ import org.apache.lucene.analysis.Whites
 import org.apache.lucene.document.DateTools;
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.Field;
-import org.apache.lucene.index.IndexWriter;
+import org.apache.lucene.index.IndexReader;
 import org.apache.lucene.index.IndexWriterConfig;
+import org.apache.lucene.index.RandomIndexWriter;
 import org.apache.lucene.queryParser.QueryParser;
 import org.apache.lucene.search.IndexSearcher;
 import org.apache.lucene.search.Query;
@@ -44,14 +45,16 @@ public class TestDateSort extends Lucene
   private static final String TEXT_FIELD = "text";
   private static final String DATE_TIME_FIELD = "dateTime";
 
-  private static Directory directory;
+  private Directory directory;
+  private IndexReader reader;
 
   @Override
   protected void setUp() throws Exception {
     super.setUp();
     // Create an index writer.
     directory = new RAMDirectory();
-    IndexWriter writer = new IndexWriter(directory, new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)));
+    RandomIndexWriter writer = new RandomIndexWriter(newRandom(), directory, 
+        new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)));
 
     // oldest doc:
     // Add the first document.  text = "Document 1"  dateTime = Oct 10 03:25:22 EDT 2007
@@ -66,12 +69,19 @@ public class TestDateSort extends Lucene
     // Add the fifth document.  text = "Document 5"  dateTime = Oct 12 13:25:43 EDT 2007
     writer.addDocument(createDocument("Document 5", 1192209943000L));
 
-    writer.optimize();
+    reader = writer.getReader();
     writer.close();
   }
 
+  @Override
+  protected void tearDown() throws Exception {
+    reader.close();
+    directory.close();
+    super.tearDown();
+  }
+
   public void testReverseDateSort() throws Exception {
-    IndexSearcher searcher = new IndexSearcher(directory, true);
+    IndexSearcher searcher = new IndexSearcher(reader);
 
     Sort sort = new Sort(new SortField(DATE_TIME_FIELD, SortField.STRING, true));
 

Modified: lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestDisjunctionMaxQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestDisjunctionMaxQuery.java?rev=963780&r1=963779&r2=963780&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestDisjunctionMaxQuery.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestDisjunctionMaxQuery.java Tue Jul 13 16:12:21 2010
@@ -1,6 +1,5 @@
 package org.apache.lucene.search;
 
-
 /**
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -23,8 +22,8 @@ import org.apache.lucene.analysis.Whites
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.Field;
 import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.IndexWriter;
 import org.apache.lucene.index.IndexWriterConfig;
+import org.apache.lucene.index.RandomIndexWriter;
 import org.apache.lucene.index.Term;
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.store.RAMDirectory;
@@ -34,456 +33,459 @@ import java.io.IOException;
 
 /**
  * Test of the DisjunctionMaxQuery.
- *
+ * 
  */
-public class TestDisjunctionMaxQuery extends LuceneTestCase{
-
-    /** threshold for comparing floats */
-    public static final float SCORE_COMP_THRESH = 0.0000f;
-
-    /**
-     * Similarity to eliminate tf, idf and lengthNorm effects to
-     * isolate test case.
-     *
-     * <p>
-     * same as TestRankingSimilarity in TestRanking.zip from
-     * http://issues.apache.org/jira/browse/LUCENE-323
-     * </p>
-     */
-    private static class TestSimilarity extends DefaultSimilarity {
-
-        public TestSimilarity() {
-        }
-        @Override
-        public float tf(float freq) {
-            if (freq > 0.0f) return 1.0f;
-            else return 0.0f;
-        }
-        @Override
-        public float lengthNorm(String fieldName, int numTerms) {
-            return 1.0f;
-        }
-        @Override
-        public float idf(int docFreq, int numDocs) {
-            return 1.0f;
-        }
+public class TestDisjunctionMaxQuery extends LuceneTestCase {
+  
+  /** threshold for comparing floats */
+  public static final float SCORE_COMP_THRESH = 0.0000f;
+  
+  /**
+   * Similarity to eliminate tf, idf and lengthNorm effects to isolate test
+   * case.
+   * 
+   * <p>
+   * same as TestRankingSimilarity in TestRanking.zip from
+   * http://issues.apache.org/jira/browse/LUCENE-323
+   * </p>
+   */
+  private static class TestSimilarity extends DefaultSimilarity {
+    
+    public TestSimilarity() {}
+    
+    @Override
+    public float tf(float freq) {
+      if (freq > 0.0f) return 1.0f;
+      else return 0.0f;
     }
-
-    public Similarity sim = new TestSimilarity();
-    public Directory index;
-    public IndexReader r;
-    public IndexSearcher s;
-
+    
     @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-
-        index = new RAMDirectory();
-        IndexWriter writer = new IndexWriter(index, new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)).setSimilarity(sim));
-
-        // hed is the most important field, dek is secondary
-
-        // d1 is an "ok" match for:  albino elephant
-        {
-            Document d1 = new Document();
-            d1.add(new Field("id", "d1", Field.Store.YES, Field.Index.NOT_ANALYZED));//Field.Keyword("id", "d1"));
-            d1.add(new Field("hed", "elephant", Field.Store.YES, Field.Index.ANALYZED));//Field.Text("hed", "elephant"));
-            d1.add(new Field("dek", "elephant", Field.Store.YES, Field.Index.ANALYZED));//Field.Text("dek", "elephant"));
-            writer.addDocument(d1);
-        }
-
-        // d2 is a "good" match for:  albino elephant
-        {
-            Document d2 = new Document();
-            d2.add(new Field("id", "d2", Field.Store.YES, Field.Index.NOT_ANALYZED));//Field.Keyword("id", "d2"));
-            d2.add(new Field("hed", "elephant", Field.Store.YES, Field.Index.ANALYZED));//Field.Text("hed", "elephant"));
-            d2.add(new Field("dek", "albino", Field.Store.YES, Field.Index.ANALYZED));//Field.Text("dek", "albino"));
-            d2.add(new Field("dek", "elephant", Field.Store.YES, Field.Index.ANALYZED));//Field.Text("dek", "elephant"));
-            writer.addDocument(d2);
-        }
-
-        // d3 is a "better" match for:  albino elephant
-        {
-            Document d3 = new Document();
-            d3.add(new Field("id", "d3", Field.Store.YES, Field.Index.NOT_ANALYZED));//Field.Keyword("id", "d3"));
-            d3.add(new Field("hed", "albino", Field.Store.YES, Field.Index.ANALYZED));//Field.Text("hed", "albino"));
-            d3.add(new Field("hed", "elephant", Field.Store.YES, Field.Index.ANALYZED));//Field.Text("hed", "elephant"));
-            writer.addDocument(d3);
-        }
-
-        // d4 is the "best" match for:  albino elephant
-        {
-            Document d4 = new Document();
-            d4.add(new Field("id", "d4", Field.Store.YES, Field.Index.NOT_ANALYZED));//Field.Keyword("id", "d4"));
-            d4.add(new Field("hed", "albino", Field.Store.YES, Field.Index.ANALYZED));//Field.Text("hed", "albino"));
-            d4.add(new Field("hed", "elephant", Field.Store.YES, Field.Index.ANALYZED));//Field.Text("hed", "elephant"));
-            d4.add(new Field("dek", "albino", Field.Store.YES, Field.Index.ANALYZED));//Field.Text("dek", "albino"));
-            writer.addDocument(d4);
-        }
-
-        writer.close();
-
-        r = IndexReader.open(index, true);
-        s = new IndexSearcher(r);
-        s.setSimilarity(sim);
+    public float lengthNorm(String fieldName, int numTerms) {
+      return 1.0f;
     }
-
+    
+    @Override
+    public float idf(int docFreq, int numDocs) {
+      return 1.0f;
+    }
+  }
+  
+  public Similarity sim = new TestSimilarity();
+  public Directory index;
+  public IndexReader r;
+  public IndexSearcher s;
+  
+  @Override
+  protected void setUp() throws Exception {
+    super.setUp();
+    
+    index = new RAMDirectory();
+    RandomIndexWriter writer = new RandomIndexWriter(newRandom(), index,
+        new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer())
+            .setSimilarity(sim));
+    
+    // hed is the most important field, dek is secondary
+    
+    // d1 is an "ok" match for: albino elephant
+    {
+      Document d1 = new Document();
+      d1.add(new Field("id", "d1", Field.Store.YES, Field.Index.NOT_ANALYZED));// Field.Keyword("id",
+                                                                               // "d1"));
+      d1
+          .add(new Field("hed", "elephant", Field.Store.YES,
+              Field.Index.ANALYZED));// Field.Text("hed", "elephant"));
+      d1
+          .add(new Field("dek", "elephant", Field.Store.YES,
+              Field.Index.ANALYZED));// Field.Text("dek", "elephant"));
+      writer.addDocument(d1);
+    }
+    
+    // d2 is a "good" match for: albino elephant
+    {
+      Document d2 = new Document();
+      d2.add(new Field("id", "d2", Field.Store.YES, Field.Index.NOT_ANALYZED));// Field.Keyword("id",
+                                                                               // "d2"));
+      d2
+          .add(new Field("hed", "elephant", Field.Store.YES,
+              Field.Index.ANALYZED));// Field.Text("hed", "elephant"));
+      d2.add(new Field("dek", "albino", Field.Store.YES, Field.Index.ANALYZED));// Field.Text("dek",
+                                                                                // "albino"));
+      d2
+          .add(new Field("dek", "elephant", Field.Store.YES,
+              Field.Index.ANALYZED));// Field.Text("dek", "elephant"));
+      writer.addDocument(d2);
+    }
+    
+    // d3 is a "better" match for: albino elephant
+    {
+      Document d3 = new Document();
+      d3.add(new Field("id", "d3", Field.Store.YES, Field.Index.NOT_ANALYZED));// Field.Keyword("id",
+                                                                               // "d3"));
+      d3.add(new Field("hed", "albino", Field.Store.YES, Field.Index.ANALYZED));// Field.Text("hed",
+                                                                                // "albino"));
+      d3
+          .add(new Field("hed", "elephant", Field.Store.YES,
+              Field.Index.ANALYZED));// Field.Text("hed", "elephant"));
+      writer.addDocument(d3);
+    }
+    
+    // d4 is the "best" match for: albino elephant
+    {
+      Document d4 = new Document();
+      d4.add(new Field("id", "d4", Field.Store.YES, Field.Index.NOT_ANALYZED));// Field.Keyword("id",
+                                                                               // "d4"));
+      d4.add(new Field("hed", "albino", Field.Store.YES, Field.Index.ANALYZED));// Field.Text("hed",
+                                                                                // "albino"));
+      d4
+          .add(new Field("hed", "elephant", Field.Store.YES,
+              Field.Index.ANALYZED));// Field.Text("hed", "elephant"));
+      d4.add(new Field("dek", "albino", Field.Store.YES, Field.Index.ANALYZED));// Field.Text("dek",
+                                                                                // "albino"));
+      writer.addDocument(d4);
+    }
+    
+    r = writer.getReader();
+    writer.close();
+    s = new IndexSearcher(r);
+    s.setSimilarity(sim);
+  }
+  
+  @Override
+  protected void tearDown() throws Exception {
+    s.close();
+    r.close();
+    index.close();
+    super.tearDown();
+  }
+  
   public void testSkipToFirsttimeMiss() throws IOException {
     final DisjunctionMaxQuery dq = new DisjunctionMaxQuery(0.0f);
-    dq.add(tq("id","d1"));
-    dq.add(tq("dek","DOES_NOT_EXIST"));
-
-    QueryUtils.check(dq,s);
-
+    dq.add(tq("id", "d1"));
+    dq.add(tq("dek", "DOES_NOT_EXIST"));
+    
+    QueryUtils.check(dq, s);
+    
     final Weight dw = dq.weight(s);
     final Scorer ds = dw.scorer(r, true, false);
     final boolean skipOk = ds.advance(3) != DocIdSetIterator.NO_MORE_DOCS;
     if (skipOk) {
-      fail("firsttime skipTo found a match? ... " + r.document(ds.docID()).get("id"));
+      fail("firsttime skipTo found a match? ... "
+          + r.document(ds.docID()).get("id"));
     }
   }
-
+  
   public void testSkipToFirsttimeHit() throws IOException {
     final DisjunctionMaxQuery dq = new DisjunctionMaxQuery(0.0f);
-    dq.add(tq("dek","albino"));
-    dq.add(tq("dek","DOES_NOT_EXIST"));
-
-    QueryUtils.check(dq,s);
-
+    dq.add(tq("dek", "albino"));
+    dq.add(tq("dek", "DOES_NOT_EXIST"));
+    
+    QueryUtils.check(dq, s);
+    
     final Weight dw = dq.weight(s);
     final Scorer ds = dw.scorer(r, true, false);
-    assertTrue("firsttime skipTo found no match", ds.advance(3) != DocIdSetIterator.NO_MORE_DOCS);
+    assertTrue("firsttime skipTo found no match",
+        ds.advance(3) != DocIdSetIterator.NO_MORE_DOCS);
     assertEquals("found wrong docid", "d4", r.document(ds.docID()).get("id"));
   }
-
+  
   public void testSimpleEqualScores1() throws Exception {
-
+    
     DisjunctionMaxQuery q = new DisjunctionMaxQuery(0.0f);
-    q.add(tq("hed","albino"));
-    q.add(tq("hed","elephant"));
-    QueryUtils.check(q,s);
-
+    q.add(tq("hed", "albino"));
+    q.add(tq("hed", "elephant"));
+    QueryUtils.check(q, s);
+    
     ScoreDoc[] h = s.search(q, null, 1000).scoreDocs;
-
+    
     try {
-      assertEquals("all docs should match " + q.toString(),
-          4, h.length);
-
+      assertEquals("all docs should match " + q.toString(), 4, h.length);
+      
       float score = h[0].score;
       for (int i = 1; i < h.length; i++) {
-        assertEquals("score #" + i + " is not the same",
-            score, h[i].score, SCORE_COMP_THRESH);
+        assertEquals("score #" + i + " is not the same", score, h[i].score,
+            SCORE_COMP_THRESH);
       }
     } catch (Error e) {
-      printHits("testSimpleEqualScores1",h,s);
+      printHits("testSimpleEqualScores1", h, s);
       throw e;
     }
-
+    
   }
-
-    public void testSimpleEqualScores2() throws Exception {
-
-        DisjunctionMaxQuery q = new DisjunctionMaxQuery(0.0f);
-        q.add(tq("dek","albino"));
-        q.add(tq("dek","elephant"));
-        QueryUtils.check(q,s);
-
-
-        ScoreDoc[] h = s.search(q, null, 1000).scoreDocs;
-
-        try {
-            assertEquals("3 docs should match " + q.toString(),
-                         3, h.length);
-            float score = h[0].score;
-            for (int i = 1; i < h.length; i++) {
-                assertEquals("score #" + i + " is not the same",
-                             score, h[i].score, SCORE_COMP_THRESH);
-            }
-        } catch (Error e) {
-            printHits("testSimpleEqualScores2",h, s);
-            throw e;
-        }
-
+  
+  public void testSimpleEqualScores2() throws Exception {
+    
+    DisjunctionMaxQuery q = new DisjunctionMaxQuery(0.0f);
+    q.add(tq("dek", "albino"));
+    q.add(tq("dek", "elephant"));
+    QueryUtils.check(q, s);
+    
+    ScoreDoc[] h = s.search(q, null, 1000).scoreDocs;
+    
+    try {
+      assertEquals("3 docs should match " + q.toString(), 3, h.length);
+      float score = h[0].score;
+      for (int i = 1; i < h.length; i++) {
+        assertEquals("score #" + i + " is not the same", score, h[i].score,
+            SCORE_COMP_THRESH);
+      }
+    } catch (Error e) {
+      printHits("testSimpleEqualScores2", h, s);
+      throw e;
     }
-
-    public void testSimpleEqualScores3() throws Exception {
-
-        DisjunctionMaxQuery q = new DisjunctionMaxQuery(0.0f);
-        q.add(tq("hed","albino"));
-        q.add(tq("hed","elephant"));
-        q.add(tq("dek","albino"));
-        q.add(tq("dek","elephant"));
-        QueryUtils.check(q,s);
-
-
-        ScoreDoc[] h = s.search(q, null, 1000).scoreDocs;
-
-        try {
-            assertEquals("all docs should match " + q.toString(),
-                         4, h.length);
-            float score = h[0].score;
-            for (int i = 1; i < h.length; i++) {
-                assertEquals("score #" + i + " is not the same",
-                             score, h[i].score, SCORE_COMP_THRESH);
-            }
-        } catch (Error e) {
-            printHits("testSimpleEqualScores3",h, s);
-            throw e;
-        }
-
+    
+  }
+  
+  public void testSimpleEqualScores3() throws Exception {
+    
+    DisjunctionMaxQuery q = new DisjunctionMaxQuery(0.0f);
+    q.add(tq("hed", "albino"));
+    q.add(tq("hed", "elephant"));
+    q.add(tq("dek", "albino"));
+    q.add(tq("dek", "elephant"));
+    QueryUtils.check(q, s);
+    
+    ScoreDoc[] h = s.search(q, null, 1000).scoreDocs;
+    
+    try {
+      assertEquals("all docs should match " + q.toString(), 4, h.length);
+      float score = h[0].score;
+      for (int i = 1; i < h.length; i++) {
+        assertEquals("score #" + i + " is not the same", score, h[i].score,
+            SCORE_COMP_THRESH);
+      }
+    } catch (Error e) {
+      printHits("testSimpleEqualScores3", h, s);
+      throw e;
     }
-
-    public void testSimpleTiebreaker() throws Exception {
-
-        DisjunctionMaxQuery q = new DisjunctionMaxQuery(0.01f);
-        q.add(tq("dek","albino"));
-        q.add(tq("dek","elephant"));
-        QueryUtils.check(q,s);
-
-
-        ScoreDoc[] h = s.search(q, null, 1000).scoreDocs;
-
-        try {
-            assertEquals("3 docs should match " + q.toString(),
-                         3, h.length);
-            assertEquals("wrong first",  "d2", s.doc(h[0].doc).get("id"));
-            float score0 = h[0].score;
-            float score1 = h[1].score;
-            float score2 = h[2].score;
-            assertTrue("d2 does not have better score then others: " +
-                       score0 + " >? " + score1,
-                       score0 > score1);
-            assertEquals("d4 and d1 don't have equal scores",
-                         score1, score2, SCORE_COMP_THRESH);
-        } catch (Error e) {
-            printHits("testSimpleTiebreaker",h, s);
-            throw e;
-        }
+    
+  }
+  
+  public void testSimpleTiebreaker() throws Exception {
+    
+    DisjunctionMaxQuery q = new DisjunctionMaxQuery(0.01f);
+    q.add(tq("dek", "albino"));
+    q.add(tq("dek", "elephant"));
+    QueryUtils.check(q, s);
+    
+    ScoreDoc[] h = s.search(q, null, 1000).scoreDocs;
+    
+    try {
+      assertEquals("3 docs should match " + q.toString(), 3, h.length);
+      assertEquals("wrong first", "d2", s.doc(h[0].doc).get("id"));
+      float score0 = h[0].score;
+      float score1 = h[1].score;
+      float score2 = h[2].score;
+      assertTrue("d2 does not have better score then others: " + score0
+          + " >? " + score1, score0 > score1);
+      assertEquals("d4 and d1 don't have equal scores", score1, score2,
+          SCORE_COMP_THRESH);
+    } catch (Error e) {
+      printHits("testSimpleTiebreaker", h, s);
+      throw e;
     }
-
-    public void testBooleanRequiredEqualScores() throws Exception {
-
-        BooleanQuery q = new BooleanQuery();
-        {
-            DisjunctionMaxQuery q1 = new DisjunctionMaxQuery(0.0f);
-            q1.add(tq("hed","albino"));
-            q1.add(tq("dek","albino"));
-            q.add(q1,BooleanClause.Occur.MUST);//true,false);
-            QueryUtils.check(q1,s);
-
-        }
-        {
-            DisjunctionMaxQuery q2 = new DisjunctionMaxQuery(0.0f);
-            q2.add(tq("hed","elephant"));
-            q2.add(tq("dek","elephant"));
-            q.add(q2, BooleanClause.Occur.MUST);//true,false);
-           QueryUtils.check(q2,s);
-        }
-
-        QueryUtils.check(q,s);
-
-        ScoreDoc[] h = s.search(q, null, 1000).scoreDocs;
-
-        try {
-            assertEquals("3 docs should match " + q.toString(),
-                         3, h.length);
-            float score = h[0].score;
-            for (int i = 1; i < h.length; i++) {
-                assertEquals("score #" + i + " is not the same",
-                             score, h[i].score, SCORE_COMP_THRESH);
-            }
-        } catch (Error e) {
-            printHits("testBooleanRequiredEqualScores1",h, s);
-            throw e;
-        }
+  }
+  
+  public void testBooleanRequiredEqualScores() throws Exception {
+    
+    BooleanQuery q = new BooleanQuery();
+    {
+      DisjunctionMaxQuery q1 = new DisjunctionMaxQuery(0.0f);
+      q1.add(tq("hed", "albino"));
+      q1.add(tq("dek", "albino"));
+      q.add(q1, BooleanClause.Occur.MUST);// true,false);
+      QueryUtils.check(q1, s);
+      
+    }
+    {
+      DisjunctionMaxQuery q2 = new DisjunctionMaxQuery(0.0f);
+      q2.add(tq("hed", "elephant"));
+      q2.add(tq("dek", "elephant"));
+      q.add(q2, BooleanClause.Occur.MUST);// true,false);
+      QueryUtils.check(q2, s);
+    }
+    
+    QueryUtils.check(q, s);
+    
+    ScoreDoc[] h = s.search(q, null, 1000).scoreDocs;
+    
+    try {
+      assertEquals("3 docs should match " + q.toString(), 3, h.length);
+      float score = h[0].score;
+      for (int i = 1; i < h.length; i++) {
+        assertEquals("score #" + i + " is not the same", score, h[i].score,
+            SCORE_COMP_THRESH);
+      }
+    } catch (Error e) {
+      printHits("testBooleanRequiredEqualScores1", h, s);
+      throw e;
     }
-
-
-    public void testBooleanOptionalNoTiebreaker() throws Exception {
-
-        BooleanQuery q = new BooleanQuery();
-        {
-            DisjunctionMaxQuery q1 = new DisjunctionMaxQuery(0.0f);
-            q1.add(tq("hed","albino"));
-            q1.add(tq("dek","albino"));
-            q.add(q1, BooleanClause.Occur.SHOULD);//false,false);
-        }
-        {
-            DisjunctionMaxQuery q2 = new DisjunctionMaxQuery(0.0f);
-            q2.add(tq("hed","elephant"));
-            q2.add(tq("dek","elephant"));
-            q.add(q2, BooleanClause.Occur.SHOULD);//false,false);
-        }
-        QueryUtils.check(q,s);
-
-
-        ScoreDoc[] h = s.search(q, null, 1000).scoreDocs;
-
-        try {
-            assertEquals("4 docs should match " + q.toString(),
-                         4, h.length);
-            float score = h[0].score;
-            for (int i = 1; i < h.length-1; i++) { /* note: -1 */
-                assertEquals("score #" + i + " is not the same",
-                             score, h[i].score, SCORE_COMP_THRESH);
-            }
-            assertEquals("wrong last", "d1", s.doc(h[h.length-1].doc).get("id"));
-            float score1 = h[h.length-1].score;
-            assertTrue("d1 does not have worse score then others: " +
-                       score + " >? " + score1,
-                       score > score1);
-        } catch (Error e) {
-            printHits("testBooleanOptionalNoTiebreaker",h, s);
-            throw e;
-        }
+  }
+  
+  public void testBooleanOptionalNoTiebreaker() throws Exception {
+    
+    BooleanQuery q = new BooleanQuery();
+    {
+      DisjunctionMaxQuery q1 = new DisjunctionMaxQuery(0.0f);
+      q1.add(tq("hed", "albino"));
+      q1.add(tq("dek", "albino"));
+      q.add(q1, BooleanClause.Occur.SHOULD);// false,false);
+    }
+    {
+      DisjunctionMaxQuery q2 = new DisjunctionMaxQuery(0.0f);
+      q2.add(tq("hed", "elephant"));
+      q2.add(tq("dek", "elephant"));
+      q.add(q2, BooleanClause.Occur.SHOULD);// false,false);
     }
-
-
-    public void testBooleanOptionalWithTiebreaker() throws Exception {
-
-        BooleanQuery q = new BooleanQuery();
-        {
-            DisjunctionMaxQuery q1 = new DisjunctionMaxQuery(0.01f);
-            q1.add(tq("hed","albino"));
-            q1.add(tq("dek","albino"));
-            q.add(q1, BooleanClause.Occur.SHOULD);//false,false);
-        }
-        {
-            DisjunctionMaxQuery q2 = new DisjunctionMaxQuery(0.01f);
-            q2.add(tq("hed","elephant"));
-            q2.add(tq("dek","elephant"));
-            q.add(q2, BooleanClause.Occur.SHOULD);//false,false);
-        }
-        QueryUtils.check(q,s);
-
-
-        ScoreDoc[] h = s.search(q, null, 1000).scoreDocs;
-
-        try {
-
-            assertEquals("4 docs should match " + q.toString(),
-                         4, h.length);
-
-            float score0 = h[0].score;
-            float score1 = h[1].score;
-            float score2 = h[2].score;
-            float score3 = h[3].score;
-
-            String doc0 = s.doc(h[0].doc).get("id");
-            String doc1 = s.doc(h[1].doc).get("id");
-            String doc2 = s.doc(h[2].doc).get("id");
-            String doc3 = s.doc(h[3].doc).get("id");            
-
-            assertTrue("doc0 should be d2 or d4: " + doc0,
-                       doc0.equals("d2") || doc0.equals("d4"));
-            assertTrue("doc1 should be d2 or d4: " + doc0,
-                       doc1.equals("d2") || doc1.equals("d4"));
-            assertEquals("score0 and score1 should match",
-                         score0, score1, SCORE_COMP_THRESH);
-            assertEquals("wrong third", "d3", doc2);
-            assertTrue("d3 does not have worse score then d2 and d4: " +
-                       score1 + " >? " + score2,
-                       score1 > score2);
-
-            assertEquals("wrong fourth", "d1", doc3);
-            assertTrue("d1 does not have worse score then d3: " +
-                       score2 + " >? " + score3,
-                       score2 > score3);
-
-        } catch (Error e) {
-            printHits("testBooleanOptionalWithTiebreaker",h, s);
-            throw e;
-        }
-
+    QueryUtils.check(q, s);
+    
+    ScoreDoc[] h = s.search(q, null, 1000).scoreDocs;
+    
+    try {
+      assertEquals("4 docs should match " + q.toString(), 4, h.length);
+      float score = h[0].score;
+      for (int i = 1; i < h.length - 1; i++) { /* note: -1 */
+        assertEquals("score #" + i + " is not the same", score, h[i].score,
+            SCORE_COMP_THRESH);
+      }
+      assertEquals("wrong last", "d1", s.doc(h[h.length - 1].doc).get("id"));
+      float score1 = h[h.length - 1].score;
+      assertTrue("d1 does not have worse score then others: " + score + " >? "
+          + score1, score > score1);
+    } catch (Error e) {
+      printHits("testBooleanOptionalNoTiebreaker", h, s);
+      throw e;
     }
-
-
-    public void testBooleanOptionalWithTiebreakerAndBoost() throws Exception {
-
-        BooleanQuery q = new BooleanQuery();
-        {
-            DisjunctionMaxQuery q1 = new DisjunctionMaxQuery(0.01f);
-            q1.add(tq("hed","albino", 1.5f));
-            q1.add(tq("dek","albino"));
-            q.add(q1, BooleanClause.Occur.SHOULD);//false,false);
-        }
-        {
-            DisjunctionMaxQuery q2 = new DisjunctionMaxQuery(0.01f);
-            q2.add(tq("hed","elephant", 1.5f));
-            q2.add(tq("dek","elephant"));
-            q.add(q2, BooleanClause.Occur.SHOULD);//false,false);
-        }
-        QueryUtils.check(q,s);
-
-
-        ScoreDoc[] h = s.search(q, null, 1000).scoreDocs;
-
-        try {
-
-            assertEquals("4 docs should match " + q.toString(),
-                         4, h.length);
-
-            float score0 = h[0].score;
-            float score1 = h[1].score;
-            float score2 = h[2].score;
-            float score3 = h[3].score;
-
-            String doc0 = s.doc(h[0].doc).get("id");
-            String doc1 = s.doc(h[1].doc).get("id");
-            String doc2 = s.doc(h[2].doc).get("id");
-            String doc3 = s.doc(h[3].doc).get("id");            
-
-            assertEquals("doc0 should be d4: ", "d4", doc0);
-            assertEquals("doc1 should be d3: ", "d3", doc1);
-            assertEquals("doc2 should be d2: ", "d2", doc2);
-            assertEquals("doc3 should be d1: ", "d1", doc3);
-
-            assertTrue("d4 does not have a better score then d3: " +
-                       score0 + " >? " + score1,
-                       score0 > score1);
-            assertTrue("d3 does not have a better score then d2: " +
-                       score1 + " >? " + score2,
-                       score1 > score2);
-            assertTrue("d3 does not have a better score then d1: " +
-                       score2 + " >? " + score3,
-                       score2 > score3);
-
-        } catch (Error e) {
-            printHits("testBooleanOptionalWithTiebreakerAndBoost",h, s);
-            throw e;
-        }
+  }
+  
+  public void testBooleanOptionalWithTiebreaker() throws Exception {
+    
+    BooleanQuery q = new BooleanQuery();
+    {
+      DisjunctionMaxQuery q1 = new DisjunctionMaxQuery(0.01f);
+      q1.add(tq("hed", "albino"));
+      q1.add(tq("dek", "albino"));
+      q.add(q1, BooleanClause.Occur.SHOULD);// false,false);
+    }
+    {
+      DisjunctionMaxQuery q2 = new DisjunctionMaxQuery(0.01f);
+      q2.add(tq("hed", "elephant"));
+      q2.add(tq("dek", "elephant"));
+      q.add(q2, BooleanClause.Occur.SHOULD);// false,false);
     }
-
-
-
-
-
-
-
-    /** macro */
-    protected Query tq(String f, String t) {
-        return new TermQuery(new Term(f, t));
-    }
-    /** macro */
-    protected Query tq(String f, String t, float b) {
-        Query q = tq(f,t);
-        q.setBoost(b);
-        return q;
+    QueryUtils.check(q, s);
+    
+    ScoreDoc[] h = s.search(q, null, 1000).scoreDocs;
+    
+    try {
+      
+      assertEquals("4 docs should match " + q.toString(), 4, h.length);
+      
+      float score0 = h[0].score;
+      float score1 = h[1].score;
+      float score2 = h[2].score;
+      float score3 = h[3].score;
+      
+      String doc0 = s.doc(h[0].doc).get("id");
+      String doc1 = s.doc(h[1].doc).get("id");
+      String doc2 = s.doc(h[2].doc).get("id");
+      String doc3 = s.doc(h[3].doc).get("id");
+      
+      assertTrue("doc0 should be d2 or d4: " + doc0, doc0.equals("d2")
+          || doc0.equals("d4"));
+      assertTrue("doc1 should be d2 or d4: " + doc0, doc1.equals("d2")
+          || doc1.equals("d4"));
+      assertEquals("score0 and score1 should match", score0, score1,
+          SCORE_COMP_THRESH);
+      assertEquals("wrong third", "d3", doc2);
+      assertTrue("d3 does not have worse score then d2 and d4: " + score1
+          + " >? " + score2, score1 > score2);
+      
+      assertEquals("wrong fourth", "d1", doc3);
+      assertTrue("d1 does not have worse score then d3: " + score2 + " >? "
+          + score3, score2 > score3);
+      
+    } catch (Error e) {
+      printHits("testBooleanOptionalWithTiebreaker", h, s);
+      throw e;
     }
-
-
-    protected void printHits(String test, ScoreDoc[] h, Searcher searcher) throws Exception {
-
-        System.err.println("------- " + test + " -------");
-
-        DecimalFormat f = new DecimalFormat("0.000000000");
-
-        for (int i = 0; i < h.length; i++) {
-            Document d = searcher.doc(h[i].doc);
-            float score = h[i].score;
-            System.err.println("#" + i + ": " + f.format(score) + " - " +
-                               d.get("id"));
-        }
+    
+  }
+  
+  public void testBooleanOptionalWithTiebreakerAndBoost() throws Exception {
+    
+    BooleanQuery q = new BooleanQuery();
+    {
+      DisjunctionMaxQuery q1 = new DisjunctionMaxQuery(0.01f);
+      q1.add(tq("hed", "albino", 1.5f));
+      q1.add(tq("dek", "albino"));
+      q.add(q1, BooleanClause.Occur.SHOULD);// false,false);
+    }
+    {
+      DisjunctionMaxQuery q2 = new DisjunctionMaxQuery(0.01f);
+      q2.add(tq("hed", "elephant", 1.5f));
+      q2.add(tq("dek", "elephant"));
+      q.add(q2, BooleanClause.Occur.SHOULD);// false,false);
     }
-
+    QueryUtils.check(q, s);
+    
+    ScoreDoc[] h = s.search(q, null, 1000).scoreDocs;
+    
+    try {
+      
+      assertEquals("4 docs should match " + q.toString(), 4, h.length);
+      
+      float score0 = h[0].score;
+      float score1 = h[1].score;
+      float score2 = h[2].score;
+      float score3 = h[3].score;
+      
+      String doc0 = s.doc(h[0].doc).get("id");
+      String doc1 = s.doc(h[1].doc).get("id");
+      String doc2 = s.doc(h[2].doc).get("id");
+      String doc3 = s.doc(h[3].doc).get("id");
+      
+      assertEquals("doc0 should be d4: ", "d4", doc0);
+      assertEquals("doc1 should be d3: ", "d3", doc1);
+      assertEquals("doc2 should be d2: ", "d2", doc2);
+      assertEquals("doc3 should be d1: ", "d1", doc3);
+      
+      assertTrue("d4 does not have a better score then d3: " + score0 + " >? "
+          + score1, score0 > score1);
+      assertTrue("d3 does not have a better score then d2: " + score1 + " >? "
+          + score2, score1 > score2);
+      assertTrue("d3 does not have a better score then d1: " + score2 + " >? "
+          + score3, score2 > score3);
+      
+    } catch (Error e) {
+      printHits("testBooleanOptionalWithTiebreakerAndBoost", h, s);
+      throw e;
+    }
+  }
+  
+  /** macro */
+  protected Query tq(String f, String t) {
+    return new TermQuery(new Term(f, t));
+  }
+  
+  /** macro */
+  protected Query tq(String f, String t, float b) {
+    Query q = tq(f, t);
+    q.setBoost(b);
+    return q;
+  }
+  
+  protected void printHits(String test, ScoreDoc[] h, Searcher searcher)
+      throws Exception {
+    
+    System.err.println("------- " + test + " -------");
+    
+    DecimalFormat f = new DecimalFormat("0.000000000");
+    
+    for (int i = 0; i < h.length; i++) {
+      Document d = searcher.doc(h[i].doc);
+      float score = h[i].score;
+      System.err
+          .println("#" + i + ": " + f.format(score) + " - " + d.get("id"));
+    }
+  }
 }

Modified: lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestDocBoost.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestDocBoost.java?rev=963780&r1=963779&r2=963780&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestDocBoost.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestDocBoost.java Tue Jul 13 16:12:21 2010
@@ -23,8 +23,8 @@ import org.apache.lucene.util.LuceneTest
 import org.apache.lucene.analysis.SimpleAnalyzer;
 import org.apache.lucene.document.*;
 import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.IndexWriter;
 import org.apache.lucene.index.IndexWriterConfig;
+import org.apache.lucene.index.RandomIndexWriter;
 import org.apache.lucene.index.Term;
 import org.apache.lucene.store.RAMDirectory;
 
@@ -40,8 +40,8 @@ public class TestDocBoost extends Lucene
 
   public void testDocBoost() throws Exception {
     RAMDirectory store = new RAMDirectory();
-    IndexWriter writer = new IndexWriter(store, new IndexWriterConfig(
-        TEST_VERSION_CURRENT, new SimpleAnalyzer(TEST_VERSION_CURRENT)));
+    RandomIndexWriter writer = new RandomIndexWriter(newRandom(), store, 
+        new IndexWriterConfig(TEST_VERSION_CURRENT, new SimpleAnalyzer(TEST_VERSION_CURRENT)));
 
     Fieldable f1 = new Field("field", "word", Field.Store.YES, Field.Index.ANALYZED);
     Fieldable f2 = new Field("field", "word", Field.Store.YES, Field.Index.ANALYZED);
@@ -63,12 +63,13 @@ public class TestDocBoost extends Lucene
     writer.addDocument(d2);
     writer.addDocument(d3);
     writer.addDocument(d4);
-    writer.optimize();
+
+    IndexReader reader = writer.getReader();
     writer.close();
 
     final float[] scores = new float[4];
 
-    new IndexSearcher(store, true).search
+    new IndexSearcher(reader).search
       (new TermQuery(new Term("field", "word")),
        new Collector() {
          private int base = 0;
@@ -97,5 +98,8 @@ public class TestDocBoost extends Lucene
       assertTrue(scores[i] > lastScore);
       lastScore = scores[i];
     }
+    
+    reader.close();
+    store.close();
   }
 }

Modified: lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestDocIdSet.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestDocIdSet.java?rev=963780&r1=963779&r2=963780&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestDocIdSet.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestDocIdSet.java Tue Jul 13 16:12:21 2010
@@ -30,8 +30,8 @@ import org.apache.lucene.document.Field;
 import org.apache.lucene.document.Field.Index;
 import org.apache.lucene.document.Field.Store;
 import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.IndexWriter;
 import org.apache.lucene.index.IndexWriterConfig;
+import org.apache.lucene.index.RandomIndexWriter;
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.store.RAMDirectory;
 import org.apache.lucene.util.LuceneTestCase;
@@ -104,14 +104,16 @@ public class TestDocIdSet extends Lucene
     // Tests that if a Filter produces a null DocIdSet, which is given to
     // IndexSearcher, everything works fine. This came up in LUCENE-1754.
     Directory dir = new RAMDirectory();
-    IndexWriter writer = new IndexWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)));
+    RandomIndexWriter writer = new RandomIndexWriter(newRandom(), dir, 
+        new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)));
     Document doc = new Document();
     doc.add(new Field("c", "val", Store.NO, Index.NOT_ANALYZED_NO_NORMS));
     writer.addDocument(doc);
+    IndexReader reader = writer.getReader();
     writer.close();
     
     // First verify the document is searchable.
-    IndexSearcher searcher = new IndexSearcher(dir, true);
+    IndexSearcher searcher = new IndexSearcher(reader);
     Assert.assertEquals(1, searcher.search(new MatchAllDocsQuery(), 10).totalHits);
     
     // Now search w/ a Filter which returns a null DocIdSet
@@ -124,6 +126,8 @@ public class TestDocIdSet extends Lucene
     
     Assert.assertEquals(0, searcher.search(new MatchAllDocsQuery(), f, 10).totalHits);
     searcher.close();
+    reader.close();
+    dir.close();
   }
 
 }

Modified: lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestExplanations.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestExplanations.java?rev=963780&r1=963779&r2=963780&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestExplanations.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestExplanations.java Tue Jul 13 16:12:21 2010
@@ -22,8 +22,9 @@ import org.apache.lucene.queryParser.Par
 import org.apache.lucene.analysis.WhitespaceAnalyzer;
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.Field;
-import org.apache.lucene.index.IndexWriter;
+import org.apache.lucene.index.IndexReader;
 import org.apache.lucene.index.IndexWriterConfig;
+import org.apache.lucene.index.RandomIndexWriter;
 import org.apache.lucene.index.Term;
 import org.apache.lucene.search.spans.SpanFirstQuery;
 import org.apache.lucene.search.spans.SpanNearQuery;
@@ -31,6 +32,7 @@ import org.apache.lucene.search.spans.Sp
 import org.apache.lucene.search.spans.SpanOrQuery;
 import org.apache.lucene.search.spans.SpanQuery;
 import org.apache.lucene.search.spans.SpanTermQuery;
+import org.apache.lucene.store.Directory;
 import org.apache.lucene.store.RAMDirectory;
 import org.apache.lucene.util.LuceneTestCase;
 
@@ -48,7 +50,9 @@ import org.apache.lucene.util.LuceneTest
  */
 public class TestExplanations extends LuceneTestCase {
   protected IndexSearcher searcher;
-
+  protected IndexReader reader;
+  protected Directory directory;
+  
   public static final String KEY = "KEY";
   public static final String FIELD = "field";
   public static final QueryParser qp =
@@ -57,22 +61,26 @@ public class TestExplanations extends Lu
   @Override
   protected void tearDown() throws Exception {
     searcher.close();
+    reader.close();
+    directory.close();
     super.tearDown();
   }
   
   @Override
   protected void setUp() throws Exception {
     super.setUp();
-    RAMDirectory directory = new RAMDirectory();
-    IndexWriter writer= new IndexWriter(directory, new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)));
+    directory = new RAMDirectory();
+    RandomIndexWriter writer= new RandomIndexWriter(newRandom(), directory, 
+        new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)));
     for (int i = 0; i < docFields.length; i++) {
       Document doc = new Document();
       doc.add(new Field(KEY, ""+i, Field.Store.NO, Field.Index.NOT_ANALYZED));
       doc.add(new Field(FIELD, docFields[i], Field.Store.NO, Field.Index.ANALYZED));
       writer.addDocument(doc);
     }
+    reader = writer.getReader();
     writer.close();
-    searcher = new IndexSearcher(directory, true);
+    searcher = new IndexSearcher(reader);
   }
 
   protected String[] docFields = {

Modified: lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestFieldCache.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestFieldCache.java?rev=963780&r1=963779&r2=963780&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestFieldCache.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestFieldCache.java Tue Jul 13 16:12:21 2010
@@ -20,8 +20,8 @@ import org.apache.lucene.analysis.Whites
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.Field;
 import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.IndexWriter;
 import org.apache.lucene.index.IndexWriterConfig;
+import org.apache.lucene.index.RandomIndexWriter;
 import org.apache.lucene.store.RAMDirectory;
 import org.apache.lucene.util.LuceneTestCase;
 import java.io.IOException;
@@ -40,7 +40,8 @@ public class TestFieldCache extends Luce
   protected void setUp() throws Exception {
     super.setUp();
     RAMDirectory directory = new RAMDirectory();
-    IndexWriter writer= new IndexWriter(directory, new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)));
+    RandomIndexWriter writer= new RandomIndexWriter(newRandom(), directory, 
+        new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)));
     long theLong = Long.MAX_VALUE;
     double theDouble = Double.MAX_VALUE;
     byte theByte = Byte.MAX_VALUE;

Modified: lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestFieldCacheRangeFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestFieldCacheRangeFilter.java?rev=963780&r1=963779&r2=963780&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestFieldCacheRangeFilter.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestFieldCacheRangeFilter.java Tue Jul 13 16:12:21 2010
@@ -40,16 +40,9 @@ import org.apache.lucene.store.RAMDirect
  */
 public class TestFieldCacheRangeFilter extends BaseTestRangeFilter {
 
-  public TestFieldCacheRangeFilter(String name) {
-    super(name);
-  }
-  public TestFieldCacheRangeFilter() {
-    super();
-  }
-
   public void testRangeFilterId() throws IOException {
 
-    IndexReader reader = IndexReader.open(signedIndex.index, true);
+    IndexReader reader = signedIndexReader;
     IndexSearcher search = new IndexSearcher(reader);
 
     int medId = ((maxId - minId) / 2);
@@ -135,11 +128,11 @@ public class TestFieldCacheRangeFilter e
 
   public void testFieldCacheRangeFilterRand() throws IOException {
 
-    IndexReader reader = IndexReader.open(signedIndex.index, true);
+    IndexReader reader = signedIndexReader;
     IndexSearcher search = new IndexSearcher(reader);
 
-    String minRP = pad(signedIndex.minR);
-    String maxRP = pad(signedIndex.maxR);
+    String minRP = pad(signedIndexDir.minR);
+    String maxRP = pad(signedIndexDir.maxR);
     
     int numDocs = reader.numDocs();
         
@@ -198,7 +191,7 @@ public class TestFieldCacheRangeFilter e
 
   public void testFieldCacheRangeFilterShorts() throws IOException {
 
-    IndexReader reader = IndexReader.open(signedIndex.index, true);
+    IndexReader reader = signedIndexReader;
     IndexSearcher search = new IndexSearcher(reader);
 
     int numDocs = reader.numDocs();
@@ -289,7 +282,7 @@ public class TestFieldCacheRangeFilter e
   
   public void testFieldCacheRangeFilterInts() throws IOException {
 
-    IndexReader reader = IndexReader.open(signedIndex.index, true);
+    IndexReader reader = signedIndexReader;
     IndexSearcher search = new IndexSearcher(reader);
 
     int numDocs = reader.numDocs();
@@ -381,7 +374,7 @@ public class TestFieldCacheRangeFilter e
   
   public void testFieldCacheRangeFilterLongs() throws IOException {
 
-    IndexReader reader = IndexReader.open(signedIndex.index, true);
+    IndexReader reader = signedIndexReader;
     IndexSearcher search = new IndexSearcher(reader);
 
     int numDocs = reader.numDocs();
@@ -475,7 +468,7 @@ public class TestFieldCacheRangeFilter e
   
   public void testFieldCacheRangeFilterFloats() throws IOException {
 
-    IndexReader reader = IndexReader.open(signedIndex.index, true);
+    IndexReader reader = signedIndexReader;
     IndexSearcher search = new IndexSearcher(reader);
 
     int numDocs = reader.numDocs();
@@ -503,7 +496,7 @@ public class TestFieldCacheRangeFilter e
   
   public void testFieldCacheRangeFilterDoubles() throws IOException {
 
-    IndexReader reader = IndexReader.open(signedIndex.index, true);
+    IndexReader reader = signedIndexReader;
     IndexSearcher search = new IndexSearcher(reader);
 
     int numDocs = reader.numDocs();

Modified: lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestFieldCacheTermsFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestFieldCacheTermsFilter.java?rev=963780&r1=963779&r2=963780&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestFieldCacheTermsFilter.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestFieldCacheTermsFilter.java Tue Jul 13 16:12:21 2010
@@ -23,8 +23,8 @@ import org.apache.lucene.analysis.Keywor
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.Field;
 import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.IndexWriter;
 import org.apache.lucene.index.IndexWriterConfig;
+import org.apache.lucene.index.RandomIndexWriter;
 import org.apache.lucene.store.MockRAMDirectory;
 
 import java.util.ArrayList;
@@ -39,16 +39,17 @@ public class TestFieldCacheTermsFilter e
   public void testMissingTerms() throws Exception {
     String fieldName = "field1";
     MockRAMDirectory rd = new MockRAMDirectory();
-    IndexWriter w = new IndexWriter(rd, new IndexWriterConfig(TEST_VERSION_CURRENT, new KeywordAnalyzer()));
+    RandomIndexWriter w = new RandomIndexWriter(newRandom(), rd, 
+        new IndexWriterConfig(TEST_VERSION_CURRENT, new KeywordAnalyzer()));
     for (int i = 0; i < 100; i++) {
       Document doc = new Document();
       int term = i * 10; //terms are units of 10;
       doc.add(new Field(fieldName, "" + term, Field.Store.YES, Field.Index.NOT_ANALYZED));
       w.addDocument(doc);
     }
+    IndexReader reader = w.getReader();
     w.close();
 
-    IndexReader reader = IndexReader.open(rd, true);
     IndexSearcher searcher = new IndexSearcher(reader);
     int numDocs = reader.numDocs();
     ScoreDoc[] results;

Modified: lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestFilteredQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestFilteredQuery.java?rev=963780&r1=963779&r2=963780&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestFilteredQuery.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestFilteredQuery.java Tue Jul 13 16:12:21 2010
@@ -20,9 +20,9 @@ package org.apache.lucene.search;
 import org.apache.lucene.analysis.WhitespaceAnalyzer;
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.Field;
-import org.apache.lucene.index.IndexWriter;
 import org.apache.lucene.index.IndexReader;
 import org.apache.lucene.index.IndexWriterConfig;
+import org.apache.lucene.index.RandomIndexWriter;
 import org.apache.lucene.index.Term;
 import org.apache.lucene.search.BooleanClause.Occur;
 import org.apache.lucene.store.RAMDirectory;
@@ -41,6 +41,7 @@ import java.util.BitSet;
 public class TestFilteredQuery extends LuceneTestCase {
 
   private IndexSearcher searcher;
+  private IndexReader reader;
   private RAMDirectory directory;
   private Query query;
   private Filter filter;
@@ -49,7 +50,8 @@ public class TestFilteredQuery extends L
   protected void setUp() throws Exception {
     super.setUp();
     directory = new RAMDirectory();
-    IndexWriter writer = new IndexWriter (directory, new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)));
+    RandomIndexWriter writer = new RandomIndexWriter (newRandom(), directory, 
+        new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)));
 
     Document doc = new Document();
     doc.add (new Field("field", "one two three four five", Field.Store.YES, Field.Index.ANALYZED));
@@ -71,10 +73,10 @@ public class TestFilteredQuery extends L
     doc.add (new Field("sorter", "c", Field.Store.YES, Field.Index.ANALYZED));
     writer.addDocument (doc);
 
-    writer.optimize ();
+    reader = writer.getReader();
     writer.close ();
 
-    searcher = new IndexSearcher (directory, true);
+    searcher = new IndexSearcher (reader);
     query = new TermQuery (new Term ("field", "three"));
     filter = newStaticFilterB();
   }
@@ -95,6 +97,7 @@ public class TestFilteredQuery extends L
   @Override
   protected void tearDown() throws Exception {
     searcher.close();
+    reader.close();
     directory.close();
     super.tearDown();
   }

Modified: lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestFuzzyQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestFuzzyQuery.java?rev=963780&r1=963779&r2=963780&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestFuzzyQuery.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestFuzzyQuery.java Tue Jul 13 16:12:21 2010
@@ -29,6 +29,7 @@ import org.apache.lucene.document.Field;
 import org.apache.lucene.index.IndexWriter;
 import org.apache.lucene.index.IndexReader;
 import org.apache.lucene.index.IndexWriterConfig;
+import org.apache.lucene.index.RandomIndexWriter;
 import org.apache.lucene.index.Term;
 import org.apache.lucene.store.RAMDirectory;
 import org.apache.lucene.store.Directory;
@@ -43,7 +44,8 @@ public class TestFuzzyQuery extends Luce
 
   public void testFuzziness() throws Exception {
     RAMDirectory directory = new RAMDirectory();
-    IndexWriter writer = new IndexWriter(directory, new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)));
+    RandomIndexWriter writer = new RandomIndexWriter(newRandom(), directory, 
+        new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)));
     addDoc("aaaaa", writer);
     addDoc("aaaab", writer);
     addDoc("aaabb", writer);
@@ -51,9 +53,10 @@ public class TestFuzzyQuery extends Luce
     addDoc("abbbb", writer);
     addDoc("bbbbb", writer);
     addDoc("ddddd", writer);
-    writer.optimize();
+
+    IndexReader reader = writer.getReader();
+    IndexSearcher searcher = new IndexSearcher(reader);
     writer.close();
-    IndexSearcher searcher = new IndexSearcher(directory, true);
 
     FuzzyQuery query = new FuzzyQuery(new Term("field", "aaaaa"), FuzzyQuery.defaultMinSimilarity, 0);   
     ScoreDoc[] hits = searcher.search(query, null, 1000).scoreDocs;
@@ -189,17 +192,20 @@ public class TestFuzzyQuery extends Luce
     assertEquals(0, hits.length);
 
     searcher.close();
+    reader.close();
     directory.close();
   }
 
   public void testFuzzinessLong() throws Exception {
     RAMDirectory directory = new RAMDirectory();
-    IndexWriter writer = new IndexWriter(directory, new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)));
+    RandomIndexWriter writer = new RandomIndexWriter(newRandom(), directory, 
+        new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)));
     addDoc("aaaaaaa", writer);
     addDoc("segment", writer);
-    writer.optimize();
+
+    IndexReader reader = writer.getReader();
+    IndexSearcher searcher = new IndexSearcher(reader);
     writer.close();
-    IndexSearcher searcher = new IndexSearcher(directory, true);
 
     FuzzyQuery query;
     // not similar enough:
@@ -277,17 +283,20 @@ public class TestFuzzyQuery extends Luce
     }
 
     searcher.close();
+    reader.close();
     directory.close();
   }
   
   public void testTokenLengthOpt() throws IOException {
     RAMDirectory directory = new RAMDirectory();
-    IndexWriter writer = new IndexWriter(directory, new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)));
+    RandomIndexWriter writer = new RandomIndexWriter(newRandom(), directory, 
+        new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)));
     addDoc("12345678911", writer);
     addDoc("segment", writer);
-    writer.optimize();
+
+    IndexReader reader = writer.getReader();
+    IndexSearcher searcher = new IndexSearcher(reader);
     writer.close();
-    IndexSearcher searcher = new IndexSearcher(directory, true);
 
     Query query;
     // term not over 10 chars, so optimization shortcuts
@@ -309,20 +318,25 @@ public class TestFuzzyQuery extends Luce
     query = new FuzzyQuery(new Term("field", "sdfsdfsdfsdf"), 0.9f);
     hits = searcher.search(query, null, 1000).scoreDocs;
     assertEquals(0, hits.length);
+    
+    searcher.close();
+    reader.close();
+    directory.close();
   }
   
   /** Test the TopTermsBoostOnlyBooleanQueryRewrite rewrite method. */
   public void testBoostOnlyRewrite() throws Exception {
     RAMDirectory directory = new RAMDirectory();
-    IndexWriter writer = new IndexWriter(directory, new IndexWriterConfig(
-        TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)));
+    RandomIndexWriter writer = new RandomIndexWriter(newRandom(), directory, 
+        new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)));
     addDoc("Lucene", writer);
     addDoc("Lucene", writer);
     addDoc("Lucenne", writer);
-    writer.optimize();
+
+    IndexReader reader = writer.getReader();
+    IndexSearcher searcher = new IndexSearcher(reader);
     writer.close();
-    IndexSearcher searcher = new IndexSearcher(directory, true);
-    IndexReader reader = searcher.getIndexReader();
+    
     FuzzyQuery query = new FuzzyQuery(new Term("field", "Lucene"));
     query.setRewriteMethod(new MultiTermQuery.TopTermsBoostOnlyBooleanQueryRewrite());
     ScoreDoc[] hits = searcher.search(query, null, 1000).scoreDocs;
@@ -333,6 +347,7 @@ public class TestFuzzyQuery extends Luce
     assertEquals("Lucenne", reader.document(hits[2].doc).get("field"));
     searcher.close();
     reader.close();
+    directory.close();
   }
   
   public void testGiga() throws Exception {
@@ -340,8 +355,8 @@ public class TestFuzzyQuery extends Luce
     StandardAnalyzer analyzer = new StandardAnalyzer(TEST_VERSION_CURRENT);
 
     Directory index = new MockRAMDirectory();
-    IndexWriter w = new IndexWriter(index, new IndexWriterConfig(
-        TEST_VERSION_CURRENT, analyzer));
+    RandomIndexWriter w = new RandomIndexWriter(newRandom(), index, 
+        new IndexWriterConfig(TEST_VERSION_CURRENT, analyzer));
 
     addDoc("Lucene in Action", w);
     addDoc("Lucene for Dummies", w);
@@ -370,10 +385,12 @@ public class TestFuzzyQuery extends Luce
     ScoreDoc[] hits = searcher.search(q, 10).scoreDocs;
     assertEquals(1, hits.length);
     assertEquals("Giga byte", searcher.doc(hits[0].doc).get("field"));
+    searcher.close();
     r.close();
+    index.close();
   }
 
-  private void addDoc(String text, IndexWriter writer) throws IOException {
+  private void addDoc(String text, RandomIndexWriter writer) throws IOException {
     Document doc = new Document();
     doc.add(new Field("field", text, Field.Store.YES, Field.Index.ANALYZED));
     writer.addDocument(doc);

Modified: lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestMultiPhraseQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestMultiPhraseQuery.java?rev=963780&r1=963779&r2=963780&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestMultiPhraseQuery.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestMultiPhraseQuery.java Tue Jul 13 16:12:21 2010
@@ -18,11 +18,10 @@ package org.apache.lucene.search;
  */
 
 import org.apache.lucene.index.IndexWriterConfig;
+import org.apache.lucene.index.RandomIndexWriter;
 import org.apache.lucene.index.Term;
 import org.apache.lucene.index.TermEnum;
 import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.IndexWriter;
-import org.apache.lucene.store.RAMDirectory;
 import org.apache.lucene.store.MockRAMDirectory;
 import org.apache.lucene.analysis.SimpleAnalyzer;
 import org.apache.lucene.analysis.standard.StandardAnalyzer;
@@ -30,236 +29,247 @@ import org.apache.lucene.document.Docume
 import org.apache.lucene.document.Field;
 
 import org.apache.lucene.util.LuceneTestCase;
+
 import java.io.IOException;
-import java.util.LinkedList;
 import java.util.Collections;
+import java.util.LinkedList;
 
 /**
  * This class tests the MultiPhraseQuery class.
- *
- *
+ * 
+ * 
  */
-public class TestMultiPhraseQuery extends LuceneTestCase
-{
-    public TestMultiPhraseQuery(String name) {
-        super(name);
-    }
+public class TestMultiPhraseQuery extends LuceneTestCase {
+  public TestMultiPhraseQuery(String name) {
+    super(name);
+  }
+  
+  public void testPhrasePrefix() throws IOException {
+    MockRAMDirectory indexStore = new MockRAMDirectory();
+    RandomIndexWriter writer = new RandomIndexWriter(newRandom(), indexStore,
+        new IndexWriterConfig(TEST_VERSION_CURRENT, new SimpleAnalyzer(TEST_VERSION_CURRENT)));
+    add("blueberry pie", writer);
+    add("blueberry strudel", writer);
+    add("blueberry pizza", writer);
+    add("blueberry chewing gum", writer);
+    add("bluebird pizza", writer);
+    add("bluebird foobar pizza", writer);
+    add("piccadilly circus", writer);
+    
+    IndexReader reader = writer.getReader();
+    IndexSearcher searcher = new IndexSearcher(reader);
+    
+    // search for "blueberry pi*":
+    MultiPhraseQuery query1 = new MultiPhraseQuery();
+    // search for "strawberry pi*":
+    MultiPhraseQuery query2 = new MultiPhraseQuery();
+    query1.add(new Term("body", "blueberry"));
+    query2.add(new Term("body", "strawberry"));
+
+    LinkedList<Term> termsWithPrefix = new LinkedList<Term>();
+    IndexReader ir = reader;
 
-    public void testPhrasePrefix() throws IOException {
-        RAMDirectory indexStore = new RAMDirectory();
-        IndexWriter writer = new IndexWriter(indexStore, new IndexWriterConfig(TEST_VERSION_CURRENT, new SimpleAnalyzer(TEST_VERSION_CURRENT)));
-        add("blueberry pie", writer);
-        add("blueberry strudel", writer);
-        add("blueberry pizza", writer);
-        add("blueberry chewing gum", writer);
-        add("bluebird pizza", writer);
-        add("bluebird foobar pizza", writer);
-        add("piccadilly circus", writer);
-        writer.optimize();
-        writer.close();
-
-        IndexSearcher searcher = new IndexSearcher(indexStore, true);
-
-        // search for "blueberry pi*":
-        MultiPhraseQuery query1 = new MultiPhraseQuery();
-        // search for "strawberry pi*":
-        MultiPhraseQuery query2 = new MultiPhraseQuery();
-        query1.add(new Term("body", "blueberry"));
-        query2.add(new Term("body", "strawberry"));
-
-        LinkedList<Term> termsWithPrefix = new LinkedList<Term>();
-        IndexReader ir = IndexReader.open(indexStore, true);
-
-        // this TermEnum gives "piccadilly", "pie" and "pizza".
-        String prefix = "pi";
-        TermEnum te = ir.terms(new Term("body", prefix));
-        do {
-            if (te.term().text().startsWith(prefix))
-            {
-                termsWithPrefix.add(te.term());
-            }
-        } while (te.next());
-
-        query1.add(termsWithPrefix.toArray(new Term[0]));
-        assertEquals("body:\"blueberry (piccadilly pie pizza)\"", query1.toString());
-        query2.add(termsWithPrefix.toArray(new Term[0]));
-        assertEquals("body:\"strawberry (piccadilly pie pizza)\"", query2.toString());
-
-        ScoreDoc[] result;
-        result = searcher.search(query1, null, 1000).scoreDocs;
-        assertEquals(2, result.length);
-        result = searcher.search(query2, null, 1000).scoreDocs;
-        assertEquals(0, result.length);
-
-        // search for "blue* pizza":
-        MultiPhraseQuery query3 = new MultiPhraseQuery();
-        termsWithPrefix.clear();
-        prefix = "blue";
-        te = ir.terms(new Term("body", prefix));
-        do {
-            if (te.term().text().startsWith(prefix))
-            {
-                termsWithPrefix.add(te.term());
-            }
-        } while (te.next());
-        query3.add(termsWithPrefix.toArray(new Term[0]));
-        query3.add(new Term("body", "pizza"));
-
-        result = searcher.search(query3, null, 1000).scoreDocs;
-        assertEquals(2, result.length); // blueberry pizza, bluebird pizza
-        assertEquals("body:\"(blueberry bluebird) pizza\"", query3.toString());
-
-        // test slop:
-        query3.setSlop(1);
-        result = searcher.search(query3, null, 1000).scoreDocs;
-
-        // just make sure no exc:
-        searcher.explain(query3, 0);
-
-        assertEquals(3, result.length); // blueberry pizza, bluebird pizza, bluebird foobar pizza
-
-        MultiPhraseQuery query4 = new MultiPhraseQuery();
-        try {
-          query4.add(new Term("field1", "foo"));
-          query4.add(new Term("field2", "foobar"));
-          fail();
-        } catch(IllegalArgumentException e) {
-          // okay, all terms must belong to the same field
+    // this TermEnum gives "piccadilly", "pie" and "pizza".
+    String prefix = "pi";
+    TermEnum te = ir.terms(new Term("body", prefix));
+    do {
+        if (te.term().text().startsWith(prefix))
+        {
+            termsWithPrefix.add(te.term());
         }
-        
-        searcher.close();
-        indexStore.close();
+    } while (te.next());
 
-    }
-    
-    private void add(String s, IndexWriter writer) throws IOException {
-      Document doc = new Document();
-      doc.add(new Field("body", s, Field.Store.YES, Field.Index.ANALYZED));
-      writer.addDocument(doc);
-    }
-    
-    public void testBooleanQueryContainingSingleTermPrefixQuery() throws IOException {
-      // this tests against bug 33161 (now fixed)
-      // In order to cause the bug, the outer query must have more than one term 
-      // and all terms required.
-      // The contained PhraseMultiQuery must contain exactly one term array.
-
-      RAMDirectory indexStore = new RAMDirectory();
-      IndexWriter writer = new IndexWriter(indexStore, new IndexWriterConfig(TEST_VERSION_CURRENT, new SimpleAnalyzer(TEST_VERSION_CURRENT)));
-      add("blueberry pie", writer);
-      add("blueberry chewing gum", writer);
-      add("blue raspberry pie", writer);
-      writer.optimize();
-      writer.close();
-
-      IndexSearcher searcher = new IndexSearcher(indexStore, true);
-      // This query will be equivalent to +body:pie +body:"blue*"
-      BooleanQuery q = new BooleanQuery();
-      q.add(new TermQuery(new Term("body", "pie")), BooleanClause.Occur.MUST);
-
-      MultiPhraseQuery trouble = new MultiPhraseQuery();
-      trouble.add(new Term[] {
-          new Term("body", "blueberry"),
-          new Term("body", "blue")
-      });
-      q.add(trouble, BooleanClause.Occur.MUST);
-
-      // exception will be thrown here without fix
-      ScoreDoc[] hits = searcher.search(q, null, 1000).scoreDocs;
+    query1.add(termsWithPrefix.toArray(new Term[0]));
+    assertEquals("body:\"blueberry (piccadilly pie pizza)\"", query1.toString());
+    query2.add(termsWithPrefix.toArray(new Term[0]));
+    assertEquals("body:\"strawberry (piccadilly pie pizza)\"", query2.toString());
+
+    ScoreDoc[] result;
+    result = searcher.search(query1, null, 1000).scoreDocs;
+    assertEquals(2, result.length);
+    result = searcher.search(query2, null, 1000).scoreDocs;
+    assertEquals(0, result.length);
+
+    // search for "blue* pizza":
+    MultiPhraseQuery query3 = new MultiPhraseQuery();
+    termsWithPrefix.clear();
+    prefix = "blue";
+    te = ir.terms(new Term("body", prefix));
+    do {
+        if (te.term().text().startsWith(prefix))
+        {
+            termsWithPrefix.add(te.term());
+        }
+    } while (te.next());
+    query3.add(termsWithPrefix.toArray(new Term[0]));
+    query3.add(new Term("body", "pizza"));
+
+    result = searcher.search(query3, null, 1000).scoreDocs;
+    assertEquals(2, result.length); // blueberry pizza, bluebird pizza
+    assertEquals("body:\"(blueberry bluebird) pizza\"", query3.toString());
+
+    // test slop:
+    query3.setSlop(1);
+    result = searcher.search(query3, null, 1000).scoreDocs;
 
-      assertEquals("Wrong number of hits", 2, hits.length);
+    // just make sure no exc:
+    searcher.explain(query3, 0);
 
-      // just make sure no exc:
-      searcher.explain(q, 0);
+    assertEquals(3, result.length); // blueberry pizza, bluebird pizza, bluebird foobar pizza
 
-      searcher.close();
+    MultiPhraseQuery query4 = new MultiPhraseQuery();
+    try {
+      query4.add(new Term("field1", "foo"));
+      query4.add(new Term("field2", "foobar"));
+      fail();
+    } catch(IllegalArgumentException e) {
+      // okay, all terms must belong to the same field
+    }
+    
+    writer.close();
+    searcher.close();
+    reader.close();
+    indexStore.close();
+    
+  }
+  
+  private void add(String s, RandomIndexWriter writer) throws IOException {
+    Document doc = new Document();
+    doc.add(new Field("body", s, Field.Store.YES, Field.Index.ANALYZED));
+    writer.addDocument(doc);
   }
+  
+  public void testBooleanQueryContainingSingleTermPrefixQuery()
+      throws IOException {
+    // this tests against bug 33161 (now fixed)
+    // In order to cause the bug, the outer query must have more than one term
+    // and all terms required.
+    // The contained PhraseMultiQuery must contain exactly one term array.
+    
+    MockRAMDirectory indexStore = new MockRAMDirectory();
+    RandomIndexWriter writer = new RandomIndexWriter(newRandom(), indexStore,
+        new IndexWriterConfig(TEST_VERSION_CURRENT, new SimpleAnalyzer(TEST_VERSION_CURRENT)));
+    add("blueberry pie", writer);
+    add("blueberry chewing gum", writer);
+    add("blue raspberry pie", writer);
+    
+    IndexReader reader = writer.getReader();
+    IndexSearcher searcher = new IndexSearcher(reader);
+    // This query will be equivalent to +body:pie +body:"blue*"
+    BooleanQuery q = new BooleanQuery();
+    q.add(new TermQuery(new Term("body", "pie")), BooleanClause.Occur.MUST);
+    
+    MultiPhraseQuery trouble = new MultiPhraseQuery();
+    trouble.add(new Term[] {new Term("body", "blueberry"),
+        new Term("body", "blue")});
+    q.add(trouble, BooleanClause.Occur.MUST);
+    
+    // exception will be thrown here without fix
+    ScoreDoc[] hits = searcher.search(q, null, 1000).scoreDocs;
+    
+    assertEquals("Wrong number of hits", 2, hits.length);
+    
+    // just make sure no exc:
+    searcher.explain(q, 0);
     
+    writer.close();
+    searcher.close();
+    reader.close();
+    indexStore.close();
+  }
+  
   public void testPhrasePrefixWithBooleanQuery() throws IOException {
-    RAMDirectory indexStore = new RAMDirectory();
-    IndexWriter writer = new IndexWriter(indexStore, new IndexWriterConfig(
-        TEST_VERSION_CURRENT, new StandardAnalyzer(
-        TEST_VERSION_CURRENT, Collections.emptySet())));
+    MockRAMDirectory indexStore = new MockRAMDirectory();
+    RandomIndexWriter writer = new RandomIndexWriter(newRandom(), indexStore,
+        new IndexWriterConfig(TEST_VERSION_CURRENT, new StandardAnalyzer(TEST_VERSION_CURRENT, Collections.emptySet())));
     add("This is a test", "object", writer);
     add("a note", "note", writer);
-    writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(indexStore, true);
-
+    IndexReader reader = writer.getReader();
+    IndexSearcher searcher = new IndexSearcher(reader);
+    
     // This query will be equivalent to +type:note +body:"a t*"
     BooleanQuery q = new BooleanQuery();
     q.add(new TermQuery(new Term("type", "note")), BooleanClause.Occur.MUST);
-
+    
     MultiPhraseQuery trouble = new MultiPhraseQuery();
     trouble.add(new Term("body", "a"));
-    trouble.add(new Term[] { new Term("body", "test"), new Term("body", "this") });
+    trouble
+        .add(new Term[] {new Term("body", "test"), new Term("body", "this")});
     q.add(trouble, BooleanClause.Occur.MUST);
-
+    
     // exception will be thrown here without fix for #35626:
     ScoreDoc[] hits = searcher.search(q, null, 1000).scoreDocs;
     assertEquals("Wrong number of hits", 0, hits.length);
+    writer.close();
     searcher.close();
+    reader.close();
+    indexStore.close();
   }
-
+  
   public void testNoDocs() throws Exception {
     MockRAMDirectory indexStore = new MockRAMDirectory();
-    IndexWriter writer = new IndexWriter(indexStore, new StandardAnalyzer(TEST_VERSION_CURRENT, Collections.emptySet()), true, IndexWriter.MaxFieldLength.LIMITED);
+    RandomIndexWriter writer = new RandomIndexWriter(newRandom(), indexStore,
+        new IndexWriterConfig(TEST_VERSION_CURRENT, new StandardAnalyzer(TEST_VERSION_CURRENT, Collections.emptySet())));
     add("a note", "note", writer);
-    writer.close();
-
-    IndexSearcher searcher = new IndexSearcher(indexStore, true);
-
+    
+    IndexReader reader = writer.getReader();
+    IndexSearcher searcher = new IndexSearcher(reader);
+    
     MultiPhraseQuery q = new MultiPhraseQuery();
     q.add(new Term("body", "a"));
-    q.add(new Term[] { new Term("body", "nope"), new Term("body", "nope") });
-    assertEquals("Wrong number of hits", 0, searcher.search(q, null, 1).totalHits);
-
+    q.add(new Term[] {new Term("body", "nope"), new Term("body", "nope")});
+    assertEquals("Wrong number of hits", 0,
+        searcher.search(q, null, 1).totalHits);
+    
     // just make sure no exc:
     searcher.explain(q, 0);
-
+    
+    writer.close();
     searcher.close();
+    reader.close();
     indexStore.close();
   }
   
-  public void testHashCodeAndEquals(){
+  public void testHashCodeAndEquals() {
     MultiPhraseQuery query1 = new MultiPhraseQuery();
     MultiPhraseQuery query2 = new MultiPhraseQuery();
     
     assertEquals(query1.hashCode(), query2.hashCode());
-    assertEquals(query1,query2);
+    assertEquals(query1, query2);
     
-    Term term1= new Term("someField","someText");
+    Term term1 = new Term("someField", "someText");
     
     query1.add(term1);
     query2.add(term1);
     
     assertEquals(query1.hashCode(), query2.hashCode());
-    assertEquals(query1,query2);
+    assertEquals(query1, query2);
     
-    Term term2= new Term("someField","someMoreText");
+    Term term2 = new Term("someField", "someMoreText");
     
     query1.add(term2);
     
-    assertFalse(query1.hashCode()==query2.hashCode());
+    assertFalse(query1.hashCode() == query2.hashCode());
     assertFalse(query1.equals(query2));
     
     query2.add(term2);
     
     assertEquals(query1.hashCode(), query2.hashCode());
-    assertEquals(query1,query2);
+    assertEquals(query1, query2);
   }
-
   
-  private void add(String s, String type, IndexWriter writer) throws IOException {
+  private void add(String s, String type, RandomIndexWriter writer)
+      throws IOException {
     Document doc = new Document();
     doc.add(new Field("body", s, Field.Store.YES, Field.Index.ANALYZED));
     doc.add(new Field("type", type, Field.Store.YES, Field.Index.NOT_ANALYZED));
     writer.addDocument(doc);
   }
-
+  
   // LUCENE-2526
   public void testEmptyToString() {
     new MultiPhraseQuery().toString();
   }
-
+  
 }

Modified: lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestMultiTermConstantScore.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestMultiTermConstantScore.java?rev=963780&r1=963779&r2=963780&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestMultiTermConstantScore.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestMultiTermConstantScore.java Tue Jul 13 16:12:21 2010
@@ -22,8 +22,8 @@ import org.apache.lucene.analysis.Whites
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.Field;
 import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.IndexWriter;
 import org.apache.lucene.index.IndexWriterConfig;
+import org.apache.lucene.index.RandomIndexWriter;
 import org.apache.lucene.index.Term;
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.store.RAMDirectory;
@@ -38,15 +38,8 @@ public class TestMultiTermConstantScore 
   /** threshold for comparing floats */
   public static final float SCORE_COMP_THRESH = 1e-6f;
 
-  public TestMultiTermConstantScore(String name) {
-    super(name);
-  }
-
-  public TestMultiTermConstantScore() {
-    super();
-  }
-
   Directory small;
+  IndexReader reader;
 
   void assertEquals(String m, float e, float a) {
     assertEquals(m, e, a, SCORE_COMP_THRESH);
@@ -59,13 +52,13 @@ public class TestMultiTermConstantScore 
   @Override
   protected void setUp() throws Exception {
     super.setUp();
-
     String[] data = new String[] { "A 1 2 3 4 5 6", "Z       4 5 6", null,
         "B   2   4 5 6", "Y     3   5 6", null, "C     3     6",
         "X       4 5 6" };
 
     small = new RAMDirectory();
-    IndexWriter writer = new IndexWriter(small, new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)));
+    RandomIndexWriter writer = new RandomIndexWriter(rand, small, 
+        new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)));
 
     for (int i = 0; i < data.length; i++) {
       Document doc = new Document();
@@ -81,10 +74,17 @@ public class TestMultiTermConstantScore 
       writer.addDocument(doc);
     }
 
-    writer.optimize();
+    reader = writer.getReader();
     writer.close();
   }
 
+  @Override
+  protected void tearDown() throws Exception {
+    reader.close();
+    small.close();
+    super.tearDown();
+  }
+
   /** macro for readability */
   public static Query csrq(String f, String l, String h, boolean il, boolean ih) {
     TermRangeQuery query = new TermRangeQuery(f, l, h, il, ih);
@@ -146,7 +146,6 @@ public class TestMultiTermConstantScore 
   public void testEqualScores() throws IOException {
     // NOTE: uses index build in *this* setUp
 
-    IndexReader reader = IndexReader.open(small, true);
     IndexSearcher search = new IndexSearcher(reader);
 
     ScoreDoc[] result;
@@ -175,7 +174,6 @@ public class TestMultiTermConstantScore 
   public void testBoost() throws IOException {
     // NOTE: uses index build in *this* setUp
 
-    IndexReader reader = IndexReader.open(small, true);
     IndexSearcher search = new IndexSearcher(reader);
 
     // test for correct application of query normalization
@@ -247,7 +245,6 @@ public class TestMultiTermConstantScore 
   public void testBooleanOrderUnAffected() throws IOException {
     // NOTE: uses index build in *this* setUp
 
-    IndexReader reader = IndexReader.open(small, true);
     IndexSearcher search = new IndexSearcher(reader);
 
     // first do a regular TermRangeQuery which uses term expansion so
@@ -278,7 +275,7 @@ public class TestMultiTermConstantScore 
   public void testRangeQueryId() throws IOException {
     // NOTE: uses index build in *super* setUp
 
-    IndexReader reader = IndexReader.open(signedIndex.index, true);
+    IndexReader reader = signedIndexReader;
     IndexSearcher search = new IndexSearcher(reader);
 
     int medId = ((maxId - minId) / 2);
@@ -405,7 +402,7 @@ public class TestMultiTermConstantScore 
   public void testRangeQueryIdCollating() throws IOException {
     // NOTE: uses index build in *super* setUp
 
-    IndexReader reader = IndexReader.open(signedIndex.index, true);
+    IndexReader reader = signedIndexReader;
     IndexSearcher search = new IndexSearcher(reader);
 
     int medId = ((maxId - minId) / 2);
@@ -488,11 +485,11 @@ public class TestMultiTermConstantScore 
   public void testRangeQueryRand() throws IOException {
     // NOTE: uses index build in *super* setUp
 
-    IndexReader reader = IndexReader.open(signedIndex.index, true);
+    IndexReader reader = signedIndexReader;
     IndexSearcher search = new IndexSearcher(reader);
 
-    String minRP = pad(signedIndex.minR);
-    String maxRP = pad(signedIndex.maxR);
+    String minRP = pad(signedIndexDir.minR);
+    String maxRP = pad(signedIndexDir.maxR);
 
     int numDocs = reader.numDocs();
 
@@ -551,11 +548,11 @@ public class TestMultiTermConstantScore 
     // NOTE: uses index build in *super* setUp
 
     // using the unsigned index because collation seems to ignore hyphens
-    IndexReader reader = IndexReader.open(unsignedIndex.index, true);
+    IndexReader reader = unsignedIndexReader;
     IndexSearcher search = new IndexSearcher(reader);
 
-    String minRP = pad(unsignedIndex.minR);
-    String maxRP = pad(unsignedIndex.maxR);
+    String minRP = pad(unsignedIndexDir.minR);
+    String maxRP = pad(unsignedIndexDir.maxR);
 
     int numDocs = reader.numDocs();
 
@@ -615,8 +612,8 @@ public class TestMultiTermConstantScore 
 
     /* build an index */
     RAMDirectory farsiIndex = new RAMDirectory();
-    IndexWriter writer = new IndexWriter(farsiIndex, new IndexWriterConfig(
-        TEST_VERSION_CURRENT, new SimpleAnalyzer(TEST_VERSION_CURRENT)));
+    RandomIndexWriter writer = new RandomIndexWriter(rand, farsiIndex, 
+        new IndexWriterConfig(TEST_VERSION_CURRENT, new SimpleAnalyzer(TEST_VERSION_CURRENT)));
     Document doc = new Document();
     doc.add(new Field("content", "\u0633\u0627\u0628", Field.Store.YES,
         Field.Index.NOT_ANALYZED));
@@ -625,10 +622,9 @@ public class TestMultiTermConstantScore 
             Field.Index.NOT_ANALYZED));
     writer.addDocument(doc);
 
-    writer.optimize();
+    IndexReader reader = writer.getReader();
     writer.close();
 
-    IndexReader reader = IndexReader.open(farsiIndex, true);
     IndexSearcher search = new IndexSearcher(reader);
 
     // Neither Java 1.4.2 nor 1.5.0 has Farsi Locale collation available in
@@ -649,14 +645,16 @@ public class TestMultiTermConstantScore 
         1000).scoreDocs;
     assertEquals("The index Term should be included.", 1, result.length);
     search.close();
+    reader.close();
+    farsiIndex.close();
   }
 
   public void testDanish() throws Exception {
 
     /* build an index */
     RAMDirectory danishIndex = new RAMDirectory();
-    IndexWriter writer = new IndexWriter(danishIndex, new IndexWriterConfig(
-        TEST_VERSION_CURRENT, new SimpleAnalyzer(TEST_VERSION_CURRENT)));
+    RandomIndexWriter writer = new RandomIndexWriter(rand, danishIndex, 
+        new IndexWriterConfig(TEST_VERSION_CURRENT, new SimpleAnalyzer(TEST_VERSION_CURRENT)));
 
     // Danish collation orders the words below in the given order
     // (example taken from TestSort.testInternationalSort() ).
@@ -669,10 +667,9 @@ public class TestMultiTermConstantScore 
                         Field.Store.YES, Field.Index.NOT_ANALYZED));
       writer.addDocument(doc);
     }
-    writer.optimize();
+    IndexReader reader = writer.getReader();
     writer.close();
 
-    IndexReader reader = IndexReader.open(danishIndex, true);
     IndexSearcher search = new IndexSearcher(reader);
 
     Collator c = Collator.getInstance(new Locale("da", "dk"));
@@ -687,5 +684,7 @@ public class TestMultiTermConstantScore 
       (csrq("content", "H\u00C5T", "MAND", F, F, c), null, 1000).scoreDocs;
     assertEquals("The index Term should not be included.", 0, result.length);
     search.close();
+    reader.close();
+    danishIndex.close();
   }
 }

Modified: lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestMultiValuedNumericRangeQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestMultiValuedNumericRangeQuery.java?rev=963780&r1=963779&r2=963780&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestMultiValuedNumericRangeQuery.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestMultiValuedNumericRangeQuery.java Tue Jul 13 16:12:21 2010
@@ -26,8 +26,9 @@ import org.apache.lucene.analysis.Whites
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.Field;
 import org.apache.lucene.document.NumericField;
-import org.apache.lucene.index.IndexWriter;
+import org.apache.lucene.index.IndexReader;
 import org.apache.lucene.index.IndexWriterConfig;
+import org.apache.lucene.index.RandomIndexWriter;
 import org.apache.lucene.store.RAMDirectory;
 import org.apache.lucene.util.LuceneTestCase;
 import org.apache.lucene.util._TestUtil;
@@ -44,7 +45,8 @@ public class TestMultiValuedNumericRange
     final Random rnd = newRandom();
 
     RAMDirectory directory = new RAMDirectory();
-    IndexWriter writer = new IndexWriter(directory, new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)));
+    RandomIndexWriter writer = new RandomIndexWriter(rnd, directory, 
+        new IndexWriterConfig(TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT)));
     
     DecimalFormat format = new DecimalFormat("00000000000", new DecimalFormatSymbols(Locale.US));
     
@@ -56,10 +58,11 @@ public class TestMultiValuedNumericRange
         doc.add(new NumericField("trie", Field.Store.NO, true).setIntValue(value));
       }
       writer.addDocument(doc);
-    }  
+    }
+    IndexReader reader = writer.getReader();
     writer.close();
     
-    Searcher searcher=new IndexSearcher(directory, true);
+    Searcher searcher=new IndexSearcher(reader);
     for (int i=0; i<50*_TestUtil.getRandomMultiplier(); i++) {
       int lower=rnd.nextInt(Integer.MAX_VALUE);
       int upper=rnd.nextInt(Integer.MAX_VALUE);
@@ -73,7 +76,7 @@ public class TestMultiValuedNumericRange
       assertEquals("Returned count for NumericRangeQuery and TermRangeQuery must be equal", trTopDocs.totalHits, nrTopDocs.totalHits );
     }
     searcher.close();
-
+    reader.close();
     directory.close();
   }
   

Modified: lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestNot.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestNot.java?rev=963780&r1=963779&r2=963780&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestNot.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestNot.java Tue Jul 13 16:12:21 2010
@@ -19,8 +19,9 @@ package org.apache.lucene.search;
 
 import org.apache.lucene.util.LuceneTestCase;
 
-import org.apache.lucene.index.IndexWriter;
+import org.apache.lucene.index.IndexReader;
 import org.apache.lucene.index.IndexWriterConfig;
+import org.apache.lucene.index.RandomIndexWriter;
 import org.apache.lucene.queryParser.QueryParser;
 import org.apache.lucene.store.RAMDirectory;
 import org.apache.lucene.analysis.SimpleAnalyzer;
@@ -39,22 +40,24 @@ public class TestNot extends LuceneTestC
 
   public void testNot() throws Exception {
     RAMDirectory store = new RAMDirectory();
-    IndexWriter writer = new IndexWriter(store, new IndexWriterConfig(
-        TEST_VERSION_CURRENT, new SimpleAnalyzer(
-        TEST_VERSION_CURRENT)));
+    RandomIndexWriter writer = new RandomIndexWriter(newRandom(), store, 
+        new IndexWriterConfig(TEST_VERSION_CURRENT, new SimpleAnalyzer(TEST_VERSION_CURRENT)));
 
     Document d1 = new Document();
     d1.add(new Field("field", "a b", Field.Store.YES, Field.Index.ANALYZED));
 
     writer.addDocument(d1);
-    writer.optimize();
-    writer.close();
+    IndexReader reader = writer.getReader();
 
-    Searcher searcher = new IndexSearcher(store, true);
+    Searcher searcher = new IndexSearcher(reader);
       QueryParser parser = new QueryParser(TEST_VERSION_CURRENT, "field", new SimpleAnalyzer(TEST_VERSION_CURRENT));
     Query query = parser.parse("a NOT b");
     //System.out.println(query);
     ScoreDoc[] hits = searcher.search(query, null, 1000).scoreDocs;
     assertEquals(0, hits.length);
+    writer.close();
+    searcher.close();
+    reader.close();
+    store.close();
   }
 }