//----------------------------------------------------------------------- // // Copyright (c) 2010 Deltares. All rights reserved. // // B.S.T.I.M. The // tom.the@deltares.nl // 17-11-2010 // Test for TimeSerieProbablisticCalculator //----------------------------------------------------------------------- namespace Deltares.Dam.Tests { using NUnit.Framework; using Deltares.Dam.Data; using System.Collections.Generic; [TestFixture] public class TimeSerieCalculatorTest { private TimeSerieProbablisticCalculator timeSerieProbablisticCalculator = new TimeSerieProbablisticCalculator(); private double cTolerance = 0.00000001; [TestFixtureSetUp] public void TestFixtureSetup() { } private TimeSerie CreateTimeSerie(int timeSerieEntriesCount, double defaultValue) { TimeSerie timeSerie = new TimeSerie(); for (int timeSerieEntryIndex = 0; timeSerieEntryIndex < timeSerieEntriesCount; timeSerieEntryIndex++) { TimeSerieEntry timeSerieEntry = new TimeSerieEntry(); timeSerieEntry.Value = defaultValue; timeSerie.Entries.Add(timeSerieEntry); } return timeSerie; } [Test] public void CreateProbabilisticTimeSerieListReturnsSameItemCount() { const int cTimeSerieEntriesCount = 3; const int cTimeSeriesCount = 2; List waterLevelProbabilisticTimeSerieList; List waterLevelMeanTimeSerieList = new List(); List waterLevelStdTimeSerieList = new List(); List waterLevelDistTimeSerieList = new List(); TimeSerie timeSerie = CreateTimeSerie(cTimeSerieEntriesCount, 2.0); for (int timeSerieIndex = 0; timeSerieIndex < cTimeSeriesCount; timeSerieIndex++) { waterLevelMeanTimeSerieList.Add(timeSerie); waterLevelStdTimeSerieList.Add(timeSerie); waterLevelDistTimeSerieList.Add(timeSerie); } waterLevelProbabilisticTimeSerieList = timeSerieProbablisticCalculator.CreateProbabilisticTimeSerieList(waterLevelMeanTimeSerieList, waterLevelStdTimeSerieList, waterLevelDistTimeSerieList); Assert.AreEqual(waterLevelMeanTimeSerieList.Count, waterLevelProbabilisticTimeSerieList.Count); } [Test] [ExpectedException(typeof(TimeSerieCalculatorException))] public void CreateProbabilisticTimeSerieListThrowsExceptionWhenInputSerieListsNotSameLength() { const int cTimeSerieEntriesCount = 3; const int cTimeSeriesCount = 2; List waterLevelProbabilisticTimeSerieList; List waterLevelMeanTimeSerieList = new List(); List waterLevelStdTimeSerieList = new List(); List waterLevelDistTimeSerieList = new List(); for (int timeSerieIndex = 0; timeSerieIndex < cTimeSeriesCount; timeSerieIndex++) { waterLevelMeanTimeSerieList.Add(CreateTimeSerie(cTimeSerieEntriesCount, 2.0)); waterLevelStdTimeSerieList.Add(CreateTimeSerie(cTimeSerieEntriesCount, 2.0)); waterLevelDistTimeSerieList.Add(CreateTimeSerie(cTimeSerieEntriesCount, 2.0)); } // To force exception add one extra series for distribution waterLevelDistTimeSerieList.Add(CreateTimeSerie(cTimeSerieEntriesCount, 2.0)); waterLevelProbabilisticTimeSerieList = timeSerieProbablisticCalculator.CreateProbabilisticTimeSerieList(waterLevelMeanTimeSerieList, waterLevelStdTimeSerieList, waterLevelDistTimeSerieList); } [Test] [ExpectedException(typeof(TimeSerieCalculatorException))] public void CreateProbabilisticTimeSerieListThrowsExceptionWhenInputSeriesNotSameLength() { const int cTimeSerieEntriesCount = 3; const int cTimeSeriesCount = 2; List waterLevelProbabilisticTimeSerieList; List waterLevelMeanTimeSerieList = new List(); List waterLevelStdTimeSerieList = new List(); List waterLevelDistTimeSerieList = new List(); for (int timeSerieIndex = 0; timeSerieIndex < cTimeSeriesCount; timeSerieIndex++) { waterLevelMeanTimeSerieList.Add(CreateTimeSerie(cTimeSerieEntriesCount, 2.0)); waterLevelStdTimeSerieList.Add(CreateTimeSerie(cTimeSerieEntriesCount, 2.0)); // To force exception make distribution one item longer waterLevelDistTimeSerieList.Add(CreateTimeSerie(cTimeSerieEntriesCount + 1, 2.0)); } waterLevelProbabilisticTimeSerieList = timeSerieProbablisticCalculator.CreateProbabilisticTimeSerieList(waterLevelMeanTimeSerieList, waterLevelStdTimeSerieList, waterLevelDistTimeSerieList); } [Test] public void CreateProbabilisticTimeSerieListCreatesCorrectStochast() { const int cTimeSerieEntriesCount = 3; const int cTimeSeriesCount = 2; List waterLevelProbabilisticTimeSerieList; List waterLevelMeanTimeSerieList = new List(); List waterLevelStdTimeSerieList = new List(); List waterLevelDistTimeSerieList = new List(); for (int timeSerieIndex = 0; timeSerieIndex < cTimeSeriesCount; timeSerieIndex++) { waterLevelMeanTimeSerieList.Add(CreateTimeSerie(cTimeSerieEntriesCount, 2.0 + 1.0 * timeSerieIndex)); waterLevelStdTimeSerieList.Add(CreateTimeSerie(cTimeSerieEntriesCount, 0.2 + 0.1 * timeSerieIndex)); // To force exception make distribution one item longer waterLevelDistTimeSerieList.Add(CreateTimeSerie(cTimeSerieEntriesCount, 1.0 + 1.0 * timeSerieIndex)); } waterLevelProbabilisticTimeSerieList = timeSerieProbablisticCalculator.CreateProbabilisticTimeSerieList(waterLevelMeanTimeSerieList, waterLevelStdTimeSerieList, waterLevelDistTimeSerieList); Stochast expectedValue = new Stochast(); expectedValue.Mean = 3.0; expectedValue.StandardDeviation = 0.3; expectedValue.Distribution = 2; Stochast actualValue = waterLevelProbabilisticTimeSerieList[1].Entries[1].StochastValue; Assert.AreEqual(expectedValue.Mean, actualValue.Mean, cTolerance); Assert.AreEqual(expectedValue.StandardDeviation, actualValue.StandardDeviation, cTolerance); Assert.AreEqual(expectedValue.Distribution, actualValue.Distribution); } } }