Lucene.Net.Tests.Document.TestField: Added tests for ToString()
diff --git a/src/Lucene.Net.Tests/Document/TestField.cs b/src/Lucene.Net.Tests/Document/TestField.cs
index d3173a3a..eabda5b 100644
--- a/src/Lucene.Net.Tests/Document/TestField.cs
+++ b/src/Lucene.Net.Tests/Document/TestField.cs
@@ -1,3 +1,4 @@
+using J2N.Globalization;
 using J2N.Text;
 using Lucene.Net.Analysis;
 using Lucene.Net.Analysis.Standard;
@@ -9,6 +10,8 @@
 using Lucene.Net.Util;
 using NUnit.Framework;
 using System;
+using System.Collections.Generic;
+using System.Globalization;
 using System.IO;
 using System.Text;
 using Assert = Lucene.Net.TestFramework.Assert;
@@ -709,7 +712,7 @@
         //        assertEquals(false, fieldType.tokenized());
 
         //        assertEquals(FieldType.NumericType.DOUBLE, fieldType.numericType());
-    
+
         //        doc.add(field);
         //        writer.addDocument(doc);
         //        writer.commit();
@@ -734,5 +737,83 @@
 
         //    dir.close();
         //}
+
+        public enum ToStringCulture
+        {
+            Invariant,
+            France
+        }
+
+        public static IEnumerable<TestCaseData> ToStringData(ToStringCulture cultureEnum)
+        {
+            CultureInfo culture = cultureEnum switch
+            {
+                ToStringCulture.France => new CultureInfo("fr-FR"),
+                _ => CultureInfo.InvariantCulture
+            };
+
+            string sep = culture.NumberFormat.NumberDecimalSeparator;
+
+            yield return new TestCaseData(new DoubleField("foo", 5d, Field.Store.NO), $"indexed,tokenized,omitNorms,indexOptions=DOCS_ONLY,numericType=DOUBLE,numericPrecisionStep=4<foo:5{sep}0>");
+            yield return new TestCaseData(new DoubleField("foo", 5d, Field.Store.YES), $"stored,indexed,tokenized,omitNorms,indexOptions=DOCS_ONLY,numericType=DOUBLE,numericPrecisionStep=4<foo:5{sep}0>");
+            yield return new TestCaseData(new DoubleDocValuesField("foo", 5d), "docValueType=NUMERIC<foo:4617315517961601024>");
+            yield return new TestCaseData(new SingleDocValuesField("foo", 5f), "docValueType=NUMERIC<foo:1084227584>");
+            yield return new TestCaseData(new SingleField("foo", 5f, Field.Store.NO), $"indexed,tokenized,omitNorms,indexOptions=DOCS_ONLY,numericType=SINGLE,numericPrecisionStep=4<foo:5{sep}0>");
+            yield return new TestCaseData(new SingleField("foo", 5f, Field.Store.YES), $"stored,indexed,tokenized,omitNorms,indexOptions=DOCS_ONLY,numericType=SINGLE,numericPrecisionStep=4<foo:5{sep}0>");
+            yield return new TestCaseData(new Int32Field("foo", 5, Field.Store.NO), "indexed,tokenized,omitNorms,indexOptions=DOCS_ONLY,numericType=INT32,numericPrecisionStep=4<foo:5>");
+            yield return new TestCaseData(new Int32Field("foo", 5, Field.Store.YES), "stored,indexed,tokenized,omitNorms,indexOptions=DOCS_ONLY,numericType=INT32,numericPrecisionStep=4<foo:5>");
+            yield return new TestCaseData(new NumericDocValuesField("foo", 5L), "docValueType=NUMERIC<foo:5>");
+            yield return new TestCaseData(new Int64Field("foo", 5L, Field.Store.NO), "indexed,tokenized,omitNorms,indexOptions=DOCS_ONLY,numericType=INT64,numericPrecisionStep=4<foo:5>");
+            yield return new TestCaseData(new Int64Field("foo", 5L, Field.Store.YES), "stored,indexed,tokenized,omitNorms,indexOptions=DOCS_ONLY,numericType=INT64,numericPrecisionStep=4<foo:5>");
+            yield return new TestCaseData(new SortedDocValuesField("foo", new BytesRef("bar")), "docValueType=SORTED<foo:[62 61 72]>");
+            yield return new TestCaseData(new BinaryDocValuesField("foo", new BytesRef("bar")), "docValueType=BINARY<foo:[62 61 72]>");
+            yield return new TestCaseData(new StringField("foo", "bar", Field.Store.NO), "indexed,omitNorms,indexOptions=DOCS_ONLY<foo:bar>");
+            yield return new TestCaseData(new StringField("foo", "bar", Field.Store.YES), "stored,indexed,omitNorms,indexOptions=DOCS_ONLY<foo:bar>");
+            yield return new TestCaseData(new TextField("foo", "bar", Field.Store.NO), "indexed,tokenized<foo:bar>");
+            yield return new TestCaseData(new TextField("foo", "bar", Field.Store.YES), "stored,indexed,tokenized<foo:bar>");
+            yield return new TestCaseData(new TextField("foo", new StringReader("bar")), "indexed,tokenized<foo:System.IO.StringReader>");
+            yield return new TestCaseData(new StoredField("foo", "bar".GetBytes(Encoding.UTF8)), "stored<foo:[62 61 72]>");
+            yield return new TestCaseData(new StoredField("foo", "bar".GetBytes(Encoding.UTF8), 0, 3), "stored<foo:[62 61 72]>");
+            yield return new TestCaseData(new StoredField("foo", new BytesRef("bar")), "stored<foo:[62 61 72]>");
+            yield return new TestCaseData(new StoredField("foo", "bar"), "stored<foo:bar>");
+            yield return new TestCaseData(new StoredField("foo", 1), "stored<foo:1>");
+            yield return new TestCaseData(new StoredField("foo", 1D), $"stored<foo:1{sep}0>");
+            yield return new TestCaseData(new StoredField("foo", 1F), $"stored<foo:1{sep}0>");
+            yield return new TestCaseData(new StoredField("foo", 1L), "stored<foo:1>");
+
+            // Negative Zero
+            yield return new TestCaseData(new DoubleField("foo", -0.0d, Field.Store.NO), $"indexed,tokenized,omitNorms,indexOptions=DOCS_ONLY,numericType=DOUBLE,numericPrecisionStep=4<foo:-0{sep}0>");
+            yield return new TestCaseData(new DoubleDocValuesField("foo", -0.0d), "docValueType=NUMERIC<foo:-9223372036854775808>");
+            yield return new TestCaseData(new DoubleDocValuesField("foo", 0.0d), "docValueType=NUMERIC<foo:0>");
+            yield return new TestCaseData(new SingleDocValuesField("foo", -0.0f), "docValueType=NUMERIC<foo:-2147483648>");
+            yield return new TestCaseData(new SingleDocValuesField("foo", 0.0f), "docValueType=NUMERIC<foo:0>");
+            yield return new TestCaseData(new SingleField("foo", -0.0f, Field.Store.NO), $"indexed,tokenized,omitNorms,indexOptions=DOCS_ONLY,numericType=SINGLE,numericPrecisionStep=4<foo:-0{sep}0>");
+            yield return new TestCaseData(new StoredField("foo", -0D), $"stored<foo:-0{sep}0>");
+            yield return new TestCaseData(new StoredField("foo", -0F), $"stored<foo:-0{sep}0>");
+        }
+
+        [Test]
+        [LuceneNetSpecific]
+        [TestCaseSource("ToStringData", new object[] { ToStringCulture.Invariant })]
+        public void TestToStringInvariant(Field field, string expected)
+        {
+            using (var cultureContext = new CultureContext(CultureInfo.InvariantCulture))
+            {
+                string actual = field.ToString();
+                Assert.AreEqual(expected, actual);
+            }
+        }
+
+        [Test]
+        [LuceneNetSpecific]
+        [TestCaseSource("ToStringData", new object[] { ToStringCulture.France })]
+        public void TestToStringFrance(Field field, string expected)
+        {
+            using (var cultureContext = new CultureContext(new CultureInfo("fr-FR")))
+            {
+                string actual = field.ToString();
+                Assert.AreEqual(expected, actual);
+            }
+        }
     }
 }
\ No newline at end of file