public void Test_GuessSettingsFactory_Defaults()
        {
            //default is true
            Assert.IsTrue(GuessSettingsFactory.Defaults.CharCanBeBoolean);
            var f        = new GuessSettingsFactory();
            var instance = f.Create();

            Assert.IsTrue(instance.CharCanBeBoolean);

            Assert.IsFalse(instance == GuessSettingsFactory.Defaults);

            //changing static defaults
            GuessSettingsFactory.Defaults.CharCanBeBoolean = false;

            try
            {
                //should change the result of Create to the new default
                Assert.IsFalse(f.Create().CharCanBeBoolean);

                var decider = new DecimalTypeDecider(CultureInfo.CurrentCulture);
                Assert.IsFalse(decider.Settings.CharCanBeBoolean);
            }
            finally
            {
                //set the static default back to not interfere with other tests
                GuessSettingsFactory.Defaults.CharCanBeBoolean = true;
            }
        }
        public void BigInt_Parse()
        {
            var decider = new DecimalTypeDecider(new CultureInfo("en-US"));

            Assert.AreEqual(100, decider.Parse("100"));
            Assert.AreEqual(9223372036854775807L, decider.Parse("9223372036854775807"));
        }
        public void Performance_Decimals()
        {
            var culture = new CultureInfo("en-gb");

            List <string> inputs = new List <string>();

            var r = new Random(500);

            for (int i = 0; i < 1_000_000; i++)
            {
                inputs.Add((r.NextDouble() * 1000.0).ToString("F"));
            }

            var decider = new DecimalTypeDecider(new CultureInfo("en-GB"));

            var req = new DatabaseTypeRequest(null);

            Stopwatch sw = new Stopwatch();

            sw.Start();

            foreach (string s in inputs)
            {
                decider.IsAcceptableAsType(s, req);
            }

            sw.Stop();

            Console.WriteLine($"DatabaseTypeRequest.IsAcceptableAsType:{sw.ElapsedMilliseconds} ms");

            sw.Restart();

            var g = new Guesser();

            foreach (string s in inputs)
            {
                g.AdjustToCompensateForValue(s);
            }

            sw.Stop();

            Console.WriteLine($"Guesser.AdjustToCompensateForValue:{sw.ElapsedMilliseconds} ms");


            sw.Restart();

            foreach (string s in inputs)
            {
                s.To <decimal>(culture);
            }

            sw.Stop();

            Console.WriteLine($"To<decimal>:{sw.ElapsedMilliseconds} ms");


            sw.Restart();


            foreach (string s in inputs)
            {
                decimal.TryParse(s, NumberStyles.Any, culture, out _);
            }

            sw.Stop();

            Console.WriteLine($"Parse:{sw.ElapsedMilliseconds} ms");
        }