You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucenenet.apache.org by cc...@apache.org on 2011/11/17 07:01:45 UTC

[Lucene.Net] svn commit: r1203064 - in /incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk: src/core/ src/core/Index/ src/core/Search/ test/core/ test/core/Index/ test/core/Search/

Author: ccurrens
Date: Thu Nov 17 06:01:45 2011
New Revision: 1203064

URL: http://svn.apache.org/viewvc?rev=1203064&view=rev
Log:
Fixed index and search tests, started more core porting to pass tests

Removed:
    incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/IndexCommitPoint.cs
Modified:
    incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/FileDiffs.txt
    incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/CompoundFileWriter.cs
    incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/DirectoryReader.cs
    incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/FieldSortedTermVectorMapper.cs
    incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/IndexCommit.cs
    incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/IndexWriter.cs
    incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/SortedTermVectorMapper.cs
    incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Lucene.Net.csproj
    incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/MultiSearcher.cs
    incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/ParallelMultiSearcher.cs
    incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/test/core/Index/TestBackwardsCompatibility.cs
    incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/test/core/Index/TestIndexReader.cs
    incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/test/core/Index/TestTermVectorsReader.cs
    incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/test/core/Search/TestBoolean2.cs
    incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/test/core/Search/TestTermScorer.cs
    incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/test/core/Search/TestTermVectors.cs
    incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/test/core/Search/TestWildcard.cs
    incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/test/core/UpdatedTests.txt

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/FileDiffs.txt
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/FileDiffs.txt?rev=1203064&r1=1203063&r2=1203064&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/FileDiffs.txt (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/FileDiffs.txt Thu Nov 17 06:01:45 2011
@@ -88,21 +88,21 @@ index\
 	index\CharBlockPool.java - IDENTICAL
 	index\CheckIndex.java - PORTED
 	index\CompoundFileReader.java - PORTED
-	index\CompoundFileWriter.java - Text files are different
+	index\CompoundFileWriter.java - PORTED
 	index\ConcurrentMergeScheduler.java - PORTED
 	index\CorruptIndexException.java - IDENTICAL
-	index\DefaultSkipListReader.java - Text files are different
-	index\DefaultSkipListWriter.java - Text files are different
+	index\DefaultSkipListReader.java - PORTED
+	index\DefaultSkipListWriter.java - PORTED
 	index\DirectoryOwningReader.java - Removed in 3.x
-	index\DirectoryReader.java - Text files are different
+	index\DirectoryReader.java - PORTED
 	index\DocConsumer.java - PORTED
 	index\DocConsumerPerThread.java - IDENTICAL
 	index\DocFieldConsumer.java - PORTED
 	index\DocFieldConsumerPerField.java - IDENTICAL
 	index\DocFieldConsumerPerThread.java - IDENTICAL
 	index\DocFieldConsumers.java - PORTED
-	index\DocFieldConsumersPerField.java - Text files are different
-	index\DocFieldConsumersPerThread.java - Text files are different
+	index\DocFieldConsumersPerField.java - PORTED
+	index\DocFieldConsumersPerThread.java - PORTED
 	index\DocFieldProcessor.java - PORTED
 	index\DocFieldProcessorPerField.java - IDENTICAL
 	index\DocFieldProcessorPerThread.java - PORTED
@@ -111,11 +111,11 @@ index\
 	index\DocInverterPerThread.java - PORTED
 	index\DocumentsWriter.java - PORTED
 	index\DocumentsWriterThreadState.java - PORTED
-	index\FieldInfo.java - Text files are different
+	index\FieldInfo.java - PORTED
 	index\FieldInfos.java - PORTED
 	index\FieldInvertState.java - IDENTICAL
 	index\FieldReaderException.java - IDENTICAL
-	index\FieldSortedTermVectorMapper.java - Text files are different
+	index\FieldSortedTermVectorMapper.java - PORTED
 	index\FieldsReader.java - PORTED
 	index\FieldsWriter.java - PORTED
 	index\FilterIndexReader.java - PORTED
@@ -131,7 +131,7 @@ index\
 	index\FreqProxTermsWriter.java - Text files are different
 	index\FreqProxTermsWriterPerField.java - Text files are different
 	index\FreqProxTermsWriterPerThread.java - Text files are different
-	index\IndexCommit.java - Text files are different
+	index\IndexCommit.java - DONE
 	index\IndexCommitPoint.java - Removed in 3.x
 	index\IndexDeletionPolicy.java - PORTED
 	index\IndexFileDeleter.java - PORTED
@@ -154,7 +154,7 @@ index\
 	index\MergeDocIDRemapper.java - IDENTICAL
 	index\MergePolicy.java - PORTED
 	index\MergeScheduler.java - IDENTICAL
-	index\MultiLevelSkipListReader.java - Text files are different
+	index\MultiLevelSkipListReader.java - PORTED
 	index\MultiLevelSkipListWriter.java - IDENTICAL
 	index\MultipleTermPositions.java - PORTED
 	index\MultiReader.java - PORTED
@@ -162,7 +162,7 @@ index\
 	index\NormsWriterPerField.java - Text files are different
 	index\NormsWriterPerThread.java - Text files are different
 	index\package.html - IDENTICAL
-	index\ParallelReader.java - DONE
+	index\ParallelReader.java - PORTED
 	index\Payload.java - Text files are different
 	index\PositionBasedTermVectorMapper.java - Text files are different
 	index\RawPostingList.java - IDENTICAL
@@ -183,7 +183,7 @@ index\
 	index\SegmentWriteState.java - PORTED
 	index\SerialMergeScheduler.java - Text files are different
 	index\SnapshotDeletionPolicy.java - PORTED
-	index\SortedTermVectorMapper.java - Text files are different
+	index\SortedTermVectorMapper.java - PORTEDS
 	index\StaleReaderException.java - IDENTICAL
 	index\StoredFieldsWriter.java - Text files are different
 	index\StoredFieldsWriterPerThread.java - IDENTICAL
@@ -352,8 +352,8 @@ search
 	ScoreDoc.java - Text files are different
 	ScoreDocComparator.java - Removed in 3.x
 	Scorer.java - Text files are different
-	Searchable.java - DONE
-	Searcher.java - DONE
+	Searchable.java - PORTED
+	Searcher.java - PORTED
 	Similarity.java - PORTED
 	SimilarityDelegator.java - PORTED
 	SingleTermEnum.java - PORTED

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/CompoundFileWriter.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/CompoundFileWriter.cs?rev=1203064&r1=1203063&r2=1203064&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/CompoundFileWriter.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/CompoundFileWriter.cs Thu Nov 17 06:01:45 2011
@@ -16,7 +16,7 @@
  */
 
 using System;
-
+using System.Collections.Generic;
 using Directory = Lucene.Net.Store.Directory;
 using IndexInput = Lucene.Net.Store.IndexInput;
 using IndexOutput = Lucene.Net.Store.IndexOutput;
@@ -43,11 +43,7 @@ namespace Lucene.Net.Index
 	/// file. The {directory} that follows has that many entries. Each directory entry
 	/// contains a long pointer to the start of this file's data section, and a String
 	/// with that file's name.
-	/// 
-	/// 
 	/// </summary>
-	/// <version>  $Id: CompoundFileWriter.java 690539 2008-08-30 17:33:06Z mikemccand $
-	/// </version>
 	public sealed class CompoundFileWriter
 	{
 		
@@ -66,8 +62,8 @@ namespace Lucene.Net.Index
 		
 		private Directory directory;
 		private System.String fileName;
-        private System.Collections.Hashtable ids;
-		private System.Collections.ArrayList entries;
+        private HashSet<string> ids;
+		private LinkedList<FileEntry> entries;
 		private bool merged = false;
 		private SegmentMerger.CheckAbort checkAbort;
 		
@@ -88,8 +84,8 @@ namespace Lucene.Net.Index
 			this.checkAbort = checkAbort;
 			directory = dir;
 			fileName = name;
-            ids = new System.Collections.Hashtable();
-			entries = new System.Collections.ArrayList();
+            ids = new HashSet<string>();
+			entries = new LinkedList<FileEntry>();
 		}
 		
 		/// <summary>Returns the directory of the compound file. </summary>
@@ -123,7 +119,7 @@ namespace Lucene.Net.Index
 			
             try
             {
-                ids.Add(file, file);
+                ids.Add(file);
             }
             catch (Exception)
             {
@@ -132,7 +128,7 @@ namespace Lucene.Net.Index
 			
 			FileEntry entry = new FileEntry();
 			entry.file = file;
-			entries.Add(entry);
+			entries.AddLast(entry);
 		}
 		
 		/// <summary>Merge files with the extensions added up to now.
@@ -165,11 +161,9 @@ namespace Lucene.Net.Index
 				// Write the directory with all offsets at 0.
 				// Remember the positions of directory entries so that we can
 				// adjust the offsets later
-				System.Collections.IEnumerator it = entries.GetEnumerator();
 				long totalSize = 0;
-				while (it.MoveNext())
+				foreach(FileEntry fe in entries)
 				{
-					FileEntry fe = (FileEntry) it.Current;
 					fe.directoryOffset = os.GetFilePointer();
 					os.WriteLong(0); // for now
 					os.WriteString(fe.file);
@@ -188,19 +182,15 @@ namespace Lucene.Net.Index
 				// Open the files and copy their data into the stream.
 				// Remember the locations of each file's data section.
 				byte[] buffer = new byte[16384];
-				it = entries.GetEnumerator();
-				while (it.MoveNext())
+				foreach(FileEntry fe in entries)
 				{
-					FileEntry fe = (FileEntry) it.Current;
 					fe.dataOffset = os.GetFilePointer();
 					CopyFile(fe, os, buffer);
 				}
 				
 				// Write the data offsets into the directory of the compound stream
-				it = entries.GetEnumerator();
-				while (it.MoveNext())
+				foreach(FileEntry fe in entries)
 				{
-					FileEntry fe = (FileEntry) it.Current;
 					os.Seek(fe.directoryOffset);
 					os.WriteLong(fe.dataOffset);
 				}

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/DirectoryReader.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/DirectoryReader.cs?rev=1203064&r1=1203063&r2=1203064&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/DirectoryReader.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/DirectoryReader.cs Thu Nov 17 06:01:45 2011
@@ -254,15 +254,14 @@ namespace Lucene.Net.Index
             
             // we put the old SegmentReaders in a map, that allows us
             // to lookup a reader using its segment name
-            // TODO: Leave as Object or java's Integer class?
-            System.Collections.Generic.IDictionary<string, object> segmentReaders = new HashMap<string, object>();
+            System.Collections.Generic.IDictionary<string, int> segmentReaders = new HashMap<string, int>();
             
             if (oldReaders != null)
             {
                 // create a Map SegmentName->SegmentReader
                 for (int i = 0; i < oldReaders.Length; i++)
                 {
-                    segmentReaders[oldReaders[i].GetSegmentName()] = (System.Int32) i;
+                    segmentReaders[oldReaders[i].GetSegmentName()] = i;
                 }
             }
             
@@ -275,8 +274,7 @@ namespace Lucene.Net.Index
             for (int i = infos.Count - 1; i >= 0; i--)
             {
                 // find SegmentReader for this segment
-                int? oldReaderIndex = (int?)segmentReaders[infos.Info(i).name];
-                if (oldReaderIndex.HasValue == false)
+                if (!segmentReaders.ContainsKey(infos.Info(i).name))
                 {
                     // this is a new segment, no old SegmentReader can be reused
                     newReaders[i] = null;
@@ -284,7 +282,7 @@ namespace Lucene.Net.Index
                 else
                 {
                     // there is an old reader for this segment - we'll try to reopen it
-                    newReaders[i] = oldReaders[oldReaderIndex.Value];
+                    newReaders[i] = oldReaders[segmentReaders[infos.Info(i).name]];
                 }
                 
                 bool success = false;
@@ -359,7 +357,7 @@ namespace Lucene.Net.Index
             {
                 foreach(var entry in oldNormsCache)
                 {
-                    System.String field = (System.String) entry.Key;
+                    System.String field = entry.Key;
                     if (!HasNorms(field))
                     {
                         continue;
@@ -371,17 +369,17 @@ namespace Lucene.Net.Index
                     
                     for (int i = 0; i < subReaders.Length; i++)
                     {
-                        int? oldReaderIndex = (int?)segmentReaders[subReaders[i].GetSegmentName()];
-
+                        int oldReaderIndex = segmentReaders[subReaders[i].GetSegmentName()];
+                        
                         // this SegmentReader was not re-opened, we can copy all of its norms 
-                        if (oldReaderIndex.HasValue &&
-                             (oldReaders[oldReaderIndex.Value] == subReaders[i]
-                               || oldReaders[oldReaderIndex.Value].norms[field] == subReaders[i].norms[field]))
+                        if (segmentReaders.ContainsKey(subReaders[i].GetSegmentName()) &&
+                             (oldReaders[oldReaderIndex] == subReaders[i]
+                               || oldReaders[oldReaderIndex].norms[field] == subReaders[i].norms[field]))
                         {
                             // we don't have to synchronize here: either this constructor is called from a SegmentReader,
                             // in which case no old norms cache is present, or it is called from MultiReader.reopen(),
                             // which is synchronized
-                            Array.Copy(oldBytes, oldStarts[oldReaderIndex.Value], bytes, starts[i], starts[i + 1] - starts[i]);
+                            Array.Copy(oldBytes, oldStarts[oldReaderIndex], bytes, starts[i], starts[i + 1] - starts[i]);
                         }
                         else
                         {

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/FieldSortedTermVectorMapper.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/FieldSortedTermVectorMapper.cs?rev=1203064&r1=1203063&r2=1203064&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/FieldSortedTermVectorMapper.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/FieldSortedTermVectorMapper.cs Thu Nov 17 06:01:45 2011
@@ -16,6 +16,8 @@
  */
 
 using System;
+using System.Collections.Generic;
+using Lucene.Net.Support;
 
 namespace Lucene.Net.Index
 {
@@ -26,20 +28,22 @@ namespace Lucene.Net.Index
 	/// </summary>
 	public class FieldSortedTermVectorMapper:TermVectorMapper
 	{
-		private System.Collections.IDictionary fieldToTerms = new System.Collections.Hashtable();
-		private System.Collections.Generic.SortedDictionary<object, object> currentSet;
+        private IDictionary<string, SortedSet<TermVectorEntry>> fieldToTerms = new HashMap<string, SortedSet<TermVectorEntry>>();
+		private SortedSet<TermVectorEntry> currentSet;
 		private System.String currentField;
-		private System.Collections.Generic.IComparer<object> comparator;
+        private IComparer<TermVectorEntry> comparator;
 		
 		/// <summary> </summary>
 		/// <param name="comparator">A Comparator for sorting <see cref="TermVectorEntry" />s
 		/// </param>
-		public FieldSortedTermVectorMapper(System.Collections.Generic.IComparer<object> comparator):this(false, false, comparator)
+        public FieldSortedTermVectorMapper(IComparer<TermVectorEntry> comparator)
+            : this(false, false, comparator)
 		{
 		}
-		
-		
-		public FieldSortedTermVectorMapper(bool ignoringPositions, bool ignoringOffsets, System.Collections.Generic.IComparer<object> comparator):base(ignoringPositions, ignoringOffsets)
+
+
+        public FieldSortedTermVectorMapper(bool ignoringPositions, bool ignoringOffsets, IComparer<TermVectorEntry> comparator)
+            : base(ignoringPositions, ignoringOffsets)
 		{
 			this.comparator = comparator;
 		}
@@ -47,12 +51,12 @@ namespace Lucene.Net.Index
 		public override void  Map(System.String term, int frequency, TermVectorOffsetInfo[] offsets, int[] positions)
 		{
 			TermVectorEntry entry = new TermVectorEntry(currentField, term, frequency, offsets, positions);
-			currentSet.Add(entry, entry);
+			currentSet.Add(entry);
 		}
 		
 		public override void  SetExpectations(System.String field, int numTerms, bool storeOffsets, bool storePositions)
 		{
-			currentSet = new System.Collections.Generic.SortedDictionary<object, object>(comparator);
+			currentSet = new System.Collections.Generic.SortedSet<TermVectorEntry>(comparator);
 			currentField = field;
 			fieldToTerms[field] = currentSet;
 		}
@@ -62,13 +66,13 @@ namespace Lucene.Net.Index
 		/// </summary>
         /// <returns> A map between field names and <see cref="System.Collections.Generic.SortedDictionary{Object,Object}" />s per field.  SortedSet entries are <see cref="TermVectorEntry" />
 		/// </returns>
-		public virtual System.Collections.IDictionary GetFieldToTerms()
+		public virtual IDictionary<string, SortedSet<TermVectorEntry>> GetFieldToTerms()
 		{
 			return fieldToTerms;
 		}
-		
-		
-		public virtual System.Collections.Generic.IComparer<object> GetComparator()
+
+
+        public virtual IComparer<TermVectorEntry> GetComparator()
 		{
 			return comparator;
 		}

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/IndexCommit.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/IndexCommit.cs?rev=1203064&r1=1203063&r2=1203064&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/IndexCommit.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/IndexCommit.cs Thu Nov 17 06:01:45 2011
@@ -16,7 +16,7 @@
  */
 
 using System;
-
+using System.Collections.Generic;
 using Directory = Lucene.Net.Store.Directory;
 
 namespace Lucene.Net.Index
@@ -40,7 +40,7 @@ namespace Lucene.Net.Index
 	/// may suddenly change. <p/>
 	/// </summary>
 	
-	public abstract class IndexCommit : IndexCommitPoint
+	public abstract class IndexCommit
 	{
 		
 		/// <summary> Get the segments file (<c>segments_N</c>) associated 
@@ -49,7 +49,7 @@ namespace Lucene.Net.Index
 		public abstract System.String GetSegmentsFileName();
 		
 		/// <summary> Returns all index files referenced by this commit point.</summary>
-		public abstract System.Collections.Generic.ICollection<string> GetFileNames();
+		public abstract ICollection<string> GetFileNames();
 		
 		/// <summary> Returns the <see cref="Directory" /> for the index.</summary>
 		public abstract Directory GetDirectory();
@@ -114,6 +114,6 @@ namespace Lucene.Net.Index
         /// <see cref="IndexWriter.Commit(System.Collections.Generic.IDictionary{string, string})" />
 		/// for this commit.  IDictionary is String -> String. 
 		/// </summary>
-        public abstract System.Collections.Generic.IDictionary<string, string> GetUserData();
+        public abstract IDictionary<string, string> GetUserData();
 	}
 }
\ No newline at end of file

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/IndexWriter.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/IndexWriter.cs?rev=1203064&r1=1203063&r2=1203064&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/IndexWriter.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/IndexWriter.cs Thu Nov 17 06:01:45 2011
@@ -2720,7 +2720,7 @@ namespace Lucene.Net.Index
 							int size = mergeExceptions.Count;
 							for (int i = 0; i < size; i++)
 							{
-								MergePolicy.OneMerge merge = mergeExceptions[0];
+								MergePolicy.OneMerge merge = mergeExceptions[i];
 								if (merge.optimize)
 								{
                                     System.IO.IOException err;

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/SortedTermVectorMapper.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/SortedTermVectorMapper.cs?rev=1203064&r1=1203063&r2=1203064&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/SortedTermVectorMapper.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/SortedTermVectorMapper.cs Thu Nov 17 06:01:45 2011
@@ -16,6 +16,8 @@
  */
 
 using System;
+using System.Collections.Generic;
+using Lucene.Net.Support;
 
 namespace Lucene.Net.Index
 {
@@ -30,10 +32,8 @@ namespace Lucene.Net.Index
 	/// </summary>
 	public class SortedTermVectorMapper:TermVectorMapper
 	{
-
-
-        private System.Collections.Generic.SortedDictionary<System.Object, System.Object> currentSet;
-		private System.Collections.IDictionary termToTVE = new System.Collections.Hashtable();
+        private SortedSet<TermVectorEntry> currentSet;
+		private IDictionary<string, TermVectorEntry> termToTVE = new HashMap<string, TermVectorEntry>();
 		private bool storeOffsets;
 		private bool storePositions;
 		/// <summary> Stand-in name for the field in <see cref="TermVectorEntry" />.</summary>
@@ -42,14 +42,16 @@ namespace Lucene.Net.Index
 		/// <summary> </summary>
 		/// <param name="comparator">A Comparator for sorting <see cref="TermVectorEntry" />s
 		/// </param>
-		public SortedTermVectorMapper(System.Collections.Generic.IComparer<System.Object> comparator):this(false, false, comparator)
+        public SortedTermVectorMapper(IComparer<TermVectorEntry> comparator)
+            : this(false, false, comparator)
 		{
 		}
-		
-		
-		public SortedTermVectorMapper(bool ignoringPositions, bool ignoringOffsets, System.Collections.Generic.IComparer<System.Object> comparator):base(ignoringPositions, ignoringOffsets)
+
+
+        public SortedTermVectorMapper(bool ignoringPositions, bool ignoringOffsets, IComparer<TermVectorEntry> comparator)
+            : base(ignoringPositions, ignoringOffsets)
 		{
-            currentSet = new System.Collections.Generic.SortedDictionary<System.Object, System.Object>(comparator);
+            currentSet = new SortedSet<TermVectorEntry>(comparator);
 		}
 		
 		/// <summary> </summary>
@@ -64,12 +66,12 @@ namespace Lucene.Net.Index
 		//We need to combine any previous mentions of the term
 		public override void  Map(System.String term, int frequency, TermVectorOffsetInfo[] offsets, int[] positions)
 		{
-			TermVectorEntry entry = (TermVectorEntry) termToTVE[term];
+			TermVectorEntry entry = termToTVE[term];
 			if (entry == null)
 			{
 				entry = new TermVectorEntry(ALL, term, frequency, storeOffsets == true?offsets:null, storePositions == true?positions:null);
 				termToTVE[term] = entry;
-				currentSet.Add(entry, entry);
+				currentSet.Add(entry);
 			}
 			else
 			{
@@ -124,7 +126,7 @@ namespace Lucene.Net.Index
 		/// </summary>
 		/// <returns> The SortedSet of <see cref="TermVectorEntry" />.
 		/// </returns>
-        public virtual System.Collections.Generic.SortedDictionary<Object, Object> GetTermVectorEntrySet()
+        public virtual SortedSet<TermVectorEntry> GetTermVectorEntrySet()
 		{
 			return currentSet;
 		}

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Lucene.Net.csproj
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Lucene.Net.csproj?rev=1203064&r1=1203063&r2=1203064&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Lucene.Net.csproj (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Lucene.Net.csproj Thu Nov 17 06:01:45 2011
@@ -329,7 +329,6 @@
     <Compile Include="Index\FreqProxTermsWriterPerField.cs" />
     <Compile Include="Index\FreqProxTermsWriterPerThread.cs" />
     <Compile Include="Index\IndexCommit.cs" />
-    <Compile Include="Index\IndexCommitPoint.cs" />
     <Compile Include="Index\IndexDeletionPolicy.cs" />
     <Compile Include="Index\IndexFileDeleter.cs">
       <SubType>Code</SubType>

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/MultiSearcher.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/MultiSearcher.cs?rev=1203064&r1=1203063&r2=1203064&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/MultiSearcher.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/MultiSearcher.cs Thu Nov 17 06:01:45 2011
@@ -438,7 +438,7 @@ namespace Lucene.Net.Search
 	                                                ScoreDoc[] scoreDocs = docs.scoreDocs;
                                                     for (int j = 0; j < scoreDocs.Length; j++) // merge scoreDocs into hq
                                                     {
-                                                        FieldDoc fieldDoc = (FieldDoc) scoreDocs[i];
+                                                        FieldDoc fieldDoc = (FieldDoc) scoreDocs[j];
                                                         fieldDoc.doc += starts[i]; //convert doc
                                                         //it would be so nice if we had a thread-safe insert
                                                         lock (theLock)

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/ParallelMultiSearcher.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/ParallelMultiSearcher.cs?rev=1203064&r1=1203063&r2=1203064&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/ParallelMultiSearcher.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/ParallelMultiSearcher.cs Thu Nov 17 06:01:45 2011
@@ -114,9 +114,10 @@ namespace Lucene.Net.Search
             //search each searchable
             for (int i = 0; i < searchables.Length; i++)
             {
+                int cur = i;
                 tasks[i] =
-                    Task.Factory.StartNew(() => MultiSearcherCallableNoSort(lockObj, searchables[i], weight, filter,
-                                                                            nDocs, hq, i, starts));
+                    Task.Factory.StartNew(() => MultiSearcherCallableNoSort(lockObj, searchables[cur], weight, filter,
+                                                                            nDocs, hq, cur, starts));
             }
 
 		    int totalHits = 0;
@@ -148,10 +149,10 @@ namespace Lucene.Net.Search
             Task<TopFieldDocs>[] tasks = new Task<TopFieldDocs>[searchables.Length];
             for (int i = 0; i < searchables.Length; i++) // search each searchable
             {
+                int cur = i;
                 tasks[i] =
                     Task.Factory.StartNew(
-                        () =>
-                        MultiSearcherCallableWithSort(lockObj, searchables[i], weight, filter, nDocs, hq, sort, i,
+                        () => MultiSearcherCallableWithSort(lockObj, searchables[cur], weight, filter, nDocs, hq, sort, cur,
                                                       starts));
             }
 

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/test/core/Index/TestBackwardsCompatibility.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/test/core/Index/TestBackwardsCompatibility.cs?rev=1203064&r1=1203063&r2=1203064&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/test/core/Index/TestBackwardsCompatibility.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/test/core/Index/TestBackwardsCompatibility.cs Thu Nov 17 06:01:45 2011
@@ -190,10 +190,9 @@ namespace Lucene.Net.Index
                         if (d.Get("content3") != null) continue;
                         count++;
                         // read the size from the binary value using BinaryReader (this prevents us from doing the shift ops ourselves):
-                        BinaryReader ds =
-                            new BinaryReader(new MemoryStream(d.GetFieldable("compressed").GetBinaryValue()));
-                        int actualSize = ds.ReadInt32();
-                        ds.Close();
+                        // ugh, Java uses Big-Endian streams, so we need to do it manually.
+                        byte[] encodedSize = d.GetFieldable("compressed").GetBinaryValue().Take(4).Reverse().ToArray();
+                        int actualSize = BitConverter.ToInt32(encodedSize, 0);
                         int compressedSize = int.Parse(d.Get("compressedSize"));
                         bool binary = int.Parse(d.Get("id"))%2 > 0;
                         int shouldSize = shouldStillBeCompressed
@@ -318,11 +317,10 @@ namespace Lucene.Net.Index
 					var fields = d.GetFields();
 					if (!oldName.StartsWith("19.") && !oldName.StartsWith("20.") && !oldName.StartsWith("21.") && !oldName.StartsWith("22."))
 					{
-						
 						if (d.GetField("content3") == null)
 						{
 						    int numFields = oldName.StartsWith("29.") ? 7 : 5;
-							Assert.AreEqual(5, fields.Count);
+							Assert.AreEqual(numFields, fields.Count);
 							Field f = d.GetField("id");
 							Assert.AreEqual("" + i, f.StringValue());
 							

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/test/core/Index/TestIndexReader.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/test/core/Index/TestIndexReader.cs?rev=1203064&r1=1203063&r2=1203064&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/test/core/Index/TestIndexReader.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/test/core/Index/TestIndexReader.cs Thu Nov 17 06:01:45 2011
@@ -262,13 +262,13 @@ namespace Lucene.Net.Index
 			IndexReader reader = IndexReader.Open(d, false);
 			FieldSortedTermVectorMapper mapper = new FieldSortedTermVectorMapper(new TermVectorEntryFreqSortedComparator());
 			reader.GetTermFreqVector(0, mapper);
-			System.Collections.IDictionary map = mapper.GetFieldToTerms();
+			var map = mapper.GetFieldToTerms();
 			Assert.IsTrue(map != null, "map is null and it shouldn't be");
 			Assert.IsTrue(map.Count == 4, "map Size: " + map.Count + " is not: " + 4);
-            System.Collections.Generic.SortedDictionary<object, object> set_Renamed = (System.Collections.Generic.SortedDictionary<object, object>)map["termvector"];
-            foreach (System.Collections.Generic.KeyValuePair<object, object> item in set_Renamed)
+            var set_Renamed = map["termvector"];
+            foreach (var item in set_Renamed)
 			{
-                TermVectorEntry entry =  (TermVectorEntry)item.Key;
+                TermVectorEntry entry =  (TermVectorEntry)item;
 				Assert.IsTrue(entry != null, "entry is null and it shouldn't be");
 				System.Console.Out.WriteLine("Entry: " + entry);
 			}

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/test/core/Index/TestTermVectorsReader.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/test/core/Index/TestTermVectorsReader.cs?rev=1203064&r1=1203063&r2=1203064&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/test/core/Index/TestTermVectorsReader.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/test/core/Index/TestTermVectorsReader.cs Thu Nov 17 06:01:45 2011
@@ -350,12 +350,12 @@ namespace Lucene.Net.Index
 			Assert.IsTrue(reader != null);
 			SortedTermVectorMapper mapper = new SortedTermVectorMapper(new TermVectorEntryFreqSortedComparator());
 			reader.Get(0, mapper);
-			System.Collections.Generic.SortedDictionary<Object,Object> set_Renamed = mapper.GetTermVectorEntrySet();
+			var set_Renamed = mapper.GetTermVectorEntrySet();
 			Assert.IsTrue(set_Renamed != null, "set is null and it shouldn't be");
 			//three fields, 4 terms, all terms are the same
 			Assert.IsTrue(set_Renamed.Count == 4, "set Size: " + set_Renamed.Count + " is not: " + 4);
 			//Check offsets and positions
-			for (System.Collections.IEnumerator iterator = set_Renamed.Keys.GetEnumerator(); iterator.MoveNext(); )
+			for (System.Collections.IEnumerator iterator = set_Renamed.GetEnumerator(); iterator.MoveNext(); )
 			{
 				TermVectorEntry tve = (TermVectorEntry) iterator.Current;
 				Assert.IsTrue(tve != null, "tve is null and it shouldn't be");
@@ -370,7 +370,7 @@ namespace Lucene.Net.Index
 			//three fields, 4 terms, all terms are the same
 			Assert.IsTrue(set_Renamed.Count == 4, "set Size: " + set_Renamed.Count + " is not: " + 4);
 			//Should have offsets and positions b/c we are munging all the fields together
-			for (System.Collections.IEnumerator iterator = set_Renamed.Keys.GetEnumerator(); iterator.MoveNext(); )
+			for (System.Collections.IEnumerator iterator = set_Renamed.GetEnumerator(); iterator.MoveNext(); )
 			{
 				TermVectorEntry tve = (TermVectorEntry) iterator.Current;
 				Assert.IsTrue(tve != null, "tve is null and it shouldn't be");
@@ -381,16 +381,16 @@ namespace Lucene.Net.Index
 			
 			FieldSortedTermVectorMapper fsMapper = new FieldSortedTermVectorMapper(new TermVectorEntryFreqSortedComparator());
 			reader.Get(0, fsMapper);
-			System.Collections.IDictionary map = fsMapper.GetFieldToTerms();
+			var map = fsMapper.GetFieldToTerms();
 			Assert.IsTrue(map.Count == testFields.Length, "map Size: " + map.Count + " is not: " + testFields.Length);
-			for (System.Collections.IEnumerator iterator = new System.Collections.Hashtable(map).GetEnumerator(); iterator.MoveNext(); )
+			for (var iterator = map.GetEnumerator(); iterator.MoveNext(); )
 			{
-				System.Collections.DictionaryEntry entry = (System.Collections.DictionaryEntry) iterator.Current;
-				System.Collections.Generic.SortedDictionary<Object,Object> sortedSet = (System.Collections.Generic.SortedDictionary<Object,Object>)entry.Value;
+				var entry = iterator.Current;
+				var sortedSet = entry.Value;
 				Assert.IsTrue(sortedSet.Count == 4, "sortedSet Size: " + sortedSet.Count + " is not: " + 4);
-				for (System.Collections.IEnumerator inner = sortedSet.Keys.GetEnumerator(); inner.MoveNext(); )
+				for (var inner = sortedSet.GetEnumerator(); inner.MoveNext(); )
 				{
-					TermVectorEntry tve = (TermVectorEntry) inner.Current;
+					TermVectorEntry tve = inner.Current;
 					Assert.IsTrue(tve != null, "tve is null and it shouldn't be");
 					//Check offsets and positions.
 					Assert.IsTrue(tve != null, "tve is null and it shouldn't be");
@@ -416,14 +416,14 @@ namespace Lucene.Net.Index
 			reader.Get(0, fsMapper);
 			map = fsMapper.GetFieldToTerms();
 			Assert.IsTrue(map.Count == testFields.Length, "map Size: " + map.Count + " is not: " + testFields.Length);
-			for (System.Collections.IEnumerator iterator = new System.Collections.Hashtable(map).GetEnumerator(); iterator.MoveNext(); )
+			for (var iterator = map.GetEnumerator(); iterator.MoveNext(); )
 			{
-				System.Collections.DictionaryEntry entry = (System.Collections.DictionaryEntry) iterator.Current;
-				System.Collections.Generic.SortedDictionary<Object,Object> sortedSet = (System.Collections.Generic.SortedDictionary<Object,Object>)entry.Value;
+				var entry = iterator.Current;
+				var sortedSet = entry.Value;
 				Assert.IsTrue(sortedSet.Count == 4, "sortedSet Size: " + sortedSet.Count + " is not: " + 4);
-				for (System.Collections.IEnumerator inner = sortedSet.Keys.GetEnumerator(); inner.MoveNext(); )
+				for (var inner = sortedSet.GetEnumerator(); inner.MoveNext(); )
 				{
-					TermVectorEntry tve = (TermVectorEntry) inner.Current;
+					TermVectorEntry tve = inner.Current;
 					Assert.IsTrue(tve != null, "tve is null and it shouldn't be");
 					//Check offsets and positions.
 					Assert.IsTrue(tve != null, "tve is null and it shouldn't be");

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/test/core/Search/TestBoolean2.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/test/core/Search/TestBoolean2.cs?rev=1203064&r1=1203063&r2=1203064&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/test/core/Search/TestBoolean2.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/test/core/Search/TestBoolean2.cs Thu Nov 17 06:01:45 2011
@@ -256,7 +256,7 @@ namespace Lucene.Net.Search
 				for (int i = 0; i < 1000; i++)
 				{
 					int level = rnd.Next(3);
-					q1 = RandBoolQuery(new System.Random(rnd.Next(System.Int32.MaxValue)), rnd.Next(0, 1) == 0 ? false : true, level, field, vals, null);
+					q1 = RandBoolQuery(new System.Random(rnd.Next(System.Int32.MaxValue)), rnd.Next(0, 2) == 0 ? false : true, level, field, vals, null);
 					
 					// Can't sort by relevance since floating point numbers may not quite
 					// match up.
@@ -276,7 +276,7 @@ namespace Lucene.Net.Search
 
                     BooleanQuery q3 = new BooleanQuery();
 				    q3.Add(q1, BooleanClause.Occur.SHOULD);
-                    q3.Add(new PrefixQuery(new Term("Field", "b")), BooleanClause.Occur.SHOULD);
+                    q3.Add(new PrefixQuery(new Term("field2", "b")), BooleanClause.Occur.SHOULD);
 				    TopDocs hits4 = bigSearcher.Search(q3, 1);
 				    Assert.AreEqual(mulFactor*collector.totalHits + NUM_EXTRA_DOCS/2, hits4.TotalHits);
 				}

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/test/core/Search/TestTermScorer.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/test/core/Search/TestTermScorer.cs?rev=1203064&r1=1203063&r2=1203064&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/test/core/Search/TestTermScorer.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/test/core/Search/TestTermScorer.cs Thu Nov 17 06:01:45 2011
@@ -102,7 +102,7 @@ namespace Lucene.Net.Search
 				writer.AddDocument(doc);
 			}
 			writer.Close();
-			indexSearcher = new IndexSearcher(directory);
+		    indexSearcher = new IndexSearcher(directory, false);
 			indexReader = indexSearcher.GetIndexReader();
 		}
 		
@@ -179,46 +179,6 @@ namespace Lucene.Net.Search
 			Assert.IsTrue(ts.DocID() == 5, "doc should be number 5");
 		}
 		
-		[Test]
-		public virtual void  TestExplain()
-		{
-			Term allTerm = new Term(FIELD, "all");
-			TermQuery termQuery = new TermQuery(allTerm);
-			
-			Weight weight = termQuery.Weight(indexSearcher);
-			
-			TermScorer ts = new TermScorer(weight, indexReader.TermDocs(allTerm), indexSearcher.GetSimilarity(), indexReader.Norms(FIELD));
-			Explanation explanation = ts.Explain(0);
-			Assert.IsTrue(explanation != null, "explanation is null and it shouldn't be");
-			//System.out.println("Explanation: " + explanation.toString());
-			//All this Explain does is return the term frequency
-			Assert.IsTrue(explanation.GetValue() == 1, "term frq is not 1");
-			explanation = ts.Explain(1);
-			Assert.IsTrue(explanation != null, "explanation is null and it shouldn't be");
-			//System.out.println("Explanation: " + explanation.toString());
-			//All this Explain does is return the term frequency
-			Assert.IsTrue(explanation.GetValue() == 0, "term frq is not 0");
-			
-			Term dogsTerm = new Term(FIELD, "dogs");
-			termQuery = new TermQuery(dogsTerm);
-			weight = termQuery.Weight(indexSearcher);
-			
-			ts = new TermScorer(weight, indexReader.TermDocs(dogsTerm), indexSearcher.GetSimilarity(), indexReader.Norms(FIELD));
-			explanation = ts.Explain(1);
-			Assert.IsTrue(explanation != null, "explanation is null and it shouldn't be");
-			//System.out.println("Explanation: " + explanation.toString());
-			//All this Explain does is return the term frequency
-			float sqrtTwo = (float) System.Math.Sqrt(2.0f);
-			Assert.IsTrue(explanation.GetValue() == sqrtTwo, "term frq: " + explanation.GetValue() + " is not the square root of 2");
-			
-			explanation = ts.Explain(10); //try a doc out of range
-			Assert.IsTrue(explanation != null, "explanation is null and it shouldn't be");
-			//System.out.println("Explanation: " + explanation.toString());
-			//All this Explain does is return the term frequency
-			
-			Assert.IsTrue(explanation.GetValue() == 0, "term frq: " + explanation.GetValue() + " is not 0");
-		}
-		
 		private class TestHit
 		{
 			private void  InitBlock(TestTermScorer enclosingInstance)

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/test/core/Search/TestTermVectors.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/test/core/Search/TestTermVectors.cs?rev=1203064&r1=1203063&r2=1203064&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/test/core/Search/TestTermVectors.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/test/core/Search/TestTermVectors.cs Thu Nov 17 06:01:45 2011
@@ -347,10 +347,10 @@ namespace Lucene.Net.Search
 				}
 				SortedTermVectorMapper mapper = new SortedTermVectorMapper(new TermVectorEntryFreqSortedComparator());
 				knownSearcher.reader_ForNUnit.GetTermFreqVector(hits[1].doc, mapper);
-				System.Collections.Generic.SortedDictionary<object, object> vectorEntrySet = mapper.GetTermVectorEntrySet();
+				var vectorEntrySet = mapper.GetTermVectorEntrySet();
 				Assert.IsTrue(vectorEntrySet.Count == 10, "mapper.getTermVectorEntrySet() Size: " + vectorEntrySet.Count + " is not: " + 10);
 				TermVectorEntry last = null;
-                foreach(TermVectorEntry tve in vectorEntrySet.Keys)
+                foreach(TermVectorEntry tve in vectorEntrySet)
 				{
 					if (tve != null && last != null)
 					{
@@ -364,9 +364,9 @@ namespace Lucene.Net.Search
 				
 				FieldSortedTermVectorMapper fieldMapper = new FieldSortedTermVectorMapper(new TermVectorEntryFreqSortedComparator());
 				knownSearcher.reader_ForNUnit.GetTermFreqVector(hits[1].doc, fieldMapper);
-				System.Collections.IDictionary map = fieldMapper.GetFieldToTerms();
+				var map = fieldMapper.GetFieldToTerms();
 				Assert.IsTrue(map.Count == 2, "map Size: " + map.Count + " is not: " + 2);
-				vectorEntrySet = (System.Collections.Generic.SortedDictionary<Object,Object>) map["field"];
+				vectorEntrySet = map["field"];
 				Assert.IsTrue(vectorEntrySet != null, "vectorEntrySet is null and it shouldn't be");
 				Assert.IsTrue(vectorEntrySet.Count == 10, "vectorEntrySet Size: " + vectorEntrySet.Count + " is not: " + 10);
 				knownSearcher.Close();

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/test/core/Search/TestWildcard.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/test/core/Search/TestWildcard.cs?rev=1203064&r1=1203063&r2=1203064&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/test/core/Search/TestWildcard.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/test/core/Search/TestWildcard.cs Thu Nov 17 06:01:45 2011
@@ -34,12 +34,7 @@ using LuceneTestCase = Lucene.Net.Util.L
 namespace Lucene.Net.Search
 {
 	
-	/// <summary> TestWildcard tests the '*' and '?' wildcard characters.
-	/// 
-	/// </summary>
-	/// <version>  $Id: TestWildcard.java 694004 2008-09-10 21:38:52Z mikemccand $
-	/// 
-	/// </version>
+	/// <summary>TestWildcard tests the '*' and '?' wildcard characters.</summary>
     [TestFixture]
 	public class TestWildcard:LuceneTestCase
 	{
@@ -66,27 +61,105 @@ namespace Lucene.Net.Search
 		}
 		
 		/// <summary> Tests if a WildcardQuery that has no wildcard in the term is rewritten to a single
-		/// TermQuery.
+		/// TermQuery.  The boost should be prserved, and the rewrite should return
+		/// a ConstantScoreQuery if the WildcardQuery had a ConstantScore rewriteMethod.
 		/// </summary>
-		[Test]
-		public virtual void  TestTermWithoutWildcard()
+        [Test]
+        public virtual void TestTermWithoutWildcard()
 		{
-			RAMDirectory indexStore = GetIndexStore("field", new System.String[]{"nowildcard", "nowildcardx"});
-			IndexSearcher searcher = new IndexSearcher(indexStore);
-			
-			Query wq = new WildcardQuery(new Term("field", "nowildcard"));
-			AssertMatches(searcher, wq, 1);
-			
-			wq = searcher.Rewrite(wq);
-			Assert.IsTrue(wq is TermQuery);
+		    RAMDirectory indexStore = GetIndexStore("field", new System.String[] {"nowildcard", "nowildcardx"});
+		    IndexSearcher searcher = new IndexSearcher(indexStore, true);
+
+		    MultiTermQuery wq = new WildcardQuery(new Term("field", "nowildcard"));
+		    AssertMatches(searcher, wq, 1);
+
+		    wq.SetRewriteMethod(MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE);
+		    wq.SetBoost(0.1f);
+		    Query q = searcher.Rewrite(wq);
+		    Assert.IsTrue(q is TermQuery);
+		    Assert.AreEqual(q.GetBoost(), wq.GetBoost());
+
+		    wq.SetRewriteMethod(MultiTermQuery.CONSTANT_SCORE_FILTER_REWRITE);
+		    wq.SetBoost(0.2f);
+		    q = searcher.Rewrite(wq);
+		    Assert.True(q is ConstantScoreQuery);
+		    Assert.AreEqual(q.GetBoost(), wq.GetBoost());
+
+		    wq.SetRewriteMethod(MultiTermQuery.CONSTANT_SCORE_AUTO_REWRITE_DEFAULT);
+		    wq.SetBoost(0.3F);
+		    q = searcher.Rewrite(wq);
+		    Assert.True(q is ConstantScoreQuery);
+		    Assert.AreEqual(q.GetBoost(), wq.GetBoost());
+
+		    wq.SetRewriteMethod(MultiTermQuery.CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE);
+		    wq.SetBoost(0.4F);
+		    q = searcher.Rewrite(wq);
+		    Assert.True(q is ConstantScoreQuery);
+		    Assert.AreEqual(q.GetBoost(), wq.GetBoost());
 		}
-		
-		/// <summary> Tests Wildcard queries with an asterisk.</summary>
+
+        /// <summary>
+        /// Tests if a WildcardQuery with an empty term is rewritten to an empty BooleanQuery
+        /// </summary>
+        [Test]
+        public void TestEmptyTerm()
+        {
+            RAMDirectory indexStore = GetIndexStore("field", new String[] { "nowildcard", "nowildcardx" });
+            IndexSearcher searcher = new IndexSearcher(indexStore, true);
+
+            MultiTermQuery wq = new WildcardQuery(new Term("field", ""));
+            wq.SetRewriteMethod(MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE);
+            AssertMatches(searcher, wq, 0);
+            BooleanQuery expected = new BooleanQuery(true);
+            Assert.AreEqual(searcher.Rewrite(expected), searcher.Rewrite(wq));
+        }
+
+        /// <summary>
+        /// Tests if a WildcardQuery that has only a trailing * in the term is
+        /// rewritten to a single PrefixQuery.  The boost and rewriteMethod should be
+        /// preserved.
+        /// </summary>
+        [Test]
+        public void TestPrefixTerm()
+        {
+            RAMDirectory indexStore = GetIndexStore("field", new String[] { "prefix", "prefixx" });
+            IndexSearcher searcher = new IndexSearcher(indexStore, true);
+
+            MultiTermQuery wq = new WildcardQuery(new Term("field", "prefix*"));
+            AssertMatches(searcher, wq, 2);
+
+            MultiTermQuery expected = new PrefixQuery(new Term("field", "prefix"));
+            wq.SetRewriteMethod(MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE);
+            wq.SetBoost(0.1F);
+            expected.SetRewriteMethod(wq.GetRewriteMethod());
+            expected.SetBoost(wq.GetBoost());
+            Assert.AreEqual(searcher.Rewrite(expected), searcher.Rewrite(wq));
+
+            wq.SetRewriteMethod(MultiTermQuery.CONSTANT_SCORE_FILTER_REWRITE);
+            wq.SetBoost(0.2F);
+            expected.SetRewriteMethod(wq.GetRewriteMethod());
+            expected.SetBoost(wq.GetBoost());
+            Assert.AreEqual(searcher.Rewrite(expected), searcher.Rewrite(wq));
+
+            wq.SetRewriteMethod(MultiTermQuery.CONSTANT_SCORE_AUTO_REWRITE_DEFAULT);
+            wq.SetBoost(0.3F);
+            expected.SetRewriteMethod(wq.GetRewriteMethod());
+            expected.SetBoost(wq.GetBoost());
+            Assert.AreEqual(searcher.Rewrite(expected), searcher.Rewrite(wq));
+
+            wq.SetRewriteMethod(MultiTermQuery.CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE);
+            wq.SetBoost(0.4F);
+            expected.SetRewriteMethod(wq.GetRewriteMethod());
+            expected.SetBoost(wq.GetBoost());
+            Assert.AreEqual(searcher.Rewrite(expected), searcher.Rewrite(wq));
+        }
+
+	    /// <summary> Tests Wildcard queries with an asterisk.</summary>
 		[Test]
 		public virtual void  TestAsterisk()
 		{
 			RAMDirectory indexStore = GetIndexStore("body", new System.String[]{"metal", "metals"});
-			IndexSearcher searcher = new IndexSearcher(indexStore);
+	        IndexSearcher searcher = new IndexSearcher(indexStore, true);
 			Query query1 = new TermQuery(new Term("body", "metal"));
 			Query query2 = new WildcardQuery(new Term("body", "metal*"));
 			Query query3 = new WildcardQuery(new Term("body", "m*tal"));
@@ -145,7 +218,7 @@ namespace Lucene.Net.Search
 		public virtual void  TestQuestionmark()
 		{
 			RAMDirectory indexStore = GetIndexStore("body", new System.String[]{"metal", "metals", "mXtals", "mXtXls"});
-			IndexSearcher searcher = new IndexSearcher(indexStore);
+		    IndexSearcher searcher = new IndexSearcher(indexStore, true);
 			Query query1 = new WildcardQuery(new Term("body", "m?tal"));
 			Query query2 = new WildcardQuery(new Term("body", "metal?"));
 			Query query3 = new WildcardQuery(new Term("body", "metals?"));
@@ -216,8 +289,8 @@ namespace Lucene.Net.Search
 				iw.AddDocument(doc);
 			}
 			iw.Close();
-			
-			IndexSearcher searcher = new IndexSearcher(dir);
+
+		    IndexSearcher searcher = new IndexSearcher(dir, true);
 			
 			// test queries that must find all
 			for (int i = 0; i < matchAll.Length; i++)

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/test/core/UpdatedTests.txt
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/test/core/UpdatedTests.txt?rev=1203064&r1=1203063&r2=1203064&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/test/core/UpdatedTests.txt (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/test/core/UpdatedTests.txt Thu Nov 17 06:01:45 2011
@@ -205,14 +205,14 @@ search\TestSpanQueryFilter.java - Text f
 search\TestStressSort.java - REMOVED
 search\TestTermRangeFilter.java - DONE
 search\TestTermRangeQuery.java - DONE
-search\TestTermScorer.java - Text files are different
+search\TestTermScorer.java - DONE
 search\TestTermVectors.java - DONE
 search\TestThreadSafe.java - DONE
 search\TestTimeLimitedCollector.java - REMOVED
 search\TestTimeLimitingCollector.java - DONE
 search\TestTopDocsCollector.java - Text files are different
 search\TestTopScoreDocCollector.java - DONE
-search\TestWildcard.java - Text files are different
+search\TestWildcard.java - DONE
 
 
 Store\