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); }