Example #1
0
        /// <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);
        }
Example #2
0
        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);
        }