You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by sh...@apache.org on 2013/05/07 13:21:14 UTC

svn commit: r1479862 [17/38] - in /lucene/dev/branches/lucene4258: ./ dev-tools/ dev-tools/idea/.idea/ dev-tools/idea/.idea/libraries/ dev-tools/maven/ dev-tools/maven/solr/ dev-tools/maven/solr/core/src/java/ dev-tools/maven/solr/solrj/src/java/ dev-t...

Modified: lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/index/TestSnapshotDeletionPolicy.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/index/TestSnapshotDeletionPolicy.java?rev=1479862&r1=1479861&r2=1479862&view=diff
==============================================================================
--- lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/index/TestSnapshotDeletionPolicy.java (original)
+++ lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/index/TestSnapshotDeletionPolicy.java Tue May  7 11:20:55 2013
@@ -18,8 +18,9 @@ package org.apache.lucene.index;
  */
 
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Map;
+import java.util.List;
 import java.util.Random;
 
 import org.apache.lucene.analysis.MockAnalyzer;
@@ -28,7 +29,6 @@ import org.apache.lucene.document.FieldT
 import org.apache.lucene.document.TextField;
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.store.IndexInput;
-import org.apache.lucene.store.MockDirectoryWrapper;
 import org.apache.lucene.util.LuceneTestCase;
 import org.apache.lucene.util.ThreadInterruptedException;
 import org.junit.Test;
@@ -63,30 +63,33 @@ public class TestSnapshotDeletionPolicy 
     }
   }
 
+  protected List<IndexCommit> snapshots = new ArrayList<IndexCommit>();
+
   protected void prepareIndexAndSnapshots(SnapshotDeletionPolicy sdp,
-      IndexWriter writer, int numSnapshots, String snapshotPrefix)
+      IndexWriter writer, int numSnapshots)
       throws RuntimeException, IOException {
     for (int i = 0; i < numSnapshots; i++) {
       // create dummy document to trigger commit.
       writer.addDocument(new Document());
       writer.commit();
-      sdp.snapshot(snapshotPrefix + i);
+      snapshots.add(sdp.snapshot());
     }
   }
 
   protected SnapshotDeletionPolicy getDeletionPolicy() throws IOException {
-    return getDeletionPolicy(null);
-  }
-
-  protected SnapshotDeletionPolicy getDeletionPolicy(Map<String, String> snapshots) throws IOException {
-    return new SnapshotDeletionPolicy(new KeepOnlyLastCommitDeletionPolicy(), snapshots);
+    return new SnapshotDeletionPolicy(new KeepOnlyLastCommitDeletionPolicy());
   }
 
