/// <summary> /// Initializes a new instance. /// </summary> /// <param name="runtimeModelCreator">A factory function that creates the model instance that should be executed.</param> /// <param name="configuration">The analysis configuration that should be used.</param> internal LtmcExecutedModel(CoupledExecutableModelCreator <TExecutableModel> runtimeModelCreator, AnalysisConfiguration configuration) : base(runtimeModelCreator, 0, configuration) { var formulas = RuntimeModel.Formulas.Select(formula => FormulaCompilationVisitor <TExecutableModel> .Compile(RuntimeModel, formula)).ToArray(); _transitions = new LtmcTransitionSetBuilder <TExecutableModel>(TemporaryStateStorage, configuration.SuccessorCapacity, formulas); bool useForwardOptimization; switch (configuration.MomentOfIndependentFaultActivation) { case MomentOfIndependentFaultActivation.AtStepBeginning: case MomentOfIndependentFaultActivation.OnFirstMethodWithoutUndo: useForwardOptimization = false; break; case MomentOfIndependentFaultActivation.OnFirstMethodWithUndo: useForwardOptimization = true; break; default: throw new ArgumentOutOfRangeException(); } _ltmcChoiceResolver = new LtmcChoiceResolver(useForwardOptimization); ChoiceResolver = _ltmcChoiceResolver; RuntimeModel.SetChoiceResolver(ChoiceResolver); _allowFaultsOnInitialTransitions = configuration.AllowFaultsOnInitialTransitions; _activateIndependentFaultsAtStepBeginning = configuration.MomentOfIndependentFaultActivation == MomentOfIndependentFaultActivation.AtStepBeginning; }
/// <summary> /// Initializes a new instance. /// </summary> /// <param name="runtimeModelCreator">A factory function that creates the model instance that should be executed.</param> /// <param name="successorStateCapacity">The maximum number of successor states supported per state.</param> /// <param name="stateHeaderBytes"> /// The number of bytes that should be reserved at the beginning of each state vector for the model checker tool. /// </param> internal LtmcExecutedModel(CoupledExecutableModelCreator <TExecutableModel> runtimeModelCreator, int stateHeaderBytes, long successorStateCapacity) : base(runtimeModelCreator, stateHeaderBytes) { var formulas = RuntimeModel.Formulas.Select(formula => FormulaCompilationVisitor <TExecutableModel> .Compile(RuntimeModel, formula)).ToArray(); _transitions = new LtmcTransitionSetBuilder <TExecutableModel>(RuntimeModel, successorStateCapacity, formulas); _ltmcChoiceResolver = new LtmcChoiceResolver(); ChoiceResolver = _ltmcChoiceResolver; RuntimeModel.SetChoiceResolver(ChoiceResolver); }
/// <summary> /// Initializes a new instance. /// </summary> /// <param name="runtimeModelCreator">A factory function that creates the model instance that should be executed.</param> /// <param name="configuration">The analysis configuration that should be used.</param> internal LtmcExecutedModel(CoupledExecutableModelCreator <TExecutableModel> runtimeModelCreator, AnalysisConfiguration configuration) : base(runtimeModelCreator, 0, configuration) { var formulas = RuntimeModel.Formulas.Select(formula => FormulaCompilationVisitor <TExecutableModel> .Compile(RuntimeModel, formula)).ToArray(); _transitions = new LtmcTransitionSetBuilder <TExecutableModel>(TemporaryStateStorage, configuration.SuccessorCapacity, formulas); var useForwardOptimization = configuration.EnableStaticPruningOptimization; _ltmcChoiceResolver = new LtmcChoiceResolver(useForwardOptimization); ChoiceResolver = _ltmcChoiceResolver; RuntimeModel.SetChoiceResolver(ChoiceResolver); _allowFaultsOnInitialTransitions = configuration.AllowFaultsOnInitialTransitions; }