Example #1
0
        protected override void updateBackingMatcher(IMatcher <IComparable> matcher, GeneralMatcherVM parent)
        {
            NumberMatcher backingMatcher = (NumberMatcher)matcher;

            backingMatcher.ignoredPrefix = parent.Prefix;
            backingMatcher.ignoredSuffix = parent.Suffix;

            if (DecimalSeparator != "")
            {
                backingMatcher.decimalSeparator = DecimalSeparator[0];
            }
            else
            {
                backingMatcher.decimalSeparator = null;
            }

            if (GroupSeparator != "")
            {
                backingMatcher.groupSeparator = GroupSeparator[0];
            }
            else
            {
                backingMatcher.groupSeparator = null;
            }
        }
Example #2
0
        public void TestNumberMatcher()
        {
            NumberMatcher   matcher   = new NumberMatcher(Delimiters);
            StringTokenizer data      = new StringTokenizer("1 454 12h 0xa 0x 0xA12 0x1G 1.0 0.33 0x22.3 123.13a 1xA");
            SourcePosition  streamPos = new SourcePosition(0, 0, 0);

            // Match a single integer
            Assert.AreEqual(matcher.MatchNext(data, ref streamPos, Log).Value, "1");
            Assert.AreEqual(data.CurrentItem, " ");
            data.Advance();
            // Match several chars
            Assert.AreEqual(matcher.MatchNext(data, ref streamPos, Log).Type, TokenType.IntegerNumber);
            Assert.AreEqual(data.CurrentItem, " ");
            data.Advance();
            // Try to match a number that is actually a word
            Assert.IsNull(matcher.MatchNext(data, ref streamPos, Log));
            Assert.AreEqual(data.CurrentItem, "1");
            data.Advance(4);
            // Match a hexadecimal number
            Assert.IsNotNull(matcher.MatchNext(data, ref streamPos, Log));
            Assert.AreEqual(data.CurrentItem, " ");
            data.Advance();
            // fail to match a partial hex number
            Assert.IsNull(matcher.MatchNext(data, ref streamPos, Log));
            Assert.AreEqual(data.CurrentItem, "0");
            data.Advance(3);
            // Match and assert value of hexadecimal number converted to decimal
            Assert.AreEqual(matcher.MatchNext(data, ref streamPos, Log).Value, (0xA12).ToString("D"));
            Assert.AreEqual(data.CurrentItem, " ");
            data.Advance();
            // fail to match a malformed hex number
            Assert.IsNull(matcher.MatchNext(data, ref streamPos, Log));
            Assert.AreEqual(data.CurrentItem, "0");
            data.Advance(5);
            // Match a floating point number
            Assert.AreEqual(matcher.MatchNext(data, ref streamPos, Log).Type, TokenType.FloatingNumber);
            Assert.AreEqual(data.CurrentItem, " ");
            data.Advance();
            // Match a float and assert value
            Assert.AreEqual(matcher.MatchNext(data, ref streamPos, Log).Value, "0.33");
            Assert.AreEqual(data.CurrentItem, " ");
            data.Advance();
            // Fail parsing a malformed hex-float
            Assert.IsNull(matcher.MatchNext(data, ref streamPos, Log));
            Assert.AreEqual(data.CurrentItem, "0");
            data.Advance(7);
            // Fail parsing a malformed float-hex
            Assert.IsNull(matcher.MatchNext(data, ref streamPos, Log));
            Assert.AreEqual(data.CurrentItem, "1");
            data.Advance(8);
            // Fail parsing a malformed hex prefix
            Assert.IsNull(matcher.MatchNext(data, ref streamPos, Log));
            Assert.AreEqual(data.CurrentItem, "1");
            data.Advance(3);

            Assert.IsTrue(data.AtEnd());
        }
Example #3
0
        private static int GetMaxDate(NumberMatcher month)
        {
            if (month.MatcherType == NumberMatcherType.ConstInt)
            {
                switch (month.IntValue)
                {
                case 2:
                    return(29);

                case 4:
                case 6:
                case 9:
                case 11:
                    return(30);
                }
            }
            return(31);
        }
Example #4
0
 public void TestInvalidNumber(
     [Values('a')] char input)
 {
     Assert.Null(NumberMatcher.Match(input));
 }
Example #5
0
 public void TestValidNumber(
     [Values('1')] char input)
 {
     Assert.NotNull(NumberMatcher.Match(input));
 }
Example #6
0
        public void TestNumberMatcher()
        {
            NumberMatcher matcher = new NumberMatcher(Delimiters);
            StringTokenizer data = new StringTokenizer("1 454 12h 0xa 0x 0xA12 0x1G 1.0 0.33 0x22.3 123.13a 1xA");
            SourcePosition streamPos = new SourcePosition(0, 0, 0);

            // Match a single integer
            Assert.AreEqual(matcher.MatchNext(data, ref streamPos, Log).Value, "1");
            Assert.AreEqual(data.CurrentItem, " ");
            data.Advance();
            // Match several chars
            Assert.AreEqual(matcher.MatchNext(data, ref streamPos, Log).Type, TokenType.IntegerNumber);
            Assert.AreEqual(data.CurrentItem, " ");
            data.Advance();
            // Try to match a number that is actually a word
            Assert.IsNull(matcher.MatchNext(data, ref streamPos, Log));
            Assert.AreEqual(data.CurrentItem, "1");
            data.Advance(4);
            // Match a hexadecimal number
            Assert.IsNotNull(matcher.MatchNext(data, ref streamPos, Log));
            Assert.AreEqual(data.CurrentItem, " ");
            data.Advance();
            // fail to match a partial hex number
            Assert.IsNull(matcher.MatchNext(data, ref streamPos, Log));
            Assert.AreEqual(data.CurrentItem, "0");
            data.Advance(3);
            // Match and assert value of hexadecimal number converted to decimal
            Assert.AreEqual(matcher.MatchNext(data, ref streamPos, Log).Value, (0xA12).ToString("D"));
            Assert.AreEqual(data.CurrentItem, " ");
            data.Advance();
            // fail to match a malformed hex number
            Assert.IsNull(matcher.MatchNext(data, ref streamPos, Log));
            Assert.AreEqual(data.CurrentItem, "0");
            data.Advance(5);
            // Match a floating point number
            Assert.AreEqual(matcher.MatchNext(data, ref streamPos, Log).Type, TokenType.FloatingNumber);
            Assert.AreEqual(data.CurrentItem, " ");
            data.Advance();
            // Match a float and assert value
            Assert.AreEqual(matcher.MatchNext(data, ref streamPos, Log).Value, "0.33");
            Assert.AreEqual(data.CurrentItem, " ");
            data.Advance();
            // Fail parsing a malformed hex-float
            Assert.IsNull(matcher.MatchNext(data, ref streamPos, Log));
            Assert.AreEqual(data.CurrentItem, "0");
            data.Advance(7);
            // Fail parsing a malformed float-hex
            Assert.IsNull(matcher.MatchNext(data, ref streamPos, Log));
            Assert.AreEqual(data.CurrentItem, "1");
            data.Advance(8);
            // Fail parsing a malformed hex prefix
            Assert.IsNull(matcher.MatchNext(data, ref streamPos, Log));
            Assert.AreEqual(data.CurrentItem, "1");
            data.Advance(3);

            Assert.IsTrue(data.AtEnd());
        }