You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucenenet.apache.org by ar...@apache.org on 2008/07/15 23:44:10 UTC

svn commit: r677059 [19/19] - in /incubator/lucene.net/trunk/C#/src: ./ Demo/DeleteFiles/ Demo/DemoLib/ Demo/IndexFiles/ Demo/IndexHtml/ Demo/SearchFiles/ Lucene.Net/ Lucene.Net/Analysis/ Lucene.Net/Index/ Lucene.Net/Search/ Lucene.Net/Search/Function/...

Modified: incubator/lucene.net/trunk/C#/src/Test/TestDemo.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/C%23/src/Test/TestDemo.cs?rev=677059&r1=677058&r2=677059&view=diff
==============================================================================
--- incubator/lucene.net/trunk/C#/src/Test/TestDemo.cs (original)
+++ incubator/lucene.net/trunk/C#/src/Test/TestDemo.cs Tue Jul 15 14:44:04 2008
@@ -19,18 +19,19 @@
 
 using NUnit.Framework;
 
-using Analyzer = Lucene.Net.Analysis.Analyzer;
-using StandardAnalyzer = Lucene.Net.Analysis.Standard.StandardAnalyzer;
 using Document = Lucene.Net.Documents.Document;
 using Field = Lucene.Net.Documents.Field;
 using IndexWriter = Lucene.Net.Index.IndexWriter;
 using ParseException = Lucene.Net.QueryParsers.ParseException;
 using QueryParser = Lucene.Net.QueryParsers.QueryParser;
+using Directory = Lucene.Net.Store.Directory;
+using RAMDirectory = Lucene.Net.Store.RAMDirectory;
+using Analyzer = Lucene.Net.Analysis.Analyzer;
+using StandardAnalyzer = Lucene.Net.Analysis.Standard.StandardAnalyzer;
 using Hits = Lucene.Net.Search.Hits;
 using IndexSearcher = Lucene.Net.Search.IndexSearcher;
 using Query = Lucene.Net.Search.Query;
-using Directory = Lucene.Net.Store.Directory;
-using RAMDirectory = Lucene.Net.Store.RAMDirectory;
+using LuceneTestCase = Lucene.Net.Util.LuceneTestCase;
 
 namespace Lucene.Net
 {
@@ -41,8 +42,9 @@
 	/// <author>  Daniel Naber
 	/// </author>
 	[TestFixture]
-    public class TestDemo
+	public class TestDemo : LuceneTestCase
 	{
+		
 		[Test]
 		public virtual void  TestDemo_Renamed_Method()
 		{
@@ -57,7 +59,7 @@
 			//Directory directory = FSDirectory.getDirectory("/tmp/testindex", true);
 			IndexWriter iwriter = new IndexWriter(directory, analyzer, true);
 			iwriter.SetMaxFieldLength(25000);
-			Lucene.Net.Documents.Document doc = new Lucene.Net.Documents.Document();
+			Document doc = new Document();
 			System.String text = "This is the text to be indexed.";
 			doc.Add(new Field("fieldname", text, Field.Store.YES, Field.Index.TOKENIZED));
 			iwriter.AddDocument(doc);
@@ -66,14 +68,14 @@
 			// Now search the index:
 			IndexSearcher isearcher = new IndexSearcher(directory);
 			// Parse a simple query that searches for "text":
-            Lucene.Net.QueryParsers.QueryParser parser = new Lucene.Net.QueryParsers.QueryParser("fieldname", analyzer);
-            Lucene.Net.Search.Query query = parser.Parse("text");
-            Hits hits = isearcher.Search(query);
+			Lucene.Net.QueryParsers.QueryParser parser = new Lucene.Net.QueryParsers.QueryParser("fieldname", analyzer);
+			Query query = parser.Parse("text");
+			Hits hits = isearcher.Search(query);
 			Assert.AreEqual(1, hits.Length());
 			// Iterate through the results:
 			for (int i = 0; i < hits.Length(); i++)
 			{
-				Lucene.Net.Documents.Document hitDoc = hits.Doc(i);
+				Document hitDoc = hits.Doc(i);
 				Assert.AreEqual("This is the text to be indexed.", hitDoc.Get("fieldname"));
 			}
 			isearcher.Close();

Modified: incubator/lucene.net/trunk/C#/src/Test/TestHitIterator.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/C%23/src/Test/TestHitIterator.cs?rev=677059&r1=677058&r2=677059&view=diff
==============================================================================
--- incubator/lucene.net/trunk/C#/src/Test/TestHitIterator.cs (original)
+++ incubator/lucene.net/trunk/C#/src/Test/TestHitIterator.cs Tue Jul 15 14:44:04 2008
@@ -19,17 +19,18 @@
 
 using NUnit.Framework;
 
-using RAMDirectory = Lucene.Net.Store.RAMDirectory;
+using Document = Lucene.Net.Documents.Document;
+using Field = Lucene.Net.Documents.Field;
 using IndexWriter = Lucene.Net.Index.IndexWriter;
 using Term = Lucene.Net.Index.Term;
+using RAMDirectory = Lucene.Net.Store.RAMDirectory;
 using WhitespaceAnalyzer = Lucene.Net.Analysis.WhitespaceAnalyzer;
-using Document = Lucene.Net.Documents.Document;
-using Field = Lucene.Net.Documents.Field;
-using IndexSearcher = Lucene.Net.Search.IndexSearcher;
-using TermQuery = Lucene.Net.Search.TermQuery;
-using Hits = Lucene.Net.Search.Hits;
 using Hit = Lucene.Net.Search.Hit;
 using HitIterator = Lucene.Net.Search.HitIterator;
+using Hits = Lucene.Net.Search.Hits;
+using IndexSearcher = Lucene.Net.Search.IndexSearcher;
+using TermQuery = Lucene.Net.Search.TermQuery;
+using LuceneTestCase = Lucene.Net.Util.LuceneTestCase;
 
 namespace Lucene.Net
 {
@@ -38,9 +39,9 @@
 	/// to test HitIterator and Hit package protection.
 	/// </summary>
 	[TestFixture]
-    public class TestHitIterator
+	public class TestHitIterator : LuceneTestCase
 	{
-        [Test]
+		[Test]
 		public virtual void  TestIterator()
 		{
 			RAMDirectory directory = new RAMDirectory();
@@ -76,7 +77,7 @@
 			{
 				System.Object generatedAux = iterator.Current;
 			}
-			catch (System.ArgumentOutOfRangeException e)
+			catch (System.ArgumentOutOfRangeException)
 			{
 				Assert.IsTrue(true);
 				caughtException = true;

Modified: incubator/lucene.net/trunk/C#/src/Test/TestSearch.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/C%23/src/Test/TestSearch.cs?rev=677059&r1=677058&r2=677059&view=diff
==============================================================================
--- incubator/lucene.net/trunk/C#/src/Test/TestSearch.cs (original)
+++ incubator/lucene.net/trunk/C#/src/Test/TestSearch.cs Tue Jul 15 14:44:04 2008
@@ -19,24 +19,25 @@
 
 using NUnit.Framework;
 
-using Lucene.Net.Store;
 using Lucene.Net.Documents;
-using Lucene.Net.Analysis;
 using Lucene.Net.Index;
+using Lucene.Net.QueryParsers;
+using Lucene.Net.Store;
+using Lucene.Net.Analysis;
 using Lucene.Net.Search;
 using Searchable = Lucene.Net.Search.Searchable;
-using Lucene.Net.QueryParsers;
+using LuceneTestCase = Lucene.Net.Util.LuceneTestCase;
 
 namespace Lucene.Net
 {
 	
-	/// <summary>JUnit adaptation of an older test case SearchTest.</summary>
-	/// <author>  dmitrys@earthlink.net
-	/// </author>
-	/// <version>  $Id: TestSearch.java 150494 2004-09-06 22:29:22Z dnaber $
+	/// <summary>JUnit adaptation of an older test case SearchTest.
+	/// 
+	/// </summary>
+	/// <version>  $Id: TestSearch.java 583534 2007-10-10 16:46:35Z mikemccand $
 	/// </version>
 	[TestFixture]
-    public class TestSearch
+	public class TestSearch : LuceneTestCase
 	{
 		
 		/// <summary>Main for running test case by itself. </summary>
@@ -56,10 +57,10 @@
 		/// single-file formats, even if the results are wrong.
 		/// </summary>
 		[Test]
-        public virtual void  TestSearch_Renamed_Method()
+		public virtual void  TestSearch_Renamed_Method()
 		{
-            System.IO.MemoryStream sw = new System.IO.MemoryStream();
-            System.IO.StreamWriter pw = new System.IO.StreamWriter(sw);
+			System.IO.MemoryStream sw = new System.IO.MemoryStream();
+			System.IO.StreamWriter pw = new System.IO.StreamWriter(sw);
 			DoTestSearch(pw, false);
 			pw.Close();
 			sw.Close();
@@ -125,8 +126,8 @@
 		
 		internal static long Time(int year, int month, int day)
 		{
-            System.DateTime calendar = new System.DateTime(year, month, day, 0, 0, 0, 0, new System.Globalization.GregorianCalendar());
-            return calendar.Ticks;
+			System.DateTime calendar = new System.DateTime(year, month, day, 0, 0, 0, 0, new System.Globalization.GregorianCalendar());
+			return calendar.Ticks;
 		}
 	}
 }
\ No newline at end of file

Modified: incubator/lucene.net/trunk/C#/src/Test/TestSearchForDuplicates.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/C%23/src/Test/TestSearchForDuplicates.cs?rev=677059&r1=677058&r2=677059&view=diff
==============================================================================
--- incubator/lucene.net/trunk/C#/src/Test/TestSearchForDuplicates.cs (original)
+++ incubator/lucene.net/trunk/C#/src/Test/TestSearchForDuplicates.cs Tue Jul 15 14:44:04 2008
@@ -19,25 +19,26 @@
 
 using NUnit.Framework;
 
-using Lucene.Net.Store;
 using Lucene.Net.Documents;
-using Lucene.Net.Analysis;
 using Lucene.Net.Index;
+using Lucene.Net.QueryParsers;
+using Lucene.Net.Store;
+using Lucene.Net.Analysis;
 using Lucene.Net.Search;
 using Searchable = Lucene.Net.Search.Searchable;
-using Lucene.Net.QueryParsers;
+using LuceneTestCase = Lucene.Net.Util.LuceneTestCase;
 
 namespace Lucene.Net
 {
 	
 	
-	/// <summary>JUnit adaptation of an older test case DocTest.</summary>
-	/// <author>  dmitrys@earthlink.net
-	/// </author>
-	/// <version>  $Id: TestSearchForDuplicates.java 150494 2004-09-06 22:29:22Z dnaber $
+	/// <summary>JUnit adaptation of an older test case DocTest.
+	/// 
+	/// </summary>
+	/// <version>  $Id: TestSearchForDuplicates.java 583534 2007-10-10 16:46:35Z mikemccand $
 	/// </version>
 	[TestFixture]
-    public class TestSearchForDuplicates
+	public class TestSearchForDuplicates : LuceneTestCase
 	{
 		
 		/// <summary>Main for running test case by itself. </summary>
@@ -65,25 +66,25 @@
 		/// validate this output and make any changes to the checkHits method.
 		/// </summary>
 		[Test]
-        public virtual void  TestRun()
+		public virtual void  TestRun()
 		{
-            System.IO.MemoryStream sw = new System.IO.MemoryStream();
-            System.IO.StreamWriter pw = new System.IO.StreamWriter(sw);
-            DoTest(pw, false);
-            pw.Close();
-            sw.Close();
-            System.String multiFileOutput = System.Text.ASCIIEncoding.ASCII.GetString(sw.ToArray());
-            //System.out.println(multiFileOutput);
-			
-            sw = new System.IO.MemoryStream();
-            pw = new System.IO.StreamWriter(sw);
-            DoTest(pw, true);
-            pw.Close();
-            sw.Close();
-            System.String singleFileOutput = System.Text.ASCIIEncoding.ASCII.GetString(sw.ToArray());
+			System.IO.MemoryStream sw = new System.IO.MemoryStream();
+			System.IO.StreamWriter pw = new System.IO.StreamWriter(sw);
+			DoTest(pw, false);
+			pw.Close();
+			sw.Close();
+			System.String multiFileOutput = System.Text.ASCIIEncoding.ASCII.GetString(sw.ToArray());
+			//System.out.println(multiFileOutput);
+			
+			sw = new System.IO.MemoryStream();
+			pw = new System.IO.StreamWriter(sw);
+			DoTest(pw, true);
+			pw.Close();
+			sw.Close();
+			System.String singleFileOutput = System.Text.ASCIIEncoding.ASCII.GetString(sw.ToArray());
 			
-            Assert.AreEqual(multiFileOutput, singleFileOutput);
-        }
+			Assert.AreEqual(multiFileOutput, singleFileOutput);
+		}
 		
 		
 		private void  DoTest(System.IO.StreamWriter out_Renamed, bool useCompoundFiles)

Added: incubator/lucene.net/trunk/C#/src/Test/TestSnapshotDeletionPolicy.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/C%23/src/Test/TestSnapshotDeletionPolicy.cs?rev=677059&view=auto
==============================================================================
--- incubator/lucene.net/trunk/C#/src/Test/TestSnapshotDeletionPolicy.cs (added)
+++ incubator/lucene.net/trunk/C#/src/Test/TestSnapshotDeletionPolicy.cs Tue Jul 15 14:44:04 2008
@@ -0,0 +1,254 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+
+using NUnit.Framework;
+
+using Document = Lucene.Net.Documents.Document;
+using Field = Lucene.Net.Documents.Field;
+using IndexCommitPoint = Lucene.Net.Index.IndexCommitPoint;
+using IndexWriter = Lucene.Net.Index.IndexWriter;
+using KeepOnlyLastCommitDeletionPolicy = Lucene.Net.Index.KeepOnlyLastCommitDeletionPolicy;
+using SnapshotDeletionPolicy = Lucene.Net.Index.SnapshotDeletionPolicy;
+using Directory = Lucene.Net.Store.Directory;
+using FSDirectory = Lucene.Net.Store.FSDirectory;
+using IndexInput = Lucene.Net.Store.IndexInput;
+using MockRAMDirectory = Lucene.Net.Store.MockRAMDirectory;
+using LuceneTestCase = Lucene.Net.Util.LuceneTestCase;
+using _TestUtil = Lucene.Net.Util._TestUtil;
+using StandardAnalyzer = Lucene.Net.Analysis.Standard.StandardAnalyzer;
+using TestIndexWriter = Lucene.Net.Index.TestIndexWriter;
+
+namespace Lucene.Net
+{
+	
+	//
+	// This was developed for Lucene In Action,
+	// http://lucenebook.com
+	//
+	
+	[TestFixture]
+	public class TestSnapshotDeletionPolicy : LuceneTestCase
+	{
+		private class AnonymousClassThread : SupportClass.ThreadClass
+		{
+			public AnonymousClassThread(long stopTime, Lucene.Net.Index.IndexWriter writer, TestSnapshotDeletionPolicy enclosingInstance)
+			{
+				InitBlock(stopTime, writer, enclosingInstance);
+			}
+			private void  InitBlock(long stopTime, Lucene.Net.Index.IndexWriter writer, TestSnapshotDeletionPolicy enclosingInstance)
+			{
+				this.stopTime = stopTime;
+				this.writer = writer;
+				this.enclosingInstance = enclosingInstance;
+			}
+			private long stopTime;
+			private Lucene.Net.Index.IndexWriter writer;
+			private TestSnapshotDeletionPolicy enclosingInstance;
+			public TestSnapshotDeletionPolicy Enclosing_Instance
+			{
+				get
+				{
+					return enclosingInstance;
+				}
+				
+			}
+			override public void  Run()
+			{
+				Document doc = new Document();
+				doc.Add(new Field("content", "aaa", Field.Store.YES, Field.Index.TOKENIZED, Field.TermVector.WITH_POSITIONS_OFFSETS));
+				while ((System.DateTime.Now.Ticks - 621355968000000000) / 10000 < stopTime)
+				{
+					for (int i = 0; i < 27; i++)
+					{
+						try
+						{
+							writer.AddDocument(doc);
+						}
+						catch (System.IO.IOException cie)
+						{
+							System.SystemException re = new System.SystemException("addDocument failed", cie);
+							throw re;
+						}
+					}
+					try
+					{
+						System.Threading.Thread.Sleep(new System.TimeSpan((System.Int64) 10000 * 1));
+					}
+					catch (System.Threading.ThreadInterruptedException)
+					{
+						SupportClass.ThreadClass.Current().Interrupt();
+					}
+				}
+			}
+		}
+		public const System.String INDEX_PATH = "test.snapshots";
+		
+		[Test]
+		public virtual void  TestSnapshotDeletionPolicy_Renamed_Method()
+		{
+			System.IO.FileInfo dir = new System.IO.FileInfo(System.IO.Path.Combine(SupportClass.AppSettings.Get("tempDir", ""), INDEX_PATH));
+			try
+			{
+				Directory fsDir = FSDirectory.GetDirectory(dir);
+				RunTest(fsDir);
+				fsDir.Close();
+			}
+			finally
+			{
+				_TestUtil.RmDir(dir);
+			}
+			
+			MockRAMDirectory dir2 = new MockRAMDirectory();
+			RunTest(dir2);
+		}
+		
+		private void  RunTest(Directory dir)
+		{
+			// Run for ~7 seconds
+			long stopTime = (System.DateTime.Now.Ticks - 621355968000000000) / 10000 + 7000;
+			
+			SnapshotDeletionPolicy dp = new SnapshotDeletionPolicy(new KeepOnlyLastCommitDeletionPolicy());
+			IndexWriter writer = new IndexWriter(dir, true, new StandardAnalyzer(), dp);
+			
+			// Force frequent commits
+			writer.SetMaxBufferedDocs(2);
+			
+			SupportClass.ThreadClass t = new AnonymousClassThread(stopTime, writer, this);
+			
+			t.Start();
+			
+			// While the above indexing thread is running, take many
+			// backups:
+			while ((System.DateTime.Now.Ticks - 621355968000000000) / 10000 < stopTime)
+			{
+				BackupIndex(dir, dp);
+				try
+				{
+					System.Threading.Thread.Sleep(new System.TimeSpan((System.Int64) 10000 * 20));
+				}
+				catch (System.Threading.ThreadInterruptedException)
+				{
+					SupportClass.ThreadClass.Current().Interrupt();
+				}
+				if (!t.IsAlive)
+					break;
+			}
+			
+			try
+			{
+				t.Join();
+			}
+			catch (System.Threading.ThreadInterruptedException)
+			{
+				SupportClass.ThreadClass.Current().Interrupt();
+			}
+			
+			// Add one more document to force writer to commit a
+			// final segment, so deletion policy has a chance to
+			// delete again:
+			Document doc = new Document();
+			doc.Add(new Field("content", "aaa", Field.Store.YES, Field.Index.TOKENIZED, Field.TermVector.WITH_POSITIONS_OFFSETS));
+			writer.AddDocument(doc);
+			
+			// Make sure we don't have any leftover files in the
+			// directory:
+			writer.Close();
+			TestIndexWriter.AssertNoUnreferencedFiles(dir, "some files were not deleted but should have been");
+		}
+		
+		/// <summary>Example showing how to use the SnapshotDeletionPolicy
+		/// to take a backup.  This method does not really do a
+		/// backup; instead, it reads every byte of every file
+		/// just to test that the files indeed exist and are
+		/// readable even while the index is changing. 
+		/// </summary>
+		public virtual void  BackupIndex(Directory dir, SnapshotDeletionPolicy dp)
+		{
+			
+			// To backup an index we first take a snapshot:
+			IndexCommitPoint cp = dp.Snapshot();
+			try
+			{
+				
+				// While we hold the snapshot, and nomatter how long
+				// we take to do the backup, the IndexWriter will
+				// never delete the files in the snapshot:
+				System.Collections.ICollection files = cp.GetFileNames();
+				System.Collections.IEnumerator it = files.GetEnumerator();
+				while (it.MoveNext())
+				{
+					System.String fileName = (System.String) it.Current;
+					// NOTE: in a real backup you would not use
+					// readFile; you would need to use something else
+					// that copies the file to a backup location.  This
+					// could even be a spawned shell process (eg "tar",
+					// "zip") that takes the list of files and builds a
+					// backup.
+					ReadFile(dir, fileName);
+				}
+			}
+			finally
+			{
+				// Make sure to release the snapshot, otherwise these
+				// files will never be deleted during this IndexWriter
+				// session:
+				dp.Release();
+			}
+		}
+		
+		internal byte[] buffer = new byte[4096];
+		
+		private void  ReadFile(Directory dir, System.String name)
+		{
+			IndexInput input = dir.OpenInput(name);
+			try
+			{
+				long size = dir.FileLength(name);
+				long bytesLeft = size;
+				while (bytesLeft > 0)
+				{
+					int numToRead;
+					if (bytesLeft < buffer.Length)
+						numToRead = (int) bytesLeft;
+					else
+						numToRead = buffer.Length;
+					input.ReadBytes(buffer, 0, numToRead, false);
+					bytesLeft -= numToRead;
+				}
+				// Don't do this in your real backups!  This is just
+				// to force a backup to take a somewhat long time, to
+				// make sure we are exercising the fact that the
+				// IndexWriter should not delete this file even when I
+				// take my time reading it.
+				try
+				{
+					System.Threading.Thread.Sleep(new System.TimeSpan((System.Int64) 10000 * 1));
+				}
+				catch (System.Threading.ThreadInterruptedException)
+				{
+					SupportClass.ThreadClass.Current().Interrupt();
+				}
+			}
+			finally
+			{
+				input.Close();
+			}
+		}
+	}
+}
\ No newline at end of file

Modified: incubator/lucene.net/trunk/C#/src/Test/ThreadSafetyTest.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/C%23/src/Test/ThreadSafetyTest.cs?rev=677059&r1=677058&r2=677059&view=diff
==============================================================================
--- incubator/lucene.net/trunk/C#/src/Test/ThreadSafetyTest.cs (original)
+++ incubator/lucene.net/trunk/C#/src/Test/ThreadSafetyTest.cs Tue Jul 15 14:44:04 2008
@@ -23,8 +23,8 @@
 using Lucene.Net.Analysis;
 using Lucene.Net.Index;
 using Lucene.Net.Search;
-using Searchable = Lucene.Net.Search.Searchable;
 using Lucene.Net.QueryParsers;
+using Searchable = Lucene.Net.Search.Searchable;
 
 namespace Lucene.Net
 {
@@ -145,9 +145,9 @@
 			private void  searchFor(int n, Searcher searcher)
 			{
 				System.Console.Out.WriteLine("Searching for " + n);
-                Lucene.Net.QueryParsers.QueryParser parser = new Lucene.Net.QueryParsers.QueryParser("contents", Lucene.Net.ThreadSafetyTest.ANALYZER);
-                Lucene.Net.Search.Hits hits = searcher.Search(parser.Parse(Lucene.Net.Util.English.IntToEnglish(n)));
-                System.Console.Out.WriteLine("Search for " + n + ": total=" + hits.Length());
+				Lucene.Net.QueryParsers.QueryParser parser = new Lucene.Net.QueryParsers.QueryParser("contents", Lucene.Net.ThreadSafetyTest.ANALYZER);
+				Lucene.Net.Search.Hits hits = searcher.Search(parser.Parse(Lucene.Net.Util.English.IntToEnglish(n)));
+				System.Console.Out.WriteLine("Search for " + n + ": total=" + hits.Length());
 				for (int j = 0; j < System.Math.Min(3, hits.Length()); j++)
 				{
 					System.Console.Out.WriteLine("Hit for " + n + ": " + hits.Doc(j).Get("id"));

Added: incubator/lucene.net/trunk/C#/src/Test/Util/LuceneTestCase.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/C%23/src/Test/Util/LuceneTestCase.cs?rev=677059&view=auto
==============================================================================
--- incubator/lucene.net/trunk/C#/src/Test/Util/LuceneTestCase.cs (added)
+++ incubator/lucene.net/trunk/C#/src/Test/Util/LuceneTestCase.cs Tue Jul 15 14:44:04 2008
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+
+using NUnit.Framework;
+
+using ConcurrentMergeScheduler = Lucene.Net.Index.ConcurrentMergeScheduler;
+
+namespace Lucene.Net.Util
+{
+	
+	/// <summary>Base class for all Lucene unit tests.  Currently the
+	/// only added functionality over JUnit's TestCase is
+	/// asserting that no unhandled exceptions occurred in
+	/// threads launched by ConcurrentMergeScheduler.  If you
+	/// override either <code>setUp()</code> or
+	/// <code>tearDown()</code> in your unit test, make sure you
+	/// call <code>super.setUp()</code> and
+	/// <code>super.tearDown()</code>.
+	/// </summary>
+	
+	[TestFixture]
+	public abstract class LuceneTestCase
+	{
+		
+		public LuceneTestCase() : base()
+		{
+		}
+		
+		public LuceneTestCase(System.String name) : base()
+		{
+		}
+		
+		[SetUp]
+		public virtual void  SetUp()
+		{
+			ConcurrentMergeScheduler.SetTestMode();
+		}
+		
+		[TearDown]
+		public virtual void  TearDown()
+		{
+			if (ConcurrentMergeScheduler.AnyUnhandledExceptions())
+			{
+				Assert.Fail("ConcurrentMergeScheduler hit unhandled exceptions");
+			}
+		}
+	}
+}
\ No newline at end of file

Added: incubator/lucene.net/trunk/C#/src/Test/Util/StringHelperTest.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/C%23/src/Test/Util/StringHelperTest.cs?rev=677059&view=auto
==============================================================================
--- incubator/lucene.net/trunk/C#/src/Test/Util/StringHelperTest.cs (added)
+++ incubator/lucene.net/trunk/C#/src/Test/Util/StringHelperTest.cs Tue Jul 15 14:44:04 2008
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// {{Aroush-2.3.1}} Remove from 2.3.1
+
+/*
+using System;
+using NUnit.Framework;
+namespace Lucene.Net.Util
+{
+	[TestFixture]
+	public class StringHelperTest
+	{
+		[TestFixtureSetUp]
+		protected virtual void  SetUp()
+		{
+		}
+		
+        [TestFixtureTearDown]
+		protected virtual void  TearDown()
+		{
+			
+		}
+		
+        [Test]
+		public virtual void  TestStringDifference()
+		{
+			System.String test1 = "test";
+			System.String test2 = "testing";
+			
+			int result = StringHelper.StringDifference(test1, test2);
+			Assert.IsTrue(result == 4);
+			
+			test2 = "foo";
+			result = StringHelper.StringDifference(test1, test2);
+			Assert.IsTrue(result == 0);
+			
+			test2 = "test";
+			result = StringHelper.StringDifference(test1, test2);
+			Assert.IsTrue(result == 4);
+		}
+	}
+}
+*/
\ No newline at end of file

Modified: incubator/lucene.net/trunk/C#/src/Test/Util/TestBitVector.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/C%23/src/Test/Util/TestBitVector.cs?rev=677059&r1=677058&r2=677059&view=diff
==============================================================================
--- incubator/lucene.net/trunk/C#/src/Test/Util/TestBitVector.cs (original)
+++ incubator/lucene.net/trunk/C#/src/Test/Util/TestBitVector.cs Tue Jul 15 14:44:04 2008
@@ -27,19 +27,18 @@
 	
 	/// <summary> <code>TestBitVector</code> tests the <code>BitVector</code>, obviously.
 	/// 
+	/// 
 	/// </summary>
-	/// <author>  "Peter Mularien" <pm...@deploy.com>
-	/// </author>
-    /// <version>  $Id: TestBitVector.java 485463 2006-12-11 02:03:38Z yonik $
-    /// </version>
+	/// <version>  $Id: TestBitVector.java 583534 2007-10-10 16:46:35Z mikemccand $
+	/// </version>
 	[TestFixture]
-    public class TestBitVector
+	public class TestBitVector : LuceneTestCase
 	{
 		
 		/// <summary> Test the default constructor on BitVectors of various sizes.</summary>
 		/// <throws>  Exception </throws>
 		[Test]
-        public virtual void  TestConstructSize()
+		public virtual void  TestConstructSize()
 		{
 			DoTestConstructOfSize(8);
 			DoTestConstructOfSize(20);
@@ -56,7 +55,7 @@
 		/// <summary> Test the get() and set() methods on BitVectors of various sizes.</summary>
 		/// <throws>  Exception </throws>
 		[Test]
-        public virtual void  TestGetSet()
+		public virtual void  TestGetSet()
 		{
 			DoTestGetSetVectorOfSize(8);
 			DoTestGetSetVectorOfSize(20);
@@ -79,7 +78,7 @@
 		/// <summary> Test the clear() method on BitVectors of various sizes.</summary>
 		/// <throws>  Exception </throws>
 		[Test]
-        public virtual void  TestClear()
+		public virtual void  TestClear()
 		{
 			DoTestClearVectorOfSize(8);
 			DoTestClearVectorOfSize(20);
@@ -104,7 +103,7 @@
 		/// <summary> Test the count() method on BitVectors of various sizes.</summary>
 		/// <throws>  Exception </throws>
 		[Test]
-        public virtual void  TestCount()
+		public virtual void  TestCount()
 		{
 			DoTestCountVectorOfSize(8);
 			DoTestCountVectorOfSize(20);
@@ -143,7 +142,7 @@
 		/// <summary> Test writing and construction to/from Directory.</summary>
 		/// <throws>  Exception </throws>
 		[Test]
-        public virtual void  TestWriteRead()
+		public virtual void  TestWriteRead()
 		{
 			DoTestWriteRead(8);
 			DoTestWriteRead(20);
@@ -171,53 +170,53 @@
 			}
 		}
 		
-        /// <summary> Test r/w when size/count cause switching between bit-set and d-gaps file formats.  </summary>
-        /// <throws>  Exception </throws>
-        [Test]
-        public virtual void  TestDgaps()
-        {
-            DoTestDgaps(1, 0, 1);
-            DoTestDgaps(10, 0, 1);
-            DoTestDgaps(100, 0, 1);
-            DoTestDgaps(1000, 4, 7);
-            DoTestDgaps(10000, 40, 43);
-            DoTestDgaps(100000, 415, 418);
-            DoTestDgaps(1000000, 3123, 3126);
-        }
-		
-        private void  DoTestDgaps(int size, int count1, int count2)
-        {
-            Directory d = new RAMDirectory();
-            BitVector bv = new BitVector(size);
-            for (int i = 0; i < count1; i++)
-            {
-                bv.Set(i);
-                Assert.AreEqual(i + 1, bv.Count());
-            }
-            bv.Write(d, "TESTBV");
-            // gradually increase number of set bits
-            for (int i = count1; i < count2; i++)
-            {
-                BitVector bv2 = new BitVector(d, "TESTBV");
-                Assert.IsTrue(DoCompare(bv, bv2));
-                bv = bv2;
-                bv.Set(i);
-                Assert.AreEqual(i + 1, bv.Count());
-                bv.Write(d, "TESTBV");
-            }
-            // now start decreasing number of set bits
-            for (int i = count2 - 1; i >= count1; i--)
-            {
-                BitVector bv2 = new BitVector(d, "TESTBV");
-                Assert.IsTrue(DoCompare(bv, bv2));
-                bv = bv2;
-                bv.Clear(i);
-                Assert.AreEqual(i, bv.Count());
-                bv.Write(d, "TESTBV");
-            }
-        }
+		/// <summary> Test r/w when size/count cause switching between bit-set and d-gaps file formats.  </summary>
+		/// <throws>  Exception </throws>
+		[Test]
+		public virtual void  TestDgaps()
+		{
+			DoTestDgaps(1, 0, 1);
+			DoTestDgaps(10, 0, 1);
+			DoTestDgaps(100, 0, 1);
+			DoTestDgaps(1000, 4, 7);
+			DoTestDgaps(10000, 40, 43);
+			DoTestDgaps(100000, 415, 418);
+			DoTestDgaps(1000000, 3123, 3126);
+		}
+		
+		private void  DoTestDgaps(int size, int count1, int count2)
+		{
+			Directory d = new RAMDirectory();
+			BitVector bv = new BitVector(size);
+			for (int i = 0; i < count1; i++)
+			{
+				bv.Set(i);
+				Assert.AreEqual(i + 1, bv.Count());
+			}
+			bv.Write(d, "TESTBV");
+			// gradually increase number of set bits
+			for (int i = count1; i < count2; i++)
+			{
+				BitVector bv2 = new BitVector(d, "TESTBV");
+				Assert.IsTrue(DoCompare(bv, bv2));
+				bv = bv2;
+				bv.Set(i);
+				Assert.AreEqual(i + 1, bv.Count());
+				bv.Write(d, "TESTBV");
+			}
+			// now start decreasing number of set bits
+			for (int i = count2 - 1; i >= count1; i--)
+			{
+				BitVector bv2 = new BitVector(d, "TESTBV");
+				Assert.IsTrue(DoCompare(bv, bv2));
+				bv = bv2;
+				bv.Clear(i);
+				Assert.AreEqual(i, bv.Count());
+				bv.Write(d, "TESTBV");
+			}
+		}
 
-        /// <summary> Compare two BitVectors.
+		/// <summary> Compare two BitVectors.
 		/// This should really be an equals method on the BitVector itself.
 		/// </summary>
 		/// <param name="bv">One bit vector

Modified: incubator/lucene.net/trunk/C#/src/Test/Util/TestPriorityQueue.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/C%23/src/Test/Util/TestPriorityQueue.cs?rev=677059&r1=677058&r2=677059&view=diff
==============================================================================
--- incubator/lucene.net/trunk/C#/src/Test/Util/TestPriorityQueue.cs (original)
+++ incubator/lucene.net/trunk/C#/src/Test/Util/TestPriorityQueue.cs Tue Jul 15 14:44:04 2008
@@ -22,8 +22,11 @@
 namespace Lucene.Net.Util
 {
 	[TestFixture]
-	public class TestPriorityQueue
+	public class TestPriorityQueue : LuceneTestCase
 	{
+		//public TestPriorityQueue(System.String name) : base(name)
+		//{
+		//}
 		
 		private class IntegerQueue : PriorityQueue
 		{
@@ -39,12 +42,12 @@
 		}
 		
 		[Test]
-        public virtual void  TestPQ()
+		public virtual void  TestPQ()
 		{
-			_TestPQ2(10000);
+			TestPQ(10000);
 		}
 		
-        public static void  _TestPQ2(int count)
+		public static void  TestPQ(int count)
 		{
 			PriorityQueue pq = new IntegerQueue(count);
 			System.Random gen = new System.Random();
@@ -81,7 +84,7 @@
 		}
 		
 		[Test]
-        public virtual void  TestClear()
+		public virtual void  TestClear()
 		{
 			PriorityQueue pq = new IntegerQueue(3);
 			pq.Put((System.Object) 2);
@@ -93,7 +96,7 @@
 		}
 		
 		[Test]
-        public virtual void  TestFixedSize()
+		public virtual void  TestFixedSize()
 		{
 			PriorityQueue pq = new IntegerQueue(3);
 			pq.Insert((System.Object) 2);
@@ -105,5 +108,27 @@
 			Assert.AreEqual(3, pq.Size());
 			Assert.AreEqual(3, ((System.Int32) pq.Top()));
 		}
+		
+		[Test]
+		public virtual void  TestInsertWithOverflow()
+		{
+			int size = 4;
+			PriorityQueue pq = new IntegerQueue(size);
+			System.Int32 i1 = 2;
+			System.Int32 i2 = 3;
+			System.Int32 i3 = 1;
+			System.Int32 i4 = 5;
+			System.Int32 i5 = 7;
+			System.Int32 i6 = 1;
+			
+			Assert.IsNull(pq.InsertWithOverflow((System.Object) i1));
+			Assert.IsNull(pq.InsertWithOverflow((System.Object) i2));
+			Assert.IsNull(pq.InsertWithOverflow((System.Object) i3));
+			Assert.IsNull(pq.InsertWithOverflow((System.Object) i4));
+			Assert.IsTrue((int)pq.InsertWithOverflow((System.Object)i5) == i3); // i3 should have been dropped
+			Assert.IsTrue((int)pq.InsertWithOverflow((System.Object)i6) == i6); // i6 should not have been inserted
+			Assert.AreEqual(size, pq.Size());
+			Assert.AreEqual(2, ((System.Int32) pq.Top()));
+		}
 	}
 }
\ No newline at end of file

Modified: incubator/lucene.net/trunk/C#/src/Test/Util/TestSmallFloat.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/C%23/src/Test/Util/TestSmallFloat.cs?rev=677059&r1=677058&r2=677059&view=diff
==============================================================================
--- incubator/lucene.net/trunk/C#/src/Test/Util/TestSmallFloat.cs (original)
+++ incubator/lucene.net/trunk/C#/src/Test/Util/TestSmallFloat.cs Tue Jul 15 14:44:04 2008
@@ -27,7 +27,7 @@
 	/// <version>  $Id$
 	/// </version>
 	[TestFixture]
-    public class TestSmallFloat
+	public class TestSmallFloat : LuceneTestCase
 	{
 		
 		// original lucene byteToFloat
@@ -74,7 +74,7 @@
 			return (sbyte) ((exponent << 3) | mantissa); // pack into a byte
 		}
 		
-        [Test]
+		[Test]
 		public virtual void  TestByteToFloat()
 		{
 			for (int i = 0; i < 256; i++)
@@ -92,7 +92,7 @@
 		}
 		
 		[Test]
-        public virtual void  TestFloatToByte()
+		public virtual void  TestFloatToByte()
 		{
 			System.Random rand = new System.Random((System.Int32) 0);
 			// up iterations for more exhaustive test after changing something

Modified: incubator/lucene.net/trunk/C#/src/Test/Util/TestStringHelper.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/C%23/src/Test/Util/TestStringHelper.cs?rev=677059&r1=677058&r2=677059&view=diff
==============================================================================
--- incubator/lucene.net/trunk/C#/src/Test/Util/TestStringHelper.cs (original)
+++ incubator/lucene.net/trunk/C#/src/Test/Util/TestStringHelper.cs Tue Jul 15 14:44:04 2008
@@ -22,7 +22,7 @@
 namespace Lucene.Net.Util
 {
 	[TestFixture]
-	public class TestStringHelper
+	public class TestStringHelper : LuceneTestCase
 	{
 		
 		[Test]

Modified: incubator/lucene.net/trunk/C#/src/Test/Util/_TestUtil.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/C%23/src/Test/Util/_TestUtil.cs?rev=677059&r1=677058&r2=677059&view=diff
==============================================================================
--- incubator/lucene.net/trunk/C#/src/Test/Util/_TestUtil.cs (original)
+++ incubator/lucene.net/trunk/C#/src/Test/Util/_TestUtil.cs Tue Jul 15 14:44:04 2008
@@ -17,6 +17,10 @@
 
 using System;
 
+using ConcurrentMergeScheduler = Lucene.Net.Index.ConcurrentMergeScheduler;
+using IndexWriter = Lucene.Net.Index.IndexWriter;
+using MergeScheduler = Lucene.Net.Index.MergeScheduler;
+
 namespace Lucene.Net.Util
 {
 	
@@ -74,5 +78,16 @@
 		{
 			RmDir(new System.IO.FileInfo(dir));
 		}
+		
+		public static void  SyncConcurrentMerges(IndexWriter writer)
+		{
+			SyncConcurrentMerges(writer.GetMergeScheduler());
+		}
+		
+		public static void  SyncConcurrentMerges(MergeScheduler ms)
+		{
+			if (ms is ConcurrentMergeScheduler)
+				((ConcurrentMergeScheduler) ms).Sync();
+		}
 	}
 }
\ No newline at end of file