Index: Core/Common/test/Core.Common.TestUtil.Test/RandomExtensionsTest.cs =================================================================== diff -u -r1fd2033b78aa540d01635bcf993080e5fe2437bd -r7ad21c69dd74f12a4b17ff15217bf8c135cc06aa --- Core/Common/test/Core.Common.TestUtil.Test/RandomExtensionsTest.cs (.../RandomExtensionsTest.cs) (revision 1fd2033b78aa540d01635bcf993080e5fe2437bd) +++ Core/Common/test/Core.Common.TestUtil.Test/RandomExtensionsTest.cs (.../RandomExtensionsTest.cs) (revision 7ad21c69dd74f12a4b17ff15217bf8c135cc06aa) @@ -20,6 +20,7 @@ // All rights reserved. using System; +using System.Linq; using Core.Common.Base.Data; using NUnit.Framework; @@ -152,7 +153,7 @@ [Test] [TestCase(0, TestEnum.ValueTwo)] [TestCase(1, TestEnum.ValueOne)] - public void NextEnumValue_TypeIsEnum_ThrowsArgumentException(int seed, TestEnum expectedFirstCallResult) + public void NextEnumValue_TypeIsEnum_ReturnsEnum(int seed, TestEnum expectedFirstCallResult) { // Setup var random = new Random(seed); @@ -193,10 +194,94 @@ Assert.AreEqual(seededRandomB.NextDouble(), result.Value, 1e-15); } + [Test] + public void NextEnumValueWithEnumValues_RandomIsNull_ThrowsArgumentNullException() + { + // Setup + var random = (Random) null; + + // Call + TestDelegate call = () => random.NextEnumValue(Enumerable.Empty()); + + // Assert + var exception = Assert.Throws(call); + Assert.AreEqual("random", exception.ParamName); + } + + [Test] + public void NextEnumValueWithEnumValues_ValidEnumValuesNull_ThrowsArgumentNullException() + { + // Setup + var random = new Random(21); + + // Call + TestDelegate call = () => random.NextEnumValue(null); + + // Assert + var exception = Assert.Throws(call); + Assert.AreEqual("enumValues", exception.ParamName); + } + + [Test] + public void NextItemWithEnumValues_EnumValuesEmpty_ThrowsArgumentException() + { + // Setup + var random = new Random(21); + + // Call + TestDelegate call = () => random.NextEnumValue(Enumerable.Empty()); + + // Assert + const string expectedMessage = "'enumValues' cannot be an empty collection."; + TestHelper.AssertThrowsArgumentExceptionAndTestMessage(call, expectedMessage); + } + + [Test] + public void NextItemWithEnumValues_TypeIsNoEnum_ThrowsArgumentException() + { + // Setup + var random = new Random(21); + + // Call + TestDelegate call = () => random.NextEnumValue(Enumerable.Empty()); + + // Assert + const string expectedMessage = "'Object' is not an enum."; + TestHelper.AssertThrowsArgumentExceptionAndTestMessage(call, expectedMessage); + } + + [Test] + [TestCase(0, 1)] + [TestCase(1, 0)] + public void NextItemWithEnumValues_ReturnsRandomEnum(int seed, int expectedIndex) + { + // Setup + var random = new Random(seed); + var enumValues = new[] + { + TestEnum2.ValueThree, + TestEnum2.ValueFour + }; + + // Call + object randomItem = random.NextEnumValue(enumValues); + + // Assert + Assert.AreEqual(enumValues[expectedIndex], randomItem); + } + public enum TestEnum { ValueOne, ValueTwo } + + public enum TestEnum2 + { + ValueOne, + ValueTwo, + ValueThree, + ValueFour + } } } \ No newline at end of file Index: Core/Common/test/Core.Common.TestUtil/RandomExtensions.cs =================================================================== diff -u -r1fd2033b78aa540d01635bcf993080e5fe2437bd -r7ad21c69dd74f12a4b17ff15217bf8c135cc06aa --- Core/Common/test/Core.Common.TestUtil/RandomExtensions.cs (.../RandomExtensions.cs) (revision 1fd2033b78aa540d01635bcf993080e5fe2437bd) +++ Core/Common/test/Core.Common.TestUtil/RandomExtensions.cs (.../RandomExtensions.cs) (revision 7ad21c69dd74f12a4b17ff15217bf8c135cc06aa) @@ -20,6 +20,8 @@ // All rights reserved. using System; +using System.Collections.Generic; +using System.Linq; using Core.Common.Base.Data; namespace Core.Common.TestUtil @@ -132,5 +134,40 @@ var enumValues = (TEnum[]) Enum.GetValues(typeof(TEnum)); return enumValues[random.Next(enumValues.Length)]; } + + /// + /// Returns a random from . + /// + /// The to use. + /// A pseudo-random number generator. + /// A collection of valid enum values to return a random element from. + /// A random from . + /// Thrown when is null. + /// Thrown when is empty or + /// of is not an . + public static TEnum NextEnumValue(this Random random, IEnumerable enumValues) + { + if (random == null) + { + throw new ArgumentNullException(nameof(random)); + } + + if (enumValues == null) + { + throw new ArgumentNullException(nameof(enumValues)); + } + + if (!typeof(TEnum).IsEnum) + { + throw new ArgumentException($"'{typeof(TEnum).Name}' is not an enum."); + } + + if (!enumValues.Any()) + { + throw new ArgumentException($"'{nameof(enumValues)}' cannot be an empty collection."); + } + + return enumValues.ElementAt(random.Next(enumValues.Count())); + } } } \ No newline at end of file Index: Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/Creators/AggregatedSerializableCombinedFailureMechanismSectionAssembliesCreatorTest.cs =================================================================== diff -u -r3143f826f08381a246a2d7936ece12241b8b1903 -r7ad21c69dd74f12a4b17ff15217bf8c135cc06aa --- Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/Creators/AggregatedSerializableCombinedFailureMechanismSectionAssembliesCreatorTest.cs (.../AggregatedSerializableCombinedFailureMechanismSectionAssembliesCreatorTest.cs) (revision 3143f826f08381a246a2d7936ece12241b8b1903) +++ Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/Creators/AggregatedSerializableCombinedFailureMechanismSectionAssembliesCreatorTest.cs (.../AggregatedSerializableCombinedFailureMechanismSectionAssembliesCreatorTest.cs) (revision 7ad21c69dd74f12a4b17ff15217bf8c135cc06aa) @@ -193,14 +193,18 @@ private static ExportableSectionAssemblyResult CreateSectionAssemblyResult(int seed) { var random = new Random(seed); - var assemblyCategoryGroup = random.NextEnumValue(); - if (assemblyCategoryGroup == FailureMechanismSectionAssemblyCategoryGroup.None) - { - assemblyCategoryGroup = FailureMechanismSectionAssemblyCategoryGroup.IIIv; - } - return new ExportableSectionAssemblyResult(random.NextEnumValue(), - assemblyCategoryGroup); + random.NextEnumValue(new [] + { + FailureMechanismSectionAssemblyCategoryGroup.NotApplicable, + FailureMechanismSectionAssemblyCategoryGroup.Iv, + FailureMechanismSectionAssemblyCategoryGroup.IIv, + FailureMechanismSectionAssemblyCategoryGroup.IIIv, + FailureMechanismSectionAssemblyCategoryGroup.IVv, + FailureMechanismSectionAssemblyCategoryGroup.Vv, + FailureMechanismSectionAssemblyCategoryGroup.VIv, + FailureMechanismSectionAssemblyCategoryGroup.VIIv + })); } private static void AssertCombinedFailureMechanismSectionResults(IEnumerable expectedCombinedSectionAssemblyResults, Index: Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/Creators/AggregatedSerializableCombinedFailureMechanismSectionAssemblyCreatorTest.cs =================================================================== diff -u -r32569b8b17f24007bc536331d8988d9369a661d4 -r7ad21c69dd74f12a4b17ff15217bf8c135cc06aa --- Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/Creators/AggregatedSerializableCombinedFailureMechanismSectionAssemblyCreatorTest.cs (.../AggregatedSerializableCombinedFailureMechanismSectionAssemblyCreatorTest.cs) (revision 32569b8b17f24007bc536331d8988d9369a661d4) +++ Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/Creators/AggregatedSerializableCombinedFailureMechanismSectionAssemblyCreatorTest.cs (.../AggregatedSerializableCombinedFailureMechanismSectionAssemblyCreatorTest.cs) (revision 7ad21c69dd74f12a4b17ff15217bf8c135cc06aa) @@ -175,14 +175,18 @@ private static ExportableSectionAssemblyResult CreateSectionAssemblyResult(int seed) { var random = new Random(seed); - var assemblyCategoryGroup = random.NextEnumValue(); - if (assemblyCategoryGroup == FailureMechanismSectionAssemblyCategoryGroup.None) - { - assemblyCategoryGroup = FailureMechanismSectionAssemblyCategoryGroup.IIIv; - } - return new ExportableSectionAssemblyResult(random.NextEnumValue(), - assemblyCategoryGroup); + random.NextEnumValue(new[] + { + FailureMechanismSectionAssemblyCategoryGroup.NotApplicable, + FailureMechanismSectionAssemblyCategoryGroup.Iv, + FailureMechanismSectionAssemblyCategoryGroup.IIv, + FailureMechanismSectionAssemblyCategoryGroup.IIIv, + FailureMechanismSectionAssemblyCategoryGroup.IVv, + FailureMechanismSectionAssemblyCategoryGroup.Vv, + FailureMechanismSectionAssemblyCategoryGroup.VIv, + FailureMechanismSectionAssemblyCategoryGroup.VIIv + })); } private static void AssertCombinedSectionAssemblyResult(ExportableFailureMechanismCombinedSectionAssemblyResult expectedSectionResult, Index: Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/Creators/AggregatedSerializableFailureMechanismCreatorTest.cs =================================================================== diff -u -r19043242cabb3c29ab5956da83245f300427767c -r7ad21c69dd74f12a4b17ff15217bf8c135cc06aa --- Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/Creators/AggregatedSerializableFailureMechanismCreatorTest.cs (.../AggregatedSerializableFailureMechanismCreatorTest.cs) (revision 19043242cabb3c29ab5956da83245f300427767c) +++ Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/Creators/AggregatedSerializableFailureMechanismCreatorTest.cs (.../AggregatedSerializableFailureMechanismCreatorTest.cs) (revision 7ad21c69dd74f12a4b17ff15217bf8c135cc06aa) @@ -479,27 +479,35 @@ private static ExportableSectionAssemblyResult CreateSectionAssemblyResult(int seed) { var random = new Random(seed); - var assemblyCategory = random.NextEnumValue(); - if (assemblyCategory == FailureMechanismSectionAssemblyCategoryGroup.None) - { - assemblyCategory = FailureMechanismSectionAssemblyCategoryGroup.IIIv; - } - return new ExportableSectionAssemblyResult(random.NextEnumValue(), - assemblyCategory); + random.NextEnumValue(new[] + { + FailureMechanismSectionAssemblyCategoryGroup.NotApplicable, + FailureMechanismSectionAssemblyCategoryGroup.Iv, + FailureMechanismSectionAssemblyCategoryGroup.IIv, + FailureMechanismSectionAssemblyCategoryGroup.IIIv, + FailureMechanismSectionAssemblyCategoryGroup.IVv, + FailureMechanismSectionAssemblyCategoryGroup.Vv, + FailureMechanismSectionAssemblyCategoryGroup.VIv, + FailureMechanismSectionAssemblyCategoryGroup.VIIv + })); } private static ExportableSectionAssemblyResultWithProbability CreateSectionAssemblyResultWithProbability(int seed) { var random = new Random(seed); - var assemblyCategory = random.NextEnumValue(); - if (assemblyCategory == FailureMechanismSectionAssemblyCategoryGroup.None) - { - assemblyCategory = FailureMechanismSectionAssemblyCategoryGroup.IIIv; - } - return new ExportableSectionAssemblyResultWithProbability(random.NextEnumValue(), - assemblyCategory, + random.NextEnumValue(new[] + { + FailureMechanismSectionAssemblyCategoryGroup.NotApplicable, + FailureMechanismSectionAssemblyCategoryGroup.Iv, + FailureMechanismSectionAssemblyCategoryGroup.IIv, + FailureMechanismSectionAssemblyCategoryGroup.IIIv, + FailureMechanismSectionAssemblyCategoryGroup.IVv, + FailureMechanismSectionAssemblyCategoryGroup.Vv, + FailureMechanismSectionAssemblyCategoryGroup.VIv, + FailureMechanismSectionAssemblyCategoryGroup.VIIv + }), random.NextDouble()); } Index: Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/Creators/AggregatedSerializableFailureMechanismSectionAssemblyCreatorTest.cs =================================================================== diff -u -rec912afa912e6b031f1002079be941f19dbfbc88 -r7ad21c69dd74f12a4b17ff15217bf8c135cc06aa --- Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/Creators/AggregatedSerializableFailureMechanismSectionAssemblyCreatorTest.cs (.../AggregatedSerializableFailureMechanismSectionAssemblyCreatorTest.cs) (revision ec912afa912e6b031f1002079be941f19dbfbc88) +++ Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/Creators/AggregatedSerializableFailureMechanismSectionAssemblyCreatorTest.cs (.../AggregatedSerializableFailureMechanismSectionAssemblyCreatorTest.cs) (revision 7ad21c69dd74f12a4b17ff15217bf8c135cc06aa) @@ -619,14 +619,18 @@ private static ExportableSectionAssemblyResult CreateSectionAssemblyResult(int seed) { var random = new Random(seed); - var assemblyCategory = random.NextEnumValue(); - if (assemblyCategory == FailureMechanismSectionAssemblyCategoryGroup.None) - { - assemblyCategory = FailureMechanismSectionAssemblyCategoryGroup.IIIv; - } - return new ExportableSectionAssemblyResult(random.NextEnumValue(), - assemblyCategory); + random.NextEnumValue(new[] + { + FailureMechanismSectionAssemblyCategoryGroup.NotApplicable, + FailureMechanismSectionAssemblyCategoryGroup.Iv, + FailureMechanismSectionAssemblyCategoryGroup.IIv, + FailureMechanismSectionAssemblyCategoryGroup.IIIv, + FailureMechanismSectionAssemblyCategoryGroup.IVv, + FailureMechanismSectionAssemblyCategoryGroup.Vv, + FailureMechanismSectionAssemblyCategoryGroup.VIv, + FailureMechanismSectionAssemblyCategoryGroup.VIIv + })); } private static ExportableSectionAssemblyResult CreateSectionAssemblyResult(FailureMechanismSectionAssemblyCategoryGroup assemblyCategory) @@ -639,14 +643,18 @@ private static ExportableSectionAssemblyResultWithProbability CreateSectionAssemblyResultWithProbability(int seed) { var random = new Random(seed); - var assemblyCategory = random.NextEnumValue(); - if (assemblyCategory == FailureMechanismSectionAssemblyCategoryGroup.None) - { - assemblyCategory = FailureMechanismSectionAssemblyCategoryGroup.IIIv; - } - return new ExportableSectionAssemblyResultWithProbability(random.NextEnumValue(), - assemblyCategory, + random.NextEnumValue(new[] + { + FailureMechanismSectionAssemblyCategoryGroup.NotApplicable, + FailureMechanismSectionAssemblyCategoryGroup.Iv, + FailureMechanismSectionAssemblyCategoryGroup.IIv, + FailureMechanismSectionAssemblyCategoryGroup.IIIv, + FailureMechanismSectionAssemblyCategoryGroup.IVv, + FailureMechanismSectionAssemblyCategoryGroup.Vv, + FailureMechanismSectionAssemblyCategoryGroup.VIv, + FailureMechanismSectionAssemblyCategoryGroup.VIIv + }), random.NextDouble()); } Index: Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/Creators/SerializableAssemblyCreatorTest.cs =================================================================== diff -u -r19043242cabb3c29ab5956da83245f300427767c -r7ad21c69dd74f12a4b17ff15217bf8c135cc06aa --- Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/Creators/SerializableAssemblyCreatorTest.cs (.../SerializableAssemblyCreatorTest.cs) (revision 19043242cabb3c29ab5956da83245f300427767c) +++ Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/Creators/SerializableAssemblyCreatorTest.cs (.../SerializableAssemblyCreatorTest.cs) (revision 7ad21c69dd74f12a4b17ff15217bf8c135cc06aa) @@ -206,14 +206,18 @@ private static ExportableSectionAssemblyResult CreateSectionAssemblyResult() { var random = new Random(30); - var assemblyCategory = random.NextEnumValue(); - if (assemblyCategory == FailureMechanismSectionAssemblyCategoryGroup.None) - { - assemblyCategory = FailureMechanismSectionAssemblyCategoryGroup.IIIv; - } - return new ExportableSectionAssemblyResult(random.NextEnumValue(), - assemblyCategory); + random.NextEnumValue(new[] + { + FailureMechanismSectionAssemblyCategoryGroup.NotApplicable, + FailureMechanismSectionAssemblyCategoryGroup.Iv, + FailureMechanismSectionAssemblyCategoryGroup.IIv, + FailureMechanismSectionAssemblyCategoryGroup.IIIv, + FailureMechanismSectionAssemblyCategoryGroup.IVv, + FailureMechanismSectionAssemblyCategoryGroup.Vv, + FailureMechanismSectionAssemblyCategoryGroup.VIv, + FailureMechanismSectionAssemblyCategoryGroup.VIIv + })); } #endregion Index: Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/Creators/SerializableAssessmentSectionAssemblyResultCreatorTest.cs =================================================================== diff -u -rf33ee67efb62e6be7e9d804bd8db91a5ebda75d7 -r7ad21c69dd74f12a4b17ff15217bf8c135cc06aa --- Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/Creators/SerializableAssessmentSectionAssemblyResultCreatorTest.cs (.../SerializableAssessmentSectionAssemblyResultCreatorTest.cs) (revision f33ee67efb62e6be7e9d804bd8db91a5ebda75d7) +++ Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/Creators/SerializableAssessmentSectionAssemblyResultCreatorTest.cs (.../SerializableAssessmentSectionAssemblyResultCreatorTest.cs) (revision 7ad21c69dd74f12a4b17ff15217bf8c135cc06aa) @@ -49,7 +49,14 @@ // Setup var random = new Random(21); var result = new ExportableAssessmentSectionAssemblyResult(random.NextEnumValue(), - random.NextEnumValue()); + random.NextEnumValue(new[] + { + AssessmentSectionAssemblyCategoryGroup.NotAssessed, + AssessmentSectionAssemblyCategoryGroup.A, + AssessmentSectionAssemblyCategoryGroup.B, + AssessmentSectionAssemblyCategoryGroup.C, + AssessmentSectionAssemblyCategoryGroup.D + })); // Call SerializableAssessmentSectionAssemblyResult serializableResult = Index: Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/Creators/SerializableCombinedFailureMechanismSectionAssemblyResultCreatorTest.cs =================================================================== diff -u -ra56e1107988e0b552f2ba371935b967b34fdc332 -r7ad21c69dd74f12a4b17ff15217bf8c135cc06aa --- Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/Creators/SerializableCombinedFailureMechanismSectionAssemblyResultCreatorTest.cs (.../SerializableCombinedFailureMechanismSectionAssemblyResultCreatorTest.cs) (revision a56e1107988e0b552f2ba371935b967b34fdc332) +++ Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/Creators/SerializableCombinedFailureMechanismSectionAssemblyResultCreatorTest.cs (.../SerializableCombinedFailureMechanismSectionAssemblyResultCreatorTest.cs) (revision 7ad21c69dd74f12a4b17ff15217bf8c135cc06aa) @@ -68,14 +68,18 @@ private static ExportableSectionAssemblyResult CreateSectionAssemblyResult() { var random = new Random(21); - var assemblyCategoryGroup = random.NextEnumValue(); - if (assemblyCategoryGroup == FailureMechanismSectionAssemblyCategoryGroup.None) - { - assemblyCategoryGroup = FailureMechanismSectionAssemblyCategoryGroup.IIIv; - } - return new ExportableSectionAssemblyResult(random.NextEnumValue(), - assemblyCategoryGroup); + random.NextEnumValue(new[] + { + FailureMechanismSectionAssemblyCategoryGroup.NotApplicable, + FailureMechanismSectionAssemblyCategoryGroup.Iv, + FailureMechanismSectionAssemblyCategoryGroup.IIv, + FailureMechanismSectionAssemblyCategoryGroup.IIIv, + FailureMechanismSectionAssemblyCategoryGroup.IVv, + FailureMechanismSectionAssemblyCategoryGroup.Vv, + FailureMechanismSectionAssemblyCategoryGroup.VIv, + FailureMechanismSectionAssemblyCategoryGroup.VIIv + })); } } } \ No newline at end of file