Esempio n. 1
0
 private static void GetExpansions(StateNode state, ElementNode elementNode, CounterExampleState counterExampleState,
                                   ILanguageSpecificModel languageSpecificModel)
 {
     try {
         var dafnyModel = GetFieldValue <DafnyModel>(state, "dm");
         var elt        = GetFieldValue <Model.Element>(elementNode, "elt");
         var extras     = dafnyModel.GetExpansion(state, elt);
         foreach (var el in extras)
         {
             counterExampleState.Variables.Add(new CounterExampleVariable {
                 Name          = elementNode.Name + "." + el.Name,
                 Value         = el.Value,
                 CanonicalName = languageSpecificModel.CanonicalName(el.Element)
             });
         }
     } catch (Exception e) {
         Console.Error.WriteLine(e.Message);
     }
 }
        private CounterExample ConvertModels(List <DafnyModel> specificModels)
        {
            foreach (var dafnyModel in specificModels)
            {
                var counterExample = new CounterExample();
                foreach (var state in dafnyModel.States)
                {
                    if (state == null)
                    {
                        continue;
                    }

                    var counterExampleState = new CounterExampleState {
                        Name = state.FullStateName
                    };
                    AddLineInformation(counterExampleState, state.FullStateName);

                    var vars = state.ExpandedVariableSet(maximumCounterexampleDepth);

                    foreach (var variableNode in vars)
                    {
                        counterExampleState.Variables.Add(new CounterExampleVariable {
                            Name  = variableNode.ShortName,
                            Value = variableNode.Value,
                            // CanonicalName is same as Value now but keeping this for legacy
                            CanonicalName = variableNode.Value
                        });
                    }
                    var index = counterExample.States.FindIndex(c => c.Column == counterExampleState.Column && c.Line == counterExampleState.Line);
                    if (index != -1)
                    {
                        counterExample.States[index] = counterExampleState;
                    }
                    else
                    {
                        counterExample.States.Add(counterExampleState);
                    }
                }
                return(counterExample);
            }

            return(new CounterExample());
        }
Esempio n. 3
0
        private CounterExample ConvertModels(List <ILanguageSpecificModel> specificModels)
        {
            foreach (var languageSpecificModel in specificModels)
            {
                var counterExample = new CounterExample();
                foreach (var s in languageSpecificModel.States)
                {
                    var state = s as StateNode;
                    if (state == null)
                    {
                        continue;
                    }

                    var counterExampleState = new CounterExampleState {
                        Name = state.CapturedStateName
                    };
                    AddLineInformation(counterExampleState, state.CapturedStateName);

                    foreach (var variableNode in state.Vars)
                    {
                        counterExampleState.Variables.Add(new CounterExampleVariable {
                            Name          = variableNode.ShortName,
                            Value         = variableNode.Value,
                            CanonicalName = languageSpecificModel.CanonicalName(variableNode.Element)
                        });
                        GetExpansions(state, variableNode, counterExampleState, languageSpecificModel);
                    }
                    var index = counterExample.States.FindIndex(c => c.Column == counterExampleState.Column && c.Line == counterExampleState.Line);
                    if (index != -1)
                    {
                        counterExample.States[index] = counterExampleState;
                    }
                    else
                    {
                        counterExample.States.Add(counterExampleState);
                    }
                }
                return(counterExample);
            }

            return(new CounterExample());
        }
Esempio n. 4
0
        private void AddLineInformation(CounterExampleState state, string stateCapturedStateName)
        {
            if ("<initial>".Equals(stateCapturedStateName))
            {
                state.Line   = 0;
                state.Column = 0;
                return;
            }

            var regex = ".*?(dfy)(\\()(\\d+)(,)(\\d+)(\\))";
            var r     = new Regex(regex, RegexOptions.IgnoreCase | RegexOptions.Singleline);
            var m     = r.Match(stateCapturedStateName);

            if (m.Success)
            {
                var lineStr = m.Groups[3].ToString();
                state.Line = int.Parse(lineStr);
                var columnStr = m.Groups[5].ToString();
                state.Column = int.Parse(columnStr);
            }
        }