public void CreateAssessmentSectionAssemblyGroupBoundaries_WithValidAssessmentSectionCategories_ReturnsExpectedAssessmentSectionAssemblyGroups()
        {
            // Setup
            var random = new Random(11);

            var groups = new CategoriesList <AssessmentSectionCategory>(new[]
            {
                new AssessmentSectionCategory(random.NextEnumValue <EAssessmentGrade>(), new Probability(0), new Probability(0.25)),
                new AssessmentSectionCategory(random.NextEnumValue <EAssessmentGrade>(), new Probability(0.25), new Probability(0.5)),
                new AssessmentSectionCategory(random.NextEnumValue <EAssessmentGrade>(), new Probability(0.5), new Probability(0.75)),
                new AssessmentSectionCategory(random.NextEnumValue <EAssessmentGrade>(), new Probability(0.75), new Probability(1))
            });

            // Call
            IEnumerable <AssessmentSectionAssemblyGroupBoundaries> assemblyGroups =
                AssessmentSectionAssemblyGroupCreator.CreateAssessmentSectionAssemblyGroupBoundaries(groups);

            // Assert
            AssessmentSectionAssemblyGroupBoundariesAssert.AssertAssessmentSectionAssemblyGroupBoundaries(groups, assemblyGroups);
        }
        public void CalculateAssessmentSectionAssemblyGroupBoundaries_KernelWithCompleteOutput_OutputCorrectlyReturnedByCalculator()
        {
            // Setup
            var    random = new Random(11);
            double maximumAllowableFloodingProbability = random.NextDouble(0.5, 1.0);
            double signalFloodingProbability           = random.NextDouble(0.0, 0.5);
            CategoriesList <AssessmentSectionCategory> assessmentSectionCategories = CreateAssessmentSectionCategories();

            using (new AssemblyToolKernelFactoryConfig())
            {
                var factory = (TestAssemblyToolKernelFactory)AssemblyToolKernelFactory.Instance;
                AssemblyCategoryLimitsKernelStub kernel = factory.LastCreatedAssemblyCategoryLimitsKernel;
                kernel.AssessmentSectionCategoryLimits = assessmentSectionCategories;

                var calculator = new AssessmentSectionAssemblyGroupBoundariesCalculator(factory);

                // Call
                IEnumerable <AssessmentSectionAssemblyGroupBoundaries> result = calculator.CalculateAssessmentSectionAssemblyGroupBoundaries(signalFloodingProbability, maximumAllowableFloodingProbability);

                // Assert
                AssessmentSectionAssemblyGroupBoundariesAssert.AssertAssessmentSectionAssemblyGroupBoundaries(assessmentSectionCategories, result);
            }
        }