-  protected void assertSnapshotExists(Directory dir, SnapshotDeletionPolicy sdp, int numSnapshots) throws Exception {
+  protected void assertSnapshotExists(Directory dir, SnapshotDeletionPolicy sdp, int numSnapshots, boolean checkIndexCommitSame) throws Exception {
     for (int i = 0; i < numSnapshots; i++) {
-      IndexCommit snapshot = sdp.getSnapshot("snapshot" + i);
+      IndexCommit snapshot = snapshots.get(i);
       checkMaxDoc(snapshot, i + 1);
       checkSnapshotExists(dir, snapshot);
+      if (checkIndexCommitSame) {
+        assertSame(snapshot, sdp.getIndexCommit(snapshot.getGeneration()));
+      } else {
+        assertEquals(snapshot.getGeneration(), sdp.getIndexCommit(snapshot.getGeneration()).getGeneration());
+      }
     }
   }
   
@@ -105,6 +108,15 @@ public class TestSnapshotDeletionPolicy 
     final IndexWriter writer = new IndexWriter(dir, newIndexWriterConfig(
         TEST_VERSION_CURRENT, new MockAnalyzer(random)).setIndexDeletionPolicy(dp)
         .setMaxBufferedDocs(2));
+
+    // Verify we catch misuse:
+    try {
+      dp.snapshot();
+      fail("did not hit exception");
+    } catch(IllegalStateException ise) {
+      // expected
+    }
+    dp = (SnapshotDeletionPolicy) writer.getConfig().getIndexDeletionPolicy();
     writer.commit();
     
     final Thread t = new Thread() {
@@ -177,13 +189,14 @@ public class TestSnapshotDeletionPolicy 
    */
   public void backupIndex(Directory dir, SnapshotDeletionPolicy dp) throws Exception {
     // To backup an index we first take a snapshot:
+    IndexCommit snapshot = dp.snapshot();
     try {
-      copyFiles(dir,  dp.snapshot("id"));
+      copyFiles(dir, snapshot);
     } finally {
       // Make sure to release the snapshot, otherwise these
       // files will never be deleted during this IndexWriter
       // session:
-      dp.release("id");
+      dp.release(snapshot);
     }
   }
 
@@ -235,18 +248,20 @@ public class TestSnapshotDeletionPolicy 
   @Test
   public void testBasicSnapshots() throws Exception {
     int numSnapshots = 3;
-    SnapshotDeletionPolicy sdp = getDeletionPolicy();
     
     // Create 3 snapshots: snapshot0, snapshot1, snapshot2
     Directory dir = newDirectory();
-    IndexWriter writer = new IndexWriter(dir, getConfig(random(), sdp));
-    prepareIndexAndSnapshots(sdp, writer, numSnapshots, "snapshot");
+    IndexWriter writer = new IndexWriter(dir, getConfig(random(), getDeletionPolicy()));
+    SnapshotDeletionPolicy sdp = (SnapshotDeletionPolicy) writer.getConfig().getIndexDeletionPolicy();
+    prepareIndexAndSnapshots(sdp, writer, numSnapshots);
     writer.close();
     
-    assertSnapshotExists(dir, sdp, numSnapshots);
+    assertEquals(numSnapshots, sdp.getSnapshots().size());
+    assertEquals(numSnapshots, sdp.getSnapshotCount());
+    assertSnapshotExists(dir, sdp, numSnapshots, true);
 
     // open a reader on a snapshot - should succeed.
-    DirectoryReader.open(sdp.getSnapshot("snapshot0")).close();
+    DirectoryReader.open(snapshots.get(0)).close();
 
     // open a new IndexWriter w/ no snapshots to keep and assert that all snapshots are gone.
     sdp = getDeletionPolicy();
@@ -254,33 +269,26 @@ public class TestSnapshotDeletionPolicy 
     writer.deleteUnusedFiles();
     writer.close();
     assertEquals("no snapshots should exist", 1, DirectoryReader.listCommits(dir).size());
-    
-    for (int i = 0; i < numSnapshots; i++) {
-      try {
-        sdp.getSnapshot("snapshot" + i);
-        fail("snapshot shouldn't have existed, but did: snapshot" + i);
-      } catch (IllegalStateException e) {
-        // expected - snapshot should not exist
-      }
-    }
     dir.close();
   }
 
   @Test
   public void testMultiThreadedSnapshotting() throws Exception {
     Directory dir = newDirectory();
-    final SnapshotDeletionPolicy sdp = getDeletionPolicy();
-    final IndexWriter writer = new IndexWriter(dir, getConfig(random(), sdp));
+    final IndexWriter writer = new IndexWriter(dir, getConfig(random(), getDeletionPolicy()));
+    final SnapshotDeletionPolicy sdp = (SnapshotDeletionPolicy) writer.getConfig().getIndexDeletionPolicy();
 
     Thread[] threads = new Thread[10];
+    final IndexCommit[] snapshots = new IndexCommit[threads.length];
     for (int i = 0; i < threads.length; i++) {
+      final int finalI = i;
       threads[i] = new Thread() {
         @Override
         public void run() {
           try {
             writer.addDocument(new Document());
             writer.commit();
-            sdp.snapshot(getName());
+            snapshots[finalI] = sdp.snapshot();
           } catch (Exception e) {
             throw new RuntimeException(e);
           }
@@ -301,8 +309,8 @@ public class TestSnapshotDeletionPolicy 
     writer.addDocument(new Document());
     writer.commit();
     
-    for (Thread t : threads) {
-      sdp.release(t.getName());
+    for (int i=0;i<threads.length;i++) {
+      sdp.release(snapshots[i]);
       writer.deleteUnusedFiles();
     }
     assertEquals(1, DirectoryReader.listCommits(dir).size());
@@ -315,21 +323,22 @@ public class TestSnapshotDeletionPolicy 
     int numSnapshots = 2;
     Directory dir = newDirectory();
 
-    SnapshotDeletionPolicy sdp = getDeletionPolicy();
-    IndexWriter writer = new IndexWriter(dir, getConfig(random(), sdp));
-    prepareIndexAndSnapshots(sdp, writer, numSnapshots, "snapshot");
+    IndexWriter writer = new IndexWriter(dir, getConfig(random(), getDeletionPolicy()));
+    SnapshotDeletionPolicy sdp = (SnapshotDeletionPolicy) writer.getConfig().getIndexDeletionPolicy();
+    prepareIndexAndSnapshots(sdp, writer, numSnapshots);
     writer.close();
 
     // now open the writer on "snapshot0" - make sure it succeeds
-    writer = new IndexWriter(dir, getConfig(random(), sdp).setIndexCommit(sdp.getSnapshot("snapshot0")));
+    writer = new IndexWriter(dir, getConfig(random(), sdp).setIndexCommit(snapshots.get(0)));
     // this does the actual rollback
     writer.commit();
     writer.deleteUnusedFiles();
-    assertSnapshotExists(dir, sdp, numSnapshots - 1);
+    //sdp = (SnapshotDeletionPolicy) writer.getConfig().getIndexDeletionPolicy();
+    assertSnapshotExists(dir, sdp, numSnapshots - 1, true);
     writer.close();
 
     // but 'snapshot1' files will still exist (need to release snapshot before they can be deleted).
-    String segFileName = sdp.getSnapshot("snapshot1").getSegmentsFileName();
+    String segFileName = snapshots.get(1).getSegmentsFileName();
     assertTrue("snapshot files should exist in the directory: " + segFileName, dir.fileExists(segFileName));
 
     dir.close();
@@ -338,9 +347,9 @@ public class TestSnapshotDeletionPolicy 
   @Test
   public void testReleaseSnapshot() throws Exception {
     Directory dir = newDirectory();
-    SnapshotDeletionPolicy sdp = getDeletionPolicy();
-    IndexWriter writer = new IndexWriter(dir, getConfig(random(), sdp));
-    prepareIndexAndSnapshots(sdp, writer, 1, "snapshot");
+    IndexWriter writer = new IndexWriter(dir, getConfig(random(), getDeletionPolicy()));
+    SnapshotDeletionPolicy sdp = (SnapshotDeletionPolicy) writer.getConfig().getIndexDeletionPolicy();
+    prepareIndexAndSnapshots(sdp, writer, 1);
     
     // Create another commit - we must do that, because otherwise the "snapshot"
     // files will still remain in the index, since it's the last commit.
@@ -348,16 +357,8 @@ public class TestSnapshotDeletionPolicy 
     writer.commit();
     
     // Release
-    String snapId = "snapshot0";
-    String segFileName = sdp.getSnapshot(snapId).getSegmentsFileName();
-    sdp.release(snapId);
-    try {
-      sdp.getSnapshot(snapId);
-      fail("should not have succeeded to get an unsnapshotted id");
-    } catch (IllegalStateException e) {
-      // expected
-    }
-    assertNull(sdp.getSnapshots().get(snapId));
+    String segFileName = snapshots.get(0).getSegmentsFileName();
+    sdp.release(snapshots.get(0));
     writer.deleteUnusedFiles();
     writer.close();
     assertFalse("segments file should not be found in dirctory: " + segFileName, dir.fileExists(segFileName));
@@ -365,40 +366,17 @@ public class TestSnapshotDeletionPolicy 
   }
 
   @Test
-  public void testExistingSnapshots() throws Exception {
-    // Tests the ability to construct a SDP from existing snapshots, and
-    // asserts that those snapshots/commit points are protected.
-    int numSnapshots = 3;
-    Directory dir = newDirectory();
-    SnapshotDeletionPolicy sdp = getDeletionPolicy();
-    IndexWriter writer = new IndexWriter(dir, getConfig(random(), sdp));
-    prepareIndexAndSnapshots(sdp, writer, numSnapshots, "snapshot");
-    writer.close();
-
-    // Make a new policy and initialize with snapshots.
-    sdp = getDeletionPolicy(sdp.getSnapshots());
-    writer = new IndexWriter(dir, getConfig(random(), sdp));
-    // attempt to delete unused files - the snapshotted files should not be deleted
-    writer.deleteUnusedFiles();
-    writer.close();
-    assertSnapshotExists(dir, sdp, numSnapshots);
-    dir.close();
-  }
-
-  @Test
   public void testSnapshotLastCommitTwice() throws Exception {
     Directory dir = newDirectory();
 
-    SnapshotDeletionPolicy sdp = getDeletionPolicy();
-    IndexWriter writer = new IndexWriter(dir, getConfig(random(), sdp));
+    IndexWriter writer = new IndexWriter(dir, getConfig(random(), getDeletionPolicy()));
+    SnapshotDeletionPolicy sdp = (SnapshotDeletionPolicy) writer.getConfig().getIndexDeletionPolicy();
     writer.addDocument(new Document());
     writer.commit();
     
-    String s1 = "s1";
-    String s2 = "s2";
-    IndexCommit ic1 = sdp.snapshot(s1);
-    IndexCommit ic2 = sdp.snapshot(s2);
-    assertTrue(ic1 == ic2); // should be the same instance
+    IndexCommit s1 = sdp.snapshot();
+    IndexCommit s2 = sdp.snapshot();
+    assertSame(s1, s2); // should be the same instance
     
     // create another commit
     writer.addDocument(new Document());
@@ -407,7 +385,7 @@ public class TestSnapshotDeletionPolicy 
     // release "s1" should not delete "s2"
     sdp.release(s1);
     writer.deleteUnusedFiles();
-    checkSnapshotExists(dir, ic2);
+    checkSnapshotExists(dir, s2);
     
     writer.close();
     dir.close();
@@ -418,11 +396,11 @@ public class TestSnapshotDeletionPolicy 
     // Tests the behavior of SDP when commits that are given at ctor are missing
     // on onInit().
     Directory dir = newDirectory();
-    SnapshotDeletionPolicy sdp = getDeletionPolicy();
-    IndexWriter writer = new IndexWriter(dir, getConfig(random(), sdp));
+    IndexWriter writer = new IndexWriter(dir, getConfig(random(), getDeletionPolicy()));
+    SnapshotDeletionPolicy sdp = (SnapshotDeletionPolicy) writer.getConfig().getIndexDeletionPolicy();
     writer.addDocument(new Document());
     writer.commit();
-    IndexCommit ic = sdp.snapshot("s1");
+    IndexCommit s1 = sdp.snapshot();
 
     // create another commit, not snapshotted.
     writer.addDocument(new Document());
@@ -432,20 +410,7 @@ public class TestSnapshotDeletionPolicy 
     // commit.
     new IndexWriter(dir, getConfig(random(), null)).close();
     
-    assertFalse("snapshotted commit should not exist", dir.fileExists(ic.getSegmentsFileName()));
-    
-    // Now reinit SDP from the commits in the index - the snapshot id should not
-    // exist anymore.
-    sdp = getDeletionPolicy(sdp.getSnapshots());
-    new IndexWriter(dir, getConfig(random(), sdp)).close();
-    
-    try {
-      sdp.getSnapshot("s1");
-      fail("snapshot s1 should not exist");
-    } catch (IllegalStateException e) {
-      // expected.
-    }
+    assertFalse("snapshotted commit should not exist", dir.fileExists(s1.getSegmentsFileName()));
     dir.close();
   }
-
 }

Modified: lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/index/TestStressIndexing.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/index/TestStressIndexing.java?rev=1479862&r1=1479861&r2=1479862&view=diff
==============================================================================
--- lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/index/TestStressIndexing.java (original)
+++ lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/index/TestStressIndexing.java Tue May  7 11:20:55 2013
@@ -104,7 +104,7 @@ public class TestStressIndexing extends 
     public void doWork() throws Throwable {
       for (int i=0; i<100; i++) {
         IndexReader ir = DirectoryReader.open(directory);
-        IndexSearcher is = new IndexSearcher(ir);
+        IndexSearcher is = newSearcher(ir);
         ir.close();
       }
       count += 100;

Modified: lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/index/TestStressNRT.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/index/TestStressNRT.java?rev=1479862&r1=1479861&r2=1479862&view=diff
==============================================================================
--- lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/index/TestStressNRT.java (original)
+++ lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/index/TestStressNRT.java Tue May  7 11:20:55 2013
@@ -298,6 +298,9 @@ public class TestStressNRT extends Lucen
         @Override
         public void run() {
           try {
+            IndexReader lastReader = null;
+            IndexSearcher lastSearcher = null;
+
             while (operations.decrementAndGet() >= 0) {
               // bias toward a recently changed doc
               int id = rand.nextInt(100) < 25 ? lastId : rand.nextInt(ndocs);
@@ -318,7 +321,17 @@ public class TestStressNRT extends Lucen
               }
 
               //  sreq = req("wt","json", "q","id:"+Integer.toString(id), "omitHeader","true");
-              IndexSearcher searcher = new IndexSearcher(r);
+              IndexSearcher searcher;
+              if (r == lastReader) {
+                // Just re-use lastSearcher, else
+                // newSearcher may create too many thread
+                // pools (ExecutorService):
+                searcher = lastSearcher;
+              } else {
+                searcher = newSearcher(r);
+                lastReader = r;
+                lastSearcher = searcher;
+              }
               Query q = new TermQuery(new Term("id",Integer.toString(id)));
               TopDocs results = searcher.search(q, 10);
 

Modified: lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/index/TestTermVectorsReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/index/TestTermVectorsReader.java?rev=1479862&r1=1479861&r2=1479862&view=diff
==============================================================================
--- lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/index/TestTermVectorsReader.java (original)
+++ lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/index/TestTermVectorsReader.java Tue May  7 11:20:55 2013
@@ -229,7 +229,7 @@ public class TestTermVectorsReader exten
         docsEnum = _TestUtil.docs(random(), termsEnum, null, docsEnum, DocsEnum.FLAG_NONE);
         assertNotNull(docsEnum);
         int doc = docsEnum.docID();
-        assertTrue(doc == -1 || doc == DocIdSetIterator.NO_MORE_DOCS);
+        assertEquals(-1, doc);
         assertTrue(docsEnum.nextDoc() != DocIdSetIterator.NO_MORE_DOCS);
         assertEquals(DocIdSetIterator.NO_MORE_DOCS, docsEnum.nextDoc());
       }
@@ -256,7 +256,7 @@ public class TestTermVectorsReader exten
       dpEnum = termsEnum.docsAndPositions(null, dpEnum);
       assertNotNull(dpEnum);
       int doc = dpEnum.docID();
-      assertTrue(doc == -1 || doc == DocIdSetIterator.NO_MORE_DOCS);
+      assertEquals(-1, doc);
       assertTrue(dpEnum.nextDoc() != DocIdSetIterator.NO_MORE_DOCS);
       assertEquals(dpEnum.freq(), positions[i].length);
       for (int j = 0; j < positions[i].length; j++) {
@@ -266,7 +266,7 @@ public class TestTermVectorsReader exten
 
       dpEnum = termsEnum.docsAndPositions(null, dpEnum);
       doc = dpEnum.docID();
-      assertTrue(doc == -1 || doc == DocIdSetIterator.NO_MORE_DOCS);
+      assertEquals(-1, doc);
       assertTrue(dpEnum.nextDoc() != DocIdSetIterator.NO_MORE_DOCS);
       assertNotNull(dpEnum);
       assertEquals(dpEnum.freq(), positions[i].length);

Modified: lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/index/TestTermVectorsWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/index/TestTermVectorsWriter.java?rev=1479862&r1=1479861&r2=1479862&view=diff
==============================================================================
--- lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/index/TestTermVectorsWriter.java (original)
+++ lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/index/TestTermVectorsWriter.java Tue May  7 11:20:55 2013
@@ -213,7 +213,7 @@ public class TestTermVectorsWriter exten
   public void testEndOffsetPositionStopFilter() throws Exception {
     Directory dir = newDirectory();
     IndexWriter w = new IndexWriter(dir, newIndexWriterConfig( 
-        TEST_VERSION_CURRENT, new MockAnalyzer(random(), MockTokenizer.SIMPLE, true, MockTokenFilter.ENGLISH_STOPSET, true)));
+        TEST_VERSION_CURRENT, new MockAnalyzer(random(), MockTokenizer.SIMPLE, true, MockTokenFilter.ENGLISH_STOPSET)));
     Document doc = new Document();
     FieldType customType = new FieldType(TextField.TYPE_NOT_STORED);
     customType.setStoreTermVectors(true);

Modified: lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/index/TestTransactionRollback.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/index/TestTransactionRollback.java?rev=1479862&r1=1479861&r2=1479862&view=diff
==============================================================================
--- lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/index/TestTransactionRollback.java (original)
+++ lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/index/TestTransactionRollback.java Tue May  7 11:20:55 2013
@@ -156,7 +156,7 @@ public class TestTransactionRollback ext
   }
 
   // Rolls back to previous commit point
-  class RollbackDeletionPolicy implements IndexDeletionPolicy {
+  class RollbackDeletionPolicy extends IndexDeletionPolicy {
     private int rollbackPoint;
 
     public RollbackDeletionPolicy(int rollbackPoint) {
@@ -196,7 +196,7 @@ public class TestTransactionRollback ext
     }
   }
 
-  class DeleteLastCommitPolicy implements IndexDeletionPolicy {
+  class DeleteLastCommitPolicy extends IndexDeletionPolicy {
 
     @Override
     public void onCommit(List<? extends IndexCommit> commits) throws IOException {}
@@ -221,7 +221,7 @@ public class TestTransactionRollback ext
   }
 
   // Keeps all commit points (used to build index)
-  class KeepAllDeletionPolicy implements IndexDeletionPolicy {
+  class KeepAllDeletionPolicy extends IndexDeletionPolicy {
     @Override
     public void onCommit(List<? extends IndexCommit> commits) throws IOException {}
     @Override

Modified: lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/index/TestTransactions.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/index/TestTransactions.java?rev=1479862&r1=1479861&r2=1479862&view=diff
==============================================================================
--- lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/index/TestTransactions.java (original)
+++ lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/index/TestTransactions.java Tue May  7 11:20:55 2013
@@ -181,13 +181,27 @@ public class TestTransactions extends Lu
 
     @Override
     public void doWork() throws Throwable {
-      IndexReader r1, r2;
+      IndexReader r1=null, r2=null;
       synchronized(lock) {
-        r1 = DirectoryReader.open(dir1);
-        r2 = DirectoryReader.open(dir2);
+        try {
+          r1 = DirectoryReader.open(dir1);
+          r2 = DirectoryReader.open(dir2);
+        } catch (IOException e) {
+          if (!e.getMessage().contains("on purpose")) {
+            throw e;
+          }
+          if (r1 != null) {
+            r1.close();
+          }
+          if (r2 != null) {
+            r2.close();
+          }
+          return;
+        }
       }
-      if (r1.numDocs() != r2.numDocs())
+      if (r1.numDocs() != r2.numDocs()) {
         throw new RuntimeException("doc counts differ: r1=" + r1.numDocs() + " r2=" + r2.numDocs());
+      }
       r1.close();
       r2.close();
     }

Modified: lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestBooleanMinShouldMatch.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestBooleanMinShouldMatch.java?rev=1479862&r1=1479861&r2=1479862&view=diff
==============================================================================
--- lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestBooleanMinShouldMatch.java (original)
+++ lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestBooleanMinShouldMatch.java Tue May  7 11:20:55 2013
@@ -86,12 +86,22 @@ public class TestBooleanMinShouldMatch e
 
 
     public void verifyNrHits(Query q, int expected) throws Exception {
+        // bs1
         ScoreDoc[] h = s.search(q, null, 1000).scoreDocs;
         if (expected != h.length) {
             printHits(getTestName(), h, s);
         }
         assertEquals("result count", expected, h.length);
         //System.out.println("TEST: now check");
+        // bs2
+        TopScoreDocCollector collector = TopScoreDocCollector.create(1000, true);
+        s.search(q, collector);
+        ScoreDoc[] h2 = collector.topDocs().scoreDocs;
+        if (expected != h2.length) {
+          printHits(getTestName(), h2, s);
+        }
+        assertEquals("result count (bs2)", expected, h2.length);
+
         QueryUtils.check(random(), q,s);
     }
 

Modified: lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestBooleanQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestBooleanQuery.java?rev=1479862&r1=1479861&r2=1479862&view=diff
==============================================================================
--- lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestBooleanQuery.java (original)
+++ lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestBooleanQuery.java Tue May  7 11:20:55 2013
@@ -164,7 +164,7 @@ public class TestBooleanQuery extends Lu
     query.add(wildcardQuery, BooleanClause.Occur.MUST_NOT);
     
     MultiReader multireader = new MultiReader(reader1, reader2);
-    IndexSearcher searcher = new IndexSearcher(multireader);
+    IndexSearcher searcher = newSearcher(multireader);
     assertEquals(0, searcher.search(query, 10).totalHits);
     
     final ExecutorService es = Executors.newCachedThreadPool(new NamedThreadFactory("NRT search threads"));
@@ -307,7 +307,7 @@ public class TestBooleanQuery extends Lu
     writer.close();
 
     IndexReader indexReader = DirectoryReader.open(directory);
-    IndexSearcher searcher = new IndexSearcher(indexReader);
+    IndexSearcher searcher = newSearcher(indexReader);
 
     BooleanQuery query = new BooleanQuery();
     SpanQuery sq1 = new SpanTermQuery(new Term(FIELD, "clockwork"));

Modified: lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestBooleanQueryVisitSubscorers.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestBooleanQueryVisitSubscorers.java?rev=1479862&r1=1479861&r2=1479862&view=diff
==============================================================================
--- lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestBooleanQueryVisitSubscorers.java (original)
+++ lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestBooleanQueryVisitSubscorers.java Tue May  7 11:20:55 2013
@@ -61,7 +61,7 @@ public class TestBooleanQueryVisitSubsco
     writer.addDocument(doc("nutch", "nutch is an internet search engine with web crawler and is using lucene and hadoop"));
     reader = writer.getReader();
     writer.close();
-    searcher = new IndexSearcher(reader);
+    searcher = newSearcher(reader);
   }
   
   @Override

Modified: lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestBooleanScorer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestBooleanScorer.java?rev=1479862&r1=1479861&r2=1479862&view=diff
==============================================================================
--- lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestBooleanScorer.java (original)
+++ lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestBooleanScorer.java Tue May  7 11:20:55 2013
@@ -152,13 +152,12 @@ public class TestBooleanScorer extends L
                             
     final int[] count = new int[1];
     s.search(q, new Collector() {
-      private Scorer scorer;
     
       @Override
       public void setScorer(Scorer scorer) {
         // Make sure we got BooleanScorer:
-        this.scorer = scorer;
-        assertEquals("Scorer is implemented by wrong class", BooleanScorer.class.getName() + "$BucketScorer", scorer.getClass().getName());
+        final Class<?> clazz = scorer instanceof AssertingScorer ? ((AssertingScorer) scorer).getIn().getClass() : scorer.getClass();
+        assertEquals("Scorer is implemented by wrong class", BooleanScorer.class.getName() + "$BucketScorer", clazz.getName());
       }
       
       @Override

Modified: lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestCachingWrapperFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestCachingWrapperFilter.java?rev=1479862&r1=1479861&r2=1479862&view=diff
==============================================================================
--- lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestCachingWrapperFilter.java (original)
+++ lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestCachingWrapperFilter.java Tue May  7 11:20:55 2013
@@ -80,7 +80,7 @@ public class TestCachingWrapperFilter ex
     CachingWrapperFilter cacher = new CachingWrapperFilter(filter);
 
     // the caching filter should return the empty set constant
-    assertSame(DocIdSet.EMPTY_DOCIDSET, cacher.getDocIdSet(context, context.reader().getLiveDocs()));
+    assertNull(cacher.getDocIdSet(context, context.reader().getLiveDocs()));
     
     reader.close();
     dir.close();
@@ -108,7 +108,7 @@ public class TestCachingWrapperFilter ex
     CachingWrapperFilter cacher = new CachingWrapperFilter(filter);
 
     // the caching filter should return the empty set constant
-    assertSame(DocIdSet.EMPTY_DOCIDSET, cacher.getDocIdSet(context, context.reader().getLiveDocs()));
+    assertNull(cacher.getDocIdSet(context, context.reader().getLiveDocs()));
     
     reader.close();
     dir.close();
@@ -120,13 +120,20 @@ public class TestCachingWrapperFilter ex
     final CachingWrapperFilter cacher = new CachingWrapperFilter(filter);
     final DocIdSet originalSet = filter.getDocIdSet(context, context.reader().getLiveDocs());
     final DocIdSet cachedSet = cacher.getDocIdSet(context, context.reader().getLiveDocs());
-    assertTrue(cachedSet.isCacheable());
-    assertEquals(shouldCacheable, originalSet.isCacheable());
-    //System.out.println("Original: "+originalSet.getClass().getName()+" -- cached: "+cachedSet.getClass().getName());
-    if (originalSet.isCacheable()) {
-      assertEquals("Cached DocIdSet must be of same class like uncached, if cacheable", originalSet.getClass(), cachedSet.getClass());
+    if (originalSet == null) {
+      assertNull(cachedSet);
+    }
+    if (cachedSet == null) {
+      assertTrue(originalSet == null || originalSet.iterator() == null);
     } else {
-      assertTrue("Cached DocIdSet must be an FixedBitSet if the original one was not cacheable", cachedSet instanceof FixedBitSet || cachedSet == DocIdSet.EMPTY_DOCIDSET);
+      assertTrue(cachedSet.isCacheable());
+      assertEquals(shouldCacheable, originalSet.isCacheable());
+      //System.out.println("Original: "+originalSet.getClass().getName()+" -- cached: "+cachedSet.getClass().getName());
+      if (originalSet.isCacheable()) {
+        assertEquals("Cached DocIdSet must be of same class like uncached, if cacheable", originalSet.getClass(), cachedSet.getClass());
+      } else {
+        assertTrue("Cached DocIdSet must be an FixedBitSet if the original one was not cacheable", cachedSet instanceof FixedBitSet || cachedSet == null);
+      }
     }
   }
   
@@ -192,6 +199,7 @@ public class TestCachingWrapperFilter ex
     CachingWrapperFilter filter = new CachingWrapperFilter(startFilter);
 
     docs = searcher.search(new MatchAllDocsQuery(), filter, 1);
+    assertTrue(filter.sizeInBytes() > 0);
 
     assertEquals("[query + filter] Should find a hit...", 1, docs.totalHits);
 

Modified: lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestConjunctions.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestConjunctions.java?rev=1479862&r1=1479861&r2=1479862&view=diff
==============================================================================
--- lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestConjunctions.java (original)
+++ lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestConjunctions.java Tue May  7 11:20:55 2013
@@ -58,7 +58,7 @@ public class TestConjunctions extends Lu
     writer.addDocument(doc("nutch", "nutch is an internet search engine with web crawler and is using lucene and hadoop"));
     reader = writer.getReader();
     writer.close();
-    searcher = new IndexSearcher(reader);
+    searcher = newSearcher(reader);
     searcher.setSimilarity(new TFSimilarity());
   }
   

Modified: lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestConstantScoreQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestConstantScoreQuery.java?rev=1479862&r1=1479861&r2=1479862&view=diff
==============================================================================
--- lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestConstantScoreQuery.java (original)
+++ lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestConstantScoreQuery.java Tue May  7 11:20:55 2013
@@ -145,7 +145,7 @@ public class TestConstantScoreQuery exte
     Filter filterB = new CachingWrapperFilter(new QueryWrapperFilter(new TermQuery(new Term("field", "b"))));
     Query query = new ConstantScoreQuery(filterB);
 
-    IndexSearcher s = new IndexSearcher(r);
+    IndexSearcher s = newSearcher(r);
     assertEquals(1, s.search(query, filterB, 1).totalHits); // Query for field:b, Filter field:b
 
     Filter filterA = new CachingWrapperFilter(new QueryWrapperFilter(new TermQuery(new Term("field", "a"))));

Modified: lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestDisjunctionMaxQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestDisjunctionMaxQuery.java?rev=1479862&r1=1479861&r2=1479862&view=diff
==============================================================================
--- lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestDisjunctionMaxQuery.java (original)
+++ lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestDisjunctionMaxQuery.java Tue May  7 11:20:55 2013
@@ -19,12 +19,16 @@ package org.apache.lucene.search;
 
 import org.apache.lucene.document.Field;
 import org.apache.lucene.util.LuceneTestCase;
+import org.apache.lucene.analysis.Analyzer;
 import org.apache.lucene.analysis.MockAnalyzer;
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.FieldType;
 import org.apache.lucene.document.TextField;
 import org.apache.lucene.index.AtomicReaderContext;
+import org.apache.lucene.index.DirectoryReader;
 import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexWriter;
+import org.apache.lucene.index.IndexWriterConfig;
 import org.apache.lucene.index.SlowCompositeReaderWrapper;
 import org.apache.lucene.index.FieldInvertState;
 import org.apache.lucene.index.RandomIndexWriter;
@@ -32,6 +36,8 @@ import org.apache.lucene.index.StoredDoc
 import org.apache.lucene.index.Term;
 import org.apache.lucene.search.similarities.DefaultSimilarity;
 import org.apache.lucene.search.similarities.Similarity;
+import org.apache.lucene.search.spans.SpanQuery;
+import org.apache.lucene.search.spans.SpanTermQuery;
 import org.apache.lucene.store.Directory;
 
 import java.text.DecimalFormat;
@@ -470,6 +476,39 @@ public class TestDisjunctionMaxQuery ext
     }
   }
   
+  // LUCENE-4477 / LUCENE-4401:
+  public void testBooleanSpanQuery() throws Exception {
+    int hits = 0;
+    Directory directory = newDirectory();
+    Analyzer indexerAnalyzer = new MockAnalyzer(random());
+
+    IndexWriterConfig config = new IndexWriterConfig(TEST_VERSION_CURRENT, indexerAnalyzer);
+    IndexWriter writer = new IndexWriter(directory, config);
+    String FIELD = "content";
+    Document d = new Document();
+    d.add(new TextField(FIELD, "clockwork orange", Field.Store.YES));
+    writer.addDocument(d);
+    writer.close();
+
+    IndexReader indexReader = DirectoryReader.open(directory);
+    IndexSearcher searcher = newSearcher(indexReader);
+
+    DisjunctionMaxQuery query = new DisjunctionMaxQuery(1.0f);
+    SpanQuery sq1 = new SpanTermQuery(new Term(FIELD, "clockwork"));
+    SpanQuery sq2 = new SpanTermQuery(new Term(FIELD, "clckwork"));
+    query.add(sq1);
+    query.add(sq2);
+    TopScoreDocCollector collector = TopScoreDocCollector.create(1000, true);
+    searcher.search(query, collector);
+    hits = collector.topDocs().scoreDocs.length;
+    for (ScoreDoc scoreDoc : collector.topDocs().scoreDocs){
+      System.out.println(scoreDoc.doc);
+    }
+    indexReader.close();
+    assertEquals(hits, 1);
+    directory.close();
+  }
+  
   /** macro */
   protected Query tq(String f, String t) {
     return new TermQuery(new Term(f, t));

Modified: lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestDocIdSet.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestDocIdSet.java?rev=1479862&r1=1479861&r2=1479862&view=diff
==============================================================================
--- lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestDocIdSet.java (original)
+++ lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestDocIdSet.java Tue May  7 11:20:55 2013
@@ -17,6 +17,7 @@ package org.apache.lucene.search;
  * limitations under the License.
  */
 
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Iterator;
@@ -55,9 +56,8 @@ public class TestDocIdSet extends Lucene
             }
 
             @Override
-            public int advance(int target) {
-              while (nextDoc() < target) {}
-              return docid;
+            public int advance(int target) throws IOException {
+              return slowAdvance(target);
             }
             
             @Override

Modified: lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestFieldValueFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestFieldValueFilter.java?rev=1479862&r1=1479861&r2=1479862&view=diff
==============================================================================
--- lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestFieldValueFilter.java (original)
+++ lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestFieldValueFilter.java Tue May  7 11:20:55 2013
@@ -47,7 +47,7 @@ public class TestFieldValueFilter extend
     }
 
     IndexReader reader = DirectoryReader.open(directory);
-    IndexSearcher searcher = new IndexSearcher(reader);
+    IndexSearcher searcher = newSearcher(reader);
     TopDocs search = searcher.search(new TermQuery(new Term("all", "test")),
         new FieldValueFilter("some", true), docs);
     assertEquals(search.totalHits, numDocsNoValue);
@@ -74,7 +74,7 @@ public class TestFieldValueFilter extend
       }
     }
     IndexReader reader = DirectoryReader.open(directory);
-    IndexSearcher searcher = new IndexSearcher(reader);
+    IndexSearcher searcher = newSearcher(reader);
     TopDocs search = searcher.search(new TermQuery(new Term("all", "test")),
         new FieldValueFilter("some"), docs);
     assertEquals(search.totalHits, numDocsWithValue);

Modified: lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestFilteredSearch.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestFilteredSearch.java?rev=1479862&r1=1479861&r2=1479862&view=diff
==============================================================================
--- lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestFilteredSearch.java (original)
+++ lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestFilteredSearch.java Tue May  7 11:20:55 2013
@@ -51,8 +51,6 @@ public class TestFilteredSearch extends 
     searchFiltered(writer, directory, filter, enforceSingleSegment);
     // run the test on more than one segment
     enforceSingleSegment = false;
-    // reset - it is stateful
-    filter.reset();
     writer.close();
     writer = new IndexWriter(directory, newIndexWriterConfig( TEST_VERSION_CURRENT, new MockAnalyzer(random())).setOpenMode(OpenMode.CREATE).setMaxBufferedDocs(10).setMergePolicy(newLogMergePolicy()));
     // we index 60 docs - this will create 6 segments
@@ -61,37 +59,30 @@ public class TestFilteredSearch extends 
     directory.close();
   }
 
-  public void searchFiltered(IndexWriter writer, Directory directory, Filter filter, boolean fullMerge) {
-    try {
-      for (int i = 0; i < 60; i++) {//Simple docs
-        Document doc = new Document();
-        doc.add(newStringField(FIELD, Integer.toString(i), Field.Store.YES));
-        writer.addDocument(doc);
-      }
-      if (fullMerge) {
-        writer.forceMerge(1);
-      }
-      writer.close();
+  public void searchFiltered(IndexWriter writer, Directory directory, Filter filter, boolean fullMerge) throws IOException {
+    for (int i = 0; i < 60; i++) {//Simple docs
+      Document doc = new Document();
+      doc.add(newStringField(FIELD, Integer.toString(i), Field.Store.YES));
+      writer.addDocument(doc);
+    }
+    if (fullMerge) {
+      writer.forceMerge(1);
+    }
+    writer.close();
 
-      BooleanQuery booleanQuery = new BooleanQuery();
-      booleanQuery.add(new TermQuery(new Term(FIELD, "36")), BooleanClause.Occur.SHOULD);
+    BooleanQuery booleanQuery = new BooleanQuery();
+    booleanQuery.add(new TermQuery(new Term(FIELD, "36")), BooleanClause.Occur.SHOULD);
      
      
-      IndexReader reader = DirectoryReader.open(directory);
-      IndexSearcher indexSearcher = new IndexSearcher(reader);
-      ScoreDoc[] hits = indexSearcher.search(booleanQuery, filter, 1000).scoreDocs;
-      assertEquals("Number of matched documents", 1, hits.length);
-      reader.close();
-    }
-    catch (IOException e) {
-      fail(e.getMessage());
-    }
-    
+    IndexReader reader = DirectoryReader.open(directory);
+    IndexSearcher indexSearcher = newSearcher(reader);
+    ScoreDoc[] hits = indexSearcher.search(booleanQuery, filter, 1000).scoreDocs;
+    assertEquals("Number of matched documents", 1, hits.length);
+    reader.close();
   }
  
   public static final class SimpleDocIdSetFilter extends Filter {
     private final int[] docs;
-    private int index;
     
     public SimpleDocIdSetFilter(int[] docs) {
       this.docs = docs;
@@ -103,20 +94,14 @@ public class TestFilteredSearch extends 
       final FixedBitSet set = new FixedBitSet(context.reader().maxDoc());
       int docBase = context.docBase;
       final int limit = docBase+context.reader().maxDoc();
-      for (;index < docs.length; index++) {
+      for (int index=0;index < docs.length; index++) {
         final int docId = docs[index];
-        if(docId > limit)
-          break;
-        if (docId >= docBase) {
+        if (docId >= docBase && docId < limit) {
           set.set(docId-docBase);
         }
       }
       return set.cardinality() == 0 ? null:set;
     }
-    
-    public void reset(){
-      index = 0;
-    }
   }
 
 }

Modified: lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestLiveFieldValues.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestLiveFieldValues.java?rev=1479862&r1=1479861&r2=1479862&view=diff
==============================================================================
--- lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestLiveFieldValues.java (original)
+++ lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestLiveFieldValues.java Tue May  7 11:20:55 2013
@@ -25,7 +25,6 @@ import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 import java.util.Random;
-import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.CountDownLatch;
 
 import org.apache.lucene.analysis.MockAnalyzer;
@@ -36,10 +35,8 @@ import org.apache.lucene.document.String
 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.StoredDocument;
 import org.apache.lucene.index.Term;
-import org.apache.lucene.search.NRTManager.TrackingIndexWriter;
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.util.LuceneTestCase;
 import org.apache.lucene.util._TestUtil;
@@ -50,10 +47,9 @@ public class TestLiveFieldValues extends
     Directory dir = newFSDirectory(_TestUtil.getTempDir("livefieldupdates"));
     IndexWriterConfig iwc = newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random()));
 
-    final IndexWriter _w = new IndexWriter(dir, iwc);
-    final TrackingIndexWriter w = new TrackingIndexWriter(_w);
+    final IndexWriter w = new IndexWriter(dir, iwc);
 
-    final NRTManager mgr = new NRTManager(w, new SearcherFactory() {
+    final SearcherManager mgr = new SearcherManager(w, true, new SearcherFactory() {
         @Override
         public IndexSearcher newSearcher(IndexReader r) {
           return new IndexSearcher(r);
@@ -174,7 +170,7 @@ public class TestLiveFieldValues extends
 
     rt.close();
     mgr.close();
-    _w.close();
+    w.close();
     dir.close();
   }
 }

Modified: lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestMultiPhraseQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestMultiPhraseQuery.java?rev=1479862&r1=1479861&r2=1479862&view=diff
==============================================================================
--- lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestMultiPhraseQuery.java (original)
+++ lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestMultiPhraseQuery.java Tue May  7 11:20:55 2013
@@ -376,7 +376,7 @@ public class TestMultiPhraseQuery extend
     writer.addDocument(doc);
     IndexReader r = writer.getReader();
     writer.close();
-    IndexSearcher s = new IndexSearcher(r);
+    IndexSearcher s = newSearcher(r);
     MultiPhraseQuery mpq = new MultiPhraseQuery();
     //mpq.setSlop(1);
 
@@ -474,7 +474,7 @@ public class TestMultiPhraseQuery extend
     writer.addDocument(doc);
     IndexReader r = DirectoryReader.open(writer,false);
     writer.close();
-    IndexSearcher s = new IndexSearcher(r);
+    IndexSearcher s = newSearcher(r);
     
     if (VERBOSE) {
       System.out.println("QUERY=" + q);

Modified: lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestNGramPhraseQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestNGramPhraseQuery.java?rev=1479862&r1=1479861&r2=1479862&view=diff
==============================================================================
--- lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestNGramPhraseQuery.java (original)
+++ lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestNGramPhraseQuery.java Tue May  7 11:20:55 2013
@@ -88,6 +88,17 @@ public class TestNGramPhraseQuery extend
     pq3 = (PhraseQuery)q;
     assertArrayEquals(new Term[]{new Term("f", "ABC"), new Term("f", "DEF"), new Term("f", "FGH")}, pq3.getTerms());
     assertArrayEquals(new int[]{0, 3, 5}, pq3.getPositions());
+    
+    // LUCENE-4970: boosting test
+    PhraseQuery pq4 = new NGramPhraseQuery(2);
+    pq4.add(new Term("f", "AB"));
+    pq4.add(new Term("f", "BC"));
+    pq4.add(new Term("f", "CD"));
+    pq4.setBoost(100.0F);
+    
+    q = pq4.rewrite(reader);
+    assertNotSame(pq4, q);
+    assertEquals(pq4.getBoost(), q.getBoost(), 0.1f);
   }
 
 }

Modified: lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestNumericRangeQuery32.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestNumericRangeQuery32.java?rev=1479862&r1=1479861&r2=1479862&view=diff
==============================================================================
--- lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestNumericRangeQuery32.java (original)
+++ lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestNumericRangeQuery32.java Tue May  7 11:20:55 2013
@@ -200,13 +200,11 @@ public class TestNumericRangeQuery32 ext
   public void testInverseRange() throws Exception {
     AtomicReaderContext context = SlowCompositeReaderWrapper.wrap(reader).getContext();
     NumericRangeFilter<Integer> f = NumericRangeFilter.newIntRange("field8", 8, 1000, -1000, true, true);
-    assertSame("A inverse range should return the EMPTY_DOCIDSET instance", DocIdSet.EMPTY_DOCIDSET, f.getDocIdSet(context, context.reader().getLiveDocs()));
+    assertNull("A inverse range should return the null instance", f.getDocIdSet(context, context.reader().getLiveDocs()));
     f = NumericRangeFilter.newIntRange("field8", 8, Integer.MAX_VALUE, null, false, false);
-    assertSame("A exclusive range starting with Integer.MAX_VALUE should return the EMPTY_DOCIDSET instance",
-               DocIdSet.EMPTY_DOCIDSET, f.getDocIdSet(context, context.reader().getLiveDocs()));
+    assertNull("A exclusive range starting with Integer.MAX_VALUE should return the null instance", f.getDocIdSet(context, context.reader().getLiveDocs()));
     f = NumericRangeFilter.newIntRange("field8", 8, null, Integer.MIN_VALUE, false, false);
-    assertSame("A exclusive range ending with Integer.MIN_VALUE should return the EMPTY_DOCIDSET instance",
-               DocIdSet.EMPTY_DOCIDSET, f.getDocIdSet(context, context.reader().getLiveDocs()));
+    assertNull("A exclusive range ending with Integer.MIN_VALUE should return the null instance", f.getDocIdSet(context, context.reader().getLiveDocs()));
   }
   
   @Test
@@ -327,7 +325,7 @@ public class TestNumericRangeQuery32 ext
     writer.close();
     
     IndexReader r = DirectoryReader.open(dir);
-    IndexSearcher s = new IndexSearcher(r);
+    IndexSearcher s = newSearcher(r);
     
     Query q=NumericRangeQuery.newIntRange("int", null, null, true, true);
     TopDocs topDocs = s.search(q, 10);

Modified: lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestNumericRangeQuery64.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestNumericRangeQuery64.java?rev=1479862&r1=1479861&r2=1479862&view=diff
==============================================================================
--- lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestNumericRangeQuery64.java (original)
+++ lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestNumericRangeQuery64.java Tue May  7 11:20:55 2013
@@ -214,14 +214,14 @@ public class TestNumericRangeQuery64 ext
   public void testInverseRange() throws Exception {
     AtomicReaderContext context = SlowCompositeReaderWrapper.wrap(searcher.getIndexReader()).getContext();
     NumericRangeFilter<Long> f = NumericRangeFilter.newLongRange("field8", 8, 1000L, -1000L, true, true);
-    assertSame("A inverse range should return the EMPTY_DOCIDSET instance", DocIdSet.EMPTY_DOCIDSET,
+    assertNull("A inverse range should return the null instance", 
         f.getDocIdSet(context, context.reader().getLiveDocs()));
     f = NumericRangeFilter.newLongRange("field8", 8, Long.MAX_VALUE, null, false, false);
-    assertSame("A exclusive range starting with Long.MAX_VALUE should return the EMPTY_DOCIDSET instance",
-               DocIdSet.EMPTY_DOCIDSET, f.getDocIdSet(context, context.reader().getLiveDocs()));
+    assertNull("A exclusive range starting with Long.MAX_VALUE should return the null instance",
+               f.getDocIdSet(context, context.reader().getLiveDocs()));
     f = NumericRangeFilter.newLongRange("field8", 8, null, Long.MIN_VALUE, false, false);
-    assertSame("A exclusive range ending with Long.MIN_VALUE should return the EMPTY_DOCIDSET instance",
-               DocIdSet.EMPTY_DOCIDSET, f.getDocIdSet(context, context.reader().getLiveDocs()));
+    assertNull("A exclusive range ending with Long.MIN_VALUE should return the null instance",
+               f.getDocIdSet(context, context.reader().getLiveDocs()));
   }
   
   @Test
@@ -352,7 +352,7 @@ public class TestNumericRangeQuery64 ext
     writer.close();
     
     IndexReader r = DirectoryReader.open(dir);
-    IndexSearcher s = new IndexSearcher(r);
+    IndexSearcher s = newSearcher(r);
     
     Query q=NumericRangeQuery.newLongRange("long", null, null, true, true);
     TopDocs topDocs = s.search(q, 10);

Modified: lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestPhraseQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestPhraseQuery.java?rev=1479862&r1=1479861&r2=1479862&view=diff
==============================================================================
--- lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestPhraseQuery.java (original)
+++ lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestPhraseQuery.java Tue May  7 11:20:55 2013
@@ -222,7 +222,7 @@ public class TestPhraseQuery extends Luc
   
   public void testPhraseQueryWithStopAnalyzer() throws Exception {
     Directory directory = newDirectory();
-    Analyzer stopAnalyzer = new MockAnalyzer(random(), MockTokenizer.SIMPLE, true, MockTokenFilter.ENGLISH_STOPSET, false);
+    Analyzer stopAnalyzer = new MockAnalyzer(random(), MockTokenizer.SIMPLE, true, MockTokenFilter.ENGLISH_STOPSET);
     RandomIndexWriter writer = new RandomIndexWriter(random(), directory, 
         newIndexWriterConfig( Version.LUCENE_40, stopAnalyzer));
     Document doc = new Document();
@@ -241,16 +241,6 @@ public class TestPhraseQuery extends Luc
     assertEquals(1, hits.length);
     QueryUtils.check(random(), query,searcher);
 
-
-    // StopAnalyzer as of 2.4 does not leave "holes", so this matches.
-    query = new PhraseQuery();
-    query.add(new Term("field", "words"));
-    query.add(new Term("field", "here"));
-    hits = searcher.search(query, null, 1000).scoreDocs;
-    assertEquals(1, hits.length);
-    QueryUtils.check(random(), query,searcher);
-
-
     reader.close();
     directory.close();
   }

Modified: lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestQueryWrapperFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestQueryWrapperFilter.java?rev=1479862&r1=1479861&r2=1479862&view=diff
==============================================================================
--- lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestQueryWrapperFilter.java (original)
+++ lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestQueryWrapperFilter.java Tue May  7 11:20:55 2013
@@ -113,7 +113,7 @@ public class TestQueryWrapperFilter exte
 
     final IndexReader r = w.getReader();
     w.close();
-    final TopDocs hits = new IndexSearcher(r).search(new MatchAllDocsQuery(),
+    final TopDocs hits = newSearcher(r).search(new MatchAllDocsQuery(),
                                                      new QueryWrapperFilter(new TermQuery(new Term("field", "a"))),
                                                      numDocs);
     assertEquals(aDocs.size(), hits.totalHits);

Modified: lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestSameScoresWithThreads.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestSameScoresWithThreads.java?rev=1479862&r1=1479861&r2=1479862&view=diff
==============================================================================
--- lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestSameScoresWithThreads.java (original)
+++ lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestSameScoresWithThreads.java Tue May  7 11:20:55 2013
@@ -57,7 +57,7 @@ public class TestSameScoresWithThreads e
     //System.out.println("numDocs=" + r.numDocs());
     w.close();
 
-    final IndexSearcher s = new IndexSearcher(r);
+    final IndexSearcher s = newSearcher(r);
     Terms terms = MultiFields.getFields(r).terms("body");
     int termCount = 0;
     TermsEnum termsEnum = terms.iterator(null);

Modified: lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestScorerPerf.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestScorerPerf.java?rev=1479862&r1=1479861&r2=1479862&view=diff
==============================================================================
--- lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestScorerPerf.java (original)
+++ lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestScorerPerf.java Tue May  7 11:20:55 2013
@@ -53,7 +53,7 @@ public class TestScorerPerf extends Luce
     iw.addDocument(new Document());
     iw.close();
     r = DirectoryReader.open(d);
-    s = new IndexSearcher(r);
+    s = newSearcher(r);
   }
 
   public void createRandomTerms(int nDocs, int nTerms, double power, Directory dir) throws Exception {
@@ -366,7 +366,7 @@ public class TestScorerPerf extends Luce
     RAMDirectory dir = new RAMDirectory();
     if (VERBOSE) System.out.println("Creating index");
     createRandomTerms(100000,25,.5, dir);
-    s = new IndexSearcher(dir, true);
+    s = newSearcher(dir, true);
     if (VERBOSE) System.out.println("Starting performance test");
     for (int i=0; i<bigIter; i++) {
       long start = System.currentTimeMillis();
@@ -383,7 +383,7 @@ public class TestScorerPerf extends Luce
     RAMDirectory dir = new RAMDirectory();
     if (VERBOSE) System.out.println("Creating index");
     createRandomTerms(100000,25,.2, dir);
-    s = new IndexSearcher(dir, true);
+    s = newSearcher(dir, true);
     if (VERBOSE) System.out.println("Starting performance test");
     for (int i=0; i<bigIter; i++) {
       long start = System.currentTimeMillis();
@@ -401,7 +401,7 @@ public class TestScorerPerf extends Luce
     RAMDirectory dir = new RAMDirectory();
     if (VERBOSE) System.out.println("Creating index");
     createRandomTerms(100000,25,2,dir);
-    s = new IndexSearcher(dir, true);
+    s = newSearcher(dir, true);
     if (VERBOSE) System.out.println("Starting performance test");
     for (int i=0; i<bigIter; i++) {
       long start = System.currentTimeMillis();

Modified: lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestSearcherManager.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestSearcherManager.java?rev=1479862&r1=1479861&r2=1479862&view=diff
==============================================================================
--- lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestSearcherManager.java (original)
+++ lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestSearcherManager.java Tue May  7 11:20:55 2013
@@ -39,6 +39,7 @@ import org.apache.lucene.index.Term;
 import org.apache.lucene.index.ThreadedIndexingAndSearchingTestCase;
 import org.apache.lucene.store.AlreadyClosedException;
 import org.apache.lucene.store.Directory;
+import org.apache.lucene.util.LuceneTestCase;
 import org.apache.lucene.util.LuceneTestCase.SuppressCodecs;
 import org.apache.lucene.util.NamedThreadFactory;
 import org.apache.lucene.util._TestUtil;
@@ -361,7 +362,7 @@ public class TestSearcherManager extends
     final SearcherFactory theEvilOne = new SearcherFactory() {
       @Override
       public IndexSearcher newSearcher(IndexReader ignored) {
-        return new IndexSearcher(other);
+        return LuceneTestCase.newSearcher(other);
       }
       };
 

Modified: lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestSort.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestSort.java?rev=1479862&r1=1479861&r2=1479862&view=diff
==============================================================================
--- lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestSort.java (original)
+++ lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestSort.java Tue May  7 11:20:55 2013
@@ -35,6 +35,7 @@ import org.apache.lucene.index.RandomInd
 import org.apache.lucene.index.Term;
 import org.apache.lucene.index.Terms;
 import org.apache.lucene.index.TermsEnum;
+import org.apache.lucene.search.BooleanClause.Occur;
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.util.BytesRef;
 import org.apache.lucene.util.LuceneTestCase;
@@ -69,7 +70,7 @@ public class TestSort extends LuceneTest
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     Sort sort = new Sort(new SortField("value", SortField.Type.STRING));
 
     TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
@@ -97,7 +98,7 @@ public class TestSort extends LuceneTest
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     Sort sort = new Sort(new SortField("value", SortField.Type.STRING));
 
     TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
@@ -124,7 +125,7 @@ public class TestSort extends LuceneTest
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     Sort sort = new Sort(new SortField("value", SortField.Type.STRING, true));
 
     TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
@@ -150,7 +151,7 @@ public class TestSort extends LuceneTest
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     Sort sort = new Sort(new SortField("value", SortField.Type.STRING_VAL));
 
     TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
@@ -178,7 +179,7 @@ public class TestSort extends LuceneTest
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     Sort sort = new Sort(new SortField("value", SortField.Type.STRING_VAL));
 
     TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
@@ -205,7 +206,7 @@ public class TestSort extends LuceneTest
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     Sort sort = new Sort(new SortField("value", SortField.Type.STRING_VAL, true));
 
     TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
@@ -231,7 +232,7 @@ public class TestSort extends LuceneTest
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     Sort sort = new Sort(SortField.FIELD_DOC);
 
     TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
@@ -257,7 +258,7 @@ public class TestSort extends LuceneTest
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     Sort sort = new Sort(new SortField(null, SortField.Type.DOC, true));
 
     TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
@@ -283,7 +284,7 @@ public class TestSort extends LuceneTest
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     Sort sort = new Sort();
 
     TopDocs actual = searcher.search(new TermQuery(new Term("value", "foo")), 10, sort);
@@ -313,7 +314,7 @@ public class TestSort extends LuceneTest
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     Sort sort = new Sort(new SortField(null, SortField.Type.SCORE, true));
 
     TopDocs actual = searcher.search(new TermQuery(new Term("value", "foo")), 10, sort);
@@ -345,7 +346,7 @@ public class TestSort extends LuceneTest
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     Sort sort = new Sort(new SortField("value", SortField.Type.BYTE));
 
     TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
@@ -374,7 +375,7 @@ public class TestSort extends LuceneTest
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     Sort sort = new Sort(new SortField("value", SortField.Type.BYTE));
 
     TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
@@ -403,7 +404,7 @@ public class TestSort extends LuceneTest
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     SortField sortField = new SortField("value", SortField.Type.BYTE);
     sortField.setMissingValue(Byte.MAX_VALUE);
     Sort sort = new Sort(sortField);
@@ -435,7 +436,7 @@ public class TestSort extends LuceneTest
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     Sort sort = new Sort(new SortField("value", SortField.Type.BYTE, true));
 
     TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
@@ -465,7 +466,7 @@ public class TestSort extends LuceneTest
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     Sort sort = new Sort(new SortField("value", SortField.Type.SHORT));
 
     TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
@@ -494,7 +495,7 @@ public class TestSort extends LuceneTest
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     Sort sort = new Sort(new SortField("value", SortField.Type.SHORT));
 
     TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
@@ -523,7 +524,7 @@ public class TestSort extends LuceneTest
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     SortField sortField = new SortField("value", SortField.Type.SHORT);
     sortField.setMissingValue(Short.MAX_VALUE);
     Sort sort = new Sort(sortField);
@@ -555,7 +556,7 @@ public class TestSort extends LuceneTest
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     Sort sort = new Sort(new SortField("value", SortField.Type.SHORT, true));
 
     TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
@@ -585,7 +586,7 @@ public class TestSort extends LuceneTest
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     Sort sort = new Sort(new SortField("value", SortField.Type.INT));
 
     TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
@@ -614,7 +615,7 @@ public class TestSort extends LuceneTest
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     Sort sort = new Sort(new SortField("value", SortField.Type.INT));
 
     TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
@@ -643,7 +644,7 @@ public class TestSort extends LuceneTest
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     SortField sortField = new SortField("value", SortField.Type.INT);
     sortField.setMissingValue(Integer.MAX_VALUE);
     Sort sort = new Sort(sortField);
@@ -675,7 +676,7 @@ public class TestSort extends LuceneTest
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     Sort sort = new Sort(new SortField("value", SortField.Type.INT, true));
 
     TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
@@ -705,7 +706,7 @@ public class TestSort extends LuceneTest
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     Sort sort = new Sort(new SortField("value", SortField.Type.LONG));
 
     TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
@@ -734,7 +735,7 @@ public class TestSort extends LuceneTest
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     Sort sort = new Sort(new SortField("value", SortField.Type.LONG));
 
     TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
@@ -763,7 +764,7 @@ public class TestSort extends LuceneTest
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     SortField sortField = new SortField("value", SortField.Type.LONG);
     sortField.setMissingValue(Long.MAX_VALUE);
     Sort sort = new Sort(sortField);
@@ -795,7 +796,7 @@ public class TestSort extends LuceneTest
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     Sort sort = new Sort(new SortField("value", SortField.Type.LONG, true));
 
     TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
@@ -825,7 +826,7 @@ public class TestSort extends LuceneTest
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     Sort sort = new Sort(new SortField("value", SortField.Type.FLOAT));
 
     TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
@@ -854,7 +855,7 @@ public class TestSort extends LuceneTest
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     Sort sort = new Sort(new SortField("value", SortField.Type.FLOAT));
 
     TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
@@ -883,7 +884,7 @@ public class TestSort extends LuceneTest
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     SortField sortField = new SortField("value", SortField.Type.FLOAT);
     sortField.setMissingValue(Float.MAX_VALUE);
     Sort sort = new Sort(sortField);
@@ -915,7 +916,7 @@ public class TestSort extends LuceneTest
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     Sort sort = new Sort(new SortField("value", SortField.Type.FLOAT, true));
 
     TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
@@ -948,7 +949,7 @@ public class TestSort extends LuceneTest
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     Sort sort = new Sort(new SortField("value", SortField.Type.DOUBLE));
 
     TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
@@ -963,6 +964,33 @@ public class TestSort extends LuceneTest
     dir.close();
   }
   
+  /** Tests sorting on type double with +/- zero */
+  public void testDoubleSignedZero() throws IOException {
+    Directory dir = newDirectory();
+    RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
+    Document doc = new Document();
+    doc.add(newStringField("value", "+0", Field.Store.YES));
+    writer.addDocument(doc);
+    doc = new Document();
+    doc.add(newStringField("value", "-0", Field.Store.YES));
+    writer.addDocument(doc);
+    doc = new Document();
+    IndexReader ir = writer.getReader();
+    writer.close();
+    
+    IndexSearcher searcher = newSearcher(ir);
+    Sort sort = new Sort(new SortField("value", SortField.Type.DOUBLE));
+
+    TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
+    assertEquals(2, td.totalHits);
+    // numeric order
+    assertEquals("-0", searcher.doc(td.scoreDocs[0].doc).get("value"));
+    assertEquals("+0", searcher.doc(td.scoreDocs[1].doc).get("value"));
+
+    ir.close();
+    dir.close();
+  }
+  
   /** Tests sorting on type double with a missing value */
   public void testDoubleMissing() throws IOException {
     Directory dir = newDirectory();
@@ -981,7 +1009,7 @@ public class TestSort extends LuceneTest
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     Sort sort = new Sort(new SortField("value", SortField.Type.DOUBLE));
 
     TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
@@ -1014,7 +1042,7 @@ public class TestSort extends LuceneTest
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     SortField sortField = new SortField("value", SortField.Type.DOUBLE);
     sortField.setMissingValue(Double.MAX_VALUE);
     Sort sort = new Sort(sortField);
@@ -1050,7 +1078,7 @@ public class TestSort extends LuceneTest
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     Sort sort = new Sort(new SortField("value", SortField.Type.DOUBLE, true));
 
     TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
@@ -1108,7 +1136,7 @@ public class TestSort extends LuceneTest
         SortField.FIELD_DOC);
     // this should not throw AIOOBE or RuntimeEx
     IndexReader reader = DirectoryReader.open(indexStore);
-    IndexSearcher searcher = new IndexSearcher(reader);
+    IndexSearcher searcher = newSearcher(reader);
     searcher.search(new MatchAllDocsQuery(), null, 500, sort);
     reader.close();
     indexStore.close();
@@ -1150,7 +1178,7 @@ public class TestSort extends LuceneTest
   
   /** test sorts when there's nothing in the index */
   public void testEmptyIndex() throws Exception {
-    IndexSearcher empty = new IndexSearcher(new MultiReader());
+    IndexSearcher empty = newSearcher(new MultiReader());
     Query query = new TermQuery(new Term("contents", "foo"));
   
     Sort sort = new Sort();
@@ -1452,7 +1480,7 @@ public class TestSort extends LuceneTest
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     Sort sort = new Sort(new SortField("value", SortField.Type.STRING));
 
     TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
@@ -1473,7 +1501,7 @@ public class TestSort extends LuceneTest
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     Sort sort = new Sort(new SortField("value", SortField.Type.STRING));
 
     TopDocs expected = searcher.search(new TermQuery(new Term("value", "foo")), 10);
@@ -1502,7 +1530,7 @@ public class TestSort extends LuceneTest
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     // tievalue, then value
     Sort sort = new Sort(new SortField("tievalue", SortField.Type.STRING),
                          new SortField("value", SortField.Type.STRING));
@@ -1516,4 +1544,31 @@ public class TestSort extends LuceneTest
     ir.close();
     dir.close();
   }
+
+  public void testScore() throws IOException {
+    Directory dir = newDirectory();
+    RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
+    Document doc = new Document();
+    doc.add(newStringField("value", "bar", Field.Store.NO));
+    writer.addDocument(doc);
+    doc = new Document();
+    doc.add(newStringField("value", "foo", Field.Store.NO));
+    writer.addDocument(doc);
+    IndexReader ir = writer.getReader();
+    writer.close();
+
+    IndexSearcher searcher = newSearcher(ir);
+    Sort sort = new Sort(SortField.FIELD_SCORE);
+
+    final BooleanQuery bq = new BooleanQuery();
+    bq.add(new TermQuery(new Term("value", "foo")), Occur.SHOULD);
+    bq.add(new MatchAllDocsQuery(), Occur.SHOULD);
+    TopDocs td = searcher.search(bq, 10, sort);
+    assertEquals(2, td.totalHits);
+    assertEquals(1, td.scoreDocs[0].doc);
+    assertEquals(0, td.scoreDocs[1].doc);
+
+    ir.close();
+    dir.close();
+  }
 }

Modified: lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestSortDocValues.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestSortDocValues.java?rev=1479862&r1=1479861&r2=1479862&view=diff
==============================================================================
--- lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestSortDocValues.java (original)
+++ lucene/dev/branches/lucene4258/lucene/core/src/test/org/apache/lucene/search/TestSortDocValues.java Tue May  7 11:20:55 2013
@@ -64,7 +64,7 @@ public class TestSortDocValues extends L
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     Sort sort = new Sort(new SortField("value", SortField.Type.STRING));
 
     TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
@@ -93,7 +93,7 @@ public class TestSortDocValues extends L
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     Sort sort = new Sort(new SortField("value", SortField.Type.STRING, true));
 
     TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
@@ -122,7 +122,7 @@ public class TestSortDocValues extends L
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     Sort sort = new Sort(new SortField("value", SortField.Type.STRING_VAL));
 
     TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
@@ -151,7 +151,7 @@ public class TestSortDocValues extends L
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     Sort sort = new Sort(new SortField("value", SortField.Type.STRING_VAL, true));
 
     TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
@@ -180,7 +180,7 @@ public class TestSortDocValues extends L
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     Sort sort = new Sort(new SortField("value", SortField.Type.STRING_VAL));
 
     TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
@@ -209,7 +209,7 @@ public class TestSortDocValues extends L
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     Sort sort = new Sort(new SortField("value", SortField.Type.STRING_VAL, true));
 
     TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
@@ -242,7 +242,7 @@ public class TestSortDocValues extends L
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     Sort sort = new Sort(new SortField("value", SortField.Type.BYTE));
 
     TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
@@ -276,7 +276,7 @@ public class TestSortDocValues extends L
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     Sort sort = new Sort(new SortField("value", SortField.Type.BYTE, true));
 
     TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
@@ -310,7 +310,7 @@ public class TestSortDocValues extends L
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     Sort sort = new Sort(new SortField("value", SortField.Type.SHORT));
 
     TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
@@ -344,7 +344,7 @@ public class TestSortDocValues extends L
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     Sort sort = new Sort(new SortField("value", SortField.Type.SHORT, true));
 
     TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
@@ -378,7 +378,7 @@ public class TestSortDocValues extends L
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     Sort sort = new Sort(new SortField("value", SortField.Type.INT));
 
     TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
@@ -412,7 +412,7 @@ public class TestSortDocValues extends L
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     Sort sort = new Sort(new SortField("value", SortField.Type.INT, true));
 
     TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
@@ -446,7 +446,7 @@ public class TestSortDocValues extends L
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     Sort sort = new Sort(new SortField("value", SortField.Type.LONG));
 
     TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
@@ -480,7 +480,7 @@ public class TestSortDocValues extends L
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     Sort sort = new Sort(new SortField("value", SortField.Type.LONG, true));
 
     TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
@@ -514,7 +514,7 @@ public class TestSortDocValues extends L
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     Sort sort = new Sort(new SortField("value", SortField.Type.FLOAT));
 
     TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
@@ -548,7 +548,7 @@ public class TestSortDocValues extends L
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     Sort sort = new Sort(new SortField("value", SortField.Type.FLOAT, true));
 
     TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
@@ -586,7 +586,7 @@ public class TestSortDocValues extends L
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     Sort sort = new Sort(new SortField("value", SortField.Type.DOUBLE));
 
     TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
@@ -602,6 +602,35 @@ public class TestSortDocValues extends L
     dir.close();
   }
   
+  /** Tests sorting on type double with +/- zero */
+  public void testDoubleSignedZero() throws IOException {
+    Directory dir = newDirectory();
+    RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
+    Document doc = new Document();
+    doc.add(new DoubleDocValuesField("value", +0D));
+    doc.add(newStringField("value", "+0", Field.Store.YES));
+    writer.addDocument(doc);
+    doc = new Document();
+    doc.add(new DoubleDocValuesField("value", -0D));
+    doc.add(newStringField("value", "-0", Field.Store.YES));
+    writer.addDocument(doc);
+    doc = new Document();
+    IndexReader ir = writer.getReader();
+    writer.close();
+    
+    IndexSearcher searcher = newSearcher(ir);
+    Sort sort = new Sort(new SortField("value", SortField.Type.DOUBLE));
+
+    TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
+    assertEquals(2, td.totalHits);
+    // numeric order
+    assertEquals("-0", searcher.doc(td.scoreDocs[0].doc).get("value"));
+    assertEquals("+0", searcher.doc(td.scoreDocs[1].doc).get("value"));
+
+    ir.close();
+    dir.close();
+  }
+  
   /** Tests sorting on type double in reverse */
   public void testDoubleReverse() throws IOException {
     Directory dir = newDirectory();
@@ -625,7 +654,7 @@ public class TestSortDocValues extends L
     IndexReader ir = writer.getReader();
     writer.close();
     
-    IndexSearcher searcher = new IndexSearcher(ir);
+    IndexSearcher searcher = newSearcher(ir);
     Sort sort = new Sort(new SortField("value", SortField.Type.DOUBLE, true));
 
     TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);