/// <summary> /// Gets a new instance of a context checker based on a given context. /// Note: Execute within transaction. /// </summary> /// <param name="context">Test bench, Parameteric Exploration, or Test bench Suite</param> /// <returns>A new context specific checker if context is supported, otherwise null.</returns> /// <exception cref="ArgumentNullException" /> /// <exception cref="ArgumentOutOfRangeException" /> public static ContextChecker GetContextChecker(IMgaModel context) { if (context == null) { throw new ArgumentNullException(); } ContextChecker contextChecker = null; // get specialized context checker based on the context type. if (context.MetaBase.Name == typeof(CyPhy.TestBench).Name) { contextChecker = new TestBenchChecker(CyPhyClasses.TestBench.Cast(context)); } else if (context.MetaBase.Name == typeof(CyPhy.CADTestBench).Name) { contextChecker = new StructuralFEATestBenchChecker(CyPhyClasses.CADTestBench.Cast(context)); } else if (context.MetaBase.Name == typeof(CyPhy.KinematicTestBench).Name) { contextChecker = new KinematicTestBenchChecker(CyPhyClasses.KinematicTestBench.Cast(context)); } else if (context.MetaBase.Name == typeof(CyPhy.CFDTestBench).Name) { contextChecker = new CFDTestBenchChecker(CyPhyClasses.CFDTestBench.Cast(context)); } else if (context.MetaBase.Name == typeof(CyPhy.BlastTestBench).Name) { contextChecker = new BlastTestBenchChecker(CyPhyClasses.BlastTestBench.Cast(context)); } else if (context.MetaBase.Name == typeof(CyPhy.BallisticTestBench).Name) { contextChecker = new BallisticTestBenchChecker(CyPhyClasses.BallisticTestBench.Cast(context)); } else if (context.MetaBase.Name == typeof(CyPhy.TestBenchSuite).Name) { contextChecker = new TestBenchSuiteChecker(CyPhyClasses.TestBenchSuite.Cast(context)); } else if (context.MetaBase.Name == typeof(CyPhy.ParametricExploration).Name) { contextChecker = new ParametricExplorationChecker(CyPhyClasses.ParametricExploration.Cast(context)); } else if (context.MetaBase.Name == typeof(CyPhy.CarTestBench).Name) { contextChecker = new CarTestBenchChecker(CyPhyClasses.CarTestBench.Cast(context)); } else { throw new ArgumentOutOfRangeException(string.Format("Given context is {0}, which is not supported. Try to run it on a test bench, PET or SoT.", context.Meta.Name)); } return(contextChecker); }
protected IEnumerable <ContextCheckerResult> TestBenchReferences() { List <ContextCheckerResult> results = new List <ContextCheckerResult>(); // at least one test bench ref if (this.testBenchSuite.Children.TestBenchRefCollection.Any()) { var feedback = new ContextCheckerResult() { Success = true, Subject = this.testBenchSuite.Impl, Message = "Test bench suite has at least one test bench reference." }; results.Add(feedback); var ids = this.testBenchSuite .Children .TestBenchRefCollection .Where(x => (x.Impl as GME.MGA.IMgaReference).Referred != null) .Select(x => (x.Impl as GME.MGA.IMgaReference).Referred.ID) .ToList(); if (ids.Count != ids.Distinct().Count()) { feedback = new ContextCheckerResult() { Success = false, Subject = this.testBenchSuite.Impl, Message = "One test bench can be used only once. Remove the duplicates." }; results.Add(feedback); } else { feedback = new ContextCheckerResult() { Success = true, Subject = this.testBenchSuite.Impl, Message = "Each test bench used only once." }; results.Add(feedback); } } else { var feedback = new ContextCheckerResult() { Success = false, Subject = this.testBenchSuite.Impl, Message = "Test bench suite has no test bench reference. It must have at least one test bench reference." }; results.Add(feedback); } CyPhy.DesignEntity designEntity = null; // no null refs foreach (var testBenchRef in this.testBenchSuite.Children.TestBenchRefCollection) { // check test benches if (testBenchRef.AllReferred == null) { var feedback = new ContextCheckerResult() { Success = false, Subject = testBenchRef.Impl, Message = "Test bench reference cannot be null." }; results.Add(feedback); continue; } else if ((testBenchRef.AllReferred is CyPhy.TestBenchType) == false) { var feedback = new ContextCheckerResult() { Success = false, Subject = testBenchRef.Impl, Message = "Currently only Test Bench Types are allowed." }; results.Add(feedback); continue; } else { var feedback = new ContextCheckerResult() { Success = true, Subject = testBenchRef.Impl, Message = "Test bench reference is not null." }; results.Add(feedback); } var testBench = testBenchRef.AllReferred as CyPhy.TestBenchType; // testbench ref is NOT null at this point ContextChecker testBenchChecker = ContextChecker.GetContextChecker(testBench.Impl as GME.MGA.MgaModel); testBenchChecker.TryCheck(); results.AddRange(testBenchChecker.Details); // check top level system under test pointers var tlsut = testBench.Children.TopLevelSystemUnderTestCollection.FirstOrDefault(); if (tlsut != null && tlsut.Referred.DesignEntity != null) { if (designEntity == null) { designEntity = tlsut.Referred.DesignEntity; } else { if (designEntity.Impl.ID == tlsut.Referred.DesignEntity.ID) { var feedback = new ContextCheckerResult() { Success = true, Subject = testBenchRef.Impl, Message = "Test bench is defined for the same design or design space." }; results.Add(feedback); } else { var feedback = new ContextCheckerResult() { Success = false, Subject = testBenchRef.Impl, Message = "Test bench does not point to the same design space." }; results.Add(feedback); } } } } return(results); }
protected IEnumerable <ContextCheckerResult> TestBenchReferences() { List <ContextCheckerResult> results = new List <ContextCheckerResult>(); var allParametricExplorations = getParametricExplorationsRecursively(this.parametricExploration).ToList(); var testBenchRefCount = allParametricExplorations.SelectMany(pe => pe.Children.TestBenchRefCollection).Count(); testBenchRefCount += allParametricExplorations.SelectMany(pe => pe.Children.ParametricTestBenchCollection).Count(); if (testBenchRefCount == 0) { var feedback = new ContextCheckerResult() { Success = false, Subject = this.parametricExploration.Impl, Message = "Parametric exploration has no TestBenches, ExcelWrapper, PythonWrappers, or MATLABWrappers. There must be at least one." }; results.Add(feedback); } foreach (var testBenchRef in allParametricExplorations.SelectMany(pe => pe.Children.TestBenchRefCollection)) { // check test benches if (testBenchRef.Referred.TestBenchType == null) { var feedback = new ContextCheckerResult() { Success = false, Subject = testBenchRef.Impl, Message = "Test bench reference cannot be null." }; results.Add(feedback); continue; } else { var feedback = new ContextCheckerResult() { Success = true, Subject = testBenchRef.Impl, Message = "Test bench reference is not null." }; results.Add(feedback); } var testBench = testBenchRef.Referred.TestBenchType; // testbench ref is NOT null at this point ContextChecker testBenchChecker = ContextChecker.GetContextChecker(testBench.Impl as GME.MGA.MgaModel); testBenchChecker.TryCheck(); results.AddRange(testBenchChecker.Details); } return(results); }