Ejemplo n.º 1
0
        public void AndResolver()
        {
            var strs = new[] { "abc", "def", "ghi" };

            var s1 = new SingleResolver("abc");
            var s2 = new SingleResolver("def");
            var s4 = new SingleResolver("xxx");

            var andSuccess = new AndResolver(s1, s2);
            var andFailuer = new AndResolver(s1, s4);

            Assert.True(andSuccess.Resolve(strs));
            Assert.False(andFailuer.Resolve(strs));
        }
Ejemplo n.º 2
0
        public void Combination()
        {
            var A = new SingleResolver("A");
            var B = new SingleResolver("B");
            var C = new SingleResolver("C");
            var D = new SingleResolver("D");

            // (A and B) or C
            {
                var r1 = new OrResolver(new AndResolver(A, B), C);
                Assert.True(r1.Resolve("C"));
                Assert.True(r1.Resolve("A", "B"));
                Assert.True(r1.Resolve("A", "C"));
                Assert.True(r1.Resolve("B", "C"));
                Assert.True(r1.Resolve("A", "B", "C"));
                Assert.False(r1.Resolve("A"));
                Assert.False(r1.Resolve("B"));
                Assert.False(r1.Resolve());
            }

            // A and ( B or C )
            {
                var r2 = new AndResolver(A, new OrResolver(B, C));
                Assert.True(r2.Resolve(new[] { "A", "B" }));
                Assert.True(r2.Resolve(new[] { "A", "C" }));
                Assert.True(r2.Resolve(new[] { "A", "B", "C" }));
                Assert.False(r2.Resolve(new[] { "B", "C" }));
                Assert.False(r2.Resolve(new[] { "C" }));
                Assert.False(r2.Resolve(new[] { "A" }));
                Assert.False(r2.Resolve(new[] { "B" }));
                Assert.False(r2.Resolve(new string[0]));
            }

            // A and !(B and C)
            {
                var r3 = new AndResolver(A, new NotResolver(new AndResolver(B, C)));
                Assert.True(r3.Resolve(new[] { "A" }));
                Assert.True(r3.Resolve(new[] { "A", "B" }));
                Assert.True(r3.Resolve(new[] { "A", "C" }));
                Assert.False(r3.Resolve(new[] { "A", "B", "C" }));
                Assert.False(r3.Resolve(new[] { "B", "C" }));
                Assert.False(r3.Resolve(new[] { "C" }));
                Assert.False(r3.Resolve(new[] { "B" }));
                Assert.False(r3.Resolve(new string[0]));
            }
        }
Ejemplo n.º 3
0
        protected IResolver Term()
        {
            var c = Word();

            while (true)
            {
                switch (Peek())
                {
                case '*':
                    Next();
                    c = new AndResolver(c, Count());
                    continue;
                }
                break;
            }
            return(c);
        }