private void AssertRewrite(FilteredQuery fq, Type clazz)
{
// assign crazy boost to FQ
float boost = (float)Random().NextDouble() * 100.0f;
fq.Boost = boost;
// assign crazy boost to inner
float innerBoost = (float)Random().NextDouble() * 100.0f;
fq.Query.Boost = innerBoost;
// check the class and boosts of rewritten query
Query rewritten = Searcher.Rewrite(fq);
Assert.IsTrue(clazz.IsInstanceOfType(rewritten), "is not instance of " + clazz.Name);
if (rewritten is FilteredQuery)
{
Assert.AreEqual(boost, rewritten.Boost, 1E-5f);
Assert.AreEqual(innerBoost, ((FilteredQuery)rewritten).Query.Boost, 1E-5f);
Assert.AreEqual(fq.Strategy, ((FilteredQuery)rewritten).Strategy);
}
else
{
Assert.AreEqual(boost * innerBoost, rewritten.Boost, 1E-5f);
}
// check that the original query was not modified
Assert.AreEqual(boost, fq.Boost, 1E-5f);
Assert.AreEqual(innerBoost, fq.Query.Boost, 1E-5f);
}