// Copyright (C) Stichting Deltares 2016. All rights reserved.
//
// This file is part of Ringtoets.
//
// Ringtoets is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
//
// All names, logos, and references to "Deltares" are registered trademarks of
// Stichting Deltares and remain full property of Stichting Deltares at all times.
// All rights reserved.
using System;
using System.Collections.Generic;
using NUnit.Framework;
using Ringtoets.Common.IO.Structures;
namespace Ringtoets.Common.IO.Test.Structures
{
[TestFixture]
public class StructuresParameterRowsValidatorTest
{
[Test]
public void ValidateHeightStructuresParameters_StructureParameterRowsNull_ThrowsArgumentNullException()
{
// Call
TestDelegate call = () => StructuresParameterRowsValidator.ValidateHeightStructuresParameters(null);
// Assert
string paramName = Assert.Throws(call).ParamName;
Assert.AreEqual("structureParameterRows", paramName);
}
[Test]
public void ValidateHeightStructuresParameters_ParameterIdsMissingOrDuplicated_ValidIsFalseAndErrorMessages()
{
// Setup
var structuresParameterRow = new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.HeightStructureParameterKeyword1,
NumericalValue = 180.0
};
List structureParameterRows = new List
{
structuresParameterRow,
structuresParameterRow
};
// Call
ValidationResult validationResult = StructuresParameterRowsValidator.ValidateHeightStructuresParameters(structureParameterRows);
// Assert
Assert.IsFalse(validationResult.IsValid);
List expectedErrorMessages = new List
{
"Parameter 'KW_HOOGTE1' komt meermaals voor.",
"Parameter 'KW_HOOGTE2' ontbreekt.",
"Parameter 'KW_HOOGTE3' ontbreekt.",
"Parameter 'KW_HOOGTE4' ontbreekt.",
"Parameter 'KW_HOOGTE5' ontbreekt.",
"Parameter 'KW_HOOGTE6' ontbreekt.",
"Parameter 'KW_HOOGTE7' ontbreekt.",
"Parameter 'KW_HOOGTE8' ontbreekt."
};
CollectionAssert.AreEqual(expectedErrorMessages, validationResult.ErrorMessages);
}
[Test]
public void ValidateHeightStructuresParameters_ParametersAllInvalid_ValidIsFalseAndErrorMessages()
{
// Setup
List structureParameterRows = new List
{
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.HeightStructureParameterKeyword1,
NumericalValue = double.NaN,
LineNumber = 1
},
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.HeightStructureParameterKeyword2,
NumericalValue = double.NaN,
VarianceValue = -10.0,
LineNumber = 2
},
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.HeightStructureParameterKeyword3,
NumericalValue = double.NaN,
VarianceValue = double.NaN,
LineNumber = 3
},
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.HeightStructureParameterKeyword4,
NumericalValue = double.PositiveInfinity,
VarianceValue = double.PositiveInfinity,
LineNumber = 4
},
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.HeightStructureParameterKeyword5,
NumericalValue = double.PositiveInfinity,
VarianceValue = 10.0,
VarianceType = VarianceType.NotSpecified,
LineNumber = 5
},
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.HeightStructureParameterKeyword6,
NumericalValue = double.NegativeInfinity,
LineNumber = 6
},
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.HeightStructureParameterKeyword7,
NumericalValue = 9.9e-5,
VarianceValue = 10.0,
VarianceType = VarianceType.StandardDeviation,
LineNumber = 7
},
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.HeightStructureParameterKeyword8,
NumericalValue = 0,
VarianceValue = 10.0,
VarianceType = VarianceType.CoefficientOfVariation,
LineNumber = 8
}
};
// Call
ValidationResult validationResult = StructuresParameterRowsValidator.ValidateHeightStructuresParameters(structureParameterRows);
// Assert
Assert.IsFalse(validationResult.IsValid);
List expectedErrorMessages = new List
{
"De waarde voor parameter 'KW_HOOGTE1' op regel 1, kolom 'numeriekewaarde', valt buiten het bereik [0, 360].",
"De waarde voor parameter 'KW_HOOGTE2' op regel 2, kolom 'numeriekewaarde', is geen getal.",
"De waarde voor parameter 'KW_HOOGTE2' op regel 2, kolom 'boolean', moet de waarde 0 (variatiecoëfficiënt) of 1 (standaard deviatie) hebben.",
"De waarde voor parameter 'KW_HOOGTE2' op regel 2, kolom 'standarddeviatie.variance', moet een getal zijn dat niet negatief is.",
"De waarde voor parameter 'KW_HOOGTE3' op regel 3, kolom 'numeriekewaarde', moet een getal zijn dat niet negatief is.",
"De waarde voor parameter 'KW_HOOGTE3' op regel 3, kolom 'boolean', moet de waarde 0 (variatiecoëfficiënt) of 1 (standaard deviatie) hebben.",
"De waarde voor parameter 'KW_HOOGTE3' op regel 3, kolom 'standarddeviatie.variance', moet een getal zijn dat niet negatief is.",
"De waarde voor parameter 'KW_HOOGTE4' op regel 4, kolom 'numeriekewaarde', moet een getal zijn dat niet negatief is.",
"De waarde voor parameter 'KW_HOOGTE4' op regel 4, kolom 'boolean', moet de waarde 0 (variatiecoëfficiënt) of 1 (standaard deviatie) hebben.",
"De waarde voor parameter 'KW_HOOGTE4' op regel 4, kolom 'standarddeviatie.variance', moet een getal zijn dat niet negatief is.",
"De waarde voor parameter 'KW_HOOGTE5' op regel 5, kolom 'numeriekewaarde', is geen getal.",
"De waarde voor parameter 'KW_HOOGTE5' op regel 5, kolom 'boolean', moet de waarde 0 (variatiecoëfficiënt) of 1 (standaard deviatie) hebben.",
"De waarde voor parameter 'KW_HOOGTE6' op regel 6, kolom 'numeriekewaarde', valt buiten het bereik (0, 1].",
"De waarde voor parameter 'KW_HOOGTE7' op regel 7, kolom 'numeriekewaarde', is te dicht op 0 waardoor een betrouwbare conversie tussen standaard deviatie en variatiecoëfficiënt niet mogelijk is.",
"De waarde voor parameter 'KW_HOOGTE8' op regel 8, kolom 'numeriekewaarde', is te dicht op 0 waardoor een betrouwbare conversie tussen standaard deviatie en variatiecoëfficiënt niet mogelijk is.",
};
CollectionAssert.AreEqual(expectedErrorMessages, validationResult.ErrorMessages);
}
[Test]
public void ValidateHeightStructuresParameters_VarianceValueConversionWithNegativeMean_NoErrorMessage()
{
// Setup
var parameters = new[]
{
// Parameters of interest for test:
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.HeightStructureParameterKeyword2,
NumericalValue = -1,
VarianceValue = 1,
VarianceType = VarianceType.CoefficientOfVariation // Expected Standard Deviation for normal distribution
},
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.HeightStructureParameterKeyword5,
NumericalValue = -1,
VarianceValue = 1,
VarianceType = VarianceType.StandardDeviation // Expected Coefficient of Variation for normal distribution
},
// Remainder:
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.HeightStructureParameterKeyword1,
NumericalValue = 1,
VarianceValue = 1,
VarianceType = VarianceType.CoefficientOfVariation
},
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.HeightStructureParameterKeyword3,
NumericalValue = 1,
VarianceValue = 1,
VarianceType = VarianceType.CoefficientOfVariation
},
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.HeightStructureParameterKeyword4,
NumericalValue = 1,
VarianceValue = 1,
VarianceType = VarianceType.CoefficientOfVariation
},
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.HeightStructureParameterKeyword6,
NumericalValue = 1,
VarianceValue = 1,
VarianceType = VarianceType.CoefficientOfVariation
},
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.HeightStructureParameterKeyword7,
NumericalValue = 1,
VarianceValue = 1,
VarianceType = VarianceType.CoefficientOfVariation
},
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.HeightStructureParameterKeyword8,
NumericalValue = 1,
VarianceValue = 1,
VarianceType = VarianceType.CoefficientOfVariation
}
};
// Call
ValidationResult validationResult = StructuresParameterRowsValidator.ValidateHeightStructuresParameters(parameters);
// Assert
Assert.IsTrue(validationResult.IsValid,
"Expected to be valid, but found following errors: {0}",
string.Join(Environment.NewLine, validationResult.ErrorMessages));
}
[Test]
public void ValidateClosingStructuresParameters_StructureParameterRowsNull_ThrowsArgumentNullException()
{
// Call
TestDelegate call = () => StructuresParameterRowsValidator.ValidateClosingStructuresParameters(null);
// Assert
string paramName = Assert.Throws(call).ParamName;
Assert.AreEqual("structureParameterRows", paramName);
}
[Test]
public void ValidateClosingStructuresParameters_ParameterIdsMissingOrDuplicated_ValidIsFalseAndErrorMessages()
{
// Setup
var structuresParameterRow = new StructuresParameterRow
{
ParameterId = "KW_BETSLUIT3",
NumericalValue = 180.0
};
List structureParameterRows = new List
{
structuresParameterRow,
structuresParameterRow
};
// Call
ValidationResult validationResult = StructuresParameterRowsValidator.ValidateClosingStructuresParameters(structureParameterRows);
// Assert
Assert.IsFalse(validationResult.IsValid);
List expectedErrorMessages = new List
{
"Parameter 'KW_BETSLUIT1' ontbreekt.",
"Parameter 'KW_BETSLUIT2' ontbreekt.",
"Parameter 'KW_BETSLUIT3' komt meermaals voor.",
"Parameter 'KW_BETSLUIT4' ontbreekt.",
"Parameter 'KW_BETSLUIT5' ontbreekt.",
"Parameter 'KW_BETSLUIT6' ontbreekt.",
"Parameter 'KW_BETSLUIT7' ontbreekt.",
"Parameter 'KW_BETSLUIT8' ontbreekt.",
"Parameter 'KW_BETSLUIT9' ontbreekt.",
"Parameter 'KW_BETSLUIT10' ontbreekt.",
"Parameter 'KW_BETSLUIT11' ontbreekt.",
"Parameter 'KW_BETSLUIT12' ontbreekt.",
"Parameter 'KW_BETSLUIT13' ontbreekt.",
"Parameter 'KW_BETSLUIT14' ontbreekt.",
"Parameter 'KW_BETSLUIT15' ontbreekt."
};
CollectionAssert.AreEqual(expectedErrorMessages, validationResult.ErrorMessages);
}
[Test]
public void ValidateClosingStructuresParameters_ParametersAllInvalid_ValidIsFalseAndErrorMessages()
{
// Setup
List structureParameterRows = new List
{
new StructuresParameterRow
{
ParameterId = "KW_BETSLUIT1",
NumericalValue = 1e-5,
VarianceValue = 1.0,
VarianceType = VarianceType.StandardDeviation,
LineNumber = 1
},
new StructuresParameterRow
{
ParameterId = "KW_BETSLUIT2",
NumericalValue = double.PositiveInfinity,
VarianceValue = 10.0,
VarianceType = VarianceType.StandardDeviation,
LineNumber = 2
},
new StructuresParameterRow
{
ParameterId = "KW_BETSLUIT3",
NumericalValue = double.NaN,
LineNumber = 3
},
new StructuresParameterRow
{
ParameterId = "KW_BETSLUIT4",
NumericalValue = 0,
VarianceValue = 10.0,
VarianceType = VarianceType.CoefficientOfVariation,
LineNumber = 4
},
new StructuresParameterRow
{
ParameterId = "KW_BETSLUIT5",
NumericalValue = double.PositiveInfinity,
VarianceValue = 10.0,
VarianceType = VarianceType.NotSpecified,
LineNumber = 5
},
new StructuresParameterRow
{
ParameterId = "KW_BETSLUIT6",
NumericalValue = double.PositiveInfinity,
VarianceValue = 10.0,
VarianceType = VarianceType.NotSpecified,
LineNumber = 6
},
new StructuresParameterRow
{
ParameterId = "KW_BETSLUIT7",
NumericalValue = double.PositiveInfinity,
VarianceValue = 10.0,
VarianceType = VarianceType.NotSpecified,
LineNumber = 7
},
new StructuresParameterRow
{
ParameterId = "KW_BETSLUIT8",
NumericalValue = double.PositiveInfinity,
VarianceValue = double.PositiveInfinity,
LineNumber = 8
},
new StructuresParameterRow
{
ParameterId = "KW_BETSLUIT9",
NumericalValue = double.PositiveInfinity,
VarianceValue = double.PositiveInfinity,
LineNumber = 9
},
new StructuresParameterRow
{
ParameterId = "KW_BETSLUIT10",
NumericalValue = double.NaN,
VarianceValue = double.NaN,
LineNumber = 10
},
new StructuresParameterRow
{
ParameterId = "KW_BETSLUIT11",
NumericalValue = double.NegativeInfinity,
LineNumber = 11
},
new StructuresParameterRow
{
ParameterId = "KW_BETSLUIT12",
NumericalValue = double.NegativeInfinity,
LineNumber = 12
},
new StructuresParameterRow
{
ParameterId = "KW_BETSLUIT13",
NumericalValue = -11,
LineNumber = 13
},
new StructuresParameterRow
{
ParameterId = "KW_BETSLUIT14",
NumericalValue = double.NegativeInfinity,
LineNumber = 14
},
new StructuresParameterRow
{
ParameterId = "KW_BETSLUIT15",
AlphanumericValue = "oei",
LineNumber = 15
}
};
// Call
ValidationResult validationResult = StructuresParameterRowsValidator.ValidateClosingStructuresParameters(structureParameterRows);
// Assert
Assert.IsFalse(validationResult.IsValid);
List expectedErrorMessages = new List
{
"De waarde voor parameter 'KW_BETSLUIT1' op regel 1, kolom 'numeriekewaarde', is te dicht op 0 waardoor een betrouwbare conversie tussen standaard deviatie en variatiecoëfficiënt niet mogelijk is.",
"De waarde voor parameter 'KW_BETSLUIT2' op regel 2, kolom 'numeriekewaarde', moet een getal zijn dat niet negatief is.",
"De waarde voor parameter 'KW_BETSLUIT3' op regel 3, kolom 'numeriekewaarde', valt buiten het bereik [0, 360].",
"De waarde voor parameter 'KW_BETSLUIT5' op regel 5, kolom 'numeriekewaarde', is geen getal.",
"De waarde voor parameter 'KW_BETSLUIT5' op regel 5, kolom 'boolean', moet de waarde 0 (variatiecoëfficiënt) of 1 (standaard deviatie) hebben.",
"De waarde voor parameter 'KW_BETSLUIT6' op regel 6, kolom 'numeriekewaarde', is geen getal.",
"De waarde voor parameter 'KW_BETSLUIT6' op regel 6, kolom 'boolean', moet de waarde 0 (variatiecoëfficiënt) of 1 (standaard deviatie) hebben.",
"De waarde voor parameter 'KW_BETSLUIT7' op regel 7, kolom 'numeriekewaarde', is geen getal.",
"De waarde voor parameter 'KW_BETSLUIT7' op regel 7, kolom 'boolean', moet de waarde 0 (variatiecoëfficiënt) of 1 (standaard deviatie) hebben.",
"De waarde voor parameter 'KW_BETSLUIT8' op regel 8, kolom 'numeriekewaarde', moet een getal zijn dat niet negatief is.",
"De waarde voor parameter 'KW_BETSLUIT8' op regel 8, kolom 'boolean', moet de waarde 0 (variatiecoëfficiënt) of 1 (standaard deviatie) hebben.",
"De waarde voor parameter 'KW_BETSLUIT8' op regel 8, kolom 'standarddeviatie.variance', moet een getal zijn dat niet negatief is.",
"De waarde voor parameter 'KW_BETSLUIT9' op regel 9, kolom 'numeriekewaarde', moet een getal zijn dat niet negatief is.",
"De waarde voor parameter 'KW_BETSLUIT9' op regel 9, kolom 'boolean', moet de waarde 0 (variatiecoëfficiënt) of 1 (standaard deviatie) hebben.",
"De waarde voor parameter 'KW_BETSLUIT9' op regel 9, kolom 'standarddeviatie.variance', moet een getal zijn dat niet negatief is.",
"De waarde voor parameter 'KW_BETSLUIT10' op regel 10, kolom 'numeriekewaarde', moet een getal zijn dat niet negatief is.",
"De waarde voor parameter 'KW_BETSLUIT10' op regel 10, kolom 'boolean', moet de waarde 0 (variatiecoëfficiënt) of 1 (standaard deviatie) hebben.",
"De waarde voor parameter 'KW_BETSLUIT10' op regel 10, kolom 'standarddeviatie.variance', moet een getal zijn dat niet negatief is.",
"De waarde voor parameter 'KW_BETSLUIT11' op regel 11, kolom 'numeriekewaarde', valt buiten het bereik (0, 1].",
"De waarde voor parameter 'KW_BETSLUIT12' op regel 12, kolom 'numeriekewaarde', valt buiten het bereik (0, 1].",
"De waarde voor parameter 'KW_BETSLUIT13' op regel 13, kolom 'numeriekewaarde', moet een positief geheel getal zijn.",
"De waarde voor parameter 'KW_BETSLUIT14' op regel 14, kolom 'numeriekewaarde', valt buiten het bereik (0, 1].",
"De waarde voor parameter 'KW_BETSLUIT15' op regel 15, kolom 'alfanumeriekewaarde', moet een geldig kunstwerk type zijn."
};
CollectionAssert.AreEqual(expectedErrorMessages, validationResult.ErrorMessages);
}
[Test]
public void ValidateClosingStructuresParameters_VarianceValueConversionWithNegativeMean_NoErrorMessage()
{
// Setup
var parameters = new[]
{
// Parameters of interest for test:
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.ClosingStructureParameterKeyword4,
NumericalValue = -1,
VarianceValue = 1,
VarianceType = VarianceType.StandardDeviation // Expected Coefficient of Variation for normal distribution
},
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.ClosingStructureParameterKeyword5,
NumericalValue = -1,
VarianceValue = 1,
VarianceType = VarianceType.CoefficientOfVariation // Expected Standard Deviation for normal distribution
},
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.ClosingStructureParameterKeyword6,
NumericalValue = 1,
VarianceValue = 1,
VarianceType = VarianceType.CoefficientOfVariation // Expected Standard Deviation for normal distribution
},
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.ClosingStructureParameterKeyword7,
NumericalValue = 1,
VarianceValue = 1,
VarianceType = VarianceType.CoefficientOfVariation // Expected Standard Deviation for normal distribution
},
// Remainder:
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.ClosingStructureParameterKeyword1,
NumericalValue = 1,
VarianceValue = 1,
VarianceType = VarianceType.CoefficientOfVariation
},
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.ClosingStructureParameterKeyword2,
NumericalValue = 1,
VarianceValue = 1,
VarianceType = VarianceType.CoefficientOfVariation
},
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.ClosingStructureParameterKeyword3,
NumericalValue = 1,
VarianceValue = 1,
VarianceType = VarianceType.CoefficientOfVariation
},
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.ClosingStructureParameterKeyword8,
NumericalValue = 1,
VarianceValue = 1,
VarianceType = VarianceType.CoefficientOfVariation
},
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.ClosingStructureParameterKeyword9,
NumericalValue = 1,
VarianceValue = 1,
VarianceType = VarianceType.CoefficientOfVariation
},
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.ClosingStructureParameterKeyword10,
NumericalValue = 1,
VarianceValue = 1,
VarianceType = VarianceType.CoefficientOfVariation
},
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.ClosingStructureParameterKeyword11,
NumericalValue = 1,
VarianceValue = 1,
VarianceType = VarianceType.CoefficientOfVariation
},
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.ClosingStructureParameterKeyword12,
NumericalValue = 1,
VarianceValue = 1,
VarianceType = VarianceType.CoefficientOfVariation
},
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.ClosingStructureParameterKeyword13,
NumericalValue = 1,
VarianceValue = 1,
VarianceType = VarianceType.CoefficientOfVariation
},
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.ClosingStructureParameterKeyword14,
NumericalValue = 1,
VarianceValue = 1,
VarianceType = VarianceType.CoefficientOfVariation
},
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.ClosingStructureParameterKeyword15,
NumericalValue = 1,
VarianceValue = 1,
VarianceType = VarianceType.CoefficientOfVariation,
AlphanumericValue = "verticalewand"
}
};
// Call
ValidationResult validationResult = StructuresParameterRowsValidator.ValidateClosingStructuresParameters(parameters);
// Assert
Assert.IsTrue(validationResult.IsValid,
"Expected to be valid, but found following errors: {0}",
string.Join(Environment.NewLine, validationResult.ErrorMessages));
}
[Test]
public void ValidateStabilityPointStructuresParameters_StructureParameterRowsNull_ThrowsArgumentNullException()
{
// Call
TestDelegate call = () => StructuresParameterRowsValidator.ValidateStabilityPointStructuresParameters(null);
// Assert
string paramName = Assert.Throws(call).ParamName;
Assert.AreEqual("structureParameterRows", paramName);
}
[Test]
public void ValidateStabilityPointStructuresParameters_ParameterIdsMissingOrDuplicated_ValidIsFalseAndErrorMessages()
{
// Setup
var structuresParameterRow = new StructuresParameterRow
{
ParameterId = "KW_STERSTAB1",
NumericalValue = 180.0
};
List structureParameterRows = new List
{
structuresParameterRow,
structuresParameterRow
};
// Call
ValidationResult validationResult = StructuresParameterRowsValidator.ValidateStabilityPointStructuresParameters(structureParameterRows);
// Assert
Assert.IsFalse(validationResult.IsValid);
List expectedErrorMessages = new List
{
"Parameter 'KW_STERSTAB1' komt meermaals voor.",
"Parameter 'KW_STERSTAB2' ontbreekt.",
"Parameter 'KW_STERSTAB3' ontbreekt.",
"Parameter 'KW_STERSTAB4' ontbreekt.",
"Parameter 'KW_STERSTAB5' ontbreekt.",
"Parameter 'KW_STERSTAB6' ontbreekt.",
"Parameter 'KW_STERSTAB7' ontbreekt.",
"Parameter 'KW_STERSTAB8' ontbreekt.",
"Parameter 'KW_STERSTAB9' ontbreekt.",
"Parameter 'KW_STERSTAB10' ontbreekt.",
"Parameter 'KW_STERSTAB11' ontbreekt.",
"Parameter 'KW_STERSTAB12' ontbreekt.",
"Parameter 'KW_STERSTAB13' ontbreekt.",
"Parameter 'KW_STERSTAB14' ontbreekt.",
"Parameter 'KW_STERSTAB15' ontbreekt.",
"Parameter 'KW_STERSTAB16' ontbreekt.",
"Parameter 'KW_STERSTAB17' ontbreekt.",
"Parameter 'KW_STERSTAB18' ontbreekt.",
"Parameter 'KW_STERSTAB19' ontbreekt.",
"Parameter 'KW_STERSTAB20' ontbreekt.",
"Parameter 'KW_STERSTAB21' ontbreekt.",
"Parameter 'KW_STERSTAB22' ontbreekt.",
"Parameter 'KW_STERSTAB23' ontbreekt.",
"Parameter 'KW_STERSTAB24' ontbreekt.",
"Parameter 'KW_STERSTAB25' ontbreekt.",
"Parameter 'KW_STERSTAB26' ontbreekt."
};
CollectionAssert.AreEqual(expectedErrorMessages, validationResult.ErrorMessages);
}
[Test]
public void ValidateStabilityPointStructuresParameters_ParametersAllInvalid_ValidIsFalseAndErrorMessages()
{
// Setup
List structureParameterRows = new List
{
new StructuresParameterRow
{
ParameterId = "KW_STERSTAB1",
NumericalValue = double.NaN,
LineNumber = 1
},
new StructuresParameterRow
{
ParameterId = "KW_STERSTAB2",
NumericalValue = 1e-5,
VarianceValue = 1.0,
VarianceType = VarianceType.StandardDeviation,
LineNumber = 2
},
new StructuresParameterRow
{
ParameterId = "KW_STERSTAB3",
NumericalValue = double.NaN,
VarianceValue = double.NaN,
LineNumber = 3
},
new StructuresParameterRow
{
ParameterId = "KW_STERSTAB4",
NumericalValue = 0,
VarianceValue = 10.0,
VarianceType = VarianceType.CoefficientOfVariation,
LineNumber = 4
},
new StructuresParameterRow
{
ParameterId = "KW_STERSTAB5",
NumericalValue = double.PositiveInfinity,
VarianceValue = 10.0,
VarianceType = VarianceType.NotSpecified,
LineNumber = 5
},
new StructuresParameterRow
{
ParameterId = "KW_STERSTAB6",
NumericalValue = double.PositiveInfinity,
VarianceValue = 10.0,
VarianceType = VarianceType.NotSpecified,
LineNumber = 6
},
new StructuresParameterRow
{
ParameterId = "KW_STERSTAB7",
NumericalValue = 1e-5,
VarianceValue = 1.0,
VarianceType = VarianceType.StandardDeviation,
LineNumber = 7
},
new StructuresParameterRow
{
ParameterId = "KW_STERSTAB8",
NumericalValue = double.NaN,
VarianceValue = double.NaN,
LineNumber = 8
},
new StructuresParameterRow
{
ParameterId = "KW_STERSTAB9",
NumericalValue = 1e-5,
VarianceValue = 1.0,
VarianceType = VarianceType.StandardDeviation,
LineNumber = 9
},
new StructuresParameterRow
{
ParameterId = "KW_STERSTAB10",
NumericalValue = 1e-5,
VarianceValue = 1.0,
VarianceType = VarianceType.StandardDeviation,
LineNumber = 10
},
new StructuresParameterRow
{
ParameterId = "KW_STERSTAB11",
NumericalValue = double.PositiveInfinity,
VarianceValue = 10.0,
VarianceType = VarianceType.NotSpecified,
LineNumber = 11
},
new StructuresParameterRow
{
ParameterId = "KW_STERSTAB12",
NumericalValue = double.PositiveInfinity,
VarianceValue = 10.0,
VarianceType = VarianceType.NotSpecified,
LineNumber = 12
},
new StructuresParameterRow
{
ParameterId = "KW_STERSTAB13",
NumericalValue = double.NaN,
LineNumber = 13
},
new StructuresParameterRow
{
ParameterId = "KW_STERSTAB14",
NumericalValue = double.PositiveInfinity,
VarianceValue = 10.0,
VarianceType = VarianceType.NotSpecified,
LineNumber = 14
},
new StructuresParameterRow
{
ParameterId = "KW_STERSTAB15",
NumericalValue = -1.0,
LineNumber = 15
},
new StructuresParameterRow
{
ParameterId = "KW_STERSTAB16",
NumericalValue = double.NegativeInfinity,
LineNumber = 16
},
new StructuresParameterRow
{
ParameterId = "KW_STERSTAB17",
NumericalValue = -1.0,
LineNumber = 17
},
new StructuresParameterRow
{
ParameterId = "KW_STERSTAB18",
NumericalValue = 0,
VarianceValue = 10.0,
VarianceType = VarianceType.CoefficientOfVariation,
LineNumber = 18
},
new StructuresParameterRow
{
ParameterId = "KW_STERSTAB19",
NumericalValue = 0,
VarianceValue = 10.0,
VarianceType = VarianceType.CoefficientOfVariation,
LineNumber = 19
},
new StructuresParameterRow
{
ParameterId = "KW_STERSTAB20",
NumericalValue = -1.0,
LineNumber = 20
},
new StructuresParameterRow
{
ParameterId = "KW_STERSTAB21",
NumericalValue = -1.0,
LineNumber = 21
},
new StructuresParameterRow
{
ParameterId = "KW_STERSTAB22",
NumericalValue = double.PositiveInfinity,
VarianceValue = 10.0,
VarianceType = VarianceType.NotSpecified,
LineNumber = 22
},
new StructuresParameterRow
{
ParameterId = "KW_STERSTAB23",
NumericalValue = 1e-5,
VarianceValue = 1.0,
VarianceType = VarianceType.StandardDeviation,
LineNumber = 23
},
new StructuresParameterRow
{
ParameterId = "KW_STERSTAB24",
NumericalValue = 1e-5,
VarianceValue = 1.0,
VarianceType = VarianceType.StandardDeviation,
LineNumber = 24
},
new StructuresParameterRow
{
ParameterId = "KW_STERSTAB25",
NumericalValue = double.NaN,
VarianceValue = double.NaN,
LineNumber = 25
},
new StructuresParameterRow
{
ParameterId = "KW_STERSTAB26",
AlphanumericValue = "oei",
LineNumber = 26
}
};
// Call
ValidationResult validationResult = StructuresParameterRowsValidator.ValidateStabilityPointStructuresParameters(structureParameterRows);
// Assert
Assert.IsFalse(validationResult.IsValid);
List expectedErrorMessages = new List
{
"De waarde voor parameter 'KW_STERSTAB1' op regel 1, kolom 'numeriekewaarde', valt buiten het bereik [0, 360].",
"De waarde voor parameter 'KW_STERSTAB2' op regel 2, kolom 'numeriekewaarde', is te dicht op 0 waardoor een betrouwbare conversie tussen standaard deviatie en variatiecoëfficiënt niet mogelijk is.",
"De waarde voor parameter 'KW_STERSTAB3' op regel 3, kolom 'numeriekewaarde', moet een getal zijn dat niet negatief is.",
"De waarde voor parameter 'KW_STERSTAB3' op regel 3, kolom 'boolean', moet de waarde 0 (variatiecoëfficiënt) of 1 (standaard deviatie) hebben.",
"De waarde voor parameter 'KW_STERSTAB3' op regel 3, kolom 'standarddeviatie.variance', moet een getal zijn dat niet negatief is.",
"De waarde voor parameter 'KW_STERSTAB5' op regel 5, kolom 'numeriekewaarde', is geen getal.",
"De waarde voor parameter 'KW_STERSTAB5' op regel 5, kolom 'boolean', moet de waarde 0 (variatiecoëfficiënt) of 1 (standaard deviatie) hebben.",
"De waarde voor parameter 'KW_STERSTAB6' op regel 6, kolom 'numeriekewaarde', is geen getal.",
"De waarde voor parameter 'KW_STERSTAB6' op regel 6, kolom 'boolean', moet de waarde 0 (variatiecoëfficiënt) of 1 (standaard deviatie) hebben.",
"De waarde voor parameter 'KW_STERSTAB7' op regel 7, kolom 'numeriekewaarde', is te dicht op 0 waardoor een betrouwbare conversie tussen standaard deviatie en variatiecoëfficiënt niet mogelijk is.",
"De waarde voor parameter 'KW_STERSTAB8' op regel 8, kolom 'numeriekewaarde', moet een getal zijn dat niet negatief is.",
"De waarde voor parameter 'KW_STERSTAB8' op regel 8, kolom 'boolean', moet de waarde 0 (variatiecoëfficiënt) of 1 (standaard deviatie) hebben.",
"De waarde voor parameter 'KW_STERSTAB8' op regel 8, kolom 'standarddeviatie.variance', moet een getal zijn dat niet negatief is.",
"De waarde voor parameter 'KW_STERSTAB9' op regel 9, kolom 'numeriekewaarde', is te dicht op 0 waardoor een betrouwbare conversie tussen standaard deviatie en variatiecoëfficiënt niet mogelijk is.",
"De waarde voor parameter 'KW_STERSTAB10' op regel 10, kolom 'numeriekewaarde', is te dicht op 0 waardoor een betrouwbare conversie tussen standaard deviatie en variatiecoëfficiënt niet mogelijk is.",
"De waarde voor parameter 'KW_STERSTAB11' op regel 11, kolom 'numeriekewaarde', is geen getal.",
"De waarde voor parameter 'KW_STERSTAB11' op regel 11, kolom 'boolean', moet de waarde 0 (variatiecoëfficiënt) of 1 (standaard deviatie) hebben.",
"De waarde voor parameter 'KW_STERSTAB12' op regel 12, kolom 'numeriekewaarde', is geen getal.",
"De waarde voor parameter 'KW_STERSTAB12' op regel 12, kolom 'boolean', moet de waarde 0 (variatiecoëfficiënt) of 1 (standaard deviatie) hebben.",
"De waarde voor parameter 'KW_STERSTAB13' op regel 13, kolom 'numeriekewaarde', is geen getal.",
"De waarde voor parameter 'KW_STERSTAB14' op regel 14, kolom 'numeriekewaarde', is geen getal.",
"De waarde voor parameter 'KW_STERSTAB14' op regel 14, kolom 'boolean', moet de waarde 0 (variatiecoëfficiënt) of 1 (standaard deviatie) hebben.",
"De waarde voor parameter 'KW_STERSTAB15' op regel 15, kolom 'numeriekewaarde', moet een getal zijn dat niet negatief is.",
"De waarde voor parameter 'KW_STERSTAB16' op regel 16, kolom 'numeriekewaarde', valt buiten het bereik (0, 1].",
"De waarde voor parameter 'KW_STERSTAB17' op regel 17, kolom 'numeriekewaarde', moet een getal zijn dat niet negatief is.",
"De waarde voor parameter 'KW_STERSTAB20' op regel 20, kolom 'numeriekewaarde', moet een getal zijn dat niet negatief is.",
"De waarde voor parameter 'KW_STERSTAB21' op regel 21, kolom 'numeriekewaarde', moet een getal zijn dat niet negatief is.",
"De waarde voor parameter 'KW_STERSTAB22' op regel 22, kolom 'numeriekewaarde', is geen getal.",
"De waarde voor parameter 'KW_STERSTAB22' op regel 22, kolom 'boolean', moet de waarde 0 (variatiecoëfficiënt) of 1 (standaard deviatie) hebben.",
"De waarde voor parameter 'KW_STERSTAB23' op regel 23, kolom 'numeriekewaarde', is te dicht op 0 waardoor een betrouwbare conversie tussen standaard deviatie en variatiecoëfficiënt niet mogelijk is.",
"De waarde voor parameter 'KW_STERSTAB24' op regel 24, kolom 'numeriekewaarde', is te dicht op 0 waardoor een betrouwbare conversie tussen standaard deviatie en variatiecoëfficiënt niet mogelijk is.",
"De waarde voor parameter 'KW_STERSTAB25' op regel 25, kolom 'numeriekewaarde', moet een getal zijn dat niet negatief is.",
"De waarde voor parameter 'KW_STERSTAB25' op regel 25, kolom 'boolean', moet de waarde 0 (variatiecoëfficiënt) of 1 (standaard deviatie) hebben.",
"De waarde voor parameter 'KW_STERSTAB25' op regel 25, kolom 'standarddeviatie.variance', moet een getal zijn dat niet negatief is.",
"De waarde voor parameter 'KW_STERSTAB26' op regel 26, kolom 'alfanumeriekewaarde', moet een geldig kunstwerk type zijn."
};
CollectionAssert.AreEqual(expectedErrorMessages, validationResult.ErrorMessages);
}
[Test]
public void ValidateStabilityPointStructuresParameters_VarianceValueConversionWithNegativeMean_NoErrorMessage()
{
// Setup
var parameters = new[]
{
// Parameters of interest for test:
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.StabilityPointStructureParameterKeyword4,
NumericalValue = -1,
VarianceValue = 1,
VarianceType = VarianceType.StandardDeviation // Expected Coefficient of Variation for normal distribution
},
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.StabilityPointStructureParameterKeyword5,
NumericalValue = -1,
VarianceValue = 1,
VarianceType = VarianceType.CoefficientOfVariation // Expected Standard Deviation for normal distribution
},
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.StabilityPointStructureParameterKeyword6,
NumericalValue = 1,
VarianceValue = 1,
VarianceType = VarianceType.CoefficientOfVariation // Expected Standard Deviation for normal distribution
},
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.StabilityPointStructureParameterKeyword11,
NumericalValue = 1,
VarianceValue = 1,
VarianceType = VarianceType.CoefficientOfVariation // Expected Standard Deviation for normal distribution
},
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.StabilityPointStructureParameterKeyword12,
NumericalValue = 1,
VarianceValue = 1,
VarianceType = VarianceType.CoefficientOfVariation // Expected Standard Deviation for normal distribution
},
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.StabilityPointStructureParameterKeyword14,
NumericalValue = 1,
VarianceValue = 1,
VarianceType = VarianceType.CoefficientOfVariation // Expected Standard Deviation for normal distribution
},
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.StabilityPointStructureParameterKeyword18,
NumericalValue = 1,
VarianceValue = 1,
VarianceType = VarianceType.StandardDeviation // Expected Coefficient of Variation for normal distribution
},
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.StabilityPointStructureParameterKeyword19,
NumericalValue = 1,
VarianceValue = 1,
VarianceType = VarianceType.StandardDeviation // Expected Coefficient of Variation for normal distribution
},
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.StabilityPointStructureParameterKeyword22,
NumericalValue = 1,
VarianceValue = 1,
VarianceType = VarianceType.CoefficientOfVariation // Expected Standard Deviation for normal distribution
},
// Remainder:
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.StabilityPointStructureParameterKeyword1,
NumericalValue = 1,
VarianceValue = 1,
VarianceType = VarianceType.CoefficientOfVariation
},
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.StabilityPointStructureParameterKeyword2,
NumericalValue = 1,
VarianceValue = 1,
VarianceType = VarianceType.CoefficientOfVariation
},
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.StabilityPointStructureParameterKeyword3,
NumericalValue = 1,
VarianceValue = 1,
VarianceType = VarianceType.CoefficientOfVariation
},
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.StabilityPointStructureParameterKeyword7,
NumericalValue = 1,
VarianceValue = 1,
VarianceType = VarianceType.CoefficientOfVariation
},
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.StabilityPointStructureParameterKeyword8,
NumericalValue = 1,
VarianceValue = 1,
VarianceType = VarianceType.CoefficientOfVariation
},
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.StabilityPointStructureParameterKeyword9,
NumericalValue = 1,
VarianceValue = 1,
VarianceType = VarianceType.CoefficientOfVariation
},
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.StabilityPointStructureParameterKeyword10,
NumericalValue = 1,
VarianceValue = 1,
VarianceType = VarianceType.CoefficientOfVariation
},
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.StabilityPointStructureParameterKeyword13,
NumericalValue = 1,
VarianceValue = 1,
VarianceType = VarianceType.CoefficientOfVariation
},
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.StabilityPointStructureParameterKeyword15,
NumericalValue = 1,
VarianceValue = 1,
VarianceType = VarianceType.CoefficientOfVariation
},
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.StabilityPointStructureParameterKeyword16,
NumericalValue = 1,
VarianceValue = 1,
VarianceType = VarianceType.CoefficientOfVariation
},
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.StabilityPointStructureParameterKeyword17,
NumericalValue = 1,
VarianceValue = 1,
VarianceType = VarianceType.CoefficientOfVariation
},
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.StabilityPointStructureParameterKeyword20,
NumericalValue = 1,
VarianceValue = 1,
VarianceType = VarianceType.CoefficientOfVariation
},
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.StabilityPointStructureParameterKeyword21,
NumericalValue = 1,
VarianceValue = 1,
VarianceType = VarianceType.CoefficientOfVariation
},
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.StabilityPointStructureParameterKeyword23,
NumericalValue = 1,
VarianceValue = 1,
VarianceType = VarianceType.CoefficientOfVariation
},
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.StabilityPointStructureParameterKeyword24,
NumericalValue = 1,
VarianceValue = 1,
VarianceType = VarianceType.CoefficientOfVariation
},
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.StabilityPointStructureParameterKeyword25,
NumericalValue = 1,
VarianceValue = 1,
VarianceType = VarianceType.CoefficientOfVariation
},
new StructuresParameterRow
{
ParameterId = StructureFilesKeywords.StabilityPointStructureParameterKeyword26,
NumericalValue = 1,
VarianceValue = 1,
VarianceType = VarianceType.CoefficientOfVariation,
AlphanumericValue = "lagedrempel"
}
};
// Call
ValidationResult validationResult = StructuresParameterRowsValidator.ValidateStabilityPointStructuresParameters(parameters);
// Assert
Assert.IsTrue(validationResult.IsValid,
"Expected to be valid, but found following errors: {0}",
string.Join(Environment.NewLine, validationResult.ErrorMessages));
}
}
}