You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucenenet.apache.org by ni...@apache.org on 2016/12/06 15:11:48 UTC

[13/58] lucenenet git commit: Getting TestNumericQueryParser closer to compiling

Getting TestNumericQueryParser closer to compiling


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

Branch: refs/heads/master
Commit: 01233db7c2d91a4812f423876276dd7f4b42f6ce
Parents: 94f22c1
Author: Shad Storhaug <sh...@shadstorhaug.com>
Authored: Tue Nov 29 09:55:22 2016 +0700
Committer: Shad Storhaug <sh...@shadstorhaug.com>
Committed: Tue Nov 29 09:55:22 2016 +0700

----------------------------------------------------------------------
 .../JavaCompatibility/LuceneTestCase.cs         |  12 +
 .../JavaCompatibility/RandomHelpers.cs          |  18 +
 .../Flexible/Standard/TestNumericQueryParser.cs | 898 ++++++++++---------
 3 files changed, 500 insertions(+), 428 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucenenet/blob/01233db7/src/Lucene.Net.TestFramework/JavaCompatibility/LuceneTestCase.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.TestFramework/JavaCompatibility/LuceneTestCase.cs b/src/Lucene.Net.TestFramework/JavaCompatibility/LuceneTestCase.cs
index f0dc587..88f8f9b 100644
--- a/src/Lucene.Net.TestFramework/JavaCompatibility/LuceneTestCase.cs
+++ b/src/Lucene.Net.TestFramework/JavaCompatibility/LuceneTestCase.cs
@@ -4,6 +4,8 @@ using System.Collections.Generic;
 using System.Linq;
 using NUnit.Framework;
 using System.Diagnostics;
+using System.Globalization;
+using Lucene.Net.Randomized.Generators;
 
 namespace Lucene.Net.Util
 {
@@ -241,5 +243,15 @@ namespace Lucene.Net.Util
                 return v1 * multiplier;
             }
         }
+
+        protected virtual CultureInfo randomLocale(Random random)
+        {
+            return RandomInts.RandomFrom(random, CultureInfo.GetCultures(CultureTypes.AllCultures));
+        }
+
+        protected virtual TimeZoneInfo randomTimeZone(Random random)
+        {
+            return RandomInts.RandomFrom(random, TimeZoneInfo.GetSystemTimeZones());
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/01233db7/src/Lucene.Net.TestFramework/JavaCompatibility/RandomHelpers.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.TestFramework/JavaCompatibility/RandomHelpers.cs b/src/Lucene.Net.TestFramework/JavaCompatibility/RandomHelpers.cs
index 5a66516..09d9b96 100644
--- a/src/Lucene.Net.TestFramework/JavaCompatibility/RandomHelpers.cs
+++ b/src/Lucene.Net.TestFramework/JavaCompatibility/RandomHelpers.cs
@@ -9,9 +9,27 @@ namespace Lucene.Net
             return random.Next(maxValue);
         }
 
+        public static int nextInt(this Random random)
+        {
+            return random.Next();
+        }
+
         public static bool nextBoolean(this Random random)
         {
             return (random.Next(1, 100) > 50);
         }
+
+        // http://stackoverflow.com/a/6651656
+        public static long nextLong(this Random random)
+        {
+            byte[] buffer = new byte[8];
+            random.NextBytes(buffer);
+            return BitConverter.ToInt64(buffer, 0);
+        }
+
+        public static float nextFloat(this Random random)
+        {
+            return (float)random.NextDouble();
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/01233db7/src/Lucene.Net.Tests.QueryParser/Flexible/Standard/TestNumericQueryParser.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Tests.QueryParser/Flexible/Standard/TestNumericQueryParser.cs b/src/Lucene.Net.Tests.QueryParser/Flexible/Standard/TestNumericQueryParser.cs
index 04ac847..29f6031 100644
--- a/src/Lucene.Net.Tests.QueryParser/Flexible/Standard/TestNumericQueryParser.cs
+++ b/src/Lucene.Net.Tests.QueryParser/Flexible/Standard/TestNumericQueryParser.cs
@@ -1,15 +1,18 @@
-\ufeff// LUCENENET TODO: Complete implementation
-
-//using Lucene.Net;
+\ufeff//using Lucene.Net;
 //using Lucene.Net.Analysis;
+//using Lucene.Net.Documents;
 //using Lucene.Net.Index;
+//using Lucene.Net.QueryParsers.Flexible.Core.Parser;
+//using Lucene.Net.QueryParsers.Flexible.Standard.Config;
 //using Lucene.Net.QueryParsers.Flexible.Standard.Parser;
 //using Lucene.Net.Search;
 //using Lucene.Net.Store;
+//using Lucene.Net.Support;
 //using Lucene.Net.Util;
 //using NUnit.Framework;
 //using System;
 //using System.Collections.Generic;
+//using System.Globalization;
 //using System.Linq;
 //using System.Text;
 //using System.Threading.Tasks;
@@ -18,506 +21,545 @@
 //{
 //    public class TestNumericQueryParser : LuceneTestCase
 //    {
-//        private static enum NumberType
+//        public enum NumberType
 //        {
-//            NEGATIVE, ZERO, POSITIVE;
+//            NEGATIVE, ZERO, POSITIVE
 //        }
 
-//        private readonly static int[] DATE_STYLES = {DateFormat.FULL, DateFormat.LONG,
-//      DateFormat.MEDIUM, DateFormat.SHORT};
+//        /// <summary>
+//        /// LUCENENET specific enum for mimicking the Java DateFormat
+//        /// </summary>
+//        public enum DateFormat
+//        {
+//            FULL, LONG,
+//            MEDIUM, SHORT
+//        }
+
+//        //  private readonly static int[] DATE_STYLES = {DateFormat.FULL, DateFormat.LONG,
+//        //DateFormat.MEDIUM, DateFormat.SHORT};
+//        private readonly static int[] DATE_STYLES = {(int)DateFormat.FULL, (int)DateFormat.LONG,
+//            (int)DateFormat.MEDIUM, (int)DateFormat.SHORT};
 
 //        private readonly static int PRECISION_STEP = 8;
 //        private readonly static String FIELD_NAME = "field";
-//        private static Locale LOCALE;
-//        private static TimeZone TIMEZONE;
-//        private static Map<String, Number> RANDOM_NUMBER_MAP;
-//        private readonly static EscapeQuerySyntax ESCAPER = new EscapeQuerySyntaxImpl();
+//        private static CultureInfo LOCALE;
+//        private static TimeZoneInfo TIMEZONE;
+//        private static IDictionary<String, /*Number*/ object> RANDOM_NUMBER_MAP;
+//        private readonly static IEscapeQuerySyntax ESCAPER = new EscapeQuerySyntaxImpl();
 //        private readonly static String DATE_FIELD_NAME = "date";
 //        private static int DATE_STYLE;
 //        private static int TIME_STYLE;
 
 //        private static Analyzer ANALYZER;
 
-//        private static NumberFormat NUMBER_FORMAT;
+//        private static /*NumberFormat*/ string NUMBER_FORMAT;
 
 //        private static StandardQueryParser qp;
 
-//        private static NumberDateFormat DATE_FORMAT;
+//        private static /*NumberDateFormat*/ string DATE_FORMAT;
 
 //        private static Directory directory = null;
 //        private static IndexReader reader = null;
 //        private static IndexSearcher searcher = null;
 
-//        private static bool checkDateFormatSanity(DateFormat dateFormat, long date)
+//        private static bool checkDateFormatSanity(/*DateFormat*/string dateFormat, long date)
 //        {
-//            try
-//            {
-//                return date == dateFormat.parse(dateFormat.format(new DateTime(date)))
-//                  .getTime();
-//            }
-//            catch (ParseException e)
-//            {
-//                return false;
-//            }
+//            DateTime result;
+//            return DateTime.TryParseExact(new DateTime(date).ToString(dateFormat),
+//                dateFormat, CultureInfo.CurrentCulture, DateTimeStyles.RoundtripKind, out result);
+//            //try
+//            //{
+//            //    return date == dateFormat.parse(dateFormat.format(new DateTime(date)))
+//            //      .getTime();
+//            //}
+//            //catch (ParseException e)
+//            //{
+//            //    return false;
+//            //}
 //        }
 
 //        [TestFixtureSetUp]
-//  public static void beforeClass() 
+//        public void BeforeClass()
 //        {
 //            ANALYZER = new MockAnalyzer(Random());
-    
-//    qp = new StandardQueryParser(ANALYZER);
-
-//        HashMap<String, Number> randomNumberMap = new HashMap<>();
-
-//        SimpleDateFormat dateFormat;
-//        long randomDate;
-//        bool dateFormatSanityCheckPass;
-//        int count = 0;
-//    do {
-//      if (count > 100) {
-//        fail("This test has problems to find a sane random DateFormat/NumberFormat. Stopped trying after 100 iterations.");
-//    }
 
-//    dateFormatSanityCheckPass = true;
-//      LOCALE = randomLocale(Random());
-//      TIMEZONE = randomTimeZone(Random());
-//      DATE_STYLE = randomDateStyle(Random());
-//      TIME_STYLE = randomDateStyle(Random());
-      
-//      // assumes localized date pattern will have at least year, month, day,
-//      // hour, minute
-//      dateFormat = (SimpleDateFormat) DateFormat.getDateTimeInstance(
-//          DATE_STYLE, TIME_STYLE, LOCALE);
-      
-//      // not all date patterns includes era, full year, timezone and second,
-//      // so we add them here
-//      dateFormat.applyPattern(dateFormat.toPattern() + " G s Z yyyy");
-//      dateFormat.setTimeZone(TIMEZONE);
-      
-//      DATE_FORMAT = new NumberDateFormat(dateFormat);
-      
-//      do {
-//        randomDate = Random().nextLong();
-
-//    // prune date value so it doesn't pass in insane values to some
-//    // calendars.
-//    randomDate = randomDate % 3400000000000l;
-        
-//        // truncate to second
-//        randomDate = (randomDate / 1000L) * 1000L;
-        
-//        // only positive values
-//        randomDate = Math.Abs(randomDate);
-//      } while (randomDate == 0L);
-      
-//      dateFormatSanityCheckPass &= checkDateFormatSanity(dateFormat, randomDate);
-
-//dateFormatSanityCheckPass &= checkDateFormatSanity(dateFormat, 0);
-
-//dateFormatSanityCheckPass &= checkDateFormatSanity(dateFormat,
-//          -randomDate);
-
-//count++;
-//    } while (!dateFormatSanityCheckPass);
-    
-//    NUMBER_FORMAT = NumberFormat.getNumberInstance(LOCALE);
-//    NUMBER_FORMAT.setMaximumFractionDigits((Random().nextInt() & 20) + 1);
-//    NUMBER_FORMAT.setMinimumFractionDigits((Random().nextInt() & 20) + 1);
-//    NUMBER_FORMAT.setMaximumIntegerDigits((Random().nextInt() & 20) + 1);
-//    NUMBER_FORMAT.setMinimumIntegerDigits((Random().nextInt() & 20) + 1);
-    
-//    double randomDouble;
-//long randomLong;
-//int randomInt;
-//float randomFloat;
-    
-//    while ((randomLong = normalizeNumber(Math.abs(Random().nextLong()))
-//        .longValue()) == 0L)
-//      ;
-//    while ((randomDouble = normalizeNumber(Math.abs(Random().nextDouble()))
-//        .doubleValue()) == 0.0)
-//      ;
-//    while ((randomFloat = normalizeNumber(Math.abs(Random().nextFloat()))
-//        .floatValue()) == 0.0f)
-//      ;
-//    while ((randomInt = normalizeNumber(Math.abs(Random().nextInt())).intValue()) == 0)
-//      ;
-    
-//    randomNumberMap.put(NumericType.LONG.name(), randomLong);
-//    randomNumberMap.put(NumericType.INT.name(), randomInt);
-//    randomNumberMap.put(NumericType.FLOAT.name(), randomFloat);
-//    randomNumberMap.put(NumericType.DOUBLE.name(), randomDouble);
-//    randomNumberMap.put(DATE_FIELD_NAME, randomDate);
-    
-//    RANDOM_NUMBER_MAP = Collections.UnmodifiableMap(randomNumberMap);
-    
-//    directory = newDirectory();
-//RandomIndexWriter writer = new RandomIndexWriter(Random(), directory,
-//    newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random()))
-//        .setMaxBufferedDocs(TestUtil.NextInt(Random(), 50, 1000))
-//        .setMergePolicy(newLogMergePolicy()));
-
-//Document doc = new Document();
-//HashMap<String, NumericConfig> numericConfigMap = new HashMap<>();
-//HashMap<String, Field> numericFieldMap = new HashMap<>();
-//qp.setNumericConfigMap(numericConfigMap);
-    
-//    for (NumericType type : NumericType.values()) {
-//      numericConfigMap.put(type.name(), new NumericConfig(PRECISION_STEP,
-//          NUMBER_FORMAT, type));
-
-//      FieldType ft = new FieldType(IntField.TYPE_NOT_STORED);
-//ft.setNumericType(type);
-//      ft.setStored(true);
-//      ft.setNumericPrecisionStep(PRECISION_STEP);
-//      ft.freeze();
-//      final Field field;
-
-//      switch(type) {
-//      case INT:
-//        field = new IntField(type.name(), 0, ft);
-//        break;
-//      case FLOAT:
-//        field = new FloatField(type.name(), 0.0f, ft);
-//        break;
-//      case LONG:
-//        field = new LongField(type.name(), 0l, ft);
-//        break;
-//      case DOUBLE:
-//        field = new DoubleField(type.name(), 0.0, ft);
-//        break;
-//      default:
-//        fail();
-//field = null;
-//      }
-//      numericFieldMap.put(type.name(), field);
-//      doc.add(field);
-//    }
-    
-//    numericConfigMap.put(DATE_FIELD_NAME, new NumericConfig(PRECISION_STEP,
-//        DATE_FORMAT, NumericType.LONG));
-//    FieldType ft = new FieldType(LongField.TYPE_NOT_STORED);
-//ft.setStored(true);
-//    ft.setNumericPrecisionStep(PRECISION_STEP);
-//    LongField dateField = new LongField(DATE_FIELD_NAME, 0l, ft);
-//numericFieldMap.put(DATE_FIELD_NAME, dateField);
-//    doc.add(dateField);
-    
-//    for (NumberType numberType : NumberType.values()) {
-//      setFieldValues(numberType, numericFieldMap);
-//      if (VERBOSE) System.out.println("Indexing document: " + doc);
-//writer.addDocument(doc);
-//    }
-    
-//    reader = writer.getReader();
-//    searcher = newSearcher(reader);
-//writer.close();
-    
-//  }
-  
-//  private static Number getNumberType(NumberType numberType, String fieldName)
-//{
+//            qp = new StandardQueryParser(ANALYZER);
 
-//    if (numberType == null)
-//    {
-//        return null;
-//    }
+//            HashMap<String, /*Number*/object> randomNumberMap = new HashMap<string, object>();
 
-//    switch (numberType)
-//    {
-
-//        case POSITIVE:
-//            return RANDOM_NUMBER_MAP.get(fieldName);
+//            /*SimpleDateFormat*/
+//            string dateFormat;
+//            long randomDate;
+//            bool dateFormatSanityCheckPass;
+//            int count = 0;
+//            do
+//            {
+//                if (count > 100)
+//                {
+//                    fail("This test has problems to find a sane random DateFormat/NumberFormat. Stopped trying after 100 iterations.");
+//                }
+
+//                dateFormatSanityCheckPass = true;
+//                LOCALE = randomLocale(Random());
+//                TIMEZONE = randomTimeZone(Random());
+//                DATE_STYLE = randomDateStyle(Random());
+//                TIME_STYLE = randomDateStyle(Random());
+
+//                //// assumes localized date pattern will have at least year, month, day,
+//                //// hour, minute
+//                //dateFormat = (SimpleDateFormat)DateFormat.getDateTimeInstance(
+//                //    DATE_STYLE, TIME_STYLE, LOCALE);
+
+//                //// not all date patterns includes era, full year, timezone and second,
+//                //// so we add them here
+//                //dateFormat.applyPattern(dateFormat.toPattern() + " G s Z yyyy");
+//                //dateFormat.setTimeZone(TIMEZONE);
+
+//                //DATE_FORMAT = new NumberDateFormat(dateFormat);
+
+
+//                do
+//                {
+//                    randomDate = Random().nextLong();
+
+//                    // prune date value so it doesn't pass in insane values to some
+//                    // calendars.
+//                    randomDate = randomDate % 3400000000000l;
+
+//                    // truncate to second
+//                    randomDate = (randomDate / 1000L) * 1000L;
+
+//                    // only positive values
+//                    randomDate = Math.Abs(randomDate);
+//                } while (randomDate == 0L);
+
+//                dateFormatSanityCheckPass &= checkDateFormatSanity(dateFormat, randomDate);
+
+//                dateFormatSanityCheckPass &= checkDateFormatSanity(dateFormat, 0);
+
+//                dateFormatSanityCheckPass &= checkDateFormatSanity(dateFormat,
+//                          -randomDate);
+
+//                count++;
+//            } while (!dateFormatSanityCheckPass);
+
+//            NUMBER_FORMAT = NumberFormat.getNumberInstance(LOCALE);
+//            NUMBER_FORMAT.setMaximumFractionDigits((Random().nextInt() & 20) + 1);
+//            NUMBER_FORMAT.setMinimumFractionDigits((Random().nextInt() & 20) + 1);
+//            NUMBER_FORMAT.setMaximumIntegerDigits((Random().nextInt() & 20) + 1);
+//            NUMBER_FORMAT.setMinimumIntegerDigits((Random().nextInt() & 20) + 1);
+
+//            double randomDouble;
+//            long randomLong;
+//            int randomInt;
+//            float randomFloat;
+
+//            while ((randomLong = Convert.ToInt64(normalizeNumber(Math.Abs(Random().nextLong()))
+//                )) == 0L)
+//                ;
+//            while ((randomDouble = Convert.ToDouble(normalizeNumber(Math.Abs(Random().NextDouble()))
+//                )) == 0.0)
+//                ;
+//            while ((randomFloat = Convert.ToSingle(normalizeNumber(Math.Abs(Random().nextFloat()))
+//                )) == 0.0f)
+//                ;
+//            while ((randomInt = Convert.ToInt32(normalizeNumber(Math.Abs(Random().nextInt())))) == 0)
+//                ;
+
+//            randomNumberMap.Put(FieldType.NumericType.LONG.ToString(), randomLong);
+//            randomNumberMap.Put(FieldType.NumericType.INT.ToString(), randomInt);
+//            randomNumberMap.Put(FieldType.NumericType.FLOAT.ToString(), randomFloat);
+//            randomNumberMap.Put(FieldType.NumericType.DOUBLE.ToString(), randomDouble);
+//            randomNumberMap.Put(DATE_FIELD_NAME, randomDate);
+
+//            RANDOM_NUMBER_MAP = Collections.UnmodifiableMap(randomNumberMap);
+
+//            directory = NewDirectory();
+//            RandomIndexWriter writer = new RandomIndexWriter(Random(), directory,
+//                NewIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random()))
+//                    .SetMaxBufferedDocs(TestUtil.NextInt(Random(), 50, 1000))
+//                    .SetMergePolicy(NewLogMergePolicy()));
+
+//            Document doc = new Document();
+//            HashMap<String, NumericConfig> numericConfigMap = new HashMap<String, NumericConfig>();
+//            HashMap<String, Field> numericFieldMap = new HashMap<String, Field>();
+//            qp.SetNumericConfigMap(numericConfigMap);
+
+//            foreach (FieldType.NumericType type in Enum.GetValues(typeof(FieldType.NumericType)))
+//            {
+//                numericConfigMap.Put(type.ToString(), new NumericConfig(PRECISION_STEP,
+//                    NUMBER_FORMAT, type));
+
+//                FieldType ft2 = new FieldType(IntField.TYPE_NOT_STORED);
+//                ft2.NumericTypeValue = (type);
+//                ft2.Stored = (true);
+//                ft2.NumericPrecisionStep = (PRECISION_STEP);
+//                ft2.Freeze();
+//                Field field;
+
+//                switch (type)
+//                {
+//                    case FieldType.NumericType.INT:
+//                        field = new IntField(type.ToString(), 0, ft2);
+//                        break;
+//                    case FieldType.NumericType.FLOAT:
+//                        field = new FloatField(type.ToString(), 0.0f, ft2);
+//                        break;
+//                    case FieldType.NumericType.LONG:
+//                        field = new LongField(type.ToString(), 0L, ft2);
+//                        break;
+//                    case FieldType.NumericType.DOUBLE:
+//                        field = new DoubleField(type.ToString(), 0.0, ft2);
+//                        break;
+//                    default:
+//                        fail();
+//                        field = null;
+//                        break;
+//                }
+//                numericFieldMap.Put(type.ToString(), field);
+//                doc.Add(field);
+//            }
 
-//        case NEGATIVE:
-//            Number number = RANDOM_NUMBER_MAP.get(fieldName);
+//            numericConfigMap.Put(DATE_FIELD_NAME, new NumericConfig(PRECISION_STEP,
+//                DATE_FORMAT, FieldType.NumericType.LONG));
+//            FieldType ft = new FieldType(LongField.TYPE_NOT_STORED);
+//            ft.Stored = (true);
+//            ft.NumericPrecisionStep = (PRECISION_STEP);
+//            LongField dateField = new LongField(DATE_FIELD_NAME, 0l, ft);
+//            numericFieldMap.Put(DATE_FIELD_NAME, dateField);
+//            doc.Add(dateField);
 
-//            if (NumericType.LONG.name().equals(fieldName)
-//                || DATE_FIELD_NAME.equals(fieldName))
+//            foreach (NumberType numberType in Enum.GetValues(typeof(NumberType)))
 //            {
-//                number = -number.longValue();
+//                setFieldValues(numberType, numericFieldMap);
+//                if (VERBOSE) Console.WriteLine("Indexing document: " + doc);
+//                writer.AddDocument(doc);
+//            }
+
+//            reader = writer.Reader;
+//            searcher = NewSearcher(reader);
+//            writer.Dispose();
+
+//        }
 
+//        private static /*Number*/ object getNumberType(NumberType? numberType, String fieldName)
+//        {
+
+//            if (numberType == null)
+//            {
+//                return null;
 //            }
-//            else if (NumericType.DOUBLE.name().equals(fieldName))
+
+//            switch (numberType)
 //            {
-//                number = -number.doubleValue();
+
+//                case NumberType.POSITIVE:
+//                    return RANDOM_NUMBER_MAP[fieldName];
+
+//                case NumberType.NEGATIVE:
+//                    /*Number*/
+//                    object number = RANDOM_NUMBER_MAP[fieldName];
+
+//                    if (FieldType.NumericType.LONG.ToString().equals(fieldName)
+//                        || DATE_FIELD_NAME.equals(fieldName))
+//                    {
+//                        number = -Convert.ToInt64(number);
+
+//                    }
+//                    else if (FieldType.NumericType.DOUBLE.ToString().equals(fieldName))
+//                    {
+//                        number = -Convert.ToDouble(number);
+
+//                    }
+//                    else if (FieldType.NumericType.FLOAT.ToString().equals(fieldName))
+//                    {
+//                        number = -Convert.ToSingle(number);
+
+//                    }
+//                    else if (FieldType.NumericType.INT.ToString().equals(fieldName))
+//                    {
+//                        number = -Convert.ToInt32(number);
+
+//                    }
+//                    else
+//                    {
+//                        throw new ArgumentException("field name not found: "
+//                            + fieldName);
+//                    }
+
+//                    return number;
+
+//                default:
+//                    return 0;
 
 //            }
-//            else if (NumericType.FLOAT.name().equals(fieldName))
+
+//        }
+
+//        private static void setFieldValues(NumberType numberType,
+//            HashMap<String, Field> numericFieldMap)
+//        {
+
+//            /*Number*/
+//            object number = getNumberType(numberType, FieldType.NumericType.DOUBLE
+//     .ToString());
+//            numericFieldMap[FieldType.NumericType.DOUBLE.ToString()].DoubleValue = Convert.ToDouble(
+//                number);
+
+//            number = getNumberType(numberType, FieldType.NumericType.INT.ToString());
+//            numericFieldMap[FieldType.NumericType.INT.ToString()].IntValue = Convert.ToInt32(
+//                number);
+
+//            number = getNumberType(numberType, FieldType.NumericType.LONG.ToString());
+//            numericFieldMap[FieldType.NumericType.LONG.ToString()].LongValue = Convert.ToInt64(
+//                number);
+
+//            number = getNumberType(numberType, FieldType.NumericType.FLOAT.ToString());
+//            numericFieldMap[FieldType.NumericType.FLOAT.ToString()].FloatValue = Convert.ToSingle(
+//                number);
+
+//            number = getNumberType(numberType, DATE_FIELD_NAME);
+//            numericFieldMap[DATE_FIELD_NAME].LongValue = Convert.ToInt64(number);
+//        }
+
+//        private static int randomDateStyle(Random random)
+//        {
+//            return DATE_STYLES[random.nextInt(DATE_STYLES.Length)];
+//        }
+
+//        [Test]
+//        public void testInclusiveNumericRange()
+//        {
+//            assertRangeQuery(NumberType.ZERO, NumberType.ZERO, true, true, 1);
+//            assertRangeQuery(NumberType.ZERO, NumberType.POSITIVE, true, true, 2);
+//            assertRangeQuery(NumberType.NEGATIVE, NumberType.ZERO, true, true, 2);
+//            assertRangeQuery(NumberType.NEGATIVE, NumberType.POSITIVE, true, true, 3);
+//            assertRangeQuery(NumberType.NEGATIVE, NumberType.NEGATIVE, true, true, 1);
+//        }
+
+//        [Test]
+//        // test disabled since standard syntax parser does not work with inclusive and
+//        // exclusive at the same time
+//        public void testInclusiveLowerNumericRange()
+//        {
+//            assertRangeQuery(NumberType.NEGATIVE, NumberType.ZERO, false, true, 1);
+//            assertRangeQuery(NumberType.ZERO, NumberType.POSITIVE, false, true, 1);
+//            assertRangeQuery(NumberType.NEGATIVE, NumberType.POSITIVE, false, true, 2);
+//            assertRangeQuery(NumberType.NEGATIVE, NumberType.NEGATIVE, false, true, 0);
+//        }
+
+//        [Test]
+//        // test disabled since standard syntax parser does not work with inclusive and
+//        // exclusive at the same time
+//        public void testInclusiveUpperNumericRange()
+//        {
+//            assertRangeQuery(NumberType.NEGATIVE, NumberType.ZERO, true, false, 1);
+//            assertRangeQuery(NumberType.ZERO, NumberType.POSITIVE, true, false, 1);
+//            assertRangeQuery(NumberType.NEGATIVE, NumberType.POSITIVE, true, false, 2);
+//            assertRangeQuery(NumberType.NEGATIVE, NumberType.NEGATIVE, true, false, 0);
+//        }
+
+//        [Test]
+//        public void testExclusiveNumericRange()
+//        {
+//            assertRangeQuery(NumberType.ZERO, NumberType.ZERO, false, false, 0);
+//            assertRangeQuery(NumberType.ZERO, NumberType.POSITIVE, false, false, 0);
+//            assertRangeQuery(NumberType.NEGATIVE, NumberType.ZERO, false, false, 0);
+//            assertRangeQuery(NumberType.NEGATIVE, NumberType.POSITIVE, false, false, 1);
+//            assertRangeQuery(NumberType.NEGATIVE, NumberType.NEGATIVE, false, false, 0);
+//        }
+
+//        [Test]
+//        public void testOpenRangeNumericQuery()
+//        {
+//            assertOpenRangeQuery(NumberType.ZERO, "<", 1);
+//            assertOpenRangeQuery(NumberType.POSITIVE, "<", 2);
+//            assertOpenRangeQuery(NumberType.NEGATIVE, "<", 0);
+
+//            assertOpenRangeQuery(NumberType.ZERO, "<=", 2);
+//            assertOpenRangeQuery(NumberType.POSITIVE, "<=", 3);
+//            assertOpenRangeQuery(NumberType.NEGATIVE, "<=", 1);
+
+//            assertOpenRangeQuery(NumberType.ZERO, ">", 1);
+//            assertOpenRangeQuery(NumberType.POSITIVE, ">", 0);
+//            assertOpenRangeQuery(NumberType.NEGATIVE, ">", 2);
+
+//            assertOpenRangeQuery(NumberType.ZERO, ">=", 2);
+//            assertOpenRangeQuery(NumberType.POSITIVE, ">=", 1);
+//            assertOpenRangeQuery(NumberType.NEGATIVE, ">=", 3);
+
+//            assertOpenRangeQuery(NumberType.NEGATIVE, "=", 1);
+//            assertOpenRangeQuery(NumberType.ZERO, "=", 1);
+//            assertOpenRangeQuery(NumberType.POSITIVE, "=", 1);
+
+//            assertRangeQuery(NumberType.NEGATIVE, null, true, true, 3);
+//            assertRangeQuery(NumberType.NEGATIVE, null, false, true, 2);
+//            assertRangeQuery(NumberType.POSITIVE, null, true, false, 1);
+//            assertRangeQuery(NumberType.ZERO, null, false, false, 1);
+
+//            assertRangeQuery(null, NumberType.POSITIVE, true, true, 3);
+//            assertRangeQuery(null, NumberType.POSITIVE, true, false, 2);
+//            assertRangeQuery(null, NumberType.NEGATIVE, false, true, 1);
+//            assertRangeQuery(null, NumberType.ZERO, false, false, 1);
+
+//            assertRangeQuery(null, null, false, false, 3);
+//            assertRangeQuery(null, null, true, true, 3);
+
+//        }
+
+//        [Test]
+//        public void testSimpleNumericQuery()
+//        {
+//            assertSimpleQuery(NumberType.ZERO, 1);
+//            assertSimpleQuery(NumberType.POSITIVE, 1);
+//            assertSimpleQuery(NumberType.NEGATIVE, 1);
+//        }
+
+//        public void assertRangeQuery(NumberType? lowerType, NumberType? upperType,
+//            bool lowerInclusive, bool upperInclusive, int expectedDocCount)
+//        {
+
+
+//            StringBuilder sb = new StringBuilder();
+
+//            String lowerInclusiveStr = (lowerInclusive ? "[" : "{");
+//            String upperInclusiveStr = (upperInclusive ? "]" : "}");
+
+//            foreach (FieldType.NumericType type in Enum.GetValues(typeof(FieldType.NumericType)))
 //            {
-//                number = -number.floatValue();
+//                String lowerStr = numberToString(getNumberType(lowerType, type.ToString()));
+//                String upperStr = numberToString(getNumberType(upperType, type.ToString()));
 
+//                sb.append("+").append(type.ToString()).append(':').append(lowerInclusiveStr)
+//                  .append('"').append(lowerStr).append("\" TO \"").append(upperStr)
+//                  .append('"').append(upperInclusiveStr).append(' ');
 //            }
-//            else if (NumericType.INT.name().equals(fieldName))
+
+//            /*Number*/
+//            object lowerDateNumber = getNumberType(lowerType, DATE_FIELD_NAME);
+//            /*Number*/
+//            object upperDateNumber = getNumberType(upperType, DATE_FIELD_NAME);
+//            String lowerDateStr;
+//            String upperDateStr;
+
+//            if (lowerDateNumber != null)
 //            {
-//                number = -number.intValue();
+//                lowerDateStr = ESCAPER.Escape(
+//                    DATE_FORMAT.format(new DateTime(lowerDateNumber.longValue())), LOCALE,
+//                    EscapeQuerySyntax.Type.STRING).toString();
 
 //            }
 //            else
 //            {
-//                throw new IllegalArgumentException("field name not found: "
-//                    + fieldName);
+//                lowerDateStr = "*";
 //            }
 
-//            return number;
-
-//        default:
-//            return 0;
-
-//    }
-
-//}
-
-//private static void setFieldValues(NumberType numberType,
-//    HashMap<String, Field> numericFieldMap)
-//{
-
-//    Number number = getNumberType(numberType, NumericType.DOUBLE
-//        .name());
-//    numericFieldMap.get(NumericType.DOUBLE.name()).setDoubleValue(
-//        number.doubleValue());
+//            if (upperDateNumber != null)
+//            {
+//                upperDateStr = ESCAPER.Escape(
+//                      DATE_FORMAT.format(new DateTime(upperDateNumber.longValue())), LOCALE,
+//                      EscapeQuerySyntax.Type.STRING).toString();
 
-//    number = getNumberType(numberType, NumericType.INT.name());
-//    numericFieldMap.get(NumericType.INT.name()).setIntValue(
-//        number.intValue());
+//            }
+//            else
+//            {
+//                upperDateStr = "*";
+//            }
 
-//    number = getNumberType(numberType, NumericType.LONG.name());
-//    numericFieldMap.get(NumericType.LONG.name()).setLongValue(
-//        number.longValue());
+//            sb.append("+").append(DATE_FIELD_NAME).append(':')
+//                .append(lowerInclusiveStr).append('"').append(lowerDateStr).append(
+//                    "\" TO \"").append(upperDateStr).append('"').append(
+//                    upperInclusiveStr);
 
-//    number = getNumberType(numberType, NumericType.FLOAT.name());
-//    numericFieldMap.get(NumericType.FLOAT.name()).setFloatValue(
-//        number.floatValue());
 
-//    number = getNumberType(numberType, DATE_FIELD_NAME);
-//    numericFieldMap.get(DATE_FIELD_NAME).setLongValue(number.longValue());
-//}
+//            testQuery(sb.toString(), expectedDocCount);
 
-//private static int randomDateStyle(Random random)
-//{
-//    return DATE_STYLES[random.nextInt(DATE_STYLES.length)];
-//}
+//        }
 
-//@Test
-//  public void testInclusiveNumericRange() throws Exception
-//{
-//    assertRangeQuery(NumberType.ZERO, NumberType.ZERO, true, true, 1);
-//    assertRangeQuery(NumberType.ZERO, NumberType.POSITIVE, true, true, 2);
-//    assertRangeQuery(NumberType.NEGATIVE, NumberType.ZERO, true, true, 2);
-//    assertRangeQuery(NumberType.NEGATIVE, NumberType.POSITIVE, true, true, 3);
-//    assertRangeQuery(NumberType.NEGATIVE, NumberType.NEGATIVE, true, true, 1);
-//}
+//        public void assertOpenRangeQuery(NumberType boundType, String @operator, int expectedDocCount)
+//        {
 
-//@Test
-//  // test disabled since standard syntax parser does not work with inclusive and
-//  // exclusive at the same time
-//  public void testInclusiveLowerNumericRange() throws Exception
-//{
-//    assertRangeQuery(NumberType.NEGATIVE, NumberType.ZERO, false, true, 1);
-//    assertRangeQuery(NumberType.ZERO, NumberType.POSITIVE, false, true, 1);
-//    assertRangeQuery(NumberType.NEGATIVE, NumberType.POSITIVE, false, true, 2);
-//    assertRangeQuery(NumberType.NEGATIVE, NumberType.NEGATIVE, false, true, 0);
-//}
+//            StringBuilder sb = new StringBuilder();
 
-//@Test
-//  // test disabled since standard syntax parser does not work with inclusive and
-//  // exclusive at the same time
-//  public void testInclusiveUpperNumericRange() throws Exception
-//{
-//    assertRangeQuery(NumberType.NEGATIVE, NumberType.ZERO, true, false, 1);
-//    assertRangeQuery(NumberType.ZERO, NumberType.POSITIVE, true, false, 1);
-//    assertRangeQuery(NumberType.NEGATIVE, NumberType.POSITIVE, true, false, 2);
-//    assertRangeQuery(NumberType.NEGATIVE, NumberType.NEGATIVE, true, false, 0);
-//}
+//            foreach (FieldType.NumericType type in Enum.GetValues(typeof(FieldType.NumericType)))
+//            {
+//                String boundStr = numberToString(getNumberType(boundType, type.ToString()));
 
-//@Test
-//  public void testExclusiveNumericRange() throws Exception
-//{
-//    assertRangeQuery(NumberType.ZERO, NumberType.ZERO, false, false, 0);
-//    assertRangeQuery(NumberType.ZERO, NumberType.POSITIVE, false, false, 0);
-//    assertRangeQuery(NumberType.NEGATIVE, NumberType.ZERO, false, false, 0);
-//    assertRangeQuery(NumberType.NEGATIVE, NumberType.POSITIVE, false, false, 1);
-//    assertRangeQuery(NumberType.NEGATIVE, NumberType.NEGATIVE, false, false, 0);
-//}
+//                sb.append("+").append(type.ToString()).append(@operator).append('"').append(boundStr).append('"').append(' ');
+//            }
 
-//@Test
-//  public void testOpenRangeNumericQuery() throws Exception
-//{
-//    assertOpenRangeQuery(NumberType.ZERO, "<", 1);
-//    assertOpenRangeQuery(NumberType.POSITIVE, "<", 2);
-//    assertOpenRangeQuery(NumberType.NEGATIVE, "<", 0);
+//            String boundDateStr = ESCAPER.Escape(
+//                DATE_FORMAT.format(new Date(getNumberType(boundType, DATE_FIELD_NAME)
+//                    .longValue())), LOCALE, EscapeQuerySyntax.Type.STRING).toString();
 
-//    assertOpenRangeQuery(NumberType.ZERO, "<=", 2);
-//    assertOpenRangeQuery(NumberType.POSITIVE, "<=", 3);
-//    assertOpenRangeQuery(NumberType.NEGATIVE, "<=", 1);
+//            sb.append("+").append(DATE_FIELD_NAME).append(@operator).append('"').append(boundDateStr).append('"');
 
-//    assertOpenRangeQuery(NumberType.ZERO, ">", 1);
-//    assertOpenRangeQuery(NumberType.POSITIVE, ">", 0);
-//    assertOpenRangeQuery(NumberType.NEGATIVE, ">", 2);
 
-//    assertOpenRangeQuery(NumberType.ZERO, ">=", 2);
-//    assertOpenRangeQuery(NumberType.POSITIVE, ">=", 1);
-//    assertOpenRangeQuery(NumberType.NEGATIVE, ">=", 3);
+//            testQuery(sb.toString(), expectedDocCount);
+//        }
 
-//    assertOpenRangeQuery(NumberType.NEGATIVE, "=", 1);
-//    assertOpenRangeQuery(NumberType.ZERO, "=", 1);
-//    assertOpenRangeQuery(NumberType.POSITIVE, "=", 1);
+//        public void assertSimpleQuery(NumberType numberType, int expectedDocCount)
+//        {
+//            StringBuilder sb = new StringBuilder();
 
-//    assertRangeQuery(NumberType.NEGATIVE, null, true, true, 3);
-//    assertRangeQuery(NumberType.NEGATIVE, null, false, true, 2);
-//    assertRangeQuery(NumberType.POSITIVE, null, true, false, 1);
-//    assertRangeQuery(NumberType.ZERO, null, false, false, 1);
+//            foreach (FieldType.NumericType type in Enum.GetValues(typeof(FieldType.NumericType)))
+//            {
+//                String numberStr = numberToString(getNumberType(numberType, type.ToString()));
+//                sb.append('+').append(type.ToString()).append(":\"").append(numberStr)
+//                          .append("\" ");
+//            }
 
-//    assertRangeQuery(null, NumberType.POSITIVE, true, true, 3);
-//    assertRangeQuery(null, NumberType.POSITIVE, true, false, 2);
-//    assertRangeQuery(null, NumberType.NEGATIVE, false, true, 1);
-//    assertRangeQuery(null, NumberType.ZERO, false, false, 1);
+//            String dateStr = ESCAPER.Escape(
+//                DATE_FORMAT.format(new DateTime(getNumberType(numberType, DATE_FIELD_NAME)
+//                    .longValue())), LOCALE, EscapeQuerySyntax.Type.STRING).toString();
 
-//    assertRangeQuery(null, null, false, false, 3);
-//    assertRangeQuery(null, null, true, true, 3);
+//            sb.append('+').append(DATE_FIELD_NAME).append(":\"").append(dateStr)
+//                    .append('"');
 
-//}
 
-//@Test
-//  public void testSimpleNumericQuery() throws Exception
-//{
-//    assertSimpleQuery(NumberType.ZERO, 1);
-//    assertSimpleQuery(NumberType.POSITIVE, 1);
-//    assertSimpleQuery(NumberType.NEGATIVE, 1);
-//}
+//            testQuery(sb.toString(), expectedDocCount);
 
-//public void assertRangeQuery(NumberType lowerType, NumberType upperType,
-//    boolean lowerInclusive, boolean upperInclusive, int expectedDocCount)
-//      throws QueryNodeException, IOException {
-    
-//    StringBuilder sb = new StringBuilder();
-
-//String lowerInclusiveStr = (lowerInclusive ? "[" : "{");
-//String upperInclusiveStr = (upperInclusive ? "]" : "}");
-    
-//    for (NumericType type : NumericType.values()) {
-//      String lowerStr = numberToString(getNumberType(lowerType, type.name()));
-//String upperStr = numberToString(getNumberType(upperType, type.name()));
-
-//sb.append("+").append(type.name()).append(':').append(lowerInclusiveStr)
-//          .append('"').append(lowerStr).append("\" TO \"").append(upperStr)
-//          .append('"').append(upperInclusiveStr).append(' ');
-//    }
-    
-//    Number lowerDateNumber = getNumberType(lowerType, DATE_FIELD_NAME);
-//Number upperDateNumber = getNumberType(upperType, DATE_FIELD_NAME);
-//String lowerDateStr;
-//String upperDateStr;
-    
-//    if (lowerDateNumber != null) {
-//      lowerDateStr = ESCAPER.escape(
-//          DATE_FORMAT.format(new Date(lowerDateNumber.longValue())), LOCALE,
-//          EscapeQuerySyntax.Type.STRING).toString();
-      
-//    } else {
-//      lowerDateStr = "*";
-//    }
-    
-//    if (upperDateNumber != null) {
-//    upperDateStr = ESCAPER.escape(
-//          DATE_FORMAT.format(new Date(upperDateNumber.longValue())), LOCALE,
-//          EscapeQuerySyntax.Type.STRING).toString();
-    
-//    } else {
-//      upperDateStr = "*";
-//    }
-    
-//    sb.append("+").append(DATE_FIELD_NAME).append(':')
-//        .append(lowerInclusiveStr).append('"').append(lowerDateStr).append(
-//            "\" TO \"").append(upperDateStr).append('"').append(
-//            upperInclusiveStr);
-
-
-//    testQuery(sb.toString(), expectedDocCount);
-    
-//  }
-  
-//  public void assertOpenRangeQuery(NumberType boundType, String operator, int expectedDocCount)
-//      throws QueryNodeException, IOException {
-
-//    StringBuilder sb = new StringBuilder();
-    
-//    for (NumericType type : NumericType.values()) {
-//      String boundStr = numberToString(getNumberType(boundType, type.name()));
-
-//sb.append("+").append(type.name()).append(operator).append('"').append(boundStr).append('"').append(' ');
-//    }
-    
-//    String boundDateStr = ESCAPER.escape(
-//        DATE_FORMAT.format(new Date(getNumberType(boundType, DATE_FIELD_NAME)
-//            .longValue())), LOCALE, EscapeQuerySyntax.Type.STRING).toString();
-
-//sb.append("+").append(DATE_FIELD_NAME).append(operator).append('"').append(boundDateStr).append('"');
-
-
-//    testQuery(sb.toString(), expectedDocCount);
-//  }
-  
-//  public void assertSimpleQuery(NumberType numberType, int expectedDocCount)
-//      throws QueryNodeException, IOException {
-//    StringBuilder sb = new StringBuilder();
-    
-//    for (NumericType type : NumericType.values()) {
-//      String numberStr = numberToString(getNumberType(numberType, type.name()));
-//sb.append('+').append(type.name()).append(":\"").append(numberStr)
-//          .append("\" ");
-//    }
-    
-//    String dateStr = ESCAPER.escape(
-//        DATE_FORMAT.format(new Date(getNumberType(numberType, DATE_FIELD_NAME)
-//            .longValue())), LOCALE, EscapeQuerySyntax.Type.STRING).toString();
+//        }
 
-//sb.append('+').append(DATE_FIELD_NAME).append(":\"").append(dateStr)
-//        .append('"');
+//        [Test]
+//        private void testQuery(String queryStr, int expectedDocCount)
+//        {
+//            if (VERBOSE) Console.WriteLine("Parsing: " + queryStr);
 
+//            Query query = (Query)qp.Parse(queryStr, FIELD_NAME);
+//            if (VERBOSE) Console.WriteLine("Querying: " + query);
+//            TopDocs topDocs = searcher.Search(query, 1000);
 
-//    testQuery(sb.toString(), expectedDocCount);
-    
-//  }
-  
-//  private void testQuery(String queryStr, int expectedDocCount)
-//      throws QueryNodeException, IOException {
-//    if (VERBOSE) System.out.println("Parsing: " + queryStr);
+//            String msg = "Query <" + queryStr + "> retrieved " + topDocs.TotalHits
+//                + " document(s), " + expectedDocCount + " document(s) expected.";
 
-//Query query = qp.parse(queryStr, FIELD_NAME);
-//    if (VERBOSE) System.out.println("Querying: " + query);
-//TopDocs topDocs = searcher.search(query, 1000);
+//            if (VERBOSE) Console.WriteLine(msg);
 
-//String msg = "Query <" + queryStr + "> retrieved " + topDocs.totalHits
-//    + " document(s), " + expectedDocCount + " document(s) expected.";
-    
-//    if (VERBOSE) System.out.println(msg);
 
+//            assertEquals(msg, expectedDocCount, topDocs.TotalHits);
+//        }
 
-//    assertEquals(msg, expectedDocCount, topDocs.totalHits);
-//  }
-  
-//  private static String numberToString(Number number)
-//{
-//    return number == null ? "*" : ESCAPER.escape(NUMBER_FORMAT.format(number),
-//        LOCALE, EscapeQuerySyntax.Type.STRING).toString();
-//}
+//        private static String numberToString(/*Number*/ object number)
+//        {
+//            return number == null ? "*" : ESCAPER.Escape(/*NUMBER_FORMAT.format(number)*/ string.Format(NUMBER_FORMAT, number).ToCharSequence(),
+//                LOCALE, EscapeQuerySyntax.Type.STRING).toString();
+//        }
 
-//private static Number normalizeNumber(Number number) throws ParseException
-//{
-//    return NUMBER_FORMAT.parse(NUMBER_FORMAT.format(number));
-//}
+//        private static /*Number*/ object normalizeNumber(/*Number*/ object number)
+//        {
+//            return decimal.Parse(string.Format(NUMBER_FORMAT, number));
+//            //return NUMBER_FORMAT.parse(NUMBER_FORMAT.format(number));
+//        }
 
-//@AfterClass
-//  public static void afterClass() throws Exception
-//{
-//    searcher = null;
-//    reader.close();
-//    reader = null;
-//    directory.close();
-//    directory = null;
-//    qp = null;
-//}
+//        [TestFixtureTearDown]
+//        public static void afterClass()
+//        {
+//            searcher = null;
+//            reader.Dispose();
+//            reader = null;
+//            directory.Dispose();
+//            directory = null;
+//            qp = null;
+//        }
 //    }
 //}