This is an automated email from the ASF dual-hosted git repository.

nightowl888 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/lucenenet.git

commit a9eb0c8a714b801ede91bb1a32f456245d6c4d57
Author: Shad Storhaug <[email protected]>
AuthorDate: Thu Aug 13 23:31:25 2020 +0700

    Converted all test projects to use 
Lucene.Net.Diagnostics.Debugging.Assert() instead of 
System.Diagnostics.Debug.Assert()
---
 .../GraphvizFormatter.cs                           |  6 +--
 .../JapaneseIterationMarkCharFilter.cs             |  4 +-
 .../JapaneseTokenizer.cs                           | 38 +++++++-------
 .../Tools/BinaryDictionaryWriter.cs                | 11 ++--
 .../Tools/ConnectionCostsBuilder.cs                |  3 +-
 .../Analysis/CharFilters/TestMappingCharFilter.cs  |  6 +--
 .../Analysis/Core/TestFactories.cs                 |  4 +-
 .../Analysis/Core/TestRandomChains.cs              |  6 +--
 .../Analysis/Hunspell/TestAllDictionaries.cs       | 16 +++---
 .../Analysis/Hunspell/TestAllDictionaries2.cs      | 16 +++---
 .../Analysis/Synonym/TestSynonymMapFilter.cs       |  6 +--
 src/Lucene.Net.Tests.Facet/FacetTestCase.cs        |  6 +--
 .../Range/TestRangeFacetCounts.cs                  | 58 +++++++++++-----------
 .../Taxonomy/TestTaxonomyFacetSumValueSource.cs    |  6 +--
 src/Lucene.Net.Tests.Facet/TestDrillSideways.cs    |  8 +--
 .../GroupFacetCollectorTest.cs                     |  6 +--
 .../PostingsHighlight/TestPostingsHighlighter.cs   |  7 +--
 src/Lucene.Net.Tests.Join/TestJoinUtil.cs          |  4 +-
 .../Classic/TestQueryParser.cs                     | 18 +++----
 .../Flexible/Standard/TestStandardQP.cs            | 12 ++---
 .../IndexAndTaxonomyReplicationClientTest.cs       |  4 +-
 .../IndexReplicationClientTest.cs                  |  4 +-
 src/Lucene.Net.Tests.Spatial/SpatialTestCase.cs    |  8 +--
 .../Suggest/Analyzing/AnalyzingSuggesterTest.cs    |  4 +-
 .../Suggest/Analyzing/FuzzySuggesterTest.cs        |  6 +--
 .../Suggest/Analyzing/TestFreeTextSuggester.cs     |  6 +--
 .../Suggest/LookupBenchmarkTest.cs                 |  6 +--
 .../Analysis/TestGraphTokenizers.cs                |  4 +-
 .../Codecs/Lucene41/TestBlockPostingsFormat3.cs    |  4 +-
 .../Codecs/PerField/TestPerFieldDocValuesFormat.cs |  4 +-
 .../Index/TestBackwardsCompatibility.cs            |  4 +-
 .../Index/TestBackwardsCompatibility3x.cs          |  4 +-
 src/Lucene.Net.Tests/Index/TestCodecs.cs           |  8 +--
 src/Lucene.Net.Tests/Index/TestIndexWriter.cs      |  7 ++-
 .../Index/TestIndexWriterMerging.cs                |  4 +-
 src/Lucene.Net.Tests/Index/TestIndexableField.cs   |  6 +--
 src/Lucene.Net.Tests/Index/TestLongPostings.cs     |  6 +--
 src/Lucene.Net.Tests/Index/TestNRTThreads.cs       |  4 +-
 src/Lucene.Net.Tests/Index/TestPayloads.cs         |  4 +-
 .../Index/TestPayloadsOnVectors.cs                 |  6 +--
 src/Lucene.Net.Tests/Index/TestPostingsOffsets.cs  | 10 ++--
 src/Lucene.Net.Tests/Index/TestStressIndexing2.cs  |  6 +--
 src/Lucene.Net.Tests/Index/TestStressNRT.cs        |  6 +--
 src/Lucene.Net.Tests/Index/TestTermsEnum.cs        |  6 +--
 .../Search/Spans/MultiSpansWrapper.cs              |  4 +-
 src/Lucene.Net.Tests/Search/TestBooleanScorer.cs   |  4 +-
 .../Search/TestConstantScoreQuery.cs               |  4 +-
 src/Lucene.Net.Tests/Search/TestFieldCache.cs      | 48 +++++++++---------
 src/Lucene.Net.Tests/Search/TestMinShouldMatch2.cs | 16 +++---
 .../Search/TestMultiThreadTermVectors.cs           |  4 +-
 .../Search/TestNumericRangeQuery32.cs              |  8 +--
 .../Search/TestNumericRangeQuery64.cs              |  6 +--
 .../Search/TestTimeLimitingCollector.cs            |  4 +-
 .../Util/Automaton/TestUTF32ToUTF8.cs              |  8 +--
 src/Lucene.Net.Tests/Util/Fst/TestFSTs.cs          |  4 +-
 .../Util/Packed/TestEliasFanoDocIdSet.cs           |  4 +-
 .../Util/Packed/TestEliasFanoSequence.cs           |  8 +--
 src/Lucene.Net.Tests/Util/Test2BPagedBytes.cs      |  4 +-
 src/Lucene.Net.Tests/Util/TestWAH8DocIdSet.cs      |  4 +-
 .../TestICUPostingsHighlighter.cs                  |  8 +--
 60 files changed, 251 insertions(+), 259 deletions(-)

diff --git a/src/Lucene.Net.Analysis.Kuromoji/GraphvizFormatter.cs 
b/src/Lucene.Net.Analysis.Kuromoji/GraphvizFormatter.cs
index a1e1fa9..aca253c 100644
--- a/src/Lucene.Net.Analysis.Kuromoji/GraphvizFormatter.cs
+++ b/src/Lucene.Net.Analysis.Kuromoji/GraphvizFormatter.cs
@@ -1,7 +1,7 @@
 using Lucene.Net.Analysis.Ja.Dict;
+using Lucene.Net.Diagnostics;
 using System;
 using System.Collections.Generic;
-using System.Diagnostics;
 using System.Text;
 
 namespace Lucene.Net.Analysis.Ja
@@ -89,8 +89,8 @@ namespace Lucene.Net.Analysis.Ja
                 string toNodeID = GetNodeID(pos, bestIDX);
                 string fromNodeID = GetNodeID(backPos, backIDX);
 
-                Debugging.Assert(!bestPathMap.ContainsKey(fromNodeID));
-                Debugging.Assert(!bestPathMap.Values.Contains(toNodeID));
+                Debugging.Assert(() => !bestPathMap.ContainsKey(fromNodeID));
+                Debugging.Assert(() => !bestPathMap.Values.Contains(toNodeID));
                 bestPathMap[fromNodeID] = toNodeID;
                 pos = backPos;
                 bestIDX = backIDX;
diff --git 
a/src/Lucene.Net.Analysis.Kuromoji/JapaneseIterationMarkCharFilter.cs 
b/src/Lucene.Net.Analysis.Kuromoji/JapaneseIterationMarkCharFilter.cs
index ad243f4..931d70e 100644
--- a/src/Lucene.Net.Analysis.Kuromoji/JapaneseIterationMarkCharFilter.cs
+++ b/src/Lucene.Net.Analysis.Kuromoji/JapaneseIterationMarkCharFilter.cs
@@ -1,5 +1,5 @@
 using Lucene.Net.Analysis.Util;
-using System.Diagnostics;
+using Lucene.Net.Diagnostics;
 using System.IO;
 
 namespace Lucene.Net.Analysis.Ja
@@ -133,7 +133,7 @@ namespace Lucene.Net.Analysis.Ja
 
             // Make katakana dakuten map from hiragana map
             char codePointDifference = (char)('\u30ab' - '\u304b'); // カ - か
-            Debugging.Assert(h2d.Length == k2d.Length);
+            Debugging.Assert(() => h2d.Length == k2d.Length);
             for (int i = 0; i < k2d.Length; i++)
             {
                 k2d[i] = (char)(h2d[i] + codePointDifference);
diff --git a/src/Lucene.Net.Analysis.Kuromoji/JapaneseTokenizer.cs 
b/src/Lucene.Net.Analysis.Kuromoji/JapaneseTokenizer.cs
index d9d2293..2d3c993 100644
--- a/src/Lucene.Net.Analysis.Kuromoji/JapaneseTokenizer.cs
+++ b/src/Lucene.Net.Analysis.Kuromoji/JapaneseTokenizer.cs
@@ -3,11 +3,11 @@ using Lucene.Net.Analysis.Ja.Dict;
 using Lucene.Net.Analysis.Ja.TokenAttributes;
 using Lucene.Net.Analysis.TokenAttributes;
 using Lucene.Net.Analysis.Util;
+using Lucene.Net.Diagnostics;
 using Lucene.Net.Support;
 using Lucene.Net.Util;
 using Lucene.Net.Util.Fst;
 using System.Collections.Generic;
-using System.Diagnostics;
 using System.Globalization;
 using System.IO;
 using System.Threading;
@@ -314,7 +314,7 @@ namespace Lucene.Net.Analysis.Ja
             int leftID = dict.GetLeftId(wordID);
             int leastCost = int.MaxValue;
             int leastIDX = -1;
-            Debugging.Assert(fromPosData.count > 0);
+            Debugging.Assert(() => fromPosData.count > 0);
             for (int idx = 0; idx < fromPosData.count; idx++)
             {
                 // Cost is path cost so far, plus word cost (added at
@@ -356,7 +356,7 @@ namespace Lucene.Net.Analysis.Ja
             }
 
             //positions.get(endPos).add(leastCost, dict.getRightId(wordID), 
fromPosData.pos, leastIDX, wordID, type);
-            Debugging.Assert(leftID == dict.GetRightId(wordID));
+            Debugging.Assert(() => leftID == dict.GetRightId(wordID));
             positions.Get(endPos).Add(leastCost, leftID, fromPosData.pos, 
leastIDX, wordID, type);
         }
 
@@ -387,7 +387,7 @@ namespace Lucene.Net.Analysis.Ja
             int position = token.Position;
             int length = token.Length;
             ClearAttributes();
-            Debugging.Assert(length > 0);
+            Debugging.Assert(() => length > 0);
             //System.out.println("off=" + token.getOffset() + " len=" + length 
+ " vs " + token.getSurfaceForm().length);
             termAtt.CopyBuffer(token.SurfaceForm, token.Offset, length);
             offsetAtt.SetOffset(CorrectOffset(position), 
CorrectOffset(position + length));
@@ -402,7 +402,7 @@ namespace Lucene.Net.Analysis.Ja
             }
             else
             {
-                Debugging.Assert(token.Position > lastTokenPos);
+                Debugging.Assert(() => token.Position > lastTokenPos);
                 posIncAtt.PositionIncrement = 1;
                 posLengthAtt.PositionLength = 1;
             }
@@ -511,7 +511,7 @@ namespace Lucene.Net.Analysis.Ja
                     }
 
                     // We will always have at least one live path:
-                    Debugging.Assert(leastIDX != -1);
+                    Debugging.Assert(() => leastIDX != -1);
 
                     // Second pass: prune all but the best path:
                     for (int pos2 = pos; pos2 < positions.GetNextPos(); pos2++)
@@ -544,7 +544,7 @@ namespace Lucene.Net.Analysis.Ja
                     if (pos != leastPosData.pos)
                     {
                         // We jumped into a future position:
-                        Debugging.Assert(pos < leastPosData.pos);
+                        Debugging.Assert(() => pos < leastPosData.pos);
                         pos = leastPosData.pos;
                     }
 
@@ -913,10 +913,10 @@ namespace Lucene.Net.Analysis.Ja
             {
                 //System.out.println("BT: back pos=" + pos + " bestIDX=" + 
bestIDX);
                 Position posData = positions.Get(pos);
-                Debugging.Assert(bestIDX < posData.count);
+                Debugging.Assert(() => bestIDX < posData.count);
 
                 int backPos = posData.backPos[bestIDX];
-                Debugging.Assert(backPos >= lastBackTracePos, "backPos=" + 
backPos + " vs lastBackTracePos=" + lastBackTracePos);
+                Debugging.Assert(() => backPos >= lastBackTracePos, () => 
"backPos=" + backPos + " vs lastBackTracePos=" + lastBackTracePos);
                 int length = pos - backPos;
                 JapaneseTokenizerType backType = posData.backType[bestIDX];
                 int backID = posData.backID[bestIDX];
@@ -989,7 +989,7 @@ namespace Lucene.Net.Analysis.Ja
                         if (leastIDX != -1 && leastCost <= maxCost && 
posData.backPos[leastIDX] != backPos)
                         {
                             // We should have pruned the altToken from the 
graph:
-                            Debugging.Assert(posData.backPos[leastIDX] != 
backPos);
+                            Debugging.Assert(() => posData.backPos[leastIDX] 
!= backPos);
 
                             // Save the current compound token, to output when
                             // this alternate path joins back:
@@ -1024,7 +1024,7 @@ namespace Lucene.Net.Analysis.Ja
                 }
 
                 int offset = backPos - lastBackTracePos;
-                Debugging.Assert(offset >= 0);
+                Debugging.Assert(() => offset >= 0);
 
                 if (altToken != null && altToken.Position >= backPos)
                 {
@@ -1035,7 +1035,7 @@ namespace Lucene.Net.Analysis.Ja
                     // The pruning we did when we created the altToken
                     // ensures that the back trace will align back with
                     // the start of the altToken:
-                    Debugging.Assert(altToken.Position == backPos, 
altToken.Position + " vs " + backPos);
+                    Debugging.Assert(() => altToken.Position == backPos, () => 
altToken.Position + " vs " + backPos);
 
                     // NOTE: not quite right: the compound token may
                     // have had all punctuation back traced so far, but
@@ -1060,7 +1060,7 @@ namespace Lucene.Net.Analysis.Ja
                         {
                             Console.WriteLine("    discard all-punctuation 
altToken=" + altToken);
                         }
-                        Debugging.Assert(discardPunctuation);
+                        Debugging.Assert(() => discardPunctuation);
                     }
                     altToken = null;
                 }
@@ -1355,7 +1355,7 @@ namespace Lucene.Net.Analysis.Ja
         {
             count = 0;
             // forwardCount naturally resets after it runs:
-            Debugging.Assert(forwardCount == 0, "pos=" + pos + " 
forwardCount=" + forwardCount);
+            Debugging.Assert(() => forwardCount == 0, () => "pos=" + pos + " 
forwardCount=" + forwardCount);
         }
     }
 
@@ -1432,13 +1432,13 @@ namespace Lucene.Net.Analysis.Ja
                     nextWrite = 0;
                 }
                 // Should have already been reset:
-                Debugging.Assert(positions[nextWrite].count == 0);
+                Debugging.Assert(() => positions[nextWrite].count == 0);
                 positions[nextWrite++].pos = nextPos++;
                 count++;
             }
-            Debugging.Assert(InBounds(pos));
+            Debugging.Assert(() => InBounds(pos));
             int index = GetIndex(pos);
-            Debugging.Assert(positions[index].pos == pos);
+            Debugging.Assert(() => positions[index].pos == pos);
             return positions[index];
         }
 
@@ -1466,8 +1466,8 @@ namespace Lucene.Net.Analysis.Ja
         public void FreeBefore(int pos)
         {
             int toFree = count - (nextPos - pos);
-            Debugging.Assert(toFree >= 0);
-            Debugging.Assert(toFree <= count);
+            Debugging.Assert(() => toFree >= 0);
+            Debugging.Assert(() => toFree <= count);
             int index = nextWrite - count;
             if (index < 0)
             {
diff --git a/src/Lucene.Net.Analysis.Kuromoji/Tools/BinaryDictionaryWriter.cs 
b/src/Lucene.Net.Analysis.Kuromoji/Tools/BinaryDictionaryWriter.cs
index cfbfb3d..ecb270d 100644
--- a/src/Lucene.Net.Analysis.Kuromoji/Tools/BinaryDictionaryWriter.cs
+++ b/src/Lucene.Net.Analysis.Kuromoji/Tools/BinaryDictionaryWriter.cs
@@ -6,7 +6,6 @@ using Lucene.Net.Store;
 using Lucene.Net.Util;
 using System;
 using System.Collections.Generic;
-using System.Diagnostics;
 using System.Globalization;
 using System.IO;
 using System.Text;
@@ -62,7 +61,7 @@ namespace Lucene.Net.Analysis.Ja.Util
             for (int i = 4; i < 8; i++)
             {
                 string part = entry[i];
-                Debugging.Assert(part.Length > 0);
+                Debugging.Assert(() => part.Length > 0);
                 if (!"*".Equals(part, StringComparison.Ordinal))
                 {
                     if (sb.Length > 0)
@@ -119,8 +118,8 @@ namespace Lucene.Net.Analysis.Ja.Util
                 flags |= BinaryDictionary.HAS_PRONUNCIATION;
             }
 
-            Debugging.Assert(leftId == rightId);
-            Debugging.Assert(leftId < 4096); // there are still unused bits
+            Debugging.Assert(() => leftId == rightId);
+            Debugging.Assert(() => leftId < 4096); // there are still unused 
bits
                                          // add pos mapping
             int toFill = 1 + leftId - posDict.Count;
             for (int i = 0; i < toFill; i++)
@@ -129,7 +128,7 @@ namespace Lucene.Net.Analysis.Ja.Util
             }
 
             string existing = posDict[leftId];
-            Debugging.Assert(existing == null || existing.Equals(fullPOSData, 
StringComparison.Ordinal));
+            Debugging.Assert(() => existing == null || 
existing.Equals(fullPOSData, StringComparison.Ordinal));
             posDict[leftId] = fullPOSData;
 
             m_buffer.PutInt16((short)(leftId << 3 | flags));
@@ -137,7 +136,7 @@ namespace Lucene.Net.Analysis.Ja.Util
 
             if ((flags & BinaryDictionary.HAS_BASEFORM) != 0)
             {
-                Debugging.Assert(baseForm.Length < 16);
+                Debugging.Assert(() => baseForm.Length < 16);
                 int shared = SharedPrefix(entry[0], baseForm);
                 int suffix = baseForm.Length - shared;
                 m_buffer.Put((byte)(shared << 4 | suffix));
diff --git a/src/Lucene.Net.Analysis.Kuromoji/Tools/ConnectionCostsBuilder.cs 
b/src/Lucene.Net.Analysis.Kuromoji/Tools/ConnectionCostsBuilder.cs
index d7acc77..a653cdc 100644
--- a/src/Lucene.Net.Analysis.Kuromoji/Tools/ConnectionCostsBuilder.cs
+++ b/src/Lucene.Net.Analysis.Kuromoji/Tools/ConnectionCostsBuilder.cs
@@ -1,6 +1,5 @@
 using J2N.Text;
 using Lucene.Net.Diagnostics;
-using System.Diagnostics;
 using System.Globalization;
 using System.IO;
 using System.Text;
@@ -55,7 +54,7 @@ namespace Lucene.Net.Analysis.Ja.Util
                 {
                     string[] fields = whiteSpaceRegex.Split(line).TrimEnd();
 
-                    Debugging.Assert(fields.Length == 3);
+                    Debugging.Assert(() => fields.Length == 3);
 
                     int forwardId = int.Parse(fields[0], 
CultureInfo.InvariantCulture);
                     int backwardId = int.Parse(fields[1], 
CultureInfo.InvariantCulture);
diff --git 
a/src/Lucene.Net.Tests.Analysis.Common/Analysis/CharFilters/TestMappingCharFilter.cs
 
b/src/Lucene.Net.Tests.Analysis.Common/Analysis/CharFilters/TestMappingCharFilter.cs
index b694a36..f398ac1 100644
--- 
a/src/Lucene.Net.Tests.Analysis.Common/Analysis/CharFilters/TestMappingCharFilter.cs
+++ 
b/src/Lucene.Net.Tests.Analysis.Common/Analysis/CharFilters/TestMappingCharFilter.cs
@@ -1,8 +1,8 @@
-using Lucene.Net.Util;
+using Lucene.Net.Diagnostics;
+using Lucene.Net.Util;
 using NUnit.Framework;
 using System;
 using System.Collections.Generic;
-using System.Diagnostics;
 using System.IO;
 using System.Text;
 using Console = Lucene.Net.Util.SystemConsole;
@@ -422,7 +422,7 @@ namespace Lucene.Net.Analysis.CharFilters
                                 // Same length: no change to offset
                             }
 
-                            Debug.Assert(inputOffsets.Count == output.Length, 
"inputOffsets.size()=" + inputOffsets.Count + " vs output.length()=" + 
output.Length);
+                            Debugging.Assert(() => inputOffsets.Count == 
output.Length, () => "inputOffsets.size()=" + inputOffsets.Count + " vs 
output.length()=" + output.Length);
                         }
                         else
                         {
diff --git 
a/src/Lucene.Net.Tests.Analysis.Common/Analysis/Core/TestFactories.cs 
b/src/Lucene.Net.Tests.Analysis.Common/Analysis/Core/TestFactories.cs
index fc004ee..e48cafa 100644
--- a/src/Lucene.Net.Tests.Analysis.Common/Analysis/Core/TestFactories.cs
+++ b/src/Lucene.Net.Tests.Analysis.Common/Analysis/Core/TestFactories.cs
@@ -1,9 +1,9 @@
 using Lucene.Net.Analysis.Util;
+using Lucene.Net.Diagnostics;
 using Lucene.Net.Util;
 using NUnit.Framework;
 using System;
 using System.Collections.Generic;
-using System.Diagnostics;
 using System.IO;
 using System.Reflection;
 
@@ -211,7 +211,7 @@ namespace Lucene.Net.Analysis.Core
 
             internal FactoryAnalyzer(TokenizerFactory tokenizer, 
TokenFilterFactory tokenfilter, CharFilterFactory charFilter)
             {
-                Debug.Assert(tokenizer != null);
+                Debugging.Assert(() => tokenizer != null);
                 this.tokenizer = tokenizer;
                 this.charFilter = charFilter;
                 this.tokenfilter = tokenfilter;
diff --git 
a/src/Lucene.Net.Tests.Analysis.Common/Analysis/Core/TestRandomChains.cs 
b/src/Lucene.Net.Tests.Analysis.Common/Analysis/Core/TestRandomChains.cs
index b71771b..4f66f90 100644
--- a/src/Lucene.Net.Tests.Analysis.Common/Analysis/Core/TestRandomChains.cs
+++ b/src/Lucene.Net.Tests.Analysis.Common/Analysis/Core/TestRandomChains.cs
@@ -17,6 +17,7 @@ using Lucene.Net.Analysis.Standard;
 using Lucene.Net.Analysis.Synonym;
 using Lucene.Net.Analysis.Util;
 using Lucene.Net.Analysis.Wikipedia;
+using Lucene.Net.Diagnostics;
 using Lucene.Net.Support;
 using Lucene.Net.Tartarus.Snowball;
 using Lucene.Net.TestFramework.Analysis;
@@ -25,7 +26,6 @@ using Lucene.Net.Util.Automaton;
 using NUnit.Framework;
 using System;
 using System.Collections.Generic;
-using System.Diagnostics;
 using System.Globalization;
 using System.IO;
 using System.Linq;
@@ -172,7 +172,7 @@ namespace Lucene.Net.Analysis.Core
 
             public virtual bool Apply(object[] args)
             {
-                Debug.Assert(args.Length == 3);
+                Debugging.Assert(() => args.Length == 3);
                 return !((bool)args[2]); // args are broken if 
consumeAllTokens is false
             }
         }
@@ -185,7 +185,7 @@ namespace Lucene.Net.Analysis.Core
 
             public virtual bool Apply(object[] args)
             {
-                Debug.Assert(args.Length == 3);
+                Debugging.Assert(() => args.Length == 3);
                 return !((bool)args[2]); // args are broken if 
consumeAllTokens is false
             }
         }
diff --git 
a/src/Lucene.Net.Tests.Analysis.Common/Analysis/Hunspell/TestAllDictionaries.cs 
b/src/Lucene.Net.Tests.Analysis.Common/Analysis/Hunspell/TestAllDictionaries.cs
index 657ef71..b8158af 100644
--- 
a/src/Lucene.Net.Tests.Analysis.Common/Analysis/Hunspell/TestAllDictionaries.cs
+++ 
b/src/Lucene.Net.Tests.Analysis.Common/Analysis/Hunspell/TestAllDictionaries.cs
@@ -1,7 +1,7 @@
-using Lucene.Net.Util;
+using Lucene.Net.Diagnostics;
+using Lucene.Net.Util;
 using NUnit.Framework;
 using System;
-using System.Diagnostics;
 using System.IO;
 using System.IO.Compression;
 using System.Text;
@@ -168,16 +168,16 @@ namespace Lucene.Net.Analysis.Hunspell
             for (int i = 0; i < tests.Length; i += 3)
             {
                 FileInfo f = new 
FileInfo(System.IO.Path.Combine(DICTIONARY_HOME.FullName, tests[i]));
-                Debug.Assert(f.Exists);
+                Debugging.Assert(() => f.Exists);
 
                 using (Stream fileStream = f.OpenRead())
                 {
                     using (ZipArchive zip = new ZipArchive(fileStream, 
ZipArchiveMode.Read, false, Encoding.UTF8))
                     {
                         ZipArchiveEntry dicEntry = zip.GetEntry(tests[i + 1]);
-                        Debug.Assert(dicEntry != null);
+                        Debugging.Assert(() => dicEntry != null);
                         ZipArchiveEntry affEntry = zip.GetEntry(tests[i + 2]);
-                        Debug.Assert(affEntry != null);
+                        Debugging.Assert(() => affEntry != null);
 
                         using (Stream dictionary = dicEntry.Open())
                         {
@@ -208,16 +208,16 @@ namespace Lucene.Net.Analysis.Hunspell
                 if (tests[i].Equals(toTest, StringComparison.Ordinal))
                 {
                     FileInfo f = new 
FileInfo(System.IO.Path.Combine(DICTIONARY_HOME.FullName, tests[i]));
-                    Debug.Assert(f.Exists);
+                    Debugging.Assert(() => f.Exists);
 
                     using (Stream fileStream = f.OpenRead())
                     {
                         using (ZipArchive zip = new ZipArchive(fileStream, 
ZipArchiveMode.Read, false, Encoding.UTF8))
                         {
                             ZipArchiveEntry dicEntry = zip.GetEntry(tests[i + 
1]);
-                            Debug.Assert(dicEntry != null);
+                            Debugging.Assert(() => dicEntry != null);
                             ZipArchiveEntry affEntry = zip.GetEntry(tests[i + 
2]);
-                            Debug.Assert(affEntry != null);
+                            Debugging.Assert(() => affEntry != null);
 
                             using (Stream dictionary = dicEntry.Open())
                             {
diff --git 
a/src/Lucene.Net.Tests.Analysis.Common/Analysis/Hunspell/TestAllDictionaries2.cs
 
b/src/Lucene.Net.Tests.Analysis.Common/Analysis/Hunspell/TestAllDictionaries2.cs
index 2a60fc5..e6c2d97 100644
--- 
a/src/Lucene.Net.Tests.Analysis.Common/Analysis/Hunspell/TestAllDictionaries2.cs
+++ 
b/src/Lucene.Net.Tests.Analysis.Common/Analysis/Hunspell/TestAllDictionaries2.cs
@@ -1,7 +1,7 @@
-using Lucene.Net.Util;
+using Lucene.Net.Diagnostics;
+using Lucene.Net.Util;
 using NUnit.Framework;
 using System;
-using System.Diagnostics;
 using System.IO;
 using System.IO.Compression;
 using System.Text;
@@ -184,16 +184,16 @@ namespace Lucene.Net.Analysis.Hunspell
             for (int i = 0; i < tests.Length; i += 3)
             {
                 FileInfo f = new 
FileInfo(System.IO.Path.Combine(DICTIONARY_HOME.FullName, tests[i]));
-                Debug.Assert(f.Exists);
+                Debugging.Assert(() => f.Exists);
 
                 using (Stream fileStream = f.OpenRead())
                 {
                     using (ZipArchive zip = new ZipArchive(fileStream, 
ZipArchiveMode.Read, false, Encoding.UTF8))
                     {
                         ZipArchiveEntry dicEntry = zip.GetEntry(tests[i + 1]);
-                        Debug.Assert(dicEntry != null);
+                        Debugging.Assert(() => dicEntry != null);
                         ZipArchiveEntry affEntry = zip.GetEntry(tests[i + 2]);
-                        Debug.Assert(affEntry != null);
+                        Debugging.Assert(() => affEntry != null);
 
                         using (Stream dictionary = dicEntry.Open())
                         {
@@ -226,16 +226,16 @@ namespace Lucene.Net.Analysis.Hunspell
                 if (tests[i].Equals(toTest, StringComparison.Ordinal))
                 {
                     FileInfo f = new 
FileInfo(System.IO.Path.Combine(DICTIONARY_HOME.FullName, tests[i]));
-                    Debug.Assert(f.Exists);
+                    Debugging.Assert(() => f.Exists);
 
                     using (Stream fileStream = f.OpenRead())
                     {
                         using (ZipArchive zip = new ZipArchive(fileStream, 
ZipArchiveMode.Read, false, Encoding.UTF8))
                         {
                             ZipArchiveEntry dicEntry = zip.GetEntry(tests[i + 
1]);
-                            Debug.Assert(dicEntry != null);
+                            Debugging.Assert(() => dicEntry != null);
                             ZipArchiveEntry affEntry = zip.GetEntry(tests[i + 
2]);
-                            Debug.Assert(affEntry != null);
+                            Debugging.Assert(() => affEntry != null);
 
                             using (Stream dictionary = dicEntry.Open())
                             {
diff --git 
a/src/Lucene.Net.Tests.Analysis.Common/Analysis/Synonym/TestSynonymMapFilter.cs 
b/src/Lucene.Net.Tests.Analysis.Common/Analysis/Synonym/TestSynonymMapFilter.cs
index 432fd22..4ec4e7d 100644
--- 
a/src/Lucene.Net.Tests.Analysis.Common/Analysis/Synonym/TestSynonymMapFilter.cs
+++ 
b/src/Lucene.Net.Tests.Analysis.Common/Analysis/Synonym/TestSynonymMapFilter.cs
@@ -1,18 +1,18 @@
 using J2N.Text;
 using Lucene.Net.Analysis.Core;
 using Lucene.Net.Analysis.TokenAttributes;
+using Lucene.Net.Diagnostics;
 using Lucene.Net.Support;
 using Lucene.Net.Util;
 using NUnit.Framework;
 using System;
 using System.Collections.Generic;
-using System.Diagnostics;
 using System.Globalization;
 using System.IO;
 using System.Text;
 using System.Text.RegularExpressions;
-using JCG = J2N.Collections.Generic;
 using Console = Lucene.Net.Util.SystemConsole;
+using JCG = J2N.Collections.Generic;
 
 namespace Lucene.Net.Analysis.Synonym
 {
@@ -268,7 +268,7 @@ namespace Lucene.Net.Analysis.Synonym
 
         private string GetRandomString(char start, int alphabetSize, int 
length)
         {
-            Debug.Assert(alphabetSize <= 26);
+            Debugging.Assert(() => alphabetSize <= 26);
             char[] s = new char[2 * length];
             for (int charIDX = 0; charIDX < length; charIDX++)
             {
diff --git a/src/Lucene.Net.Tests.Facet/FacetTestCase.cs 
b/src/Lucene.Net.Tests.Facet/FacetTestCase.cs
index fd04d81..7c7a4ef 100644
--- a/src/Lucene.Net.Tests.Facet/FacetTestCase.cs
+++ b/src/Lucene.Net.Tests.Facet/FacetTestCase.cs
@@ -1,8 +1,8 @@
-using Lucene.Net.Support;
+using Lucene.Net.Diagnostics;
+using Lucene.Net.Support;
 using NUnit.Framework;
 using System;
 using System.Collections.Generic;
-using System.Diagnostics;
 using Assert = Lucene.Net.TestFramework.Assert;
 using Console = Lucene.Net.Util.SystemConsole;
 
@@ -154,7 +154,7 @@ namespace Lucene.Net.Facet
                     if (numInRow > 1)
                     {
                         Array.Sort(labelValues, i - numInRow, i - (i - 
numInRow), Comparer<LabelAndValue>.Create((a,b)=> {
-                            Debug.Assert((double)a.Value == (double)b.Value);
+                            Debugging.Assert(() => (double)a.Value == 
(double)b.Value);
                             return (new BytesRef(a.Label)).CompareTo(new 
BytesRef(b.Label));
                         }));
                     }
diff --git a/src/Lucene.Net.Tests.Facet/Range/TestRangeFacetCounts.cs 
b/src/Lucene.Net.Tests.Facet/Range/TestRangeFacetCounts.cs
index 32b9588..a28559c 100644
--- a/src/Lucene.Net.Tests.Facet/Range/TestRangeFacetCounts.cs
+++ b/src/Lucene.Net.Tests.Facet/Range/TestRangeFacetCounts.cs
@@ -1,9 +1,10 @@
 using J2N.Threading.Atomic;
+using Lucene.Net.Diagnostics;
+using Lucene.Net.Search;
+using NUnit.Framework;
 using System;
-using System.Diagnostics;
 using System.Collections;
 using System.Collections.Generic;
-using NUnit.Framework;
 using Assert = Lucene.Net.TestFramework.Assert;
 using Console = Lucene.Net.Util.SystemConsole;
 
@@ -27,43 +28,40 @@ namespace Lucene.Net.Facet.Range
      * limitations under the License.
      */
 
-
-    using Document = Lucene.Net.Documents.Document;
-    using DoubleDocValuesField = Lucene.Net.Documents.DoubleDocValuesField;
-    using DoubleField = Lucene.Net.Documents.DoubleField;
-    using Field = Lucene.Net.Documents.Field;
-    using SingleDocValuesField = Lucene.Net.Documents.SingleDocValuesField;
-    using SingleField = Lucene.Net.Documents.SingleField;
-    using Int64Field = Lucene.Net.Documents.Int64Field;
-    using NumericDocValuesField = Lucene.Net.Documents.NumericDocValuesField;
-    using DrillSidewaysResult = Lucene.Net.Facet.DrillSidewaysResult;
-    using TaxonomyReader = Lucene.Net.Facet.Taxonomy.TaxonomyReader;
-    using DirectoryTaxonomyReader = 
Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyReader;
-    using DirectoryTaxonomyWriter = 
Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter;
     using AtomicReader = Lucene.Net.Index.AtomicReader;
     using AtomicReaderContext = Lucene.Net.Index.AtomicReaderContext;
-    using IndexReader = Lucene.Net.Index.IndexReader;
-    using IndexWriterConfig = Lucene.Net.Index.IndexWriterConfig;
-    using OpenMode = Lucene.Net.Index.OpenMode;
-    using RandomIndexWriter = Lucene.Net.Index.RandomIndexWriter;
-    using FunctionValues = Lucene.Net.Queries.Function.FunctionValues;
-    using ValueSource = Lucene.Net.Queries.Function.ValueSource;
-    using DoubleDocValues = 
Lucene.Net.Queries.Function.DocValues.DoubleDocValues;
-    using DoubleFieldSource = 
Lucene.Net.Queries.Function.ValueSources.DoubleFieldSource;
-    using SingleFieldSource = 
Lucene.Net.Queries.Function.ValueSources.SingleFieldSource;
-    using Int64FieldSource = 
Lucene.Net.Queries.Function.ValueSources.Int64FieldSource;
     using CachingWrapperFilter = Lucene.Net.Search.CachingWrapperFilter;
+    using Directory = Lucene.Net.Store.Directory;
+    using DirectoryTaxonomyReader = 
Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyReader;
+    using DirectoryTaxonomyWriter = 
Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter;
     using DocIdSet = Lucene.Net.Search.DocIdSet;
     using DocIdSetIterator = Lucene.Net.Search.DocIdSetIterator;
+    using Document = Lucene.Net.Documents.Document;
+    using DoubleDocValues = 
Lucene.Net.Queries.Function.DocValues.DoubleDocValues;
+    using DoubleDocValuesField = Lucene.Net.Documents.DoubleDocValuesField;
+    using DoubleField = Lucene.Net.Documents.DoubleField;
+    using DoubleFieldSource = 
Lucene.Net.Queries.Function.ValueSources.DoubleFieldSource;
+    using DrillSidewaysResult = Lucene.Net.Facet.DrillSidewaysResult;
+    using Field = Lucene.Net.Documents.Field;
     using Filter = Lucene.Net.Search.Filter;
+    using FixedBitSet = Lucene.Net.Util.FixedBitSet;
+    using FunctionValues = Lucene.Net.Queries.Function.FunctionValues;
+    using IndexReader = Lucene.Net.Index.IndexReader;
     using IndexSearcher = Lucene.Net.Search.IndexSearcher;
+    using Int64Field = Lucene.Net.Documents.Int64Field;
+    using Int64FieldSource = 
Lucene.Net.Queries.Function.ValueSources.Int64FieldSource;
+    using IOUtils = Lucene.Net.Util.IOUtils;
     using MatchAllDocsQuery = Lucene.Net.Search.MatchAllDocsQuery;
-    using Lucene.Net.Search;
+    using NumericDocValuesField = Lucene.Net.Documents.NumericDocValuesField;
+    using OpenMode = Lucene.Net.Index.OpenMode;
     using QueryWrapperFilter = Lucene.Net.Search.QueryWrapperFilter;
-    using Directory = Lucene.Net.Store.Directory;
-    using FixedBitSet = Lucene.Net.Util.FixedBitSet;
-    using IOUtils = Lucene.Net.Util.IOUtils;
+    using RandomIndexWriter = Lucene.Net.Index.RandomIndexWriter;
+    using SingleDocValuesField = Lucene.Net.Documents.SingleDocValuesField;
+    using SingleField = Lucene.Net.Documents.SingleField;
+    using SingleFieldSource = 
Lucene.Net.Queries.Function.ValueSources.SingleFieldSource;
+    using TaxonomyReader = Lucene.Net.Facet.Taxonomy.TaxonomyReader;
     using TestUtil = Lucene.Net.Util.TestUtil;
+    using ValueSource = Lucene.Net.Queries.Function.ValueSource;
 
     [TestFixture]
     public class TestRangeFacetCounts : FacetTestCase
@@ -1199,7 +1197,7 @@ namespace Lucene.Net.Facet.Range
 
             protected override Facets BuildFacetsResult(FacetsCollector 
drillDowns, FacetsCollector[] drillSideways, string[] drillSidewaysDims)
             {
-                Debug.Assert(drillSideways.Length == 1);
+                Debugging.Assert(() => drillSideways.Length == 1);
                 return new DoubleRangeFacetCounts("field", vs, 
drillSideways[0], fastMatchFilter, ranges);
             }
 
diff --git 
a/src/Lucene.Net.Tests.Facet/Taxonomy/TestTaxonomyFacetSumValueSource.cs 
b/src/Lucene.Net.Tests.Facet/Taxonomy/TestTaxonomyFacetSumValueSource.cs
index 254c9a5..6e8be41 100644
--- a/src/Lucene.Net.Tests.Facet/Taxonomy/TestTaxonomyFacetSumValueSource.cs
+++ b/src/Lucene.Net.Tests.Facet/Taxonomy/TestTaxonomyFacetSumValueSource.cs
@@ -1,8 +1,8 @@
-using NUnit.Framework;
+using Lucene.Net.Diagnostics;
+using NUnit.Framework;
 using System;
 using System.Collections;
 using System.Collections.Generic;
-using System.Diagnostics;
 using System.Globalization;
 using System.IO;
 using Assert = Lucene.Net.TestFramework.Assert;
@@ -385,7 +385,7 @@ namespace Lucene.Net.Facet.Taxonomy
             public override FunctionValues GetValues(IDictionary context, 
AtomicReaderContext readerContext)
             {
                 Scorer scorer = (Scorer)context["scorer"];
-                Debug.Assert(scorer != null);
+                Debugging.Assert(() => scorer != null);
                 return new DoubleDocValuesAnonymousInnerClassHelper(this, 
scorer);
             }
 
diff --git a/src/Lucene.Net.Tests.Facet/TestDrillSideways.cs 
b/src/Lucene.Net.Tests.Facet/TestDrillSideways.cs
index 31630d4..115a120 100644
--- a/src/Lucene.Net.Tests.Facet/TestDrillSideways.cs
+++ b/src/Lucene.Net.Tests.Facet/TestDrillSideways.cs
@@ -1,11 +1,11 @@
 using J2N.Collections.Generic.Extensions;
 using J2N.Text;
+using Lucene.Net.Diagnostics;
 using Lucene.Net.Search;
 using Lucene.Net.Support;
 using NUnit.Framework;
 using System;
 using System.Collections.Generic;
-using System.Diagnostics;
 using System.Linq;
 using Assert = Lucene.Net.TestFramework.Assert;
 using Console = Lucene.Net.Util.SystemConsole;
@@ -866,7 +866,7 @@ namespace Lucene.Net.Facet
 
             public virtual void Collect(int doc)
             {
-                Debug.Assert(doc > lastDocID);
+                Debugging.Assert(() => doc > lastDocID);
                 lastDocID = doc;
             }
 
@@ -948,8 +948,8 @@ namespace Lucene.Net.Facet
 
             public virtual void Inc(int[] dims, int[] dims2, int onlyDim)
             {
-                Debug.Assert(dims.Length == counts.Length);
-                Debug.Assert(dims2.Length == counts.Length);
+                Debugging.Assert(() => dims.Length == counts.Length);
+                Debugging.Assert(() => dims2.Length == counts.Length);
                 for (int dim = 0; dim < dims.Length; dim++)
                 {
                     if (onlyDim == -1 || dim == onlyDim)
diff --git a/src/Lucene.Net.Tests.Grouping/GroupFacetCollectorTest.cs 
b/src/Lucene.Net.Tests.Grouping/GroupFacetCollectorTest.cs
index ba3bbba..faa1519 100644
--- a/src/Lucene.Net.Tests.Grouping/GroupFacetCollectorTest.cs
+++ b/src/Lucene.Net.Tests.Grouping/GroupFacetCollectorTest.cs
@@ -1,6 +1,7 @@
 using J2N;
 using J2N.Text;
 using Lucene.Net.Analysis;
+using Lucene.Net.Diagnostics;
 using Lucene.Net.Documents;
 using Lucene.Net.Index;
 using Lucene.Net.Index.Extensions;
@@ -10,7 +11,6 @@ using Lucene.Net.Util;
 using NUnit.Framework;
 using System;
 using System.Collections.Generic;
-using System.Diagnostics;
 using System.Globalization;
 using Collections = Lucene.Net.Support.Collections;
 using Console = Lucene.Net.Util.SystemConsole;
@@ -559,7 +559,7 @@ namespace Lucene.Net.Search.Grouping
             Field[] facetFields;
             if (useDv)
             {
-                Debug.Assert(!multipleFacetValuesPerDocument);
+                Debugging.Assert(() => !multipleFacetValuesPerDocument);
                 facetFields = new Field[2];
                 facetFields[0] = NewStringField("facet", "", Field.Store.NO);
                 doc.Add(facetFields[0]);
@@ -816,7 +816,7 @@ namespace Lucene.Net.Search.Grouping
         {
             BytesRef facetPrefixBR = facetPrefix == null ? null : new 
BytesRef(facetPrefix);
             // DocValues cannot be multi-valued:
-            Debug.Assert(!multipleFacetsPerDocument || 
!groupField.EndsWith("_dv", StringComparison.Ordinal));
+            Debugging.Assert(() => !multipleFacetsPerDocument || 
!groupField.EndsWith("_dv", StringComparison.Ordinal));
             return 
TermGroupFacetCollector.CreateTermGroupFacetCollector(groupField, facetField, 
multipleFacetsPerDocument, facetPrefixBR, Random.nextInt(1024));
         }
 
diff --git 
a/src/Lucene.Net.Tests.Highlighter/PostingsHighlight/TestPostingsHighlighter.cs 
b/src/Lucene.Net.Tests.Highlighter/PostingsHighlight/TestPostingsHighlighter.cs
index 08ebb86..859bff4 100644
--- 
a/src/Lucene.Net.Tests.Highlighter/PostingsHighlight/TestPostingsHighlighter.cs
+++ 
b/src/Lucene.Net.Tests.Highlighter/PostingsHighlight/TestPostingsHighlighter.cs
@@ -1,6 +1,7 @@
 #if FEATURE_BREAKITERATOR
 using ICU4N.Text;
 using Lucene.Net.Analysis;
+using Lucene.Net.Diagnostics;
 using Lucene.Net.Documents;
 using Lucene.Net.Index;
 using Lucene.Net.Index.Extensions;
@@ -774,8 +775,8 @@ namespace Lucene.Net.Search.PostingsHighlight
 
             protected override IList<string[]> LoadFieldValues(IndexSearcher 
searcher, string[] fields, int[] docids, int maxLength)
             {
-                Debug.Assert(fields.Length == 1);
-                Debug.Assert(docids.Length == 1);
+                Debugging.Assert(() => fields.Length == 1);
+                Debugging.Assert(() => docids.Length == 1);
                 String[][] contents = 
RectangularArrays.ReturnRectangularArray<string>(1, 1); //= new String[1][1];
                 contents[0][0] = text;
                 return contents;
@@ -1178,7 +1179,7 @@ namespace Lucene.Net.Search.PostingsHighlight
         {
             protected override char GetMultiValuedSeparator(string field)
             {
-                Debug.Assert(field.Equals("body", StringComparison.Ordinal));
+                Debugging.Assert(() => field.Equals("body", 
StringComparison.Ordinal));
                 return '\u2029';
             }
         }
diff --git a/src/Lucene.Net.Tests.Join/TestJoinUtil.cs 
b/src/Lucene.Net.Tests.Join/TestJoinUtil.cs
index a52fa62..f79246d 100644
--- a/src/Lucene.Net.Tests.Join/TestJoinUtil.cs
+++ b/src/Lucene.Net.Tests.Join/TestJoinUtil.cs
@@ -1,4 +1,5 @@
 using Lucene.Net.Analysis;
+using Lucene.Net.Diagnostics;
 using Lucene.Net.Documents;
 using Lucene.Net.Index;
 using Lucene.Net.Index.Extensions;
@@ -9,7 +10,6 @@ using Lucene.Net.Util;
 using NUnit.Framework;
 using System;
 using System.Collections.Generic;
-using System.Diagnostics;
 using Console = Lucene.Net.Util.SystemConsole;
 using JCG = J2N.Collections.Generic;
 
@@ -1030,7 +1030,7 @@ namespace Lucene.Net.Tests.Join
                     {
                         DocsEnum docsEnum = 
MultiFields.GetTermDocsEnum(topLevelReader,
                             MultiFields.GetLiveDocs(topLevelReader), "id", new 
BytesRef(otherSideDoc.id), 0);
-                        Debug.Assert(docsEnum != null);
+                        Debugging.Assert(() => docsEnum != null);
                         int doc = docsEnum.NextDoc();
                         expectedResult.Set(doc);
                     }
diff --git a/src/Lucene.Net.Tests.QueryParser/Classic/TestQueryParser.cs 
b/src/Lucene.Net.Tests.QueryParser/Classic/TestQueryParser.cs
index 60027b9..10bffe2 100644
--- a/src/Lucene.Net.Tests.QueryParser/Classic/TestQueryParser.cs
+++ b/src/Lucene.Net.Tests.QueryParser/Classic/TestQueryParser.cs
@@ -1,15 +1,13 @@
 using Lucene.Net.Analysis;
 using Lucene.Net.Analysis.TokenAttributes;
+using Lucene.Net.Diagnostics;
 using Lucene.Net.Documents;
 using Lucene.Net.QueryParsers.Flexible.Standard;
 using Lucene.Net.QueryParsers.Util;
 using Lucene.Net.Search;
-using Lucene.Net.Support;
 using NUnit.Framework;
 using System;
-using System.Diagnostics;
 using System.Globalization;
-using System.Reflection;
 
 namespace Lucene.Net.QueryParsers.Classic
 {
@@ -67,8 +65,8 @@ namespace Lucene.Net.QueryParsers.Classic
 
         public override Query GetQuery(string query, 
ICommonQueryParserConfiguration cqpC)
         {
-            Debug.Assert(cqpC != null, "Parameter must not be null");
-            Debug.Assert(cqpC is QueryParser, "Parameter must be instance of 
QueryParser");
+            Debugging.Assert(() => cqpC != null, () => "Parameter must not be 
null");
+            Debugging.Assert(() => cqpC is QueryParser, () => "Parameter must 
be instance of QueryParser");
             QueryParser qp = (QueryParser)cqpC;
             return qp.Parse(query);
         }
@@ -85,35 +83,35 @@ namespace Lucene.Net.QueryParsers.Classic
 
         public override void 
SetDefaultOperatorOR(ICommonQueryParserConfiguration cqpC)
         {
-            Debug.Assert(cqpC is QueryParser);
+            Debugging.Assert(() => cqpC is QueryParser);
             QueryParser qp = (QueryParser)cqpC;
             qp.DefaultOperator = Operator.OR;
         }
 
         public override void 
SetDefaultOperatorAND(ICommonQueryParserConfiguration cqpC)
         {
-            Debug.Assert(cqpC is QueryParser);
+            Debugging.Assert(() => cqpC is QueryParser);
             QueryParser qp = (QueryParser)cqpC;
             qp.DefaultOperator = Operator.AND;
         }
 
         public override void 
SetAnalyzeRangeTerms(ICommonQueryParserConfiguration cqpC, bool value)
         {
-            Debug.Assert(cqpC is QueryParser);
+            Debugging.Assert(() => cqpC is QueryParser);
             QueryParser qp = (QueryParser)cqpC;
             qp.AnalyzeRangeTerms = (value);
         }
 
         public override void 
SetAutoGeneratePhraseQueries(ICommonQueryParserConfiguration cqpC, bool value)
         {
-            Debug.Assert(cqpC is QueryParser);
+            Debugging.Assert(() => cqpC is QueryParser);
             QueryParser qp = (QueryParser)cqpC;
             qp.AutoGeneratePhraseQueries = value;
         }
 
         public override void SetDateResolution(ICommonQueryParserConfiguration 
cqpC, string field, DateTools.Resolution value)
         {
-            Debug.Assert(cqpC is QueryParser);
+            Debugging.Assert(() => cqpC is QueryParser);
             QueryParser qp = (QueryParser)cqpC;
             qp.SetDateResolution(field, value);
         }
diff --git 
a/src/Lucene.Net.Tests.QueryParser/Flexible/Standard/TestStandardQP.cs 
b/src/Lucene.Net.Tests.QueryParser/Flexible/Standard/TestStandardQP.cs
index d81dcf4..c336603 100644
--- a/src/Lucene.Net.Tests.QueryParser/Flexible/Standard/TestStandardQP.cs
+++ b/src/Lucene.Net.Tests.QueryParser/Flexible/Standard/TestStandardQP.cs
@@ -1,4 +1,5 @@
 using Lucene.Net.Analysis;
+using Lucene.Net.Diagnostics;
 using Lucene.Net.Documents;
 using Lucene.Net.Index;
 using Lucene.Net.QueryParsers.Flexible.Core;
@@ -8,7 +9,6 @@ using Lucene.Net.Search;
 using Lucene.Net.Support;
 using NUnit.Framework;
 using System;
-using System.Diagnostics;
 using System.IO;
 using Operator = 
Lucene.Net.QueryParsers.Flexible.Standard.Config.StandardQueryConfigHandler.Operator;
 
@@ -59,8 +59,8 @@ namespace Lucene.Net.QueryParsers.Flexible.Standard
 
         public override Query GetQuery(String query, 
ICommonQueryParserConfiguration cqpC)
         {
-            Debug.Assert(cqpC != null, "Parameter must not be null");
-            Debug.Assert((cqpC is StandardQueryParser), "Parameter must be 
instance of StandardQueryParser");
+            Debugging.Assert(() => cqpC != null, () => "Parameter must not be 
null");
+            Debugging.Assert(() => (cqpC is StandardQueryParser), () => 
"Parameter must be instance of StandardQueryParser");
             StandardQueryParser qp = (StandardQueryParser)cqpC;
             return Parse(query, qp);
         }
@@ -80,7 +80,7 @@ namespace Lucene.Net.QueryParsers.Flexible.Standard
 
         public override void 
SetDefaultOperatorOR(ICommonQueryParserConfiguration cqpC)
         {
-            Debug.Assert(cqpC is StandardQueryParser);
+            Debugging.Assert(() => cqpC is StandardQueryParser);
             StandardQueryParser qp = (StandardQueryParser)cqpC;
             qp.DefaultOperator = (Operator.OR);
         }
@@ -88,7 +88,7 @@ namespace Lucene.Net.QueryParsers.Flexible.Standard
 
         public override void 
SetDefaultOperatorAND(ICommonQueryParserConfiguration cqpC)
         {
-            Debug.Assert(cqpC is StandardQueryParser);
+            Debugging.Assert(() => cqpC is StandardQueryParser);
             StandardQueryParser qp = (StandardQueryParser)cqpC;
             qp.DefaultOperator = (Operator.AND);
         }
@@ -111,7 +111,7 @@ namespace Lucene.Net.QueryParsers.Flexible.Standard
         public override void SetDateResolution(ICommonQueryParserConfiguration 
cqpC,
             string field, DateTools.Resolution value)
         {
-            Debug.Assert(cqpC is StandardQueryParser);
+            Debugging.Assert(() => cqpC is StandardQueryParser);
             StandardQueryParser qp = (StandardQueryParser)cqpC;
             qp.DateResolutionMap.Put(field, value);
         }
diff --git 
a/src/Lucene.Net.Tests.Replicator/IndexAndTaxonomyReplicationClientTest.cs 
b/src/Lucene.Net.Tests.Replicator/IndexAndTaxonomyReplicationClientTest.cs
index 69c5b03..b41b01a 100644
--- a/src/Lucene.Net.Tests.Replicator/IndexAndTaxonomyReplicationClientTest.cs
+++ b/src/Lucene.Net.Tests.Replicator/IndexAndTaxonomyReplicationClientTest.cs
@@ -1,5 +1,6 @@
 using J2N.Threading.Atomic;
 using Lucene.Net.Attributes;
+using Lucene.Net.Diagnostics;
 using Lucene.Net.Documents;
 using Lucene.Net.Facet;
 using Lucene.Net.Facet.Taxonomy;
@@ -11,7 +12,6 @@ using Lucene.Net.Util;
 using NUnit.Framework;
 using System;
 using System.Collections.Generic;
-using System.Diagnostics;
 using System.Globalization;
 using System.IO;
 using System.Threading;
@@ -461,7 +461,7 @@ namespace Lucene.Net.Replicator
                     {
                         // count-down number of failures
                         failures.DecrementAndGet();
-                        Debug.Assert(failures >= 0, "handler failed too many 
times: " + failures);
+                        Debugging.Assert(() => failures >= 0, () => "handler 
failed too many times: " + failures);
                         if (Verbose)
                         {
                             if (failures == 0)
diff --git a/src/Lucene.Net.Tests.Replicator/IndexReplicationClientTest.cs 
b/src/Lucene.Net.Tests.Replicator/IndexReplicationClientTest.cs
index c313fdb..3c158bf 100644
--- a/src/Lucene.Net.Tests.Replicator/IndexReplicationClientTest.cs
+++ b/src/Lucene.Net.Tests.Replicator/IndexReplicationClientTest.cs
@@ -1,5 +1,6 @@
 using J2N.Threading.Atomic;
 using Lucene.Net.Attributes;
+using Lucene.Net.Diagnostics;
 using Lucene.Net.Documents;
 using Lucene.Net.Index;
 using Lucene.Net.Store;
@@ -7,7 +8,6 @@ using Lucene.Net.Util;
 using NUnit.Framework;
 using System;
 using System.Collections.Generic;
-using System.Diagnostics;
 using System.Globalization;
 using System.IO;
 using System.Threading;
@@ -367,7 +367,7 @@ namespace Lucene.Net.Replicator
                     {
                         // count-down number of failures
                         failures.DecrementAndGet();
-                        Debug.Assert(failures >= 0, "handler failed too many 
times: " + failures);
+                        Debugging.Assert(() => failures >= 0, () => "handler 
failed too many times: " + failures);
                         if (Verbose)
                         {
                             if (failures == 0)
diff --git a/src/Lucene.Net.Tests.Spatial/SpatialTestCase.cs 
b/src/Lucene.Net.Tests.Spatial/SpatialTestCase.cs
index f34380c..b57d7fa 100644
--- a/src/Lucene.Net.Tests.Spatial/SpatialTestCase.cs
+++ b/src/Lucene.Net.Tests.Spatial/SpatialTestCase.cs
@@ -1,5 +1,6 @@
 using Lucene.Net.Analysis;
 using Lucene.Net.Codecs.Lucene45;
+using Lucene.Net.Diagnostics;
 using Lucene.Net.Documents;
 using Lucene.Net.Index;
 using Lucene.Net.Index.Extensions;
@@ -9,7 +10,6 @@ using Spatial4n.Core.Context;
 using Spatial4n.Core.Shapes;
 using System;
 using System.Collections.Generic;
-using System.Diagnostics;
 using System.IO;
 using System.Text;
 
@@ -152,7 +152,7 @@ namespace Lucene.Net.Spatial
 
         private double randomGaussianMinMeanMax(double min, double mean, 
double max)
         {
-            Debug.Assert(mean > min);
+            Debugging.Assert(() => mean > min);
             return randomGaussianMeanMax(mean - min, max - min) + min;
         }
 
@@ -166,7 +166,7 @@ namespace Lucene.Net.Spatial
         private double randomGaussianMeanMax(double mean, double max)
         {
             // DWS: I verified the results empirically
-            Debug.Assert(mean <= max && mean >= 0);
+            Debugging.Assert(() => mean <= max && mean >= 0);
             double g = randomGaussian();
             double mean2 = mean;
             double flip = 1;
@@ -180,7 +180,7 @@ namespace Lucene.Net.Spatial
             // 1 standard deviation alters the calculation
             double pivotMax = max - mean2;
             double pivot = Math.Min(mean2, pivotMax / 2);//from 0 to max-mean2
-            Debug.Assert(pivot >= 0 && pivotMax >= pivot && g >= 0);
+            Debugging.Assert(() => pivot >= 0 && pivotMax >= pivot && g >= 0);
             double pivotResult;
             if (g <= 1)
                 pivotResult = pivot * g;
diff --git 
a/src/Lucene.Net.Tests.Suggest/Suggest/Analyzing/AnalyzingSuggesterTest.cs 
b/src/Lucene.Net.Tests.Suggest/Suggest/Analyzing/AnalyzingSuggesterTest.cs
index 27a6954..016b78e 100644
--- a/src/Lucene.Net.Tests.Suggest/Suggest/Analyzing/AnalyzingSuggesterTest.cs
+++ b/src/Lucene.Net.Tests.Suggest/Suggest/Analyzing/AnalyzingSuggesterTest.cs
@@ -2,12 +2,12 @@
 using J2N.Text;
 using Lucene.Net.Analysis;
 using Lucene.Net.Analysis.TokenAttributes;
+using Lucene.Net.Diagnostics;
 using Lucene.Net.Documents;
 using Lucene.Net.Util;
 using NUnit.Framework;
 using System;
 using System.Collections.Generic;
-using System.Diagnostics;
 using System.IO;
 using System.Text;
 using System.Text.RegularExpressions;
@@ -651,7 +651,7 @@ namespace Lucene.Net.Search.Suggest.Analyzing
                 }
                 else
                 {
-                    Debug.Assert(false);
+                    Debugging.Assert(() => false);
                     return 0;
                 }
             }
diff --git 
a/src/Lucene.Net.Tests.Suggest/Suggest/Analyzing/FuzzySuggesterTest.cs 
b/src/Lucene.Net.Tests.Suggest/Suggest/Analyzing/FuzzySuggesterTest.cs
index c56e61b..5951a30 100644
--- a/src/Lucene.Net.Tests.Suggest/Suggest/Analyzing/FuzzySuggesterTest.cs
+++ b/src/Lucene.Net.Tests.Suggest/Suggest/Analyzing/FuzzySuggesterTest.cs
@@ -3,13 +3,13 @@ using J2N.Collections.Generic.Extensions;
 using J2N.Text;
 using Lucene.Net.Analysis;
 using Lucene.Net.Analysis.TokenAttributes;
+using Lucene.Net.Diagnostics;
 using Lucene.Net.Support;
 using Lucene.Net.Util;
 using Lucene.Net.Util.Automaton;
 using NUnit.Framework;
 using System;
 using System.Collections.Generic;
-using System.Diagnostics;
 using System.IO;
 using System.Text;
 using System.Text.RegularExpressions;
@@ -603,7 +603,7 @@ namespace Lucene.Net.Search.Suggest.Analyzing
                 }
                 else
                 {
-                    Debug.Assert(false);
+                    Debugging.Assert(() => false);
                     return 0;
                 }
             }
@@ -1313,7 +1313,7 @@ namespace Lucene.Net.Search.Suggest.Analyzing
                 else
                 {
                     int c = CHARSEQUENCE_COMPARER.Compare(a.Key, b.Key);
-                    Debug.Assert(c != 0, "term=" + a.Key);
+                    Debugging.Assert(() => c != 0, () => "term=" + a.Key);
                     return c;
                 }
             }
diff --git 
a/src/Lucene.Net.Tests.Suggest/Suggest/Analyzing/TestFreeTextSuggester.cs 
b/src/Lucene.Net.Tests.Suggest/Suggest/Analyzing/TestFreeTextSuggester.cs
index bbe4e8a..2f160a6 100644
--- a/src/Lucene.Net.Tests.Suggest/Suggest/Analyzing/TestFreeTextSuggester.cs
+++ b/src/Lucene.Net.Tests.Suggest/Suggest/Analyzing/TestFreeTextSuggester.cs
@@ -2,18 +2,18 @@
 using Lucene.Net.Analysis;
 using Lucene.Net.Analysis.Core;
 using Lucene.Net.Analysis.Util;
+using Lucene.Net.Diagnostics;
 using Lucene.Net.Documents;
 using Lucene.Net.Support;
 using Lucene.Net.Util;
 using NUnit.Framework;
 using System;
 using System.Collections.Generic;
-using System.Diagnostics;
 using System.Globalization;
 using System.IO;
 using System.Text;
-using JCG = J2N.Collections.Generic;
 using Console = Lucene.Net.Util.SystemConsole;
+using JCG = J2N.Collections.Generic;
 
 namespace Lucene.Net.Search.Suggest.Analyzing
 {
@@ -680,7 +680,7 @@ namespace Lucene.Net.Search.Suggest.Analyzing
                     return tokens[k];
                 }
             }
-            Debug.Assert(false);
+            Debugging.Assert(() => false);
             return null;
         }
 
diff --git a/src/Lucene.Net.Tests.Suggest/Suggest/LookupBenchmarkTest.cs 
b/src/Lucene.Net.Tests.Suggest/Suggest/LookupBenchmarkTest.cs
index 15094cc..d835cf9 100644
--- a/src/Lucene.Net.Tests.Suggest/Suggest/LookupBenchmarkTest.cs
+++ b/src/Lucene.Net.Tests.Suggest/Suggest/LookupBenchmarkTest.cs
@@ -1,6 +1,7 @@
 using J2N;
 using J2N.Collections.Generic.Extensions;
 using Lucene.Net.Analysis;
+using Lucene.Net.Diagnostics;
 using Lucene.Net.Search.Suggest.Analyzing;
 using Lucene.Net.Search.Suggest.Fst;
 using Lucene.Net.Search.Suggest.Jaspell;
@@ -11,7 +12,6 @@ using Lucene.Net.Util;
 using NUnit.Framework;
 using System;
 using System.Collections.Generic;
-using System.Diagnostics;
 using System.Globalization;
 using System.IO;
 using System.Linq;
@@ -75,7 +75,7 @@ namespace Lucene.Net.Search.Suggest
 
         public override void SetUp()
         {
-            Debug.Assert(false, "disable assertions before running 
benchmarks!");
+            Debugging.Assert(() => false, () => "disable assertions before 
running benchmarks!");
             IList<Input> input = ReadTop50KWiki();
             input.Shuffle(Random);
             dictionaryInput = input.ToArray();
@@ -93,7 +93,7 @@ namespace Lucene.Net.Search.Suggest
             List<Input> input = new List<Input>();
 
             var resource = 
typeof(LookupBenchmarkTest).FindAndGetManifestResourceStream("Top50KWiki.utf8");
-            Debug.Assert(resource != null, "Resource missing: 
Top50KWiki.utf8");
+            Debugging.Assert(() => resource != null, () => "Resource missing: 
Top50KWiki.utf8");
 
             string line = null;
             using (TextReader br = new StreamReader(resource, UTF_8))
diff --git a/src/Lucene.Net.Tests/Analysis/TestGraphTokenizers.cs 
b/src/Lucene.Net.Tests/Analysis/TestGraphTokenizers.cs
index 8f912d2..8aaa6b9 100644
--- a/src/Lucene.Net.Tests/Analysis/TestGraphTokenizers.cs
+++ b/src/Lucene.Net.Tests/Analysis/TestGraphTokenizers.cs
@@ -1,9 +1,9 @@
 using J2N.Text;
 using Lucene.Net.Analysis.TokenAttributes;
+using Lucene.Net.Diagnostics;
 using NUnit.Framework;
 using System;
 using System.Collections.Generic;
-using System.Diagnostics;
 using System.IO;
 using System.Text;
 using Assert = Lucene.Net.TestFramework.Assert;
@@ -176,7 +176,7 @@ namespace Lucene.Net.Analysis
                     pos += minPosLength;
                     offset = 2 * pos;
                 }
-                Debug.Assert(maxPos <= pos, "input string mal-formed: 
posLength>1 tokens hang over the end");
+                Debugging.Assert(() => maxPos <= pos, () => "input string 
mal-formed: posLength>1 tokens hang over the end");
             }
         }
 
diff --git a/src/Lucene.Net.Tests/Codecs/Lucene41/TestBlockPostingsFormat3.cs 
b/src/Lucene.Net.Tests/Codecs/Lucene41/TestBlockPostingsFormat3.cs
index a1478fd..6a2347d 100644
--- a/src/Lucene.Net.Tests/Codecs/Lucene41/TestBlockPostingsFormat3.cs
+++ b/src/Lucene.Net.Tests/Codecs/Lucene41/TestBlockPostingsFormat3.cs
@@ -1,5 +1,6 @@
 using J2N.Collections.Generic.Extensions;
 using Lucene.Net.Analysis;
+using Lucene.Net.Diagnostics;
 using Lucene.Net.Documents;
 using Lucene.Net.Index;
 using Lucene.Net.Index.Extensions;
@@ -7,7 +8,6 @@ using Lucene.Net.Util.Automaton;
 using NUnit.Framework;
 using System;
 using System.Collections.Generic;
-using System.Diagnostics;
 using Assert = Lucene.Net.TestFramework.Assert;
 using JCG = J2N.Collections.Generic;
 
@@ -296,7 +296,7 @@ namespace Lucene.Net.Codecs.Lucene41
         /// </summary>
         public virtual void AssertTermsStatistics(Terms leftTerms, Terms 
rightTerms)
         {
-            Debug.Assert(leftTerms.Comparer == rightTerms.Comparer);
+            Debugging.Assert(() => leftTerms.Comparer == rightTerms.Comparer);
             if (leftTerms.DocCount != -1 && rightTerms.DocCount != -1)
             {
                 Assert.AreEqual(leftTerms.DocCount, rightTerms.DocCount);
diff --git 
a/src/Lucene.Net.Tests/Codecs/PerField/TestPerFieldDocValuesFormat.cs 
b/src/Lucene.Net.Tests/Codecs/PerField/TestPerFieldDocValuesFormat.cs
index 51c479f..42a0bd8 100644
--- a/src/Lucene.Net.Tests/Codecs/PerField/TestPerFieldDocValuesFormat.cs
+++ b/src/Lucene.Net.Tests/Codecs/PerField/TestPerFieldDocValuesFormat.cs
@@ -1,10 +1,10 @@
+using Lucene.Net.Diagnostics;
 using Lucene.Net.Documents;
 using Lucene.Net.Index;
 using Lucene.Net.Index.Extensions;
 using Lucene.Net.Support;
 using NUnit.Framework;
 using System;
-using System.Diagnostics;
 using Assert = Lucene.Net.TestFramework.Assert;
 
 namespace Lucene.Net.Codecs.PerField
@@ -113,7 +113,7 @@ namespace Lucene.Net.Codecs.PerField
             {
                 Document hitDoc = isearcher.Doc(hits.ScoreDocs[i].Doc);
                 Assert.AreEqual(text, hitDoc.Get("fieldname"));
-                Debug.Assert(ireader.Leaves.Count == 1);
+                Debugging.Assert(() => ireader.Leaves.Count == 1);
                 NumericDocValues dv = 
((AtomicReader)ireader.Leaves[0].Reader).GetNumericDocValues("dv1");
                 Assert.AreEqual(5, dv.Get(hits.ScoreDocs[i].Doc));
                 BinaryDocValues dv2 = 
((AtomicReader)ireader.Leaves[0].Reader).GetBinaryDocValues("dv2");
diff --git a/src/Lucene.Net.Tests/Index/TestBackwardsCompatibility.cs 
b/src/Lucene.Net.Tests/Index/TestBackwardsCompatibility.cs
index a19c6b4..a82465a 100644
--- a/src/Lucene.Net.Tests/Index/TestBackwardsCompatibility.cs
+++ b/src/Lucene.Net.Tests/Index/TestBackwardsCompatibility.cs
@@ -1,10 +1,10 @@
 using J2N;
 using J2N.Collections.Generic.Extensions;
+using Lucene.Net.Diagnostics;
 using Lucene.Net.Index.Extensions;
 using NUnit.Framework;
 using System;
 using System.Collections.Generic;
-using System.Diagnostics;
 using System.IO;
 using System.Linq;
 using System.Text;
@@ -434,7 +434,7 @@ namespace Lucene.Net.Index
             // true if this is a 4.2+ index
             bool is42Index = 
MultiFields.GetMergedFieldInfos(reader).FieldInfo("dvSortedSet") != null;
 
-            Debug.Assert(is40Index); // NOTE: currently we can only do this on 
trunk!
+            Debugging.Assert(() => is40Index); // NOTE: currently we can only 
do this on trunk!
 
             IBits liveDocs = MultiFields.GetLiveDocs(reader);
 
diff --git a/src/Lucene.Net.Tests/Index/TestBackwardsCompatibility3x.cs 
b/src/Lucene.Net.Tests/Index/TestBackwardsCompatibility3x.cs
index 8e84317..8fd5b72 100644
--- a/src/Lucene.Net.Tests/Index/TestBackwardsCompatibility3x.cs
+++ b/src/Lucene.Net.Tests/Index/TestBackwardsCompatibility3x.cs
@@ -1,9 +1,9 @@
 using J2N;
+using Lucene.Net.Diagnostics;
 using Lucene.Net.Index.Extensions;
 using NUnit.Framework;
 using System;
 using System.Collections.Generic;
-using System.Diagnostics;
 using System.IO;
 using System.Text;
 using Assert = Lucene.Net.TestFramework.Assert;
@@ -1039,7 +1039,7 @@ namespace Lucene.Net.Index
             Assert.AreEqual(1, td.TotalHits);
             AtomicReader wrapper = SlowCompositeReaderWrapper.Wrap(ir);
             DocsAndPositionsEnum de = wrapper.GetTermPositionsEnum(new 
Term("field3", "broken"));
-            Debug.Assert(de != null);
+            Debugging.Assert(() => de != null);
             Assert.AreEqual(0, de.NextDoc());
             Assert.AreEqual(0, de.NextPosition());
             ir.Dispose();
diff --git a/src/Lucene.Net.Tests/Index/TestCodecs.cs 
b/src/Lucene.Net.Tests/Index/TestCodecs.cs
index 332f635..2b7fbe3 100644
--- a/src/Lucene.Net.Tests/Index/TestCodecs.cs
+++ b/src/Lucene.Net.Tests/Index/TestCodecs.cs
@@ -1,12 +1,12 @@
 using J2N.Text;
 using J2N.Threading;
+using Lucene.Net.Diagnostics;
 using Lucene.Net.Documents;
 using Lucene.Net.Index.Extensions;
 using Lucene.Net.Search;
 using NUnit.Framework;
 using System;
 using System.Collections.Generic;
-using System.Diagnostics;
 using System.Threading;
 using Assert = Lucene.Net.TestFramework.Assert;
 using Console = Lucene.Net.Util.SystemConsole;
@@ -446,7 +446,7 @@ namespace Lucene.Net.Index
                     for (int i = 0; i < NUM_TEST_THREADS - 1; i++)
                     {
                         threads[i].Join();
-                        Debug.Assert(!threads[i].failed);
+                        Debugging.Assert(() => !threads[i].failed);
                     }
 
                 }
@@ -759,14 +759,14 @@ namespace Lucene.Net.Index
                                         if (doc == 
DocIdSetIterator.NO_MORE_DOCS)
                                         {
                                             // skipped past last doc
-                                            Debug.Assert(upto2 == 
term2.docs.Length - 1);
+                                            Debugging.Assert(() => upto2 == 
term2.docs.Length - 1);
                                             ended = true;
                                             break;
                                         }
                                         else
                                         {
                                             // skipped to next doc
-                                            Debug.Assert(upto2 < 
term2.docs.Length - 1);
+                                            Debugging.Assert(() => upto2 < 
term2.docs.Length - 1);
                                             if (doc >= term2.docs[1 + upto2])
                                             {
                                                 upto2++;
diff --git a/src/Lucene.Net.Tests/Index/TestIndexWriter.cs 
b/src/Lucene.Net.Tests/Index/TestIndexWriter.cs
index b0c6bae..e195ed4 100644
--- a/src/Lucene.Net.Tests/Index/TestIndexWriter.cs
+++ b/src/Lucene.Net.Tests/Index/TestIndexWriter.cs
@@ -4,6 +4,7 @@ using Lucene.Net.Analysis;
 using Lucene.Net.Analysis.TokenAttributes;
 using Lucene.Net.Codecs;
 using Lucene.Net.Codecs.SimpleText;
+using Lucene.Net.Diagnostics;
 using Lucene.Net.Documents;
 using Lucene.Net.Index.Extensions;
 using Lucene.Net.Search;
@@ -12,11 +13,9 @@ using Lucene.Net.Util;
 using NUnit.Framework;
 using System;
 using System.Collections.Generic;
-using System.Diagnostics;
 using System.IO;
 using System.Text;
 using System.Threading;
-using Assert = Lucene.Net.TestFramework.Assert;
 using Console = Lucene.Net.Util.SystemConsole;
 using JCG = J2N.Collections.Generic;
 
@@ -2141,14 +2140,14 @@ namespace Lucene.Net.Index
             r = w.GetReader();
             long version2 = r.Version;
             r.Dispose();
-            Debug.Assert(version2 > version);
+            Debugging.Assert(() => version2 > version);
 
             w.DeleteDocuments(new Term("id", "0"));
             r = w.GetReader();
             w.Dispose();
             long version3 = r.Version;
             r.Dispose();
-            Debug.Assert(version3 > version2);
+            Debugging.Assert(() => version3 > version2);
             d.Dispose();
         }
 
diff --git a/src/Lucene.Net.Tests/Index/TestIndexWriterMerging.cs 
b/src/Lucene.Net.Tests/Index/TestIndexWriterMerging.cs
index 9faef06..a48d954 100644
--- a/src/Lucene.Net.Tests/Index/TestIndexWriterMerging.cs
+++ b/src/Lucene.Net.Tests/Index/TestIndexWriterMerging.cs
@@ -1,10 +1,10 @@
 using J2N.Threading;
+using Lucene.Net.Diagnostics;
 using Lucene.Net.Documents;
 using Lucene.Net.Index.Extensions;
 using NUnit.Framework;
 using System;
 using System.Collections.Generic;
-using System.Diagnostics;
 using System.Threading;
 using Assert = Lucene.Net.TestFramework.Assert;
 using Console = Lucene.Net.Util.SystemConsole;
@@ -315,7 +315,7 @@ namespace Lucene.Net.Index
                         }
                         for (int i = 0; i < merge.Segments.Count; i++)
                         {
-                            Debug.Assert(merge.Segments[i].Info.DocCount < 20);
+                            Debugging.Assert(() => 
merge.Segments[i].Info.DocCount < 20);
                         }
                         writer.Merge(merge);
                     }
diff --git a/src/Lucene.Net.Tests/Index/TestIndexableField.cs 
b/src/Lucene.Net.Tests/Index/TestIndexableField.cs
index 8d65685..b71cdf2 100644
--- a/src/Lucene.Net.Tests/Index/TestIndexableField.cs
+++ b/src/Lucene.Net.Tests/Index/TestIndexableField.cs
@@ -1,8 +1,8 @@
+using Lucene.Net.Diagnostics;
 using Lucene.Net.Documents;
 using NUnit.Framework;
 using System;
 using System.Collections.Generic;
-using System.Diagnostics;
 using System.IO;
 using Assert = Lucene.Net.TestFramework.Assert;
 using Console = Lucene.Net.Util.SystemConsole;
@@ -317,7 +317,7 @@ namespace Lucene.Net.Index
                         }
                         else
                         {
-                            Debug.Assert(stringValue != null);
+                            Debugging.Assert(() => stringValue != null);
                             Assert.AreEqual(stringValue, f.GetStringValue());
                         }
                     }
@@ -424,7 +424,7 @@ namespace Lucene.Net.Index
                         return false;
                     }
 
-                    Debug.Assert(fieldUpto < outerInstance.fieldCount);
+                    Debugging.Assert(() => fieldUpto < 
outerInstance.fieldCount);
                     if (fieldUpto == 0)
                     {
                         fieldUpto = 1;
diff --git a/src/Lucene.Net.Tests/Index/TestLongPostings.cs 
b/src/Lucene.Net.Tests/Index/TestLongPostings.cs
index ef3a68c..118fcaa 100644
--- a/src/Lucene.Net.Tests/Index/TestLongPostings.cs
+++ b/src/Lucene.Net.Tests/Index/TestLongPostings.cs
@@ -1,9 +1,9 @@
 using Lucene.Net.Analysis.TokenAttributes;
+using Lucene.Net.Diagnostics;
 using Lucene.Net.Documents;
 using Lucene.Net.Index.Extensions;
 using NUnit.Framework;
 using System;
-using System.Diagnostics;
 using System.IO;
 using Assert = Lucene.Net.TestFramework.Assert;
 using Console = Lucene.Net.Util.SystemConsole;
@@ -462,9 +462,9 @@ namespace Lucene.Net.Index
                 else
                 {
                     docs = postings = TestUtil.Docs(Random, r, "field", new 
BytesRef(term), null, null, DocsFlags.FREQS);
-                    Debug.Assert(postings != null);
+                    Debugging.Assert(() => postings != null);
                 }
-                Debug.Assert(docs != null);
+                Debugging.Assert(() => docs != null);
 
                 int docID = -1;
                 while (docID < DocIdSetIterator.NO_MORE_DOCS)
diff --git a/src/Lucene.Net.Tests/Index/TestNRTThreads.cs 
b/src/Lucene.Net.Tests/Index/TestNRTThreads.cs
index 4c7e05d..e2a79c0 100644
--- a/src/Lucene.Net.Tests/Index/TestNRTThreads.cs
+++ b/src/Lucene.Net.Tests/Index/TestNRTThreads.cs
@@ -1,7 +1,7 @@
+using Lucene.Net.Diagnostics;
 using NUnit.Framework;
 using System;
 using System.Collections.Generic;
-using System.Diagnostics;
 using System.Threading.Tasks;
 using Assert = Lucene.Net.TestFramework.Assert;
 using Console = Lucene.Net.Util.SystemConsole;
@@ -116,7 +116,7 @@ namespace Lucene.Net.Index
 
         protected override Directory GetDirectory(Directory @in)
         {
-            Debug.Assert(@in is MockDirectoryWrapper);
+            Debugging.Assert(() => @in is MockDirectoryWrapper);
             if (!useNonNrtReaders)
             {
                 ((MockDirectoryWrapper)@in).AssertNoDeleteOpenFile = true;
diff --git a/src/Lucene.Net.Tests/Index/TestPayloads.cs 
b/src/Lucene.Net.Tests/Index/TestPayloads.cs
index 40cae80..0f208af 100644
--- a/src/Lucene.Net.Tests/Index/TestPayloads.cs
+++ b/src/Lucene.Net.Tests/Index/TestPayloads.cs
@@ -2,13 +2,13 @@ using J2N.Text;
 using J2N.Threading;
 using Lucene.Net.Analysis;
 using Lucene.Net.Analysis.TokenAttributes;
+using Lucene.Net.Diagnostics;
 using Lucene.Net.Documents;
 using Lucene.Net.Index.Extensions;
 using Lucene.Net.Util;
 using NUnit.Framework;
 using System;
 using System.Collections.Generic;
-using System.Diagnostics;
 using System.IO;
 using System.Text;
 using Assert = Lucene.Net.TestFramework.Assert;
@@ -310,7 +310,7 @@ namespace Lucene.Net.Index
             // this test needs the random data to be valid unicode
             string s = TestUtil.RandomFixedByteLengthUnicodeString(Random, 
data.Length);
             var b = s.GetBytes(utf8);
-            Debug.Assert(b.Length == data.Length);
+            Debugging.Assert(() => b.Length == data.Length);
             System.Buffer.BlockCopy(b, 0, data, 0, b.Length);
         }
 
diff --git a/src/Lucene.Net.Tests/Index/TestPayloadsOnVectors.cs 
b/src/Lucene.Net.Tests/Index/TestPayloadsOnVectors.cs
index cd6a548..5b7e149 100644
--- a/src/Lucene.Net.Tests/Index/TestPayloadsOnVectors.cs
+++ b/src/Lucene.Net.Tests/Index/TestPayloadsOnVectors.cs
@@ -1,9 +1,9 @@
 using Lucene.Net.Analysis.TokenAttributes;
+using Lucene.Net.Diagnostics;
 using Lucene.Net.Documents;
 using Lucene.Net.Index.Extensions;
 using NUnit.Framework;
 using System;
-using System.Diagnostics;
 using System.IO;
 using Assert = Lucene.Net.TestFramework.Assert;
 
@@ -79,7 +79,7 @@ namespace Lucene.Net.Index
 
             DirectoryReader reader = writer.GetReader();
             Terms terms = reader.GetTermVector(1, "field");
-            Debug.Assert(terms != null);
+            Debugging.Assert(() => terms != null);
             TermsEnum termsEnum = terms.GetIterator(null);
             Assert.IsTrue(termsEnum.SeekExact(new BytesRef("withPayload")));
             DocsAndPositionsEnum de = termsEnum.DocsAndPositions(null, null);
@@ -128,7 +128,7 @@ namespace Lucene.Net.Index
             writer.AddDocument(doc);
             DirectoryReader reader = writer.GetReader();
             Terms terms = reader.GetTermVector(0, "field");
-            Debug.Assert(terms != null);
+            Debugging.Assert(() => terms != null);
             TermsEnum termsEnum = terms.GetIterator(null);
             Assert.IsTrue(termsEnum.SeekExact(new BytesRef("withPayload")));
             DocsAndPositionsEnum de = termsEnum.DocsAndPositions(null, null);
diff --git a/src/Lucene.Net.Tests/Index/TestPostingsOffsets.cs 
b/src/Lucene.Net.Tests/Index/TestPostingsOffsets.cs
index c506b90..c621f33 100644
--- a/src/Lucene.Net.Tests/Index/TestPostingsOffsets.cs
+++ b/src/Lucene.Net.Tests/Index/TestPostingsOffsets.cs
@@ -1,11 +1,11 @@
 using J2N.Collections.Generic.Extensions;
+using Lucene.Net.Diagnostics;
 using Lucene.Net.Documents;
 using Lucene.Net.Index.Extensions;
 using Lucene.Net.Search;
 using NUnit.Framework;
 using System;
 using System.Collections.Generic;
-using System.Diagnostics;
 using System.Linq;
 using Assert = Lucene.Net.TestFramework.Assert;
 
@@ -177,9 +177,9 @@ namespace Lucene.Net.Index
                     {
                         dp.NextPosition();
                         int start = dp.StartOffset;
-                        Debug.Assert(start >= 0);
+                        Debugging.Assert(() => start >= 0);
                         int end = dp.EndOffset;
-                        Debug.Assert(end >= 0 && end >= start);
+                        Debugging.Assert(() => end >= 0 && end >= start);
                         // check that the offsets correspond to the term in 
the src text
                         Assert.IsTrue(storedNumbers.Substring(start, end - 
start).Equals(term, StringComparison.Ordinal));
                         if (withPayloads)
@@ -208,9 +208,9 @@ namespace Lucene.Net.Index
                     string storedNumbers = reader.Document(doc).Get("numbers");
                     dp.NextPosition();
                     int start = dp.StartOffset;
-                    Debug.Assert(start >= 0);
+                    Debugging.Assert(() => start >= 0);
                     int end = dp.EndOffset;
-                    Debug.Assert(end >= 0 && end >= start);
+                    Debugging.Assert(() => end >= 0 && end >= start);
                     // check that the offsets correspond to the term in the 
src text
                     Assert.IsTrue(storedNumbers.Substring(start, end - 
start).Equals("hundred", StringComparison.Ordinal));
                     if (withPayloads)
diff --git a/src/Lucene.Net.Tests/Index/TestStressIndexing2.cs 
b/src/Lucene.Net.Tests/Index/TestStressIndexing2.cs
index f0efbc9..aa7f52f 100644
--- a/src/Lucene.Net.Tests/Index/TestStressIndexing2.cs
+++ b/src/Lucene.Net.Tests/Index/TestStressIndexing2.cs
@@ -2,6 +2,7 @@ using J2N.Collections.Generic.Extensions;
 using J2N.Text;
 using J2N.Threading;
 using Lucene.Net.Analysis.TokenAttributes;
+using Lucene.Net.Diagnostics;
 using Lucene.Net.Documents;
 using Lucene.Net.Index.Extensions;
 using Lucene.Net.Support;
@@ -9,7 +10,6 @@ using Lucene.Net.Util;
 using NUnit.Framework;
 using System;
 using System.Collections.Generic;
-using System.Diagnostics;
 using System.Globalization;
 using System.Threading;
 using Assert = Lucene.Net.TestFramework.Assert;
@@ -347,7 +347,7 @@ namespace Lucene.Net.Index
             }
             if (r1.NumDocs != r2.NumDocs)
             {
-                Debug.Assert(false, "r1.NumDocs=" + r1.NumDocs + " vs 
r2.NumDocs=" + r2.NumDocs);
+                Debugging.Assert(() => false, () => "r1.NumDocs=" + r1.NumDocs 
+ " vs r2.NumDocs=" + r2.NumDocs);
             }
             bool hasDeletes = !(r1.MaxDoc == r2.MaxDoc && r1.NumDocs == 
r1.MaxDoc);
 
@@ -682,7 +682,7 @@ namespace Lucene.Net.Index
                 IIndexableField f2 = ff2[i];
                 if (f1.GetBinaryValue() != null)
                 {
-                    Debug.Assert(f2.GetBinaryValue() != null);
+                    Debugging.Assert(() => f2.GetBinaryValue() != null);
                 }
                 else
                 {
diff --git a/src/Lucene.Net.Tests/Index/TestStressNRT.cs 
b/src/Lucene.Net.Tests/Index/TestStressNRT.cs
index 9acc423..ef4f795 100644
--- a/src/Lucene.Net.Tests/Index/TestStressNRT.cs
+++ b/src/Lucene.Net.Tests/Index/TestStressNRT.cs
@@ -1,12 +1,12 @@
 using J2N.Threading;
 using J2N.Threading.Atomic;
+using Lucene.Net.Diagnostics;
 using Lucene.Net.Documents;
 using Lucene.Net.Support;
 using NUnit.Framework;
 using System;
 using System.Collections.Concurrent;
 using System.Collections.Generic;
-using System.Diagnostics;
 using System.Threading;
 using Console = Lucene.Net.Util.SystemConsole;
 
@@ -263,8 +263,8 @@ namespace Lucene.Net.Index
                                 {
                                     // install the new reader if it's newest 
(and check the current version since another reader may have already been 
installed)
                                     
//System.out.println(Thread.currentThread().getName() + ": newVersion=" + 
newReader.getVersion());
-                                    Debug.Assert(newReader.RefCount > 0);
-                                    Debug.Assert(outerInstance.reader.RefCount 
> 0);
+                                    Debugging.Assert(() => newReader.RefCount 
> 0);
+                                    Debugging.Assert(() => 
outerInstance.reader.RefCount > 0);
                                     if (newReader.Version > 
outerInstance.reader.Version)
                                     {
                                         if (Verbose)
diff --git a/src/Lucene.Net.Tests/Index/TestTermsEnum.cs 
b/src/Lucene.Net.Tests/Index/TestTermsEnum.cs
index 912e6c7..def59ed 100644
--- a/src/Lucene.Net.Tests/Index/TestTermsEnum.cs
+++ b/src/Lucene.Net.Tests/Index/TestTermsEnum.cs
@@ -1,3 +1,4 @@
+using Lucene.Net.Diagnostics;
 using Lucene.Net.Documents;
 using Lucene.Net.Index.Extensions;
 using Lucene.Net.Search;
@@ -5,10 +6,9 @@ using Lucene.Net.Util.Automaton;
 using NUnit.Framework;
 using System;
 using System.Collections.Generic;
-using System.Diagnostics;
-using JCG = J2N.Collections.Generic;
 using Assert = Lucene.Net.TestFramework.Assert;
 using Console = Lucene.Net.Util.SystemConsole;
+using JCG = J2N.Collections.Generic;
 
 namespace Lucene.Net.Index
 {
@@ -829,7 +829,7 @@ namespace Lucene.Net.Index
                     }
                     else
                     {
-                        Debug.Assert(loc >= -validTerms.Length);
+                        Debugging.Assert(() => loc >= -validTerms.Length);
                         Assert.AreEqual(TermsEnum.SeekStatus.NOT_FOUND, 
result);
                     }
                 }
diff --git a/src/Lucene.Net.Tests/Search/Spans/MultiSpansWrapper.cs 
b/src/Lucene.Net.Tests/Search/Spans/MultiSpansWrapper.cs
index ea8710d..e8f5f73 100644
--- a/src/Lucene.Net.Tests/Search/Spans/MultiSpansWrapper.cs
+++ b/src/Lucene.Net.Tests/Search/Spans/MultiSpansWrapper.cs
@@ -1,7 +1,7 @@
+using Lucene.Net.Diagnostics;
 using Lucene.Net.Index;
 using Lucene.Net.Support;
 using System.Collections.Generic;
-using System.Diagnostics;
 using JCG = J2N.Collections.Generic;
 
 namespace Lucene.Net.Search.Spans
@@ -110,7 +110,7 @@ namespace Lucene.Net.Search.Spans
             }
 
             int subIndex = ReaderUtil.SubIndex(target, leaves);
-            Debug.Assert(subIndex >= leafOrd);
+            Debugging.Assert(() => subIndex >= leafOrd);
             if (subIndex != leafOrd)
             {
                 AtomicReaderContext ctx = leaves[subIndex];
diff --git a/src/Lucene.Net.Tests/Search/TestBooleanScorer.cs 
b/src/Lucene.Net.Tests/Search/TestBooleanScorer.cs
index 76a8e64..d203efb 100644
--- a/src/Lucene.Net.Tests/Search/TestBooleanScorer.cs
+++ b/src/Lucene.Net.Tests/Search/TestBooleanScorer.cs
@@ -1,9 +1,9 @@
+using Lucene.Net.Diagnostics;
 using Lucene.Net.Documents;
 using Lucene.Net.Support;
 using NUnit.Framework;
 using System;
 using System.Collections.Generic;
-using System.Diagnostics;
 using Assert = Lucene.Net.TestFramework.Assert;
 
 namespace Lucene.Net.Search
@@ -119,7 +119,7 @@ namespace Lucene.Net.Search
 
             public override bool Score(ICollector c, int maxDoc)
             {
-                Debug.Assert(doc == -1);
+                Debugging.Assert(() => doc == -1);
                 doc = 3000;
                 FakeScorer fs = new FakeScorer();
                 fs.doc = doc;
diff --git a/src/Lucene.Net.Tests/Search/TestConstantScoreQuery.cs 
b/src/Lucene.Net.Tests/Search/TestConstantScoreQuery.cs
index 55ca85c..a2aa38e 100644
--- a/src/Lucene.Net.Tests/Search/TestConstantScoreQuery.cs
+++ b/src/Lucene.Net.Tests/Search/TestConstantScoreQuery.cs
@@ -1,6 +1,6 @@
+using Lucene.Net.Diagnostics;
 using Lucene.Net.Documents;
 using NUnit.Framework;
-using System.Diagnostics;
 using Assert = Lucene.Net.TestFramework.Assert;
 
 namespace Lucene.Net.Search
@@ -234,7 +234,7 @@ namespace Lucene.Net.Search
 
             Filter filter = new QueryWrapperFilter(AssertingQuery.Wrap(Random, 
new TermQuery(new Term("field", "a"))));
             IndexSearcher s = NewSearcher(r);
-            Debug.Assert(s is AssertingIndexSearcher);
+            Debugging.Assert(() => s is AssertingIndexSearcher);
             // this used to fail
             s.Search(new ConstantScoreQuery(filter), new 
TotalHitCountCollector());
 
diff --git a/src/Lucene.Net.Tests/Search/TestFieldCache.cs 
b/src/Lucene.Net.Tests/Search/TestFieldCache.cs
index 39be70d..3358372 100644
--- a/src/Lucene.Net.Tests/Search/TestFieldCache.cs
+++ b/src/Lucene.Net.Tests/Search/TestFieldCache.cs
@@ -1,11 +1,11 @@
 using J2N.Threading;
 using J2N.Threading.Atomic;
+using Lucene.Net.Diagnostics;
 using Lucene.Net.Index.Extensions;
 using Lucene.Net.Support;
 using Lucene.Net.Util;
 using NUnit.Framework;
 using System;
-using System.Diagnostics;
 using System.Collections.Generic;
 using System.Globalization;
 using System.IO;
@@ -34,42 +34,40 @@ namespace Lucene.Net.Search
      * limitations under the License.
      */
 
-    using MockAnalyzer = Lucene.Net.Analysis.MockAnalyzer;
-    using BinaryDocValuesField = Lucene.Net.Documents.BinaryDocValuesField;
-    using Document = Lucene.Net.Documents.Document;
-    using Field = Lucene.Net.Documents.Field;
-    using Store = Lucene.Net.Documents.Field.Store;
-    using Int32Field = Lucene.Net.Documents.Int32Field;
-    using Int64Field = Lucene.Net.Documents.Int64Field;
-    using NumericDocValuesField = Lucene.Net.Documents.NumericDocValuesField;
-    using SortedDocValuesField = Lucene.Net.Documents.SortedDocValuesField;
-    using SortedSetDocValuesField = 
Lucene.Net.Documents.SortedSetDocValuesField;
-    using StoredField = Lucene.Net.Documents.StoredField;
     using AtomicReader = Lucene.Net.Index.AtomicReader;
     using BinaryDocValues = Lucene.Net.Index.BinaryDocValues;
+    using BinaryDocValuesField = Lucene.Net.Documents.BinaryDocValuesField;
+    using Bytes = Lucene.Net.Search.FieldCache.Bytes;
+    using BytesRef = Lucene.Net.Util.BytesRef;
+    using Directory = Lucene.Net.Store.Directory;
     using DirectoryReader = Lucene.Net.Index.DirectoryReader;
     using DocTermOrds = Lucene.Net.Index.DocTermOrds;
+    using Document = Lucene.Net.Documents.Document;
+    using Doubles = Lucene.Net.Search.FieldCache.Doubles;
+    using Field = Lucene.Net.Documents.Field;
+    using IBits = Lucene.Net.Util.IBits;
     using IndexReader = Lucene.Net.Index.IndexReader;
     using IndexWriter = Lucene.Net.Index.IndexWriter;
     using IndexWriterConfig = Lucene.Net.Index.IndexWriterConfig;
+    using Int16s = Lucene.Net.Search.FieldCache.Int16s;
+    using Int32Field = Lucene.Net.Documents.Int32Field;
+    using Int32s = Lucene.Net.Search.FieldCache.Int32s;
+    using Int64Field = Lucene.Net.Documents.Int64Field;
+    using Int64s = Lucene.Net.Search.FieldCache.Int64s;
+    using LuceneTestCase = Lucene.Net.Util.LuceneTestCase;
+    using MockAnalyzer = Lucene.Net.Analysis.MockAnalyzer;
+    using NumericDocValuesField = Lucene.Net.Documents.NumericDocValuesField;
     using RandomIndexWriter = Lucene.Net.Index.RandomIndexWriter;
+    using Singles = Lucene.Net.Search.FieldCache.Singles;
     using SlowCompositeReaderWrapper = 
Lucene.Net.Index.SlowCompositeReaderWrapper;
     using SortedDocValues = Lucene.Net.Index.SortedDocValues;
+    using SortedDocValuesField = Lucene.Net.Documents.SortedDocValuesField;
     using SortedSetDocValues = Lucene.Net.Index.SortedSetDocValues;
+    using SortedSetDocValuesField = 
Lucene.Net.Documents.SortedSetDocValuesField;
+    using StoredField = Lucene.Net.Documents.StoredField;
     using TermsEnum = Lucene.Net.Index.TermsEnum;
-    using Bytes = Lucene.Net.Search.FieldCache.Bytes;
-    using Doubles = Lucene.Net.Search.FieldCache.Doubles;
-    using Singles = Lucene.Net.Search.FieldCache.Singles;
-    using Int32s = Lucene.Net.Search.FieldCache.Int32s;
-    using Int64s = Lucene.Net.Search.FieldCache.Int64s;
-    using Int16s = Lucene.Net.Search.FieldCache.Int16s;
-    using Directory = Lucene.Net.Store.Directory;
-    using IBits = Lucene.Net.Util.IBits;
-    using BytesRef = Lucene.Net.Util.BytesRef;
-    using IOUtils = Lucene.Net.Util.IOUtils;
-    using LuceneTestCase = Lucene.Net.Util.LuceneTestCase;
     using TestUtil = Lucene.Net.Util.TestUtil;
-    
+
 
     [TestFixture]
     public class TestFieldCache : LuceneTestCase
@@ -374,7 +372,7 @@ namespace Lucene.Net.Search
                         break;
                     }
                     long ord = termOrds.NextOrd();
-                    Debug.Assert(ord != SortedSetDocValues.NO_MORE_ORDS);
+                    Debugging.Assert(() => ord != 
SortedSetDocValues.NO_MORE_ORDS);
                     BytesRef scratch = new BytesRef();
                     termOrds.LookupOrd(ord, scratch);
                     Assert.AreEqual(v, scratch);
diff --git a/src/Lucene.Net.Tests/Search/TestMinShouldMatch2.cs 
b/src/Lucene.Net.Tests/Search/TestMinShouldMatch2.cs
index 443d366..6157c9a 100644
--- a/src/Lucene.Net.Tests/Search/TestMinShouldMatch2.cs
+++ b/src/Lucene.Net.Tests/Search/TestMinShouldMatch2.cs
@@ -1,14 +1,14 @@
-using System.Linq;
+using J2N.Collections.Generic.Extensions;
+using Lucene.Net.Diagnostics;
 using Lucene.Net.Documents;
 using Lucene.Net.Index;
 using Lucene.Net.Support;
 using Lucene.Net.Util;
 using NUnit.Framework;
 using System.Collections.Generic;
-using System.Diagnostics;
+using System.Linq;
 using Assert = Lucene.Net.TestFramework.Assert;
 using JCG = J2N.Collections.Generic;
-using J2N.Collections.Generic.Extensions;
 
 namespace Lucene.Net.Search
 {
@@ -365,14 +365,14 @@ namespace Lucene.Net.Search
                 this.sims = new SimScorer[(int)dv.ValueCount];
                 foreach (BooleanClause clause in bq.GetClauses())
                 {
-                    Debug.Assert(!clause.IsProhibited);
-                    Debug.Assert(!clause.IsRequired);
+                    Debugging.Assert(() => !clause.IsProhibited);
+                    Debugging.Assert(() => !clause.IsRequired);
                     Term term = ((TermQuery)clause.Query).Term;
                     long ord = dv.LookupTerm(term.Bytes);
                     if (ord >= 0)
                     {
                         bool success = ords.Add(ord);
-                        Debug.Assert(success); // no dups
+                        Debugging.Assert(() => success); // no dups
                         TermContext context = 
TermContext.Build(reader.Context, term);
                         SimWeight w = weight.Similarity.ComputeWeight(1f, 
searcher.CollectionStatistics("field"), searcher.TermStatistics(term, context));
                         var dummy = w.GetValueForNormalization(); // ignored
@@ -384,7 +384,7 @@ namespace Lucene.Net.Search
 
             public override float GetScore()
             {
-                Debug.Assert(score != 0, currentMatched.ToString());
+                Debugging.Assert(() => score != 0, currentMatched.ToString);
                 return (float)score * 
((BooleanWeight)m_weight).Coord(currentMatched, 
((BooleanWeight)m_weight).MaxCoord);
             }
 
@@ -394,7 +394,7 @@ namespace Lucene.Net.Search
 
             public override int NextDoc()
             {
-                Debug.Assert(currentDoc != NO_MORE_DOCS);
+                Debugging.Assert(() => currentDoc != NO_MORE_DOCS);
                 for (currentDoc = currentDoc + 1; currentDoc < maxDoc; 
currentDoc++)
                 {
                     currentMatched = 0;
diff --git a/src/Lucene.Net.Tests/Search/TestMultiThreadTermVectors.cs 
b/src/Lucene.Net.Tests/Search/TestMultiThreadTermVectors.cs
index 762cc4e..f6c0ac7 100644
--- a/src/Lucene.Net.Tests/Search/TestMultiThreadTermVectors.cs
+++ b/src/Lucene.Net.Tests/Search/TestMultiThreadTermVectors.cs
@@ -1,9 +1,9 @@
 using J2N.Threading;
+using Lucene.Net.Diagnostics;
 using Lucene.Net.Documents;
 using Lucene.Net.Index.Extensions;
 using NUnit.Framework;
 using System;
-using System.Diagnostics;
 using System.IO;
 using System.Text;
 using System.Threading;
@@ -223,7 +223,7 @@ namespace Lucene.Net.Search
             foreach (string field in vectors)
             {
                 Terms terms = vectors.GetTerms(field);
-                Debug.Assert(terms != null);
+                Debugging.Assert(() => terms != null);
                 VerifyVector(terms.GetIterator(null), num);
             }
         }
diff --git a/src/Lucene.Net.Tests/Search/TestNumericRangeQuery32.cs 
b/src/Lucene.Net.Tests/Search/TestNumericRangeQuery32.cs
index 16860f2..a7dc07e 100644
--- a/src/Lucene.Net.Tests/Search/TestNumericRangeQuery32.cs
+++ b/src/Lucene.Net.Tests/Search/TestNumericRangeQuery32.cs
@@ -1,8 +1,8 @@
+using Lucene.Net.Diagnostics;
 using Lucene.Net.Documents;
 using Lucene.Net.Index.Extensions;
 using NUnit.Framework;
 using System;
-using System.Diagnostics;
 using Assert = Lucene.Net.TestFramework.Assert;
 using Console = Lucene.Net.Util.SystemConsole;
 
@@ -32,7 +32,6 @@ namespace Lucene.Net.Search
     using Document = Documents.Document;
     using Field = Field;
     using FieldType = FieldType;
-    using SingleField = SingleField;
     using IndexReader = Lucene.Net.Index.IndexReader;
     using Int32Field = Int32Field;
     using LuceneTestCase = Lucene.Net.Util.LuceneTestCase;
@@ -40,6 +39,7 @@ namespace Lucene.Net.Search
     using MultiFields = Lucene.Net.Index.MultiFields;
     using NumericUtils = Lucene.Net.Util.NumericUtils;
     using RandomIndexWriter = Lucene.Net.Index.RandomIndexWriter;
+    using SingleField = SingleField;
     using SlowCompositeReaderWrapper = 
Lucene.Net.Index.SlowCompositeReaderWrapper;
     using Terms = Lucene.Net.Index.Terms;
     using TermsEnum = Lucene.Net.Index.TermsEnum;
@@ -474,13 +474,13 @@ namespace Lucene.Net.Search
             int count = 3000;
             int lower = (distance * 3 / 2) + startOffset, upper = lower + 
count * distance + (distance / 3);
             // test empty enum
-            Debug.Assert(lower < upper);
+            Debugging.Assert(() => lower < upper);
             Assert.IsTrue(0 < 
CountTerms(NumericRangeQuery.NewInt32Range("field4", 4, lower, upper, true, 
true)));
             Assert.AreEqual(0, 
CountTerms(NumericRangeQuery.NewInt32Range("field4", 4, upper, lower, true, 
true)));
             // test empty enum outside of bounds
             lower = distance * noDocs + startOffset;
             upper = 2 * lower;
-            Debug.Assert(lower < upper);
+            Debugging.Assert(() => lower < upper);
             Assert.AreEqual(0, 
CountTerms(NumericRangeQuery.NewInt32Range("field4", 4, lower, upper, true, 
true)));
         }
 
diff --git a/src/Lucene.Net.Tests/Search/TestNumericRangeQuery64.cs 
b/src/Lucene.Net.Tests/Search/TestNumericRangeQuery64.cs
index 0da43cd..4e0ad53 100644
--- a/src/Lucene.Net.Tests/Search/TestNumericRangeQuery64.cs
+++ b/src/Lucene.Net.Tests/Search/TestNumericRangeQuery64.cs
@@ -1,8 +1,8 @@
+using Lucene.Net.Diagnostics;
 using Lucene.Net.Documents;
 using Lucene.Net.Index.Extensions;
 using NUnit.Framework;
 using System;
-using System.Diagnostics;
 using Assert = Lucene.Net.TestFramework.Assert;
 using Console = Lucene.Net.Util.SystemConsole;
 
@@ -501,13 +501,13 @@ namespace Lucene.Net.Search
             int count = 3000;
             long lower = (distance * 3 / 2) + startOffset, upper = lower + 
count * distance + (distance / 3);
             // test empty enum
-            Debug.Assert(lower < upper);
+            Debugging.Assert(() => lower < upper);
             Assert.IsTrue(0 < 
CountTerms(NumericRangeQuery.NewInt64Range("field4", 4, lower, upper, true, 
true)));
             Assert.AreEqual(0, 
CountTerms(NumericRangeQuery.NewInt64Range("field4", 4, upper, lower, true, 
true)));
             // test empty enum outside of bounds
             lower = distance * noDocs + startOffset;
             upper = 2L * lower;
-            Debug.Assert(lower < upper);
+            Debugging.Assert(() => lower < upper);
             Assert.AreEqual(0, 
CountTerms(NumericRangeQuery.NewInt64Range("field4", 4, lower, upper, true, 
true)));
         }
 
diff --git a/src/Lucene.Net.Tests/Search/TestTimeLimitingCollector.cs 
b/src/Lucene.Net.Tests/Search/TestTimeLimitingCollector.cs
index 243145e..6ebd621 100644
--- a/src/Lucene.Net.Tests/Search/TestTimeLimitingCollector.cs
+++ b/src/Lucene.Net.Tests/Search/TestTimeLimitingCollector.cs
@@ -1,6 +1,7 @@
 using J2N.Text;
 using J2N.Threading;
 using Lucene.Net.Analysis;
+using Lucene.Net.Diagnostics;
 using Lucene.Net.Documents;
 using Lucene.Net.Index;
 using Lucene.Net.Index.Extensions;
@@ -8,7 +9,6 @@ using Lucene.Net.Store;
 using Lucene.Net.Util;
 using NUnit.Framework;
 using System;
-using System.Diagnostics;
 using System.Text.RegularExpressions;
 using Console = Lucene.Net.Util.SystemConsole;
 
@@ -418,7 +418,7 @@ namespace Lucene.Net.Search
 //#endif
                 }
 
-                Debug.Assert(docId >= 0, " base=" + docBase + " doc=" + doc);
+                Debugging.Assert(() => docId >= 0, () => " base=" + docBase + 
" doc=" + doc);
                 bits.Set(docId);
                 lastDocCollected = docId;
             }
diff --git a/src/Lucene.Net.Tests/Util/Automaton/TestUTF32ToUTF8.cs 
b/src/Lucene.Net.Tests/Util/Automaton/TestUTF32ToUTF8.cs
index 0f7dffb..b18aaa8 100644
--- a/src/Lucene.Net.Tests/Util/Automaton/TestUTF32ToUTF8.cs
+++ b/src/Lucene.Net.Tests/Util/Automaton/TestUTF32ToUTF8.cs
@@ -1,8 +1,8 @@
 using J2N;
 using J2N.Text;
+using Lucene.Net.Diagnostics;
 using NUnit.Framework;
 using System;
-using System.Diagnostics;
 using System.Text;
 using Assert = Lucene.Net.TestFramework.Assert;
 using Console = Lucene.Net.Util.SystemConsole;
@@ -76,7 +76,7 @@ namespace Lucene.Net.Util.Automaton
                 nonSurrogateCount = endCode - startCode + 1 - 
(UnicodeUtil.UNI_SUR_LOW_END - UnicodeUtil.UNI_SUR_HIGH_START + 1);
             }
 
-            Debug.Assert(nonSurrogateCount > 0);
+            Debugging.Assert(() => nonSurrogateCount > 0);
 
             for (int iter = 0; iter < iters; iter++)
             {
@@ -95,8 +95,8 @@ namespace Lucene.Net.Util.Automaton
                     }
                 }
 
-                Debug.Assert(code >= startCode && code <= endCode, "code=" + 
code + " start=" + startCode + " end=" + endCode);
-                Debug.Assert(!IsSurrogate(code));
+                Debugging.Assert(() => code >= startCode && code <= endCode, 
() => "code=" + code + " start=" + startCode + " end=" + endCode);
+                Debugging.Assert(() => !IsSurrogate(code));
 
                 Assert.IsTrue(Matches(a, code), "DFA for range " + startCode + 
"-" + endCode + " failed to match code=" + code);
             }
diff --git a/src/Lucene.Net.Tests/Util/Fst/TestFSTs.cs 
b/src/Lucene.Net.Tests/Util/Fst/TestFSTs.cs
index 1912f1f..df67774 100644
--- a/src/Lucene.Net.Tests/Util/Fst/TestFSTs.cs
+++ b/src/Lucene.Net.Tests/Util/Fst/TestFSTs.cs
@@ -1,12 +1,12 @@
 using J2N.Collections.Generic.Extensions;
 using J2N.Threading.Atomic;
+using Lucene.Net.Diagnostics;
 using Lucene.Net.Index.Extensions;
 using Lucene.Net.Support;
 using Lucene.Net.Util.Automaton;
 using NUnit.Framework;
 using System;
 using System.Collections.Generic;
-using System.Diagnostics;
 using System.Globalization;
 using System.IO;
 using System.Linq;
@@ -571,7 +571,7 @@ namespace Lucene.Net.Util.Fst
                     long tMid = Environment.TickCount;
                     Console.WriteLine(((tMid - tStart) / 1000.0) + " sec to 
add all terms");
 
-                    Debug.Assert(builder.TermCount == ord);
+                    Debugging.Assert(() => builder.TermCount == ord);
                     FST<T> fst = builder.Finish();
                     long tEnd = Environment.TickCount;
                     Console.WriteLine(((tEnd - tMid) / 1000.0) + " sec to 
finish/pack");
diff --git a/src/Lucene.Net.Tests/Util/Packed/TestEliasFanoDocIdSet.cs 
b/src/Lucene.Net.Tests/Util/Packed/TestEliasFanoDocIdSet.cs
index 934890a..e7cb03c 100644
--- a/src/Lucene.Net.Tests/Util/Packed/TestEliasFanoDocIdSet.cs
+++ b/src/Lucene.Net.Tests/Util/Packed/TestEliasFanoDocIdSet.cs
@@ -1,4 +1,4 @@
-using System.Diagnostics;
+using Lucene.Net.Diagnostics;
 using BitSet = J2N.Collections.BitSet;
 
 namespace Lucene.Net.Util.Packed
@@ -52,7 +52,7 @@ namespace Lucene.Net.Util.Packed
                 {
                     doc = NO_MORE_DOCS;
                 }
-                Debug.Assert(doc < numBits);
+                Debugging.Assert(() => doc < numBits);
                 return doc;
             }
 
diff --git a/src/Lucene.Net.Tests/Util/Packed/TestEliasFanoSequence.cs 
b/src/Lucene.Net.Tests/Util/Packed/TestEliasFanoSequence.cs
index e207049..35b2633 100644
--- a/src/Lucene.Net.Tests/Util/Packed/TestEliasFanoSequence.cs
+++ b/src/Lucene.Net.Tests/Util/Packed/TestEliasFanoSequence.cs
@@ -1,7 +1,7 @@
 using Lucene.Net.Attributes;
+using Lucene.Net.Diagnostics;
 using NUnit.Framework;
 using System;
-using System.Diagnostics;
 using Assert = Lucene.Net.TestFramework.Assert;
 
 namespace Lucene.Net.Util.Packed
@@ -91,7 +91,7 @@ namespace Lucene.Net.Util.Packed
         private static void TstDecodeAdvanceToMultiples(long[] values, 
EliasFanoDecoder efd, long m)
         {
             // test advancing to multiples of m
-            Debug.Assert(m > 0);
+            Debugging.Assert(() => m > 0);
             long previousValue = -1L;
             long index = 0;
             long mm = m;
@@ -120,7 +120,7 @@ namespace Lucene.Net.Util.Packed
         private static void TstDecodeBackToMultiples(long[] values, 
EliasFanoDecoder efd, long m)
         {
             // test backing to multiples of m
-            Debug.Assert(m > 0);
+            Debugging.Assert(() => m > 0);
             efd.ToAfterSequence();
             int index = values.Length - 1;
             if (index < 0)
@@ -135,7 +135,7 @@ namespace Lucene.Net.Util.Packed
             while (index >= 0)
             {
                 expValue = values[index];
-                Debug.Assert(mm < previousValue);
+                Debugging.Assert(() => mm < previousValue);
                 if (expValue <= mm)
                 {
                     long backValue_ = efd.BackToValue(mm);
diff --git a/src/Lucene.Net.Tests/Util/Test2BPagedBytes.cs 
b/src/Lucene.Net.Tests/Util/Test2BPagedBytes.cs
index e9da5ad..63a75b9 100644
--- a/src/Lucene.Net.Tests/Util/Test2BPagedBytes.cs
+++ b/src/Lucene.Net.Tests/Util/Test2BPagedBytes.cs
@@ -1,7 +1,7 @@
+using Lucene.Net.Diagnostics;
 using Lucene.Net.Store;
 using NUnit.Framework;
 using System;
-using System.Diagnostics;
 using Assert = Lucene.Net.TestFramework.Assert;
 
 namespace Lucene.Net.Util
@@ -57,7 +57,7 @@ namespace Lucene.Net.Util
                 r2.NextBytes(bytes);
                 dataOutput.WriteBytes(bytes, bytes.Length);
                 long fp = dataOutput.GetFilePointer();
-                Debug.Assert(fp == lastFP + numBytes);
+                Debugging.Assert(() => fp == lastFP + numBytes);
                 lastFP = fp;
                 netBytes += numBytes;
             }
diff --git a/src/Lucene.Net.Tests/Util/TestWAH8DocIdSet.cs 
b/src/Lucene.Net.Tests/Util/TestWAH8DocIdSet.cs
index e6fa9d8..f31d3ce 100644
--- a/src/Lucene.Net.Tests/Util/TestWAH8DocIdSet.cs
+++ b/src/Lucene.Net.Tests/Util/TestWAH8DocIdSet.cs
@@ -1,8 +1,8 @@
+using Lucene.Net.Diagnostics;
 using Lucene.Net.Search;
 using NUnit.Framework;
 using System;
 using System.Collections.Generic;
-using System.Diagnostics;
 using Assert = Lucene.Net.TestFramework.Assert;
 using BitSet = J2N.Collections.BitSet;
 
@@ -94,7 +94,7 @@ namespace Lucene.Net.Util
         /// Create a random set which has <paramref name="numBitsSet"/> of its 
<paramref name="numBits"/> bits set. </summary>
         protected static OpenBitSet RandomOpenSet(int numBits, int numBitsSet)
         {
-            Debug.Assert(numBitsSet <= numBits);
+            Debugging.Assert(() => numBitsSet <= numBits);
             OpenBitSet set = new OpenBitSet(numBits);
             Random random = Random;
             if (numBitsSet == numBits)
diff --git 
a/src/dotnet/Lucene.Net.Tests.ICU/Search/PostingsHighlight/TestICUPostingsHighlighter.cs
 
b/src/dotnet/Lucene.Net.Tests.ICU/Search/PostingsHighlight/TestICUPostingsHighlighter.cs
index 4a1212c..29a1360 100644
--- 
a/src/dotnet/Lucene.Net.Tests.ICU/Search/PostingsHighlight/TestICUPostingsHighlighter.cs
+++ 
b/src/dotnet/Lucene.Net.Tests.ICU/Search/PostingsHighlight/TestICUPostingsHighlighter.cs
@@ -2,6 +2,7 @@
 using ICU4N.Text;
 using Lucene.Net.Analysis;
 using Lucene.Net.Attributes;
+using Lucene.Net.Diagnostics;
 using Lucene.Net.Documents;
 using Lucene.Net.Index;
 using Lucene.Net.Index.Extensions;
@@ -10,7 +11,6 @@ using Lucene.Net.Util;
 using NUnit.Framework;
 using System;
 using System.Collections.Generic;
-using System.Diagnostics;
 using System.Globalization;
 using System.IO;
 using System.Text;
@@ -774,8 +774,8 @@ namespace Lucene.Net.Search.PostingsHighlight
 
             protected override IList<string[]> LoadFieldValues(IndexSearcher 
searcher, string[] fields, int[] docids, int maxLength)
             {
-                Debug.Assert( fields.Length == 1);
-                Debug.Assert( docids.Length == 1);
+                Debugging.Assert(() => fields.Length == 1);
+                Debugging.Assert(() => docids.Length == 1);
                 String[][] contents = 
RectangularArrays.ReturnRectangularArray<string>(1, 1); //= new String[1][1];
                 contents[0][0] = text;
                 return contents;
@@ -1178,7 +1178,7 @@ namespace Lucene.Net.Search.PostingsHighlight
         {
             protected override char GetMultiValuedSeparator(string field)
             {
-                Debug.Assert( field.Equals("body", StringComparison.Ordinal));
+                Debugging.Assert(() => field.Equals("body", 
StringComparison.Ordinal));
                 return '\u2029';
             }
         }

Reply via email to