public virtual void TestUnsetValue()
{
AssumeTrue("codec does not support docsWithField", DefaultCodecSupportsDocsWithField());
Directory dir = NewDirectory();
IndexWriterConfig conf = NewIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random()));
IndexWriter writer = new IndexWriter(dir, conf);
for (int i = 0; i < 2; i++)
{
Document doc = new Document();
doc.Add(new StringField("id", "doc" + i, Store.NO));
doc.Add(new BinaryDocValuesField("bdv", ToBytes(5L)));
writer.AddDocument(doc);
}
writer.Commit();
// unset the value of 'doc0'
writer.UpdateBinaryDocValue(new Term("id", "doc0"), "bdv", null);
writer.Dispose();
DirectoryReader reader = DirectoryReader.Open(dir);
AtomicReader r = (AtomicReader)reader.Leaves[0].Reader;
BinaryDocValues bdv = r.GetBinaryDocValues("bdv");
BytesRef scratch = new BytesRef();
for (int i = 0; i < r.MaxDoc; i++)
{
if (i == 0)
{
bdv.Get(i, scratch);
Assert.AreEqual(0, scratch.Length);
}
else
{
Assert.AreEqual(5, GetValue(bdv, i, scratch));
}
}
Bits docsWithField = r.GetDocsWithField("bdv");
Assert.IsFalse(docsWithField.Get(0));
Assert.IsTrue(docsWithField.Get(1));
reader.Dispose();
dir.Dispose();
}