private void  TestIndexInternal(int maxWait)
        {
            bool create = true;

            //Directory rd = new RAMDirectory();
            // work on disk to make sure potential lock problems are tested:
            System.String tempDir = System.IO.Path.GetTempPath();
            if (tempDir == null)
            {
                throw new System.IO.IOException("java.io.tmpdir undefined, cannot run test");
            }
            System.IO.FileInfo indexDir = new System.IO.FileInfo(System.IO.Path.Combine(tempDir, "lucenetestindex"));
            Directory          rd       = FSDirectory.Open(indexDir);

            IndexThread.id = 0;
            IndexThread.idStack.Clear();
            IndexModifier index   = new IndexModifier(rd, new StandardAnalyzer(), create);
            IndexThread   thread1 = new IndexThread(index, maxWait, 1);

            thread1.Start();
            IndexThread thread2 = new IndexThread(index, maxWait, 2);

            thread2.Start();
            while (thread1.IsAlive || thread2.IsAlive)
            {
                System.Threading.Thread.Sleep(new System.TimeSpan((System.Int64) 10000 * 100));
            }
            index.Optimize();
            int added   = thread1.added + thread2.added;
            int deleted = thread1.deleted + thread2.deleted;

            Assert.AreEqual(added - deleted, index.DocCount());
            index.Close();

            try
            {
                index.Close();
                Assert.Fail();
            }
            catch (System.SystemException e)
            {
                // expected exception
            }
            RmDir(indexDir);
        }
		public virtual void  TestIndex()
		{
			Directory ramDir = new RAMDirectory();
			IndexModifier i = new IndexModifier(ramDir, new StandardAnalyzer(), true);
			i.AddDocument(GetDoc());
			Assert.AreEqual(1, i.DocCount());
			i.Flush();
			i.AddDocument(GetDoc(), new SimpleAnalyzer());
			Assert.AreEqual(2, i.DocCount());
			i.Optimize();
			Assert.AreEqual(2, i.DocCount());
			i.Flush();
			i.DeleteDocument(0);
			Assert.AreEqual(1, i.DocCount());
			i.Flush();
			Assert.AreEqual(1, i.DocCount());
			i.AddDocument(GetDoc());
			i.AddDocument(GetDoc());
			i.Flush();
			// depend on merge policy - Assert.AreEqual(3, i.docCount());
			i.DeleteDocuments(allDocTerm);
			Assert.AreEqual(0, i.DocCount());
			i.Optimize();
			Assert.AreEqual(0, i.DocCount());
			
			//  Lucene defaults:
			Assert.IsNull(i.GetInfoStream());
			Assert.IsTrue(i.GetUseCompoundFile());
			Assert.AreEqual(IndexWriter.DISABLE_AUTO_FLUSH, i.GetMaxBufferedDocs());
			Assert.AreEqual(10000, i.GetMaxFieldLength());
			Assert.AreEqual(10, i.GetMergeFactor());
			// test setting properties:
			i.SetMaxBufferedDocs(100);
			i.SetMergeFactor(25);
			i.SetMaxFieldLength(250000);
			i.AddDocument(GetDoc());
			i.SetUseCompoundFile(false);
			i.Flush();
			Assert.AreEqual(100, i.GetMaxBufferedDocs());
			Assert.AreEqual(25, i.GetMergeFactor());
			Assert.AreEqual(250000, i.GetMaxFieldLength());
			Assert.IsFalse(i.GetUseCompoundFile());
			
			// test setting properties when internally the reader is opened:
			i.DeleteDocuments(allDocTerm);
			i.SetMaxBufferedDocs(100);
			i.SetMergeFactor(25);
			i.SetMaxFieldLength(250000);
			i.AddDocument(GetDoc());
			i.SetUseCompoundFile(false);
			i.Optimize();
			Assert.AreEqual(100, i.GetMaxBufferedDocs());
			Assert.AreEqual(25, i.GetMergeFactor());
			Assert.AreEqual(250000, i.GetMaxFieldLength());
			Assert.IsFalse(i.GetUseCompoundFile());
			
			i.Close();
			try
			{
				i.DocCount();
				Assert.Fail();
			}
			catch (System.SystemException e)
			{
				// expected exception
			}
		}
		private void  TestIndexInternal(int maxWait)
		{
			bool create = true;
			//Directory rd = new RAMDirectory();
			// work on disk to make sure potential lock problems are tested:
			System.String tempDir = System.IO.Path.GetTempPath();
			if (tempDir == null)
				throw new System.IO.IOException("java.io.tmpdir undefined, cannot run test");
			System.IO.FileInfo indexDir = new System.IO.FileInfo(System.IO.Path.Combine(tempDir, "lucenetestindex"));
			Directory rd = FSDirectory.Open(indexDir);
			IndexThread.id = 0;
			IndexThread.idStack.Clear();
			IndexModifier index = new IndexModifier(rd, new StandardAnalyzer(), create);
			IndexThread thread1 = new IndexThread(index, maxWait, 1);
			thread1.Start();
			IndexThread thread2 = new IndexThread(index, maxWait, 2);
			thread2.Start();
			while (thread1.IsAlive || thread2.IsAlive)
			{
				System.Threading.Thread.Sleep(new System.TimeSpan((System.Int64) 10000 * 100));
			}
			index.Optimize();
			int added = thread1.added + thread2.added;
			int deleted = thread1.deleted + thread2.deleted;
			Assert.AreEqual(added - deleted, index.DocCount());
			index.Close();
			
			try
			{
				index.Close();
				Assert.Fail();
			}
			catch (System.SystemException e)
			{
				// expected exception
			}
			RmDir(indexDir);
		}
        public virtual void  TestIndex()
        {
            Directory     ramDir = new RAMDirectory();
            IndexModifier i      = new IndexModifier(ramDir, new StandardAnalyzer(), true);

            i.AddDocument(GetDoc());
            Assert.AreEqual(1, i.DocCount());
            i.Flush();
            i.AddDocument(GetDoc(), new SimpleAnalyzer());
            Assert.AreEqual(2, i.DocCount());
            i.Optimize();
            Assert.AreEqual(2, i.DocCount());
            i.Flush();
            i.DeleteDocument(0);
            Assert.AreEqual(1, i.DocCount());
            i.Flush();
            Assert.AreEqual(1, i.DocCount());
            i.AddDocument(GetDoc());
            i.AddDocument(GetDoc());
            i.Flush();
            // depend on merge policy - Assert.AreEqual(3, i.docCount());
            i.DeleteDocuments(allDocTerm);
            Assert.AreEqual(0, i.DocCount());
            i.Optimize();
            Assert.AreEqual(0, i.DocCount());

            //  Lucene defaults:
            Assert.IsNull(i.GetInfoStream());
            Assert.IsTrue(i.GetUseCompoundFile());
            Assert.AreEqual(IndexWriter.DISABLE_AUTO_FLUSH, i.GetMaxBufferedDocs());
            Assert.AreEqual(10000, i.GetMaxFieldLength());
            Assert.AreEqual(10, i.GetMergeFactor());
            // test setting properties:
            i.SetMaxBufferedDocs(100);
            i.SetMergeFactor(25);
            i.SetMaxFieldLength(250000);
            i.AddDocument(GetDoc());
            i.SetUseCompoundFile(false);
            i.Flush();
            Assert.AreEqual(100, i.GetMaxBufferedDocs());
            Assert.AreEqual(25, i.GetMergeFactor());
            Assert.AreEqual(250000, i.GetMaxFieldLength());
            Assert.IsFalse(i.GetUseCompoundFile());

            // test setting properties when internally the reader is opened:
            i.DeleteDocuments(allDocTerm);
            i.SetMaxBufferedDocs(100);
            i.SetMergeFactor(25);
            i.SetMaxFieldLength(250000);
            i.AddDocument(GetDoc());
            i.SetUseCompoundFile(false);
            i.Optimize();
            Assert.AreEqual(100, i.GetMaxBufferedDocs());
            Assert.AreEqual(25, i.GetMergeFactor());
            Assert.AreEqual(250000, i.GetMaxFieldLength());
            Assert.IsFalse(i.GetUseCompoundFile());

            i.Close();
            try
            {
                i.DocCount();
                Assert.Fail();
            }
            catch (System.SystemException e)
            {
                // expected exception
            }
        }