public virtual void TestIntersection()
{
int numBits = TestUtil.NextInt32(Random, 100, 1 << 20);
int numDocIdSets = TestUtil.NextInt32(Random, 1, 4);
IList <OpenBitSet> fixedSets = new List <OpenBitSet>(numDocIdSets);
for (int i = 0; i < numDocIdSets; ++i)
{
fixedSets.Add(RandomOpenSet(numBits, Random.NextSingle()));
}
IList <WAH8DocIdSet> compressedSets = new List <WAH8DocIdSet>(numDocIdSets);
foreach (OpenBitSet set in fixedSets)
{
compressedSets.Add(CopyOf(set, numBits));
}
WAH8DocIdSet union = WAH8DocIdSet.Intersect(compressedSets);
OpenBitSet expected = new OpenBitSet(numBits);
expected.Set(0, expected.Length);
foreach (OpenBitSet set in fixedSets)
{
for (int previousDoc = -1, doc = set.NextSetBit(0); ; previousDoc = doc, doc = set.NextSetBit(doc + 1))
{
if (doc == -1)
{
expected.Clear(previousDoc + 1, set.Length);
break;
}
else
{
expected.Clear(previousDoc + 1, doc);
}
}
}
AssertEquals(numBits, expected, union);
}