//-----------------------------------------------------------------------
//
// Copyright (c) 2010 Deltares. All rights reserved.
//
// B.S.T.I.M. The
// tom.the@deltares.nl
// 17-09-2010
// Test for DAM BBN dll
//-----------------------------------------------------------------------
namespace Deltares.Piping.Test
{
using System;
using System.IO;
using NUnit.Framework;
using Deltares.Piping.Data;
[TestFixture]
public class TestPipingDAMBBNDll
{
private const double cTolerance = 0.01;
private const string sDGSDAMPipingBBN = @".\CalcDlls\\DAM Piping.bbnet";
[SetUp]
public void SetUp()
{
}
[Test]
public void TestCalculate()
{
IntPtr calcHandle = PipingDAMBBNDll.CreateHandle();
try
{
string filenameDGSDAMPipingBBN = Path.GetFullPath(sDGSDAMPipingBBN);
PipingDAMBBNDll.SetBBNFilename(calcHandle, sDGSDAMPipingBBN);
PipingDAMBBNInputStruct pipingDAMBBNDllInput = new PipingDAMBBNInputStruct();
PipingDAMBBNInputStruct pipingDAMBBNDllInputCheck = new PipingDAMBBNInputStruct();
pipingDAMBBNDllInput.CrackFactor = 0.9;
pipingDAMBBNDllInput.IsWellVisible = true;
pipingDAMBBNDllInput.IsSandBoilVisible = true;
pipingDAMBBNDllInput.IsSandBoilCalculated = false;
pipingDAMBBNDllInput.IsOpenPipeCalculated = true;
pipingDAMBBNDllInput.HistoricSandBoil = (int)DAMPipingHistoricSandBoil.False;
pipingDAMBBNDllInput.CrackFactorAtMaxLevel = 1.1;
pipingDAMBBNDllInput.CrackFactorSensitivity = 0.3;
pipingDAMBBNDllInput.QualityOfSurvey = (int)DAMPipingQualityOfSurvey.High;
pipingDAMBBNDllInput.ElapsedTimeSinceLastSurvey = (int)DAMPipingElapsedTimeSinceLastSurvey.Short;
pipingDAMBBNDllInput.WaterLevelChange = -1.0;
pipingDAMBBNDllInput.CalculatedSandBoilLevelDiff = -0.5;
pipingDAMBBNDllInput.WaterLevelTrend = (int)DAMPipingWaterLevelTrend.AtTop;
pipingDAMBBNDllInput.CalculatedOpenPipeLevelDiff = 0.5;
pipingDAMBBNDllInput.HistoricMaxLevelComparison = (int)DAMPipingHistoricMaxLevelComparison.Same;
PipingDAMBBNDll.SetInputParameters(calcHandle, pipingDAMBBNDllInput);
PipingDAMBBNDll.GetInputParameters(calcHandle, ref pipingDAMBBNDllInputCheck);
Assert.AreEqual(pipingDAMBBNDllInput.CrackFactor, pipingDAMBBNDllInputCheck.CrackFactor, cTolerance);
Assert.AreEqual(pipingDAMBBNDllInput.IsWellVisible, pipingDAMBBNDllInputCheck.IsWellVisible);
Assert.AreEqual(pipingDAMBBNDllInput.IsSandBoilVisible, pipingDAMBBNDllInputCheck.IsSandBoilVisible);
Assert.AreEqual(pipingDAMBBNDllInput.IsOpenPipeCalculated, pipingDAMBBNDllInputCheck.IsOpenPipeCalculated);
Assert.AreEqual(pipingDAMBBNDllInput.HistoricSandBoil, pipingDAMBBNDllInputCheck.HistoricSandBoil);
Assert.AreEqual(pipingDAMBBNDllInput.CrackFactorAtMaxLevel, pipingDAMBBNDllInputCheck.CrackFactorAtMaxLevel);
Assert.AreEqual(pipingDAMBBNDllInput.CrackFactorSensitivity, pipingDAMBBNDllInputCheck.CrackFactorSensitivity);
Assert.AreEqual(pipingDAMBBNDllInput.HistoricMaxLevelComparison, pipingDAMBBNDllInputCheck.HistoricMaxLevelComparison);
Assert.AreEqual(pipingDAMBBNDllInput.QualityOfSurvey, pipingDAMBBNDllInputCheck.QualityOfSurvey);
Assert.AreEqual(pipingDAMBBNDllInput.WaterLevelChange, pipingDAMBBNDllInputCheck.WaterLevelChange);
Assert.AreEqual(pipingDAMBBNDllInput.WaterLevelTrend, pipingDAMBBNDllInputCheck.WaterLevelTrend);
Assert.AreEqual(pipingDAMBBNDllInput.CalculatedOpenPipeLevelDiff, pipingDAMBBNDllInputCheck.CalculatedOpenPipeLevelDiff);
Assert.AreEqual(pipingDAMBBNDllInput.CalculatedSandBoilLevelDiff, pipingDAMBBNDllInputCheck.CalculatedSandBoilLevelDiff);
Assert.AreEqual(pipingDAMBBNDllInput.ElapsedTimeSinceLastSurvey, pipingDAMBBNDllInputCheck.ElapsedTimeSinceLastSurvey);
int calcResult = PipingDAMBBNDll.Calculate(calcHandle);
PipingDAMBBNOutputStruct pipingDAMBBNDllOutput = new PipingDAMBBNOutputStruct();
PipingDAMBBNDll.GetOutputParameters(calcHandle, ref pipingDAMBBNDllOutput);
Assert.AreEqual(0.19, pipingDAMBBNDllOutput.ChanceOpenPipeTrue, cTolerance);
Assert.AreEqual(0.81, pipingDAMBBNDllOutput.ChanceOpenPipeFalse, cTolerance);
pipingDAMBBNDllInput.HistoricSandBoil = (int)DAMPipingHistoricSandBoil.TrueAtHigherMaxLevel;
PipingDAMBBNDll.SetInputParameters(calcHandle, pipingDAMBBNDllInput);
calcResult = PipingDAMBBNDll.Calculate(calcHandle);
pipingDAMBBNDllOutput = new PipingDAMBBNOutputStruct();
PipingDAMBBNDll.GetOutputParameters(calcHandle, ref pipingDAMBBNDllOutput);
Assert.AreEqual(0.24, pipingDAMBBNDllOutput.ChanceOpenPipeTrue, cTolerance);
Assert.AreEqual(0.76, pipingDAMBBNDllOutput.ChanceOpenPipeFalse, cTolerance);
}
finally
{
PipingDAMBBNDll.DestroyHandle(calcHandle);
}
}
[Test]
public void TestErrorMessage()
{
const string cErrorMessageFileNotFound = "File \"\" not found";
IntPtr calcHandle = PipingDAMBBNDll.CreateHandle();
try
{
PipingDAMBBNDll.SetBBNFilename(calcHandle, "");
PipingDAMBBNInputStruct pipingDAMBBNDllInput = new PipingDAMBBNInputStruct();
pipingDAMBBNDllInput.CrackFactor = 0.9;
pipingDAMBBNDllInput.IsWellVisible = true;
pipingDAMBBNDllInput.IsSandBoilVisible = true;
pipingDAMBBNDllInput.IsSandBoilCalculated = false;
pipingDAMBBNDllInput.IsOpenPipeCalculated = true;
pipingDAMBBNDllInput.HistoricSandBoil = (int)DAMPipingHistoricSandBoil.False;
pipingDAMBBNDllInput.CrackFactorAtMaxLevel = 1.1;
pipingDAMBBNDllInput.CrackFactorSensitivity = 0.3;
pipingDAMBBNDllInput.QualityOfSurvey = (int)DAMPipingQualityOfSurvey.High;
pipingDAMBBNDllInput.ElapsedTimeSinceLastSurvey = (int)DAMPipingElapsedTimeSinceLastSurvey.Short;
pipingDAMBBNDllInput.WaterLevelChange = -1.0;
pipingDAMBBNDllInput.CalculatedSandBoilLevelDiff = -0.5;
pipingDAMBBNDllInput.WaterLevelTrend = (int)DAMPipingWaterLevelTrend.AtTop;
pipingDAMBBNDllInput.CalculatedOpenPipeLevelDiff = 0.5;
pipingDAMBBNDllInput.HistoricMaxLevelComparison = (int)DAMPipingHistoricMaxLevelComparison.Same;
PipingDAMBBNDll.SetInputParameters(calcHandle, pipingDAMBBNDllInput);
int calcResult = PipingDAMBBNDll.Calculate(calcHandle);
Assert.AreEqual(-1, calcResult);
//string errorMessage = PipingDAMBBNDll.GetErrorMessage(calcHandle); Crashes the unit test.
//Assert.AreEqual(cErrorMessageFileNotFound, errorMessage);
}
finally
{
PipingDAMBBNDll.DestroyHandle(calcHandle);
}
}
}
}