Esempio n. 1
0
        public static bool TryParseSpeed(string s, out KilometerPerHour result)
        {
            result = (KilometerPerHour)double.MaxValue;
            if (string.IsNullOrWhiteSpace(s) || (int)s[0] != 48 && (int)s[0] != 49 && ((int)s[0] != 50 && (int)s[0] != 51) && ((int)s[0] != 52 && (int)s[0] != 53 && ((int)s[0] != 54 && (int)s[0] != 55)) && ((int)s[0] != 56 && (int)s[0] != 57) || s.Contains(","))
            {
                return(false);
            }
            double result1;

            if (double.TryParse(s, NumberStyles.Any, (IFormatProvider)CultureInfo.InvariantCulture, out result1))
            {
                result = (KilometerPerHour)result1;
            }
            if (KilometerPerHour.TryParse(s, out result))
            {
                return(true);
            }
            MilesPerHour result2;

            if (MilesPerHour.TryParse(s, out result2))
            {
                result = (KilometerPerHour)result2;
                return(true);
            }
            Knots result3;

            if (!Knots.TryParse(s, out result3))
            {
                return(false);
            }
            result = (KilometerPerHour)result3;
            return(true);
        }
Esempio n. 2
0
        /// <summary>
        /// Tries to parse a speed value from a given tag-value.
        /// </summary>
        /// <param name="s"></param>
        /// <param name="result"></param>
        /// <returns></returns>
        public static bool TryParseSpeed(string s, out KilometerPerHour result)
        {
            result = double.MaxValue;

            if (string.IsNullOrWhiteSpace(s))
            {
                return(false);
            }

            if (s[0] != '0' && s[0] != '1' && s[0] != '2' && s[0] != '3' && s[0] != '4' &&
                s[0] != '5' && s[0] != '6' && s[0] != '7' && s[0] != '8' && s[0] != '9')
            { // performance inprovement, quick negative answer.
                return(false);
            }

            if (s.Contains(','))
            { // refuse comma as a decimal seperator or anywhere else in the number.
                return(false);
            }

            // try regular speed: convention in OSM is km/h in this case.
            double kmphDouble;

            if (double.TryParse(s, NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out kmphDouble))
            {
                result = kmphDouble;
            }

            // try km/h
            if (KilometerPerHour.TryParse(s, out result))
            {
                return(true);
            }

            // try mph.
            MilesPerHour resultMph;

            if (MilesPerHour.TryParse(s, out resultMph))
            {
                result = resultMph;
                return(true);
            }

            // try knots.
            Knots resultKnots;

            if (Knots.TryParse(s, out resultKnots))
            {
                result = resultKnots;
                return(true);
            }

            return(false);
        }
Esempio n. 3
0
        public void TestKilometerPerHour()
        {
            // initialize value.
            KilometerPerHour ten = 10;

            // convert from.
            Knots          tenInKnots          = 5.39956803;
            MeterPerSecond tenInMeterPerSecond = 2.77777777778;
            MilesPerHour   tenInMilesPerHour   = 6.21371192;

            // test converts to.
            Assert.AreEqual(ten.Value, ((KilometerPerHour)tenInKnots).Value, 0.000001);
            Assert.AreEqual(ten.Value, ((KilometerPerHour)tenInMeterPerSecond).Value, 0.000001);
            Assert.AreEqual(ten.Value, ((KilometerPerHour)tenInMilesPerHour).Value, 0.000001);

            // tests division of distance with time resulting in speed.
            Kilometer twenty = ten * (Hour)2;

            Assert.AreEqual(20, twenty.Value);

            // tests some parsing functions.
            KilometerPerHour tenPointFive = 10.5;
            KilometerPerHour tenPointFiveParsed;

            Assert.IsTrue(KilometerPerHour.TryParse(tenPointFive.ToString(), out tenPointFiveParsed));
            Assert.AreEqual(tenPointFive.Value, tenPointFiveParsed.Value);
            Assert.IsTrue(KilometerPerHour.TryParse("10.5", out tenPointFiveParsed));
            Assert.AreEqual(tenPointFive.Value, tenPointFiveParsed.Value);
            Assert.IsTrue(KilometerPerHour.TryParse("10.5 km/h", out tenPointFiveParsed));
            Assert.AreEqual(tenPointFive.Value, tenPointFiveParsed.Value);
            Assert.IsTrue(KilometerPerHour.TryParse("10.5 kmh", out tenPointFiveParsed));
            Assert.AreEqual(tenPointFive.Value, tenPointFiveParsed.Value);
            Assert.IsTrue(KilometerPerHour.TryParse("10.5 kph", out tenPointFiveParsed));
            Assert.AreEqual(tenPointFive.Value, tenPointFiveParsed.Value);
            Assert.IsTrue(KilometerPerHour.TryParse("10.5 kmph", out tenPointFiveParsed));
            Assert.AreEqual(tenPointFive.Value, tenPointFiveParsed.Value);
            Assert.IsTrue(KilometerPerHour.TryParse("10.5km/h", out tenPointFiveParsed));
            Assert.AreEqual(tenPointFive.Value, tenPointFiveParsed.Value);
            Assert.IsTrue(KilometerPerHour.TryParse("10.5kmh", out tenPointFiveParsed));
            Assert.AreEqual(tenPointFive.Value, tenPointFiveParsed.Value);
            Assert.IsTrue(KilometerPerHour.TryParse("10.5kph", out tenPointFiveParsed));
            Assert.AreEqual(tenPointFive.Value, tenPointFiveParsed.Value);
            Assert.IsTrue(KilometerPerHour.TryParse("10.5kmph", out tenPointFiveParsed));
            Assert.AreEqual(tenPointFive.Value, tenPointFiveParsed.Value);

            Assert.IsFalse(KilometerPerHour.TryParse("10.5 m/s", out tenPointFiveParsed));
            Assert.IsFalse(KilometerPerHour.TryParse("10.5 mph", out tenPointFiveParsed));
            Assert.IsFalse(KilometerPerHour.TryParse("10.5 knots", out tenPointFiveParsed));
        }