//-----------------------------------------------------------------------
//
// 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);
}
}
}