You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucenenet.apache.org by ni...@apache.org on 2017/02/26 23:37:42 UTC

[54/72] [abbrv] lucenenet git commit: Lucene.Net.TestFramework: Renamed Codecs\asserting\ to Codecs\Asserting\

Lucene.Net.TestFramework: Renamed Codecs\asserting\ to Codecs\Asserting\


Project: http://git-wip-us.apache.org/repos/asf/lucenenet/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucenenet/commit/77e95ccc
Tree: http://git-wip-us.apache.org/repos/asf/lucenenet/tree/77e95ccc
Diff: http://git-wip-us.apache.org/repos/asf/lucenenet/diff/77e95ccc

Branch: refs/heads/api-work
Commit: 77e95ccc235a83696494c674f4945c42d80e9d61
Parents: 9682239
Author: Shad Storhaug <sh...@shadstorhaug.com>
Authored: Sun Feb 26 02:44:43 2017 +0700
Committer: Shad Storhaug <sh...@shadstorhaug.com>
Committed: Mon Feb 27 06:17:55 2017 +0700

----------------------------------------------------------------------
 .../Codecs/Asserting/AssertingCodec.cs          |  64 ++++
 .../Asserting/AssertingDocValuesFormat.cs       | 346 +++++++++++++++++++
 .../Codecs/Asserting/AssertingNormsFormat.cs    |  51 +++
 .../Codecs/Asserting/AssertingPostingsFormat.cs | 318 +++++++++++++++++
 .../Asserting/AssertingStoredFieldsFormat.cs    | 154 +++++++++
 .../Asserting/AssertingTermVectorsFormat.cs     | 208 +++++++++++
 .../Codecs/asserting/AssertingCodec.cs          |  64 ----
 .../asserting/AssertingDocValuesFormat.cs       | 346 -------------------
 .../Codecs/asserting/AssertingNormsFormat.cs    |  51 ---
 .../Codecs/asserting/AssertingPostingsFormat.cs | 318 -----------------
 .../asserting/AssertingStoredFieldsFormat.cs    | 154 ---------
 .../asserting/AssertingTermVectorsFormat.cs     | 208 -----------
 .../Index/RandomCodec.cs                        |   4 +-
 .../Lucene.Net.TestFramework.csproj             |  12 +-
 .../Index/TestBinaryDocValuesUpdates.cs         |   2 +-
 .../Index/TestNumericDocValuesUpdates.cs        |   2 +-
 16 files changed, 1151 insertions(+), 1151 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucenenet/blob/77e95ccc/src/Lucene.Net.TestFramework/Codecs/Asserting/AssertingCodec.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.TestFramework/Codecs/Asserting/AssertingCodec.cs b/src/Lucene.Net.TestFramework/Codecs/Asserting/AssertingCodec.cs
new file mode 100644
index 0000000..5bf1179
--- /dev/null
+++ b/src/Lucene.Net.TestFramework/Codecs/Asserting/AssertingCodec.cs
@@ -0,0 +1,64 @@
+namespace Lucene.Net.Codecs.Asserting
+{
+    /*
+     * 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 Lucene46Codec = Lucene.Net.Codecs.Lucene46.Lucene46Codec;
+
+    /// <summary>
+    /// Acts like <seealso cref="Lucene46Codec"/> but with additional asserts.
+    /// </summary>
+    [CodecName("Asserting")]
+    public sealed class AssertingCodec : FilterCodec
+    {
+        private readonly PostingsFormat Postings = new AssertingPostingsFormat();
+        private readonly TermVectorsFormat Vectors = new AssertingTermVectorsFormat();
+        private readonly StoredFieldsFormat StoredFields = new AssertingStoredFieldsFormat();
+        private readonly DocValuesFormat DocValues = new AssertingDocValuesFormat();
+        private readonly NormsFormat Norms = new AssertingNormsFormat();
+
+        public AssertingCodec()
+            : base(new Lucene46Codec())
+        {
+        }
+
+        public override PostingsFormat PostingsFormat
+        {
+            get { return Postings; }
+        }
+
+        public override TermVectorsFormat TermVectorsFormat
+        {
+            get { return Vectors; }
+        }
+
+        public override StoredFieldsFormat StoredFieldsFormat
+        {
+            get { return StoredFields; }
+        }
+
+        public override DocValuesFormat DocValuesFormat
+        {
+            get { return DocValues; }
+        }
+
+        public override NormsFormat NormsFormat
+        {
+            get { return Norms; }
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/77e95ccc/src/Lucene.Net.TestFramework/Codecs/Asserting/AssertingDocValuesFormat.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.TestFramework/Codecs/Asserting/AssertingDocValuesFormat.cs b/src/Lucene.Net.TestFramework/Codecs/Asserting/AssertingDocValuesFormat.cs
new file mode 100644
index 0000000..0d91fb0
--- /dev/null
+++ b/src/Lucene.Net.TestFramework/Codecs/Asserting/AssertingDocValuesFormat.cs
@@ -0,0 +1,346 @@
+using System.Collections.Generic;
+using System.Diagnostics;
+
+namespace Lucene.Net.Codecs.Asserting
+{
+    using System;
+    using AssertingAtomicReader = Lucene.Net.Index.AssertingAtomicReader;
+    using BinaryDocValues = Lucene.Net.Index.BinaryDocValues;
+    using IBits = Lucene.Net.Util.IBits;
+    using BytesRef = Lucene.Net.Util.BytesRef;
+    using DocValuesType = Lucene.Net.Index.DocValuesType;
+    using FieldInfo = Lucene.Net.Index.FieldInfo;
+    using FixedBitSet = Lucene.Net.Util.FixedBitSet;
+    using Int64BitSet = Lucene.Net.Util.Int64BitSet;
+
+    /*
+         * 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 Lucene45DocValuesFormat = Lucene.Net.Codecs.Lucene45.Lucene45DocValuesFormat;
+    using NumericDocValues = Lucene.Net.Index.NumericDocValues;
+    using SegmentReadState = Lucene.Net.Index.SegmentReadState;
+    using SegmentWriteState = Lucene.Net.Index.SegmentWriteState;
+    using SortedDocValues = Lucene.Net.Index.SortedDocValues;
+    using SortedSetDocValues = Lucene.Net.Index.SortedSetDocValues;
+
+    /// <summary>
+    /// Just like <seealso cref="Lucene45DocValuesFormat"/> but with additional asserts.
+    /// </summary>
+    [DocValuesFormatName("Asserting")]
+    public class AssertingDocValuesFormat : DocValuesFormat
+    {
+        private readonly DocValuesFormat @in = new Lucene45DocValuesFormat();
+
+        public AssertingDocValuesFormat()
+            : base()
+        {
+        }
+
+        public override DocValuesConsumer FieldsConsumer(SegmentWriteState state)
+        {
+            DocValuesConsumer consumer = @in.FieldsConsumer(state);
+            Debug.Assert(consumer != null);
+            return new AssertingDocValuesConsumer(consumer, state.SegmentInfo.DocCount);
+        }
+
+        public override DocValuesProducer FieldsProducer(SegmentReadState state)
+        {
+            Debug.Assert(state.FieldInfos.HasDocValues);
+            DocValuesProducer producer = @in.FieldsProducer(state);
+            Debug.Assert(producer != null);
+            return new AssertingDocValuesProducer(producer, state.SegmentInfo.DocCount);
+        }
+
+        internal class AssertingDocValuesConsumer : DocValuesConsumer
+        {
+            internal readonly DocValuesConsumer @in;
+            internal readonly int MaxDoc;
+
+            internal AssertingDocValuesConsumer(DocValuesConsumer @in, int maxDoc)
+            {
+                this.@in = @in;
+                this.MaxDoc = maxDoc;
+            }
+
+            public override void AddNumericField(FieldInfo field, IEnumerable<long?> values)
+            {
+                int count = 0;
+                foreach (var v in values)
+                {
+                    count++;
+                }
+                Debug.Assert(count == MaxDoc);
+                CheckIterator(values.GetEnumerator(), MaxDoc, true);
+                @in.AddNumericField(field, values);
+            }
+
+            public override void AddBinaryField(FieldInfo field, IEnumerable<BytesRef> values)
+            {
+                int count = 0;
+                foreach (BytesRef b in values)
+                {
+                    Debug.Assert(b == null || b.IsValid());
+                    count++;
+                }
+                Debug.Assert(count == MaxDoc);
+                CheckIterator(values.GetEnumerator(), MaxDoc, true);
+                @in.AddBinaryField(field, values);
+            }
+
+            public override void AddSortedField(FieldInfo field, IEnumerable<BytesRef> values, IEnumerable<long?> docToOrd)
+            {
+                int valueCount = 0;
+                BytesRef lastValue = null;
+                foreach (BytesRef b in values)
+                {
+                    Debug.Assert(b != null);
+                    Debug.Assert(b.IsValid());
+                    if (valueCount > 0)
+                    {
+                        Debug.Assert(b.CompareTo(lastValue) > 0);
+                    }
+                    lastValue = BytesRef.DeepCopyOf(b);
+                    valueCount++;
+                }
+                Debug.Assert(valueCount <= MaxDoc);
+
+                FixedBitSet seenOrds = new FixedBitSet(valueCount);
+
+                int count = 0;
+                foreach (long? v in docToOrd)
+                {
+                    Debug.Assert(v != null);
+                    int ord = (int)v.Value;
+                    Debug.Assert(ord >= -1 && ord < valueCount);
+                    if (ord >= 0)
+                    {
+                        seenOrds.Set(ord);
+                    }
+                    count++;
+                }
+
+                Debug.Assert(count == MaxDoc);
+                Debug.Assert(seenOrds.Cardinality() == valueCount);
+                CheckIterator(values.GetEnumerator(), valueCount, false);
+                CheckIterator(docToOrd.GetEnumerator(), MaxDoc, false);
+                @in.AddSortedField(field, values, docToOrd);
+            }
+
+            public override void AddSortedSetField(FieldInfo field, IEnumerable<BytesRef> values, IEnumerable<long?> docToOrdCount, IEnumerable<long?> ords)
+            {
+                long valueCount = 0;
+                BytesRef lastValue = null;
+                foreach (BytesRef b in values)
+                {
+                    Debug.Assert(b != null);
+                    Debug.Assert(b.IsValid());
+                    if (valueCount > 0)
+                    {
+                        Debug.Assert(b.CompareTo(lastValue) > 0);
+                    }
+                    lastValue = BytesRef.DeepCopyOf(b);
+                    valueCount++;
+                }
+
+                int docCount = 0;
+                long ordCount = 0;
+                Int64BitSet seenOrds = new Int64BitSet(valueCount);
+                IEnumerator<long?> ordIterator = ords.GetEnumerator();
+                foreach (long? v in docToOrdCount)
+                {
+                    Debug.Assert(v != null);
+                    int count = (int)v.Value;
+                    Debug.Assert(count >= 0);
+                    docCount++;
+                    ordCount += count;
+
+                    long lastOrd = -1;
+                    for (int i = 0; i < count; i++)
+                    {
+                        ordIterator.MoveNext();
+                        long? o = ordIterator.Current;
+                        Debug.Assert(o != null);
+                        long ord = o.Value;
+                        Debug.Assert(ord >= 0 && ord < valueCount);
+                        Debug.Assert(ord > lastOrd, "ord=" + ord + ",lastOrd=" + lastOrd);
+                        seenOrds.Set(ord);
+                        lastOrd = ord;
+                    }
+                }
+                Debug.Assert(ordIterator.MoveNext() == false);
+
+                Debug.Assert(docCount == MaxDoc);
+                Debug.Assert(seenOrds.Cardinality() == valueCount);
+                CheckIterator(values.GetEnumerator(), valueCount, false);
+                CheckIterator(docToOrdCount.GetEnumerator(), MaxDoc, false);
+                CheckIterator(ords.GetEnumerator(), ordCount, false);
+                @in.AddSortedSetField(field, values, docToOrdCount, ords);
+            }
+
+            protected override void Dispose(bool disposing)
+            {
+                if (disposing)
+                    @in.Dispose();
+            }
+        }
+
+        internal class AssertingNormsConsumer : DocValuesConsumer
+        {
+            internal readonly DocValuesConsumer @in;
+            internal readonly int MaxDoc;
+
+            internal AssertingNormsConsumer(DocValuesConsumer @in, int maxDoc)
+            {
+                this.@in = @in;
+                this.MaxDoc = maxDoc;
+            }
+
+            public override void AddNumericField(FieldInfo field, IEnumerable<long?> values)
+            {
+                int count = 0;
+                foreach (long? v in values)
+                {
+                    Debug.Assert(v != null);
+                    count++;
+                }
+                Debug.Assert(count == MaxDoc);
+                CheckIterator(values.GetEnumerator(), MaxDoc, false);
+                @in.AddNumericField(field, values);
+            }
+
+            protected override void Dispose(bool disposing)
+            {
+                if (disposing)
+                    @in.Dispose();
+            }
+
+            public override void AddBinaryField(FieldInfo field, IEnumerable<BytesRef> values)
+            {
+                throw new InvalidOperationException();
+            }
+
+            public override void AddSortedField(FieldInfo field, IEnumerable<BytesRef> values, IEnumerable<long?> docToOrd)
+            {
+                throw new InvalidOperationException();
+            }
+
+            public override void AddSortedSetField(FieldInfo field, IEnumerable<BytesRef> values, IEnumerable<long?> docToOrdCount, IEnumerable<long?> ords)
+            {
+                throw new InvalidOperationException();
+            }
+        }
+
+        private static void CheckIterator<T>(IEnumerator<T> iterator, long expectedSize, bool allowNull)
+        {
+            for (long i = 0; i < expectedSize; i++)
+            {
+                bool hasNext = iterator.MoveNext();
+                Debug.Assert(hasNext);
+                T v = iterator.Current;
+                Debug.Assert(allowNull || v != null);
+                try
+                {
+                    iterator.Reset();
+                    throw new InvalidOperationException("broken iterator (supports remove): " + iterator);
+                }
+                catch (System.NotSupportedException)
+                {
+                    // ok
+                }
+            }
+            Debug.Assert(!iterator.MoveNext());
+            /*try
+            {
+              //iterator.next();
+              throw new InvalidOperationException("broken iterator (allows next() when hasNext==false) " + iterator);
+            }
+            catch (Exception)
+            {
+              // ok
+            }*/
+        }
+
+        internal class AssertingDocValuesProducer : DocValuesProducer
+        {
+            internal readonly DocValuesProducer @in;
+            internal readonly int MaxDoc;
+
+            internal AssertingDocValuesProducer(DocValuesProducer @in, int maxDoc)
+            {
+                this.@in = @in;
+                this.MaxDoc = maxDoc;
+            }
+
+            public override NumericDocValues GetNumeric(FieldInfo field)
+            {
+                Debug.Assert(field.DocValuesType == DocValuesType.NUMERIC || field.NormType == DocValuesType.NUMERIC);
+                NumericDocValues values = @in.GetNumeric(field);
+                Debug.Assert(values != null);
+                return new AssertingAtomicReader.AssertingNumericDocValues(values, MaxDoc);
+            }
+
+            public override BinaryDocValues GetBinary(FieldInfo field)
+            {
+                Debug.Assert(field.DocValuesType == DocValuesType.BINARY);
+                BinaryDocValues values = @in.GetBinary(field);
+                Debug.Assert(values != null);
+                return new AssertingAtomicReader.AssertingBinaryDocValues(values, MaxDoc);
+            }
+
+            public override SortedDocValues GetSorted(FieldInfo field)
+            {
+                Debug.Assert(field.DocValuesType == DocValuesType.SORTED);
+                SortedDocValues values = @in.GetSorted(field);
+                Debug.Assert(values != null);
+                return new AssertingAtomicReader.AssertingSortedDocValues(values, MaxDoc);
+            }
+
+            public override SortedSetDocValues GetSortedSet(FieldInfo field)
+            {
+                Debug.Assert(field.DocValuesType == DocValuesType.SORTED_SET);
+                SortedSetDocValues values = @in.GetSortedSet(field);
+                Debug.Assert(values != null);
+                return new AssertingAtomicReader.AssertingSortedSetDocValues(values, MaxDoc);
+            }
+
+            public override IBits GetDocsWithField(FieldInfo field)
+            {
+                Debug.Assert(field.DocValuesType != null);
+                IBits bits = @in.GetDocsWithField(field);
+                Debug.Assert(bits != null);
+                Debug.Assert(bits.Length == MaxDoc);
+                return new AssertingAtomicReader.AssertingBits(bits);
+            }
+
+            protected override void Dispose(bool disposing)
+            {
+                if (disposing)
+                    @in.Dispose();
+            }
+
+            public override long RamBytesUsed()
+            {
+                return @in.RamBytesUsed();
+            }
+
+            public override void CheckIntegrity()
+            {
+                @in.CheckIntegrity();
+            }
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/77e95ccc/src/Lucene.Net.TestFramework/Codecs/Asserting/AssertingNormsFormat.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.TestFramework/Codecs/Asserting/AssertingNormsFormat.cs b/src/Lucene.Net.TestFramework/Codecs/Asserting/AssertingNormsFormat.cs
new file mode 100644
index 0000000..4bdc7a3
--- /dev/null
+++ b/src/Lucene.Net.TestFramework/Codecs/Asserting/AssertingNormsFormat.cs
@@ -0,0 +1,51 @@
+using System.Diagnostics;
+
+namespace Lucene.Net.Codecs.Asserting
+{
+    using AssertingDocValuesProducer = Lucene.Net.Codecs.Asserting.AssertingDocValuesFormat.AssertingDocValuesProducer;
+
+    /*
+         * 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 AssertingNormsConsumer = Lucene.Net.Codecs.Asserting.AssertingDocValuesFormat.AssertingNormsConsumer;
+    using Lucene42NormsFormat = Lucene.Net.Codecs.Lucene42.Lucene42NormsFormat;
+    using SegmentReadState = Lucene.Net.Index.SegmentReadState;
+    using SegmentWriteState = Lucene.Net.Index.SegmentWriteState;
+
+    /// <summary>
+    /// Just like <seealso cref="Lucene42NormsFormat"/> but with additional asserts.
+    /// </summary>
+    public class AssertingNormsFormat : NormsFormat
+    {
+        private readonly NormsFormat @in = new Lucene42NormsFormat();
+
+        public override DocValuesConsumer NormsConsumer(SegmentWriteState state)
+        {
+            DocValuesConsumer consumer = @in.NormsConsumer(state);
+            Debug.Assert(consumer != null);
+            return new AssertingNormsConsumer(consumer, state.SegmentInfo.DocCount);
+        }
+
+        public override DocValuesProducer NormsProducer(SegmentReadState state)
+        {
+            Debug.Assert(state.FieldInfos.HasNorms);
+            DocValuesProducer producer = @in.NormsProducer(state);
+            Debug.Assert(producer != null);
+            return new AssertingDocValuesProducer(producer, state.SegmentInfo.DocCount);
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/77e95ccc/src/Lucene.Net.TestFramework/Codecs/Asserting/AssertingPostingsFormat.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.TestFramework/Codecs/Asserting/AssertingPostingsFormat.cs b/src/Lucene.Net.TestFramework/Codecs/Asserting/AssertingPostingsFormat.cs
new file mode 100644
index 0000000..c039ceb
--- /dev/null
+++ b/src/Lucene.Net.TestFramework/Codecs/Asserting/AssertingPostingsFormat.cs
@@ -0,0 +1,318 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+
+namespace Lucene.Net.Codecs.Asserting
+{
+    using AssertingAtomicReader = Lucene.Net.Index.AssertingAtomicReader;
+    using BytesRef = Lucene.Net.Util.BytesRef;
+    using FieldInfo = Lucene.Net.Index.FieldInfo;
+    using IndexOptions = Lucene.Net.Index.IndexOptions;
+
+    /*
+         * 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 Lucene41PostingsFormat = Lucene.Net.Codecs.Lucene41.Lucene41PostingsFormat;
+    using OpenBitSet = Lucene.Net.Util.OpenBitSet;
+    using SegmentReadState = Lucene.Net.Index.SegmentReadState;
+    using SegmentWriteState = Lucene.Net.Index.SegmentWriteState;
+    using Terms = Lucene.Net.Index.Terms;
+
+    /// <summary>
+    /// Just like <seealso cref="Lucene41PostingsFormat"/> but with additional asserts.
+    /// </summary>
+    [PostingsFormatName("Asserting")] // LUCENENET specific - using PostingsFormatName attribute to ensure the default name passed from subclasses is the same as this class name
+    public sealed class AssertingPostingsFormat : PostingsFormat
+    {
+        private readonly PostingsFormat @in = new Lucene41PostingsFormat();
+
+        public AssertingPostingsFormat()
+            : base()
+        {
+        }
+
+        public override FieldsConsumer FieldsConsumer(SegmentWriteState state)
+        {
+            return new AssertingFieldsConsumer(@in.FieldsConsumer(state));
+        }
+
+        public override FieldsProducer FieldsProducer(SegmentReadState state)
+        {
+            return new AssertingFieldsProducer(@in.FieldsProducer(state));
+        }
+
+        internal class AssertingFieldsProducer : FieldsProducer
+        {
+            internal readonly FieldsProducer @in;
+
+            internal AssertingFieldsProducer(FieldsProducer @in)
+            {
+                this.@in = @in;
+            }
+
+            public override void Dispose()
+            {
+                Dispose(true);
+            }
+
+            protected void Dispose(bool disposing)
+            {
+                if (disposing)
+                    @in.Dispose();
+            }
+
+            public override IEnumerator<string> GetEnumerator()
+            {
+                IEnumerator<string> iterator = @in.GetEnumerator();
+                Debug.Assert(iterator != null);
+                return iterator;
+            }
+
+            public override Terms GetTerms(string field)
+            {
+                Terms terms = @in.GetTerms(field);
+                return terms == null ? null : new AssertingAtomicReader.AssertingTerms(terms);
+            }
+
+            public override int Count
+            {
+                get { return @in.Count; }
+            }
+
+            [Obsolete("iterate fields and add their Count instead.")]
+            public override long UniqueTermCount
+            {
+                get
+                {
+                    return @in.UniqueTermCount;
+                }
+            }
+
+            public override long RamBytesUsed()
+            {
+                return @in.RamBytesUsed();
+            }
+
+            public override void CheckIntegrity()
+            {
+                @in.CheckIntegrity();
+            }
+        }
+
+        internal class AssertingFieldsConsumer : FieldsConsumer
+        {
+            internal readonly FieldsConsumer @in;
+
+            internal AssertingFieldsConsumer(FieldsConsumer @in)
+            {
+                this.@in = @in;
+            }
+
+            public override TermsConsumer AddField(FieldInfo field)
+            {
+                TermsConsumer consumer = @in.AddField(field);
+                Debug.Assert(consumer != null);
+                return new AssertingTermsConsumer(consumer, field);
+            }
+
+            public override void Dispose()
+            {
+                Dispose(true);
+            }
+
+            protected void Dispose(bool disposing)
+            {
+                if (disposing)
+                    @in.Dispose();
+            }
+        }
+
+        internal enum TermsConsumerState
+        {
+            INITIAL,
+            START,
+            FINISHED
+        }
+
+        internal class AssertingTermsConsumer : TermsConsumer
+        {
+            internal readonly TermsConsumer @in;
+            private readonly FieldInfo fieldInfo;
+            internal BytesRef LastTerm = null;
+            internal TermsConsumerState State = TermsConsumerState.INITIAL;
+            internal AssertingPostingsConsumer LastPostingsConsumer = null;
+            internal long SumTotalTermFreq = 0;
+            internal long SumDocFreq = 0;
+            internal OpenBitSet VisitedDocs = new OpenBitSet();
+
+            internal AssertingTermsConsumer(TermsConsumer @in, FieldInfo fieldInfo)
+            {
+                this.@in = @in;
+                this.fieldInfo = fieldInfo;
+            }
+
+            public override PostingsConsumer StartTerm(BytesRef text)
+            {
+                Debug.Assert(State == TermsConsumerState.INITIAL || State == TermsConsumerState.START && LastPostingsConsumer.DocFreq == 0);
+                State = TermsConsumerState.START;
+                Debug.Assert(LastTerm == null || @in.Comparer.Compare(text, LastTerm) > 0);
+                LastTerm = BytesRef.DeepCopyOf(text);
+                return LastPostingsConsumer = new AssertingPostingsConsumer(@in.StartTerm(text), fieldInfo, VisitedDocs);
+            }
+
+            public override void FinishTerm(BytesRef text, TermStats stats)
+            {
+                Debug.Assert(State == TermsConsumerState.START);
+                State = TermsConsumerState.INITIAL;
+                Debug.Assert(text.Equals(LastTerm));
+                Debug.Assert(stats.DocFreq > 0); // otherwise, this method should not be called.
+                Debug.Assert(stats.DocFreq == LastPostingsConsumer.DocFreq);
+                SumDocFreq += stats.DocFreq;
+                if (fieldInfo.IndexOptions == IndexOptions.DOCS_ONLY)
+                {
+                    Debug.Assert(stats.TotalTermFreq == -1);
+                }
+                else
+                {
+                    Debug.Assert(stats.TotalTermFreq == LastPostingsConsumer.TotalTermFreq);
+                    SumTotalTermFreq += stats.TotalTermFreq;
+                }
+                @in.FinishTerm(text, stats);
+            }
+
+            public override void Finish(long sumTotalTermFreq, long sumDocFreq, int docCount)
+            {
+                Debug.Assert(State == TermsConsumerState.INITIAL || State == TermsConsumerState.START && LastPostingsConsumer.DocFreq == 0);
+                State = TermsConsumerState.FINISHED;
+                Debug.Assert(docCount >= 0);
+                Debug.Assert(docCount == VisitedDocs.Cardinality());
+                Debug.Assert(sumDocFreq >= docCount);
+                Debug.Assert(sumDocFreq == this.SumDocFreq);
+                if (fieldInfo.IndexOptions == IndexOptions.DOCS_ONLY)
+                {
+                    Debug.Assert(sumTotalTermFreq == -1);
+                }
+                else
+                {
+                    Debug.Assert(sumTotalTermFreq >= sumDocFreq);
+                    Debug.Assert(sumTotalTermFreq == this.SumTotalTermFreq);
+                }
+                @in.Finish(sumTotalTermFreq, sumDocFreq, docCount);
+            }
+
+            public override IComparer<BytesRef> Comparer
+            {
+                get
+                {
+                    return @in.Comparer;
+                }
+            }
+        }
+
+        internal enum PostingsConsumerState
+        {
+            INITIAL,
+            START
+        }
+
+        internal class AssertingPostingsConsumer : PostingsConsumer
+        {
+            internal readonly PostingsConsumer @in;
+            private readonly FieldInfo fieldInfo;
+            internal readonly OpenBitSet VisitedDocs;
+            internal PostingsConsumerState State = PostingsConsumerState.INITIAL;
+            internal int Freq;
+            internal int PositionCount;
+            internal int LastPosition = 0;
+            internal int LastStartOffset = 0;
+            internal int DocFreq = 0;
+            internal long TotalTermFreq = 0;
+
+            internal AssertingPostingsConsumer(PostingsConsumer @in, FieldInfo fieldInfo, OpenBitSet visitedDocs)
+            {
+                this.@in = @in;
+                this.fieldInfo = fieldInfo;
+                this.VisitedDocs = visitedDocs;
+            }
+
+            public override void StartDoc(int docID, int freq)
+            {
+                Debug.Assert(State == PostingsConsumerState.INITIAL);
+                State = PostingsConsumerState.START;
+                Debug.Assert(docID >= 0);
+                if (fieldInfo.IndexOptions == IndexOptions.DOCS_ONLY)
+                {
+                    Debug.Assert(freq == -1);
+                    this.Freq = 0; // we don't expect any positions here
+                }
+                else
+                {
+                    Debug.Assert(freq > 0);
+                    this.Freq = freq;
+                    TotalTermFreq += freq;
+                }
+                this.PositionCount = 0;
+                this.LastPosition = 0;
+                this.LastStartOffset = 0;
+                DocFreq++;
+                VisitedDocs.Set(docID);
+                @in.StartDoc(docID, freq);
+            }
+
+            public override void AddPosition(int position, BytesRef payload, int startOffset, int endOffset)
+            {
+                Debug.Assert(State == PostingsConsumerState.START);
+                Debug.Assert(PositionCount < Freq);
+                PositionCount++;
+                Debug.Assert(position >= LastPosition || position == -1); // we still allow -1 from old 3.x indexes
+                LastPosition = position;
+                if (fieldInfo.IndexOptions == IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS)
+                {
+                    Debug.Assert(startOffset >= 0);
+                    Debug.Assert(startOffset >= LastStartOffset);
+                    LastStartOffset = startOffset;
+                    Debug.Assert(endOffset >= startOffset);
+                }
+                else
+                {
+                    Debug.Assert(startOffset == -1);
+                    Debug.Assert(endOffset == -1);
+                }
+                if (payload != null)
+                {
+                    Debug.Assert(fieldInfo.HasPayloads);
+                }
+                @in.AddPosition(position, payload, startOffset, endOffset);
+            }
+
+            public override void FinishDoc()
+            {
+                Debug.Assert(State == PostingsConsumerState.START);
+                State = PostingsConsumerState.INITIAL;
+                if (fieldInfo.IndexOptions < IndexOptions.DOCS_AND_FREQS_AND_POSITIONS)
+                {
+                    Debug.Assert(PositionCount == 0); // we should not have fed any positions!
+                }
+                else
+                {
+                    Debug.Assert(PositionCount == Freq);
+                }
+                @in.FinishDoc();
+            }
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/77e95ccc/src/Lucene.Net.TestFramework/Codecs/Asserting/AssertingStoredFieldsFormat.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.TestFramework/Codecs/Asserting/AssertingStoredFieldsFormat.cs b/src/Lucene.Net.TestFramework/Codecs/Asserting/AssertingStoredFieldsFormat.cs
new file mode 100644
index 0000000..1ad05ef
--- /dev/null
+++ b/src/Lucene.Net.TestFramework/Codecs/Asserting/AssertingStoredFieldsFormat.cs
@@ -0,0 +1,154 @@
+using System.Diagnostics;
+
+namespace Lucene.Net.Codecs.Asserting
+{
+    using Directory = Lucene.Net.Store.Directory;
+    using FieldInfo = Lucene.Net.Index.FieldInfo;
+    using FieldInfos = Lucene.Net.Index.FieldInfos;
+    using IIndexableField = Lucene.Net.Index.IIndexableField;
+    using IOContext = Lucene.Net.Store.IOContext;
+
+    /*
+         * 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 Lucene41StoredFieldsFormat = Lucene.Net.Codecs.Lucene41.Lucene41StoredFieldsFormat;
+    using SegmentInfo = Lucene.Net.Index.SegmentInfo;
+    using StoredFieldVisitor = Lucene.Net.Index.StoredFieldVisitor;
+
+    /// <summary>
+    /// Just like <seealso cref="Lucene41StoredFieldsFormat"/> but with additional asserts.
+    /// </summary>
+    public class AssertingStoredFieldsFormat : StoredFieldsFormat
+    {
+        private readonly StoredFieldsFormat @in = new Lucene41StoredFieldsFormat();
+
+        public override StoredFieldsReader FieldsReader(Directory directory, SegmentInfo si, FieldInfos fn, IOContext context)
+        {
+            return new AssertingStoredFieldsReader(@in.FieldsReader(directory, si, fn, context), si.DocCount);
+        }
+
+        public override StoredFieldsWriter FieldsWriter(Directory directory, SegmentInfo si, IOContext context)
+        {
+            return new AssertingStoredFieldsWriter(@in.FieldsWriter(directory, si, context));
+        }
+
+        internal class AssertingStoredFieldsReader : StoredFieldsReader
+        {
+            internal readonly StoredFieldsReader @in;
+            internal readonly int MaxDoc;
+
+            internal AssertingStoredFieldsReader(StoredFieldsReader @in, int maxDoc)
+            {
+                this.@in = @in;
+                this.MaxDoc = maxDoc;
+            }
+
+            protected override void Dispose(bool disposing)
+            {
+                if (disposing)
+                    @in.Dispose();
+            }
+
+            public override void VisitDocument(int n, StoredFieldVisitor visitor)
+            {
+                Debug.Assert(n >= 0 && n < MaxDoc);
+                @in.VisitDocument(n, visitor);
+            }
+
+            public override object Clone()
+            {
+                return new AssertingStoredFieldsReader((StoredFieldsReader)@in.Clone(), MaxDoc);
+            }
+
+            public override long RamBytesUsed()
+            {
+                return @in.RamBytesUsed();
+            }
+
+            public override void CheckIntegrity()
+            {
+                @in.CheckIntegrity();
+            }
+        }
+
+        internal enum Status
+        {
+            UNDEFINED,
+            STARTED,
+            FINISHED
+        }
+
+        internal class AssertingStoredFieldsWriter : StoredFieldsWriter
+        {
+            internal readonly StoredFieldsWriter @in;
+            internal int NumWritten;
+            internal int FieldCount;
+            internal Status DocStatus;
+
+            internal AssertingStoredFieldsWriter(StoredFieldsWriter @in)
+            {
+                this.@in = @in;
+                this.DocStatus = Status.UNDEFINED;
+            }
+
+            public override void StartDocument(int numStoredFields)
+            {
+                Debug.Assert(DocStatus != Status.STARTED);
+                @in.StartDocument(numStoredFields);
+                Debug.Assert(FieldCount == 0);
+                FieldCount = numStoredFields;
+                NumWritten++;
+                DocStatus = Status.STARTED;
+            }
+
+            public override void FinishDocument()
+            {
+                Debug.Assert(DocStatus == Status.STARTED);
+                Debug.Assert(FieldCount == 0);
+                @in.FinishDocument();
+                DocStatus = Status.FINISHED;
+            }
+
+            public override void WriteField(FieldInfo info, IIndexableField field)
+            {
+                Debug.Assert(DocStatus == Status.STARTED);
+                @in.WriteField(info, field);
+                Debug.Assert(FieldCount > 0);
+                FieldCount--;
+            }
+
+            public override void Abort()
+            {
+                @in.Abort();
+            }
+
+            public override void Finish(FieldInfos fis, int numDocs)
+            {
+                Debug.Assert(DocStatus == (numDocs > 0 ? Status.FINISHED : Status.UNDEFINED));
+                @in.Finish(fis, numDocs);
+                Debug.Assert(FieldCount == 0);
+                Debug.Assert(numDocs == NumWritten);
+            }
+
+            protected override void Dispose(bool disposing)
+            {
+                if (disposing)
+                    @in.Dispose();
+            }
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/77e95ccc/src/Lucene.Net.TestFramework/Codecs/Asserting/AssertingTermVectorsFormat.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.TestFramework/Codecs/Asserting/AssertingTermVectorsFormat.cs b/src/Lucene.Net.TestFramework/Codecs/Asserting/AssertingTermVectorsFormat.cs
new file mode 100644
index 0000000..cb90f52
--- /dev/null
+++ b/src/Lucene.Net.TestFramework/Codecs/Asserting/AssertingTermVectorsFormat.cs
@@ -0,0 +1,208 @@
+using System.Collections.Generic;
+using System.Diagnostics;
+
+namespace Lucene.Net.Codecs.Asserting
+{
+    using AssertingAtomicReader = Lucene.Net.Index.AssertingAtomicReader;
+    using BytesRef = Lucene.Net.Util.BytesRef;
+    using Directory = Lucene.Net.Store.Directory;
+    using FieldInfo = Lucene.Net.Index.FieldInfo;
+    using FieldInfos = Lucene.Net.Index.FieldInfos;
+    using Fields = Lucene.Net.Index.Fields;
+    using IOContext = Lucene.Net.Store.IOContext;
+
+    /*
+         * 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 Lucene40TermVectorsFormat = Lucene.Net.Codecs.Lucene40.Lucene40TermVectorsFormat;
+    using SegmentInfo = Lucene.Net.Index.SegmentInfo;
+
+    /// <summary>
+    /// Just like <seealso cref="Lucene40TermVectorsFormat"/> but with additional asserts.
+    /// </summary>
+    public class AssertingTermVectorsFormat : TermVectorsFormat
+    {
+        private readonly TermVectorsFormat @in = new Lucene40TermVectorsFormat();
+
+        public override TermVectorsReader VectorsReader(Directory directory, SegmentInfo segmentInfo, FieldInfos fieldInfos, IOContext context)
+        {
+            return new AssertingTermVectorsReader(@in.VectorsReader(directory, segmentInfo, fieldInfos, context));
+        }
+
+        public override TermVectorsWriter VectorsWriter(Directory directory, SegmentInfo segmentInfo, IOContext context)
+        {
+            return new AssertingTermVectorsWriter(@in.VectorsWriter(directory, segmentInfo, context));
+        }
+
+        internal class AssertingTermVectorsReader : TermVectorsReader
+        {
+            internal readonly TermVectorsReader @in;
+
+            internal AssertingTermVectorsReader(TermVectorsReader @in)
+            {
+                this.@in = @in;
+            }
+
+            protected override void Dispose(bool disposing)
+            {
+                if (disposing)
+                    @in.Dispose();
+            }
+
+            public override Fields Get(int doc)
+            {
+                Fields fields = @in.Get(doc);
+                return fields == null ? null : new AssertingAtomicReader.AssertingFields(fields);
+            }
+
+            public override object Clone()
+            {
+                return new AssertingTermVectorsReader((TermVectorsReader)@in.Clone());
+            }
+
+            public override long RamBytesUsed()
+            {
+                return @in.RamBytesUsed();
+            }
+
+            public override void CheckIntegrity()
+            {
+                @in.CheckIntegrity();
+            }
+        }
+
+        internal enum Status
+        {
+            UNDEFINED,
+            STARTED,
+            FINISHED
+        }
+
+        internal class AssertingTermVectorsWriter : TermVectorsWriter
+        {
+            internal readonly TermVectorsWriter @in;
+            internal Status DocStatus, FieldStatus, TermStatus;
+            internal int DocCount, FieldCount, TermCount, PositionCount;
+            internal bool HasPositions;
+
+            internal AssertingTermVectorsWriter(TermVectorsWriter @in)
+            {
+                this.@in = @in;
+                DocStatus = Status.UNDEFINED;
+                FieldStatus = Status.UNDEFINED;
+                TermStatus = Status.UNDEFINED;
+                FieldCount = TermCount = PositionCount = 0;
+            }
+
+            public override void StartDocument(int numVectorFields)
+            {
+                Debug.Assert(FieldCount == 0);
+                Debug.Assert(DocStatus != Status.STARTED);
+                @in.StartDocument(numVectorFields);
+                DocStatus = Status.STARTED;
+                FieldCount = numVectorFields;
+                DocCount++;
+            }
+
+            public override void FinishDocument()
+            {
+                Debug.Assert(FieldCount == 0);
+                Debug.Assert(DocStatus == Status.STARTED);
+                @in.FinishDocument();
+                DocStatus = Status.FINISHED;
+            }
+
+            public override void StartField(FieldInfo info, int numTerms, bool positions, bool offsets, bool payloads)
+            {
+                Debug.Assert(TermCount == 0);
+                Debug.Assert(DocStatus == Status.STARTED);
+                Debug.Assert(FieldStatus != Status.STARTED);
+                @in.StartField(info, numTerms, positions, offsets, payloads);
+                FieldStatus = Status.STARTED;
+                TermCount = numTerms;
+                HasPositions = positions || offsets || payloads;
+            }
+
+            public override void FinishField()
+            {
+                Debug.Assert(TermCount == 0);
+                Debug.Assert(FieldStatus == Status.STARTED);
+                @in.FinishField();
+                FieldStatus = Status.FINISHED;
+                --FieldCount;
+            }
+
+            public override void StartTerm(BytesRef term, int freq)
+            {
+                Debug.Assert(DocStatus == Status.STARTED);
+                Debug.Assert(FieldStatus == Status.STARTED);
+                Debug.Assert(TermStatus != Status.STARTED);
+                @in.StartTerm(term, freq);
+                TermStatus = Status.STARTED;
+                PositionCount = HasPositions ? freq : 0;
+            }
+
+            public override void FinishTerm()
+            {
+                Debug.Assert(PositionCount == 0);
+                Debug.Assert(DocStatus == Status.STARTED);
+                Debug.Assert(FieldStatus == Status.STARTED);
+                Debug.Assert(TermStatus == Status.STARTED);
+                @in.FinishTerm();
+                TermStatus = Status.FINISHED;
+                --TermCount;
+            }
+
+            public override void AddPosition(int position, int startOffset, int endOffset, BytesRef payload)
+            {
+                Debug.Assert(DocStatus == Status.STARTED);
+                Debug.Assert(FieldStatus == Status.STARTED);
+                Debug.Assert(TermStatus == Status.STARTED);
+                @in.AddPosition(position, startOffset, endOffset, payload);
+                --PositionCount;
+            }
+
+            public override void Abort()
+            {
+                @in.Abort();
+            }
+
+            public override void Finish(FieldInfos fis, int numDocs)
+            {
+                Debug.Assert(DocCount == numDocs);
+                Debug.Assert(DocStatus == (numDocs > 0 ? Status.FINISHED : Status.UNDEFINED));
+                Debug.Assert(FieldStatus != Status.STARTED);
+                Debug.Assert(TermStatus != Status.STARTED);
+                @in.Finish(fis, numDocs);
+            }
+
+            public override IComparer<BytesRef> Comparer
+            {
+                get
+                {
+                    return @in.Comparer;
+                }
+            }
+
+            protected override void Dispose(bool disposing)
+            {
+                if (disposing)
+                    @in.Dispose();
+            }
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/77e95ccc/src/Lucene.Net.TestFramework/Codecs/asserting/AssertingCodec.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.TestFramework/Codecs/asserting/AssertingCodec.cs b/src/Lucene.Net.TestFramework/Codecs/asserting/AssertingCodec.cs
deleted file mode 100644
index 3917c46..0000000
--- a/src/Lucene.Net.TestFramework/Codecs/asserting/AssertingCodec.cs
+++ /dev/null
@@ -1,64 +0,0 @@
-namespace Lucene.Net.Codecs.asserting
-{
-    /*
-     * 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 Lucene46Codec = Lucene.Net.Codecs.Lucene46.Lucene46Codec;
-
-    /// <summary>
-    /// Acts like <seealso cref="Lucene46Codec"/> but with additional asserts.
-    /// </summary>
-    [CodecName("Asserting")]
-    public sealed class AssertingCodec : FilterCodec
-    {
-        private readonly PostingsFormat Postings = new AssertingPostingsFormat();
-        private readonly TermVectorsFormat Vectors = new AssertingTermVectorsFormat();
-        private readonly StoredFieldsFormat StoredFields = new AssertingStoredFieldsFormat();
-        private readonly DocValuesFormat DocValues = new AssertingDocValuesFormat();
-        private readonly NormsFormat Norms = new AssertingNormsFormat();
-
-        public AssertingCodec()
-            : base(new Lucene46Codec())
-        {
-        }
-
-        public override PostingsFormat PostingsFormat
-        {
-            get { return Postings; }
-        }
-
-        public override TermVectorsFormat TermVectorsFormat
-        {
-            get { return Vectors; }
-        }
-
-        public override StoredFieldsFormat StoredFieldsFormat
-        {
-            get { return StoredFields; }
-        }
-
-        public override DocValuesFormat DocValuesFormat
-        {
-            get { return DocValues; }
-        }
-
-        public override NormsFormat NormsFormat
-        {
-            get { return Norms; }
-        }
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/77e95ccc/src/Lucene.Net.TestFramework/Codecs/asserting/AssertingDocValuesFormat.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.TestFramework/Codecs/asserting/AssertingDocValuesFormat.cs b/src/Lucene.Net.TestFramework/Codecs/asserting/AssertingDocValuesFormat.cs
deleted file mode 100644
index 7a46b5c..0000000
--- a/src/Lucene.Net.TestFramework/Codecs/asserting/AssertingDocValuesFormat.cs
+++ /dev/null
@@ -1,346 +0,0 @@
-using System.Collections.Generic;
-using System.Diagnostics;
-
-namespace Lucene.Net.Codecs.asserting
-{
-    using System;
-    using AssertingAtomicReader = Lucene.Net.Index.AssertingAtomicReader;
-    using BinaryDocValues = Lucene.Net.Index.BinaryDocValues;
-    using IBits = Lucene.Net.Util.IBits;
-    using BytesRef = Lucene.Net.Util.BytesRef;
-    using DocValuesType = Lucene.Net.Index.DocValuesType;
-    using FieldInfo = Lucene.Net.Index.FieldInfo;
-    using FixedBitSet = Lucene.Net.Util.FixedBitSet;
-    using Int64BitSet = Lucene.Net.Util.Int64BitSet;
-
-    /*
-         * 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 Lucene45DocValuesFormat = Lucene.Net.Codecs.Lucene45.Lucene45DocValuesFormat;
-    using NumericDocValues = Lucene.Net.Index.NumericDocValues;
-    using SegmentReadState = Lucene.Net.Index.SegmentReadState;
-    using SegmentWriteState = Lucene.Net.Index.SegmentWriteState;
-    using SortedDocValues = Lucene.Net.Index.SortedDocValues;
-    using SortedSetDocValues = Lucene.Net.Index.SortedSetDocValues;
-
-    /// <summary>
-    /// Just like <seealso cref="Lucene45DocValuesFormat"/> but with additional asserts.
-    /// </summary>
-    [DocValuesFormatName("Asserting")]
-    public class AssertingDocValuesFormat : DocValuesFormat
-    {
-        private readonly DocValuesFormat @in = new Lucene45DocValuesFormat();
-
-        public AssertingDocValuesFormat()
-            : base()
-        {
-        }
-
-        public override DocValuesConsumer FieldsConsumer(SegmentWriteState state)
-        {
-            DocValuesConsumer consumer = @in.FieldsConsumer(state);
-            Debug.Assert(consumer != null);
-            return new AssertingDocValuesConsumer(consumer, state.SegmentInfo.DocCount);
-        }
-
-        public override DocValuesProducer FieldsProducer(SegmentReadState state)
-        {
-            Debug.Assert(state.FieldInfos.HasDocValues);
-            DocValuesProducer producer = @in.FieldsProducer(state);
-            Debug.Assert(producer != null);
-            return new AssertingDocValuesProducer(producer, state.SegmentInfo.DocCount);
-        }
-
-        internal class AssertingDocValuesConsumer : DocValuesConsumer
-        {
-            internal readonly DocValuesConsumer @in;
-            internal readonly int MaxDoc;
-
-            internal AssertingDocValuesConsumer(DocValuesConsumer @in, int maxDoc)
-            {
-                this.@in = @in;
-                this.MaxDoc = maxDoc;
-            }
-
-            public override void AddNumericField(FieldInfo field, IEnumerable<long?> values)
-            {
-                int count = 0;
-                foreach (var v in values)
-                {
-                    count++;
-                }
-                Debug.Assert(count == MaxDoc);
-                CheckIterator(values.GetEnumerator(), MaxDoc, true);
-                @in.AddNumericField(field, values);
-            }
-
-            public override void AddBinaryField(FieldInfo field, IEnumerable<BytesRef> values)
-            {
-                int count = 0;
-                foreach (BytesRef b in values)
-                {
-                    Debug.Assert(b == null || b.IsValid());
-                    count++;
-                }
-                Debug.Assert(count == MaxDoc);
-                CheckIterator(values.GetEnumerator(), MaxDoc, true);
-                @in.AddBinaryField(field, values);
-            }
-
-            public override void AddSortedField(FieldInfo field, IEnumerable<BytesRef> values, IEnumerable<long?> docToOrd)
-            {
-                int valueCount = 0;
-                BytesRef lastValue = null;
-                foreach (BytesRef b in values)
-                {
-                    Debug.Assert(b != null);
-                    Debug.Assert(b.IsValid());
-                    if (valueCount > 0)
-                    {
-                        Debug.Assert(b.CompareTo(lastValue) > 0);
-                    }
-                    lastValue = BytesRef.DeepCopyOf(b);
-                    valueCount++;
-                }
-                Debug.Assert(valueCount <= MaxDoc);
-
-                FixedBitSet seenOrds = new FixedBitSet(valueCount);
-
-                int count = 0;
-                foreach (long? v in docToOrd)
-                {
-                    Debug.Assert(v != null);
-                    int ord = (int)v.Value;
-                    Debug.Assert(ord >= -1 && ord < valueCount);
-                    if (ord >= 0)
-                    {
-                        seenOrds.Set(ord);
-                    }
-                    count++;
-                }
-
-                Debug.Assert(count == MaxDoc);
-                Debug.Assert(seenOrds.Cardinality() == valueCount);
-                CheckIterator(values.GetEnumerator(), valueCount, false);
-                CheckIterator(docToOrd.GetEnumerator(), MaxDoc, false);
-                @in.AddSortedField(field, values, docToOrd);
-            }
-
-            public override void AddSortedSetField(FieldInfo field, IEnumerable<BytesRef> values, IEnumerable<long?> docToOrdCount, IEnumerable<long?> ords)
-            {
-                long valueCount = 0;
-                BytesRef lastValue = null;
-                foreach (BytesRef b in values)
-                {
-                    Debug.Assert(b != null);
-                    Debug.Assert(b.IsValid());
-                    if (valueCount > 0)
-                    {
-                        Debug.Assert(b.CompareTo(lastValue) > 0);
-                    }
-                    lastValue = BytesRef.DeepCopyOf(b);
-                    valueCount++;
-                }
-
-                int docCount = 0;
-                long ordCount = 0;
-                Int64BitSet seenOrds = new Int64BitSet(valueCount);
-                IEnumerator<long?> ordIterator = ords.GetEnumerator();
-                foreach (long? v in docToOrdCount)
-                {
-                    Debug.Assert(v != null);
-                    int count = (int)v.Value;
-                    Debug.Assert(count >= 0);
-                    docCount++;
-                    ordCount += count;
-
-                    long lastOrd = -1;
-                    for (int i = 0; i < count; i++)
-                    {
-                        ordIterator.MoveNext();
-                        long? o = ordIterator.Current;
-                        Debug.Assert(o != null);
-                        long ord = o.Value;
-                        Debug.Assert(ord >= 0 && ord < valueCount);
-                        Debug.Assert(ord > lastOrd, "ord=" + ord + ",lastOrd=" + lastOrd);
-                        seenOrds.Set(ord);
-                        lastOrd = ord;
-                    }
-                }
-                Debug.Assert(ordIterator.MoveNext() == false);
-
-                Debug.Assert(docCount == MaxDoc);
-                Debug.Assert(seenOrds.Cardinality() == valueCount);
-                CheckIterator(values.GetEnumerator(), valueCount, false);
-                CheckIterator(docToOrdCount.GetEnumerator(), MaxDoc, false);
-                CheckIterator(ords.GetEnumerator(), ordCount, false);
-                @in.AddSortedSetField(field, values, docToOrdCount, ords);
-            }
-
-            protected override void Dispose(bool disposing)
-            {
-                if (disposing)
-                    @in.Dispose();
-            }
-        }
-
-        internal class AssertingNormsConsumer : DocValuesConsumer
-        {
-            internal readonly DocValuesConsumer @in;
-            internal readonly int MaxDoc;
-
-            internal AssertingNormsConsumer(DocValuesConsumer @in, int maxDoc)
-            {
-                this.@in = @in;
-                this.MaxDoc = maxDoc;
-            }
-
-            public override void AddNumericField(FieldInfo field, IEnumerable<long?> values)
-            {
-                int count = 0;
-                foreach (long? v in values)
-                {
-                    Debug.Assert(v != null);
-                    count++;
-                }
-                Debug.Assert(count == MaxDoc);
-                CheckIterator(values.GetEnumerator(), MaxDoc, false);
-                @in.AddNumericField(field, values);
-            }
-
-            protected override void Dispose(bool disposing)
-            {
-                if (disposing)
-                    @in.Dispose();
-            }
-
-            public override void AddBinaryField(FieldInfo field, IEnumerable<BytesRef> values)
-            {
-                throw new InvalidOperationException();
-            }
-
-            public override void AddSortedField(FieldInfo field, IEnumerable<BytesRef> values, IEnumerable<long?> docToOrd)
-            {
-                throw new InvalidOperationException();
-            }
-
-            public override void AddSortedSetField(FieldInfo field, IEnumerable<BytesRef> values, IEnumerable<long?> docToOrdCount, IEnumerable<long?> ords)
-            {
-                throw new InvalidOperationException();
-            }
-        }
-
-        private static void CheckIterator<T>(IEnumerator<T> iterator, long expectedSize, bool allowNull)
-        {
-            for (long i = 0; i < expectedSize; i++)
-            {
-                bool hasNext = iterator.MoveNext();
-                Debug.Assert(hasNext);
-                T v = iterator.Current;
-                Debug.Assert(allowNull || v != null);
-                try
-                {
-                    iterator.Reset();
-                    throw new InvalidOperationException("broken iterator (supports remove): " + iterator);
-                }
-                catch (System.NotSupportedException)
-                {
-                    // ok
-                }
-            }
-            Debug.Assert(!iterator.MoveNext());
-            /*try
-            {
-              //iterator.next();
-              throw new InvalidOperationException("broken iterator (allows next() when hasNext==false) " + iterator);
-            }
-            catch (Exception)
-            {
-              // ok
-            }*/
-        }
-
-        internal class AssertingDocValuesProducer : DocValuesProducer
-        {
-            internal readonly DocValuesProducer @in;
-            internal readonly int MaxDoc;
-
-            internal AssertingDocValuesProducer(DocValuesProducer @in, int maxDoc)
-            {
-                this.@in = @in;
-                this.MaxDoc = maxDoc;
-            }
-
-            public override NumericDocValues GetNumeric(FieldInfo field)
-            {
-                Debug.Assert(field.DocValuesType == DocValuesType.NUMERIC || field.NormType == DocValuesType.NUMERIC);
-                NumericDocValues values = @in.GetNumeric(field);
-                Debug.Assert(values != null);
-                return new AssertingAtomicReader.AssertingNumericDocValues(values, MaxDoc);
-            }
-
-            public override BinaryDocValues GetBinary(FieldInfo field)
-            {
-                Debug.Assert(field.DocValuesType == DocValuesType.BINARY);
-                BinaryDocValues values = @in.GetBinary(field);
-                Debug.Assert(values != null);
-                return new AssertingAtomicReader.AssertingBinaryDocValues(values, MaxDoc);
-            }
-
-            public override SortedDocValues GetSorted(FieldInfo field)
-            {
-                Debug.Assert(field.DocValuesType == DocValuesType.SORTED);
-                SortedDocValues values = @in.GetSorted(field);
-                Debug.Assert(values != null);
-                return new AssertingAtomicReader.AssertingSortedDocValues(values, MaxDoc);
-            }
-
-            public override SortedSetDocValues GetSortedSet(FieldInfo field)
-            {
-                Debug.Assert(field.DocValuesType == DocValuesType.SORTED_SET);
-                SortedSetDocValues values = @in.GetSortedSet(field);
-                Debug.Assert(values != null);
-                return new AssertingAtomicReader.AssertingSortedSetDocValues(values, MaxDoc);
-            }
-
-            public override IBits GetDocsWithField(FieldInfo field)
-            {
-                Debug.Assert(field.DocValuesType != null);
-                IBits bits = @in.GetDocsWithField(field);
-                Debug.Assert(bits != null);
-                Debug.Assert(bits.Length == MaxDoc);
-                return new AssertingAtomicReader.AssertingBits(bits);
-            }
-
-            protected override void Dispose(bool disposing)
-            {
-                if (disposing)
-                    @in.Dispose();
-            }
-
-            public override long RamBytesUsed()
-            {
-                return @in.RamBytesUsed();
-            }
-
-            public override void CheckIntegrity()
-            {
-                @in.CheckIntegrity();
-            }
-        }
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/77e95ccc/src/Lucene.Net.TestFramework/Codecs/asserting/AssertingNormsFormat.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.TestFramework/Codecs/asserting/AssertingNormsFormat.cs b/src/Lucene.Net.TestFramework/Codecs/asserting/AssertingNormsFormat.cs
deleted file mode 100644
index 0137dce..0000000
--- a/src/Lucene.Net.TestFramework/Codecs/asserting/AssertingNormsFormat.cs
+++ /dev/null
@@ -1,51 +0,0 @@
-using System.Diagnostics;
-
-namespace Lucene.Net.Codecs.asserting
-{
-    using AssertingDocValuesProducer = Lucene.Net.Codecs.asserting.AssertingDocValuesFormat.AssertingDocValuesProducer;
-
-    /*
-         * 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 AssertingNormsConsumer = Lucene.Net.Codecs.asserting.AssertingDocValuesFormat.AssertingNormsConsumer;
-    using Lucene42NormsFormat = Lucene.Net.Codecs.Lucene42.Lucene42NormsFormat;
-    using SegmentReadState = Lucene.Net.Index.SegmentReadState;
-    using SegmentWriteState = Lucene.Net.Index.SegmentWriteState;
-
-    /// <summary>
-    /// Just like <seealso cref="Lucene42NormsFormat"/> but with additional asserts.
-    /// </summary>
-    public class AssertingNormsFormat : NormsFormat
-    {
-        private readonly NormsFormat @in = new Lucene42NormsFormat();
-
-        public override DocValuesConsumer NormsConsumer(SegmentWriteState state)
-        {
-            DocValuesConsumer consumer = @in.NormsConsumer(state);
-            Debug.Assert(consumer != null);
-            return new AssertingNormsConsumer(consumer, state.SegmentInfo.DocCount);
-        }
-
-        public override DocValuesProducer NormsProducer(SegmentReadState state)
-        {
-            Debug.Assert(state.FieldInfos.HasNorms);
-            DocValuesProducer producer = @in.NormsProducer(state);
-            Debug.Assert(producer != null);
-            return new AssertingDocValuesProducer(producer, state.SegmentInfo.DocCount);
-        }
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/77e95ccc/src/Lucene.Net.TestFramework/Codecs/asserting/AssertingPostingsFormat.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.TestFramework/Codecs/asserting/AssertingPostingsFormat.cs b/src/Lucene.Net.TestFramework/Codecs/asserting/AssertingPostingsFormat.cs
deleted file mode 100644
index ef582b7..0000000
--- a/src/Lucene.Net.TestFramework/Codecs/asserting/AssertingPostingsFormat.cs
+++ /dev/null
@@ -1,318 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-
-namespace Lucene.Net.Codecs.asserting
-{
-    using AssertingAtomicReader = Lucene.Net.Index.AssertingAtomicReader;
-    using BytesRef = Lucene.Net.Util.BytesRef;
-    using FieldInfo = Lucene.Net.Index.FieldInfo;
-    using IndexOptions = Lucene.Net.Index.IndexOptions;
-
-    /*
-         * 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 Lucene41PostingsFormat = Lucene.Net.Codecs.Lucene41.Lucene41PostingsFormat;
-    using OpenBitSet = Lucene.Net.Util.OpenBitSet;
-    using SegmentReadState = Lucene.Net.Index.SegmentReadState;
-    using SegmentWriteState = Lucene.Net.Index.SegmentWriteState;
-    using Terms = Lucene.Net.Index.Terms;
-
-    /// <summary>
-    /// Just like <seealso cref="Lucene41PostingsFormat"/> but with additional asserts.
-    /// </summary>
-    [PostingsFormatName("Asserting")] // LUCENENET specific - using PostingsFormatName attribute to ensure the default name passed from subclasses is the same as this class name
-    public sealed class AssertingPostingsFormat : PostingsFormat
-    {
-        private readonly PostingsFormat @in = new Lucene41PostingsFormat();
-
-        public AssertingPostingsFormat()
-            : base()
-        {
-        }
-
-        public override FieldsConsumer FieldsConsumer(SegmentWriteState state)
-        {
-            return new AssertingFieldsConsumer(@in.FieldsConsumer(state));
-        }
-
-        public override FieldsProducer FieldsProducer(SegmentReadState state)
-        {
-            return new AssertingFieldsProducer(@in.FieldsProducer(state));
-        }
-
-        internal class AssertingFieldsProducer : FieldsProducer
-        {
-            internal readonly FieldsProducer @in;
-
-            internal AssertingFieldsProducer(FieldsProducer @in)
-            {
-                this.@in = @in;
-            }
-
-            public override void Dispose()
-            {
-                Dispose(true);
-            }
-
-            protected void Dispose(bool disposing)
-            {
-                if (disposing)
-                    @in.Dispose();
-            }
-
-            public override IEnumerator<string> GetEnumerator()
-            {
-                IEnumerator<string> iterator = @in.GetEnumerator();
-                Debug.Assert(iterator != null);
-                return iterator;
-            }
-
-            public override Terms GetTerms(string field)
-            {
-                Terms terms = @in.GetTerms(field);
-                return terms == null ? null : new AssertingAtomicReader.AssertingTerms(terms);
-            }
-
-            public override int Count
-            {
-                get { return @in.Count; }
-            }
-
-            [Obsolete("iterate fields and add their Count instead.")]
-            public override long UniqueTermCount
-            {
-                get
-                {
-                    return @in.UniqueTermCount;
-                }
-            }
-
-            public override long RamBytesUsed()
-            {
-                return @in.RamBytesUsed();
-            }
-
-            public override void CheckIntegrity()
-            {
-                @in.CheckIntegrity();
-            }
-        }
-
-        internal class AssertingFieldsConsumer : FieldsConsumer
-        {
-            internal readonly FieldsConsumer @in;
-
-            internal AssertingFieldsConsumer(FieldsConsumer @in)
-            {
-                this.@in = @in;
-            }
-
-            public override TermsConsumer AddField(FieldInfo field)
-            {
-                TermsConsumer consumer = @in.AddField(field);
-                Debug.Assert(consumer != null);
-                return new AssertingTermsConsumer(consumer, field);
-            }
-
-            public override void Dispose()
-            {
-                Dispose(true);
-            }
-
-            protected void Dispose(bool disposing)
-            {
-                if (disposing)
-                    @in.Dispose();
-            }
-        }
-
-        internal enum TermsConsumerState
-        {
-            INITIAL,
-            START,
-            FINISHED
-        }
-
-        internal class AssertingTermsConsumer : TermsConsumer
-        {
-            internal readonly TermsConsumer @in;
-            private readonly FieldInfo fieldInfo;
-            internal BytesRef LastTerm = null;
-            internal TermsConsumerState State = TermsConsumerState.INITIAL;
-            internal AssertingPostingsConsumer LastPostingsConsumer = null;
-            internal long SumTotalTermFreq = 0;
-            internal long SumDocFreq = 0;
-            internal OpenBitSet VisitedDocs = new OpenBitSet();
-
-            internal AssertingTermsConsumer(TermsConsumer @in, FieldInfo fieldInfo)
-            {
-                this.@in = @in;
-                this.fieldInfo = fieldInfo;
-            }
-
-            public override PostingsConsumer StartTerm(BytesRef text)
-            {
-                Debug.Assert(State == TermsConsumerState.INITIAL || State == TermsConsumerState.START && LastPostingsConsumer.DocFreq == 0);
-                State = TermsConsumerState.START;
-                Debug.Assert(LastTerm == null || @in.Comparer.Compare(text, LastTerm) > 0);
-                LastTerm = BytesRef.DeepCopyOf(text);
-                return LastPostingsConsumer = new AssertingPostingsConsumer(@in.StartTerm(text), fieldInfo, VisitedDocs);
-            }
-
-            public override void FinishTerm(BytesRef text, TermStats stats)
-            {
-                Debug.Assert(State == TermsConsumerState.START);
-                State = TermsConsumerState.INITIAL;
-                Debug.Assert(text.Equals(LastTerm));
-                Debug.Assert(stats.DocFreq > 0); // otherwise, this method should not be called.
-                Debug.Assert(stats.DocFreq == LastPostingsConsumer.DocFreq);
-                SumDocFreq += stats.DocFreq;
-                if (fieldInfo.IndexOptions == IndexOptions.DOCS_ONLY)
-                {
-                    Debug.Assert(stats.TotalTermFreq == -1);
-                }
-                else
-                {
-                    Debug.Assert(stats.TotalTermFreq == LastPostingsConsumer.TotalTermFreq);
-                    SumTotalTermFreq += stats.TotalTermFreq;
-                }
-                @in.FinishTerm(text, stats);
-            }
-
-            public override void Finish(long sumTotalTermFreq, long sumDocFreq, int docCount)
-            {
-                Debug.Assert(State == TermsConsumerState.INITIAL || State == TermsConsumerState.START && LastPostingsConsumer.DocFreq == 0);
-                State = TermsConsumerState.FINISHED;
-                Debug.Assert(docCount >= 0);
-                Debug.Assert(docCount == VisitedDocs.Cardinality());
-                Debug.Assert(sumDocFreq >= docCount);
-                Debug.Assert(sumDocFreq == this.SumDocFreq);
-                if (fieldInfo.IndexOptions == IndexOptions.DOCS_ONLY)
-                {
-                    Debug.Assert(sumTotalTermFreq == -1);
-                }
-                else
-                {
-                    Debug.Assert(sumTotalTermFreq >= sumDocFreq);
-                    Debug.Assert(sumTotalTermFreq == this.SumTotalTermFreq);
-                }
-                @in.Finish(sumTotalTermFreq, sumDocFreq, docCount);
-            }
-
-            public override IComparer<BytesRef> Comparer
-            {
-                get
-                {
-                    return @in.Comparer;
-                }
-            }
-        }
-
-        internal enum PostingsConsumerState
-        {
-            INITIAL,
-            START
-        }
-
-        internal class AssertingPostingsConsumer : PostingsConsumer
-        {
-            internal readonly PostingsConsumer @in;
-            private readonly FieldInfo fieldInfo;
-            internal readonly OpenBitSet VisitedDocs;
-            internal PostingsConsumerState State = PostingsConsumerState.INITIAL;
-            internal int Freq;
-            internal int PositionCount;
-            internal int LastPosition = 0;
-            internal int LastStartOffset = 0;
-            internal int DocFreq = 0;
-            internal long TotalTermFreq = 0;
-
-            internal AssertingPostingsConsumer(PostingsConsumer @in, FieldInfo fieldInfo, OpenBitSet visitedDocs)
-            {
-                this.@in = @in;
-                this.fieldInfo = fieldInfo;
-                this.VisitedDocs = visitedDocs;
-            }
-
-            public override void StartDoc(int docID, int freq)
-            {
-                Debug.Assert(State == PostingsConsumerState.INITIAL);
-                State = PostingsConsumerState.START;
-                Debug.Assert(docID >= 0);
-                if (fieldInfo.IndexOptions == IndexOptions.DOCS_ONLY)
-                {
-                    Debug.Assert(freq == -1);
-                    this.Freq = 0; // we don't expect any positions here
-                }
-                else
-                {
-                    Debug.Assert(freq > 0);
-                    this.Freq = freq;
-                    TotalTermFreq += freq;
-                }
-                this.PositionCount = 0;
-                this.LastPosition = 0;
-                this.LastStartOffset = 0;
-                DocFreq++;
-                VisitedDocs.Set(docID);
-                @in.StartDoc(docID, freq);
-            }
-
-            public override void AddPosition(int position, BytesRef payload, int startOffset, int endOffset)
-            {
-                Debug.Assert(State == PostingsConsumerState.START);
-                Debug.Assert(PositionCount < Freq);
-                PositionCount++;
-                Debug.Assert(position >= LastPosition || position == -1); // we still allow -1 from old 3.x indexes
-                LastPosition = position;
-                if (fieldInfo.IndexOptions == IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS)
-                {
-                    Debug.Assert(startOffset >= 0);
-                    Debug.Assert(startOffset >= LastStartOffset);
-                    LastStartOffset = startOffset;
-                    Debug.Assert(endOffset >= startOffset);
-                }
-                else
-                {
-                    Debug.Assert(startOffset == -1);
-                    Debug.Assert(endOffset == -1);
-                }
-                if (payload != null)
-                {
-                    Debug.Assert(fieldInfo.HasPayloads);
-                }
-                @in.AddPosition(position, payload, startOffset, endOffset);
-            }
-
-            public override void FinishDoc()
-            {
-                Debug.Assert(State == PostingsConsumerState.START);
-                State = PostingsConsumerState.INITIAL;
-                if (fieldInfo.IndexOptions < IndexOptions.DOCS_AND_FREQS_AND_POSITIONS)
-                {
-                    Debug.Assert(PositionCount == 0); // we should not have fed any positions!
-                }
-                else
-                {
-                    Debug.Assert(PositionCount == Freq);
-                }
-                @in.FinishDoc();
-            }
-        }
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/77e95ccc/src/Lucene.Net.TestFramework/Codecs/asserting/AssertingStoredFieldsFormat.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.TestFramework/Codecs/asserting/AssertingStoredFieldsFormat.cs b/src/Lucene.Net.TestFramework/Codecs/asserting/AssertingStoredFieldsFormat.cs
deleted file mode 100644
index 808ed9a..0000000
--- a/src/Lucene.Net.TestFramework/Codecs/asserting/AssertingStoredFieldsFormat.cs
+++ /dev/null
@@ -1,154 +0,0 @@
-using System.Diagnostics;
-
-namespace Lucene.Net.Codecs.asserting
-{
-    using Directory = Lucene.Net.Store.Directory;
-    using FieldInfo = Lucene.Net.Index.FieldInfo;
-    using FieldInfos = Lucene.Net.Index.FieldInfos;
-    using IIndexableField = Lucene.Net.Index.IIndexableField;
-    using IOContext = Lucene.Net.Store.IOContext;
-
-    /*
-         * 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 Lucene41StoredFieldsFormat = Lucene.Net.Codecs.Lucene41.Lucene41StoredFieldsFormat;
-    using SegmentInfo = Lucene.Net.Index.SegmentInfo;
-    using StoredFieldVisitor = Lucene.Net.Index.StoredFieldVisitor;
-
-    /// <summary>
-    /// Just like <seealso cref="Lucene41StoredFieldsFormat"/> but with additional asserts.
-    /// </summary>
-    public class AssertingStoredFieldsFormat : StoredFieldsFormat
-    {
-        private readonly StoredFieldsFormat @in = new Lucene41StoredFieldsFormat();
-
-        public override StoredFieldsReader FieldsReader(Directory directory, SegmentInfo si, FieldInfos fn, IOContext context)
-        {
-            return new AssertingStoredFieldsReader(@in.FieldsReader(directory, si, fn, context), si.DocCount);
-        }
-
-        public override StoredFieldsWriter FieldsWriter(Directory directory, SegmentInfo si, IOContext context)
-        {
-            return new AssertingStoredFieldsWriter(@in.FieldsWriter(directory, si, context));
-        }
-
-        internal class AssertingStoredFieldsReader : StoredFieldsReader
-        {
-            internal readonly StoredFieldsReader @in;
-            internal readonly int MaxDoc;
-
-            internal AssertingStoredFieldsReader(StoredFieldsReader @in, int maxDoc)
-            {
-                this.@in = @in;
-                this.MaxDoc = maxDoc;
-            }
-
-            protected override void Dispose(bool disposing)
-            {
-                if (disposing)
-                    @in.Dispose();
-            }
-
-            public override void VisitDocument(int n, StoredFieldVisitor visitor)
-            {
-                Debug.Assert(n >= 0 && n < MaxDoc);
-                @in.VisitDocument(n, visitor);
-            }
-
-            public override object Clone()
-            {
-                return new AssertingStoredFieldsReader((StoredFieldsReader)@in.Clone(), MaxDoc);
-            }
-
-            public override long RamBytesUsed()
-            {
-                return @in.RamBytesUsed();
-            }
-
-            public override void CheckIntegrity()
-            {
-                @in.CheckIntegrity();
-            }
-        }
-
-        internal enum Status
-        {
-            UNDEFINED,
-            STARTED,
-            FINISHED
-        }
-
-        internal class AssertingStoredFieldsWriter : StoredFieldsWriter
-        {
-            internal readonly StoredFieldsWriter @in;
-            internal int NumWritten;
-            internal int FieldCount;
-            internal Status DocStatus;
-
-            internal AssertingStoredFieldsWriter(StoredFieldsWriter @in)
-            {
-                this.@in = @in;
-                this.DocStatus = Status.UNDEFINED;
-            }
-
-            public override void StartDocument(int numStoredFields)
-            {
-                Debug.Assert(DocStatus != Status.STARTED);
-                @in.StartDocument(numStoredFields);
-                Debug.Assert(FieldCount == 0);
-                FieldCount = numStoredFields;
-                NumWritten++;
-                DocStatus = Status.STARTED;
-            }
-
-            public override void FinishDocument()
-            {
-                Debug.Assert(DocStatus == Status.STARTED);
-                Debug.Assert(FieldCount == 0);
-                @in.FinishDocument();
-                DocStatus = Status.FINISHED;
-            }
-
-            public override void WriteField(FieldInfo info, IIndexableField field)
-            {
-                Debug.Assert(DocStatus == Status.STARTED);
-                @in.WriteField(info, field);
-                Debug.Assert(FieldCount > 0);
-                FieldCount--;
-            }
-
-            public override void Abort()
-            {
-                @in.Abort();
-            }
-
-            public override void Finish(FieldInfos fis, int numDocs)
-            {
-                Debug.Assert(DocStatus == (numDocs > 0 ? Status.FINISHED : Status.UNDEFINED));
-                @in.Finish(fis, numDocs);
-                Debug.Assert(FieldCount == 0);
-                Debug.Assert(numDocs == NumWritten);
-            }
-
-            protected override void Dispose(bool disposing)
-            {
-                if (disposing)
-                    @in.Dispose();
-            }
-        }
-    }
-}
\ No newline at end of file