Ejemplo n.º 1
0
        public DisjunctiveExamplesSpec WitnessMoveLeft(GrammarRule rule, ExampleSpec spec, ExampleSpec positionSpec)
        {
            var examples = new Dictionary <State, IEnumerable <object> >();

            foreach (var input in spec.Examples)
            {
                var inputState = input.Key;
                var before     = (Node)inputState[rule.Body[0]];
                var position   = (int)positionSpec.Examples[inputState];
                var after      = (Node)spec.Examples[inputState];
                if (Semantics.Move(before, position, true).IsEqualTo(after))
                {
                    if (!examples.ContainsKey(inputState))
                    {
                        examples[inputState] = new List <object>();
                    }

                    if (!(examples[inputState]).Contains(true))
                    {
                        ((List <object>)examples[inputState]).Add(true);
                    }
                }

                if (Semantics.Move(before, position, false).IsEqualTo(after))
                {
                    if (!examples.ContainsKey(inputState))
                    {
                        examples[inputState] = new List <object>();
                    }

                    if (!(examples[inputState]).Contains(false))
                    {
                        ((List <object>)examples[inputState]).Add(false);
                    }
                }
            }

            return(new DisjunctiveExamplesSpec(examples));
        }
Ejemplo n.º 2
0
        public ExampleSpec WitnessMovePosition(GrammarRule rule, ExampleSpec spec)
        {
            var examples = new Dictionary <State, object>();

            foreach (var input in spec.ProvidedInputs)
            {
                var before = (Node)input[rule.Body[0]];
                var after  = (Node)spec.Examples[input];
                for (var i = 0; i < after.Children.Count; ++i)
                {
                    if (Semantics.Move(before, i, true).IsEqualTo(after))
                    {
                        examples[input] = i;
                    }

                    if (Semantics.Move(before, i, false).IsEqualTo(after))
                    {
                        examples[input] = i;
                    }
                }
            }

            return(new ExampleSpec(examples));
        }