193 lines
6.5 KiB
C#
193 lines
6.5 KiB
C#
/*
|
|
* 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 WhitespaceAnalyzer = Lucene.Net.Analysis.WhitespaceAnalyzer;
|
|
using Document = Lucene.Net.Documents.Document;
|
|
using Field = Lucene.Net.Documents.Field;
|
|
using IndexReader = Lucene.Net.Index.IndexReader;
|
|
using IndexWriter = Lucene.Net.Index.IndexWriter;
|
|
using MultiReader = Lucene.Net.Index.MultiReader;
|
|
using RAMDirectory = Lucene.Net.Store.RAMDirectory;
|
|
using Insanity = Lucene.Net.Util.FieldCacheSanityChecker.Insanity;
|
|
using InsanityType = Lucene.Net.Util.FieldCacheSanityChecker.InsanityType;
|
|
using FieldCache = Lucene.Net.Search.FieldCache;
|
|
|
|
namespace Lucene.Net.Util
|
|
{
|
|
|
|
[TestFixture]
|
|
public class TestFieldCacheSanityChecker:LuceneTestCase
|
|
{
|
|
|
|
protected internal IndexReader readerA;
|
|
protected internal IndexReader readerB;
|
|
protected internal IndexReader readerX;
|
|
|
|
private const int NUM_DOCS = 1000;
|
|
|
|
[SetUp]
|
|
public override void SetUp()
|
|
{
|
|
base.SetUp();
|
|
|
|
RAMDirectory dirA = new RAMDirectory();
|
|
RAMDirectory dirB = new RAMDirectory();
|
|
|
|
IndexWriter wA = new IndexWriter(dirA, new WhitespaceAnalyzer(), true, IndexWriter.MaxFieldLength.LIMITED);
|
|
IndexWriter wB = new IndexWriter(dirB, new WhitespaceAnalyzer(), true, IndexWriter.MaxFieldLength.LIMITED);
|
|
|
|
long theLong = System.Int64.MaxValue;
|
|
double theDouble = System.Double.MaxValue;
|
|
sbyte theByte = (sbyte) System.SByte.MaxValue;
|
|
short theShort = System.Int16.MaxValue;
|
|
int theInt = System.Int32.MaxValue;
|
|
float theFloat = System.Single.MaxValue;
|
|
for (int i = 0; i < NUM_DOCS; i++)
|
|
{
|
|
Document doc = new Document();
|
|
doc.Add(new Field("theLong", System.Convert.ToString(theLong--), Field.Store.NO, Field.Index.NOT_ANALYZED));
|
|
doc.Add(new Field("theDouble", (theDouble--).ToString("E16"), Field.Store.NO, Field.Index.NOT_ANALYZED));
|
|
doc.Add(new Field("theByte", System.Convert.ToString((sbyte) theByte--), Field.Store.NO, Field.Index.NOT_ANALYZED));
|
|
doc.Add(new Field("theShort", System.Convert.ToString(theShort--), Field.Store.NO, Field.Index.NOT_ANALYZED));
|
|
doc.Add(new Field("theInt", System.Convert.ToString(theInt--), Field.Store.NO, Field.Index.NOT_ANALYZED));
|
|
doc.Add(new Field("theFloat", (theFloat--).ToString("E8"), Field.Store.NO, Field.Index.NOT_ANALYZED));
|
|
if (0 == i % 3)
|
|
{
|
|
wA.AddDocument(doc);
|
|
}
|
|
else
|
|
{
|
|
wB.AddDocument(doc);
|
|
}
|
|
}
|
|
wA.Close();
|
|
wB.Close();
|
|
readerA = IndexReader.Open(dirA, true);
|
|
readerB = IndexReader.Open(dirB, true);
|
|
readerX = new MultiReader(new IndexReader[]{readerA, readerB});
|
|
}
|
|
|
|
[TearDown]
|
|
public override void TearDown()
|
|
{
|
|
base.TearDown();
|
|
readerA.Close();
|
|
readerB.Close();
|
|
readerX.Close();
|
|
}
|
|
|
|
[Test]
|
|
public virtual void TestSanity()
|
|
{
|
|
FieldCache cache = Lucene.Net.Search.FieldCache_Fields.DEFAULT;
|
|
cache.PurgeAllCaches();
|
|
|
|
double[] doubles;
|
|
int[] ints;
|
|
|
|
doubles = cache.GetDoubles(readerA, "theDouble");
|
|
doubles = cache.GetDoubles(readerA, "theDouble", Lucene.Net.Search.FieldCache_Fields.DEFAULT_DOUBLE_PARSER);
|
|
doubles = cache.GetDoubles(readerB, "theDouble", Lucene.Net.Search.FieldCache_Fields.DEFAULT_DOUBLE_PARSER);
|
|
|
|
ints = cache.GetInts(readerX, "theInt");
|
|
ints = cache.GetInts(readerX, "theInt", Lucene.Net.Search.FieldCache_Fields.DEFAULT_INT_PARSER);
|
|
|
|
// // //
|
|
|
|
Insanity[] insanity = FieldCacheSanityChecker.CheckSanity(cache.GetCacheEntries());
|
|
|
|
if (0 < insanity.Length)
|
|
{
|
|
System.IO.StreamWriter temp_writer;
|
|
temp_writer = new System.IO.StreamWriter(System.Console.OpenStandardError(), System.Console.Error.Encoding);
|
|
temp_writer.AutoFlush = true;
|
|
DumpArray(GetTestLabel() + " INSANITY", insanity, temp_writer);
|
|
}
|
|
|
|
Assert.AreEqual(0, insanity.Length, "shouldn't be any cache insanity");
|
|
cache.PurgeAllCaches();
|
|
}
|
|
|
|
[Test]
|
|
public virtual void TestInsanity1()
|
|
{
|
|
FieldCache cache = Lucene.Net.Search.FieldCache_Fields.DEFAULT;
|
|
cache.PurgeAllCaches();
|
|
|
|
int[] ints;
|
|
System.String[] strings;
|
|
sbyte[] bytes;
|
|
|
|
ints = cache.GetInts(readerX, "theInt", Lucene.Net.Search.FieldCache_Fields.DEFAULT_INT_PARSER);
|
|
strings = cache.GetStrings(readerX, "theInt");
|
|
|
|
// this one is ok
|
|
bytes = cache.GetBytes(readerX, "theByte");
|
|
|
|
// // //
|
|
|
|
Insanity[] insanity = FieldCacheSanityChecker.CheckSanity(cache.GetCacheEntries());
|
|
|
|
Assert.AreEqual(1, insanity.Length, "wrong number of cache errors");
|
|
Assert.AreEqual(InsanityType.VALUEMISMATCH, insanity[0].Type, "wrong type of cache error");
|
|
Assert.AreEqual(2, insanity[0].GetCacheEntries().Length, "wrong number of entries in cache error");
|
|
|
|
// we expect bad things, don't let tearDown complain about them
|
|
cache.PurgeAllCaches();
|
|
}
|
|
|
|
[Test]
|
|
public virtual void TestInsanity2()
|
|
{
|
|
FieldCache cache = Lucene.Net.Search.FieldCache_Fields.DEFAULT;
|
|
cache.PurgeAllCaches();
|
|
|
|
System.String[] strings;
|
|
sbyte[] bytes;
|
|
|
|
strings = cache.GetStrings(readerA, "theString");
|
|
strings = cache.GetStrings(readerB, "theString");
|
|
strings = cache.GetStrings(readerX, "theString");
|
|
|
|
// this one is ok
|
|
bytes = cache.GetBytes(readerX, "theByte");
|
|
|
|
|
|
// // //
|
|
|
|
Insanity[] insanity = FieldCacheSanityChecker.CheckSanity(cache.GetCacheEntries());
|
|
|
|
Assert.AreEqual(1, insanity.Length, "wrong number of cache errors");
|
|
Assert.AreEqual(InsanityType.SUBREADER, insanity[0].Type, "wrong type of cache error");
|
|
Assert.AreEqual(3, insanity[0].GetCacheEntries().Length, "wrong number of entries in cache error");
|
|
|
|
// we expect bad things, don't let tearDown complain about them
|
|
cache.PurgeAllCaches();
|
|
}
|
|
|
|
[Test]
|
|
public virtual void TestInsanity3()
|
|
{
|
|
|
|
// :TODO: subreader tree walking is really hairy ... add more crazy tests.
|
|
}
|
|
}
|
|
} |