From 0a9f4f43a8d19dfc0fa92333172cec96c1283076 Mon Sep 17 00:00:00 2001 From: Dana Nurse <Dana.Nurse@ricardo-aea.com> Date: Fri, 12 Sep 2014 13:25:22 +0000 Subject: [PATCH] Started HVAC Load Demand Tests git-tfs-id: [http://tfs00.element.root.com:8080/tfs/TFSCollection]$/VECTO;C1601 --- .../Hvac/AverageHVACLoadDemand.vb | 27 ++++++++- VECTOAux/VectoAuxiliaries/Hvac/HVACMap.vb | 31 ++++++++-- VECTOAux/VectoAuxiliaries/Hvac/IHVACMap.vb | 28 +++++++++ .../Pneumatics/AirCompressor.vb | 16 ++--- .../Pneumatics/IAirCompressor.vb | 58 +++++++++++++++++++ .../Pneumatics/PneumaticConsumer.vb | 10 ++++ .../VectoAuxiliaries/VectoAuxiliaries.vbproj | 2 + .../UnitTests/ElectricalConsumerTests.vb | 13 ++--- .../UnitTests/PneumaticConsumerTests.vb | 47 +++++++++++---- .../VectoAuxiliariesTests.vbproj | 2 +- 10 files changed, 197 insertions(+), 37 deletions(-) create mode 100644 VECTOAux/VectoAuxiliaries/Hvac/IHVACMap.vb create mode 100644 VECTOAux/VectoAuxiliaries/Pneumatics/IAirCompressor.vb diff --git a/VECTOAux/VectoAuxiliaries/Hvac/AverageHVACLoadDemand.vb b/VECTOAux/VectoAuxiliaries/Hvac/AverageHVACLoadDemand.vb index 3338fec31e..3345e20b90 100644 --- a/VECTOAux/VectoAuxiliaries/Hvac/AverageHVACLoadDemand.vb +++ b/VECTOAux/VectoAuxiliaries/Hvac/AverageHVACLoadDemand.vb @@ -1,8 +1,29 @@ -Namespace Hvac +Imports VectoAuxiliaries.Electrics + +Namespace Hvac Public Class AverageHVACLoadDemand - 'HVAC Inputs - TBA + Dim map As IHVACMap + Dim alternator As IAlternator + + Public Sub New(ByVal map As IHVACMap, ByVal alternator As IAlternator) + Me.map = map + Me.alternator = alternator + End Sub + + Public Function Initialise() As Boolean + Return alternator.Initialise() AndAlso map.Initialise() + End Function + + Public Function AverageMechanicalPowerAtCrank() As Single + Throw New NotImplementedException + End Function - 'Alternator Instance + Function AverageElectricalPowerAtAlternator() As Single + Throw New NotImplementedException + End Function + Function AverageElectricalPowerAtCrank() As Single + Throw New NotImplementedException + End Function End Class End Namespace \ No newline at end of file diff --git a/VECTOAux/VectoAuxiliaries/Hvac/HVACMap.vb b/VECTOAux/VectoAuxiliaries/Hvac/HVACMap.vb index 2169aa5f71..98d97bf9cd 100644 --- a/VECTOAux/VectoAuxiliaries/Hvac/HVACMap.vb +++ b/VECTOAux/VectoAuxiliaries/Hvac/HVACMap.vb @@ -2,6 +2,7 @@ Imports System.IO Namespace Hvac Public Class HVACMap + Implements IHVACMap 'Some sort of multi-dimensional map implemented here 'No interpolation - too expensive/complex to implement? 'Set list of choices in each dimension of input @@ -37,7 +38,12 @@ Namespace Hvac filePath = path End Sub - Public Function Initialise() As Boolean + ''' <summary> + ''' Initialise the map data + ''' </summary> + ''' <returns></returns> + ''' <remarks></remarks> + Public Function Initialise() As Boolean Implements IHVACMap.Initialise If (File.Exists(filePath)) Then Using sr As StreamReader = New StreamReader(filePath) 'get array of lines from csv @@ -71,14 +77,27 @@ Namespace Hvac End If End Function - - Public Function GetMechanicalDemand(ByVal region As Integer, ByVal season As Integer) As Integer + ''' <summary> + ''' Get the average mechanical demand for the given imput parameters + ''' </summary> + ''' <param name="region"></param> + ''' <param name="season"></param> + ''' <returns></returns> + ''' <remarks></remarks> + Public Function GetMechanicalDemand(ByVal region As Integer, ByVal season As Integer) As Integer Implements IHVACMap.GetMechanicalDemand Dim key As InputValues = New InputValues(region, season) Dim val As OutputValues = map(key) Return val.MechanicalDemand End Function - Public Function GetElectricalDemand(ByVal region As Integer, ByVal season As Integer) As Integer + ''' <summary> + ''' Get the average electrical demand for the given imput parameters + ''' </summary> + ''' <param name="region"></param> + ''' <param name="season"></param> + ''' <returns></returns> + ''' <remarks></remarks> + Public Function GetElectricalDemand(ByVal region As Integer, ByVal season As Integer) As Integer Implements IHVACMap.GetElectricalDemand Dim key As InputValues = New InputValues(region, season) If (map.ContainsKey(key)) Then Dim val As OutputValues = map(key) @@ -94,8 +113,8 @@ Namespace Hvac Private ReadOnly season As Integer Public Sub New(ByVal region As Integer, ByVal season As Integer) - Me.Region = region - Me.Season = season + Me.region = region + Me.season = season End Sub End Structure diff --git a/VECTOAux/VectoAuxiliaries/Hvac/IHVACMap.vb b/VECTOAux/VectoAuxiliaries/Hvac/IHVACMap.vb new file mode 100644 index 0000000000..9f13b02cfd --- /dev/null +++ b/VECTOAux/VectoAuxiliaries/Hvac/IHVACMap.vb @@ -0,0 +1,28 @@ +Namespace Hvac + Public Interface IHVACMap + ''' <summary> + ''' Initialise the map data + ''' </summary> + ''' <returns></returns> + ''' <remarks></remarks> + Function Initialise() As Boolean + + ''' <summary> + ''' Get the average mechanical demand for the given imput parameters + ''' </summary> + ''' <param name="region"></param> + ''' <param name="season"></param> + ''' <returns></returns> + ''' <remarks></remarks> + Function GetMechanicalDemand(ByVal region As Integer, ByVal season As Integer) As Integer + + ''' <summary> + ''' Get the average electrical demand for the given imput parameters + ''' </summary> + ''' <param name="region"></param> + ''' <param name="season"></param> + ''' <returns></returns> + ''' <remarks></remarks> + Function GetElectricalDemand(ByVal region As Integer, ByVal season As Integer) As Integer + End Interface +End NameSpace \ No newline at end of file diff --git a/VECTOAux/VectoAuxiliaries/Pneumatics/AirCompressor.vb b/VECTOAux/VectoAuxiliaries/Pneumatics/AirCompressor.vb index 8fed402738..1b3e45e8e6 100644 --- a/VECTOAux/VectoAuxiliaries/Pneumatics/AirCompressor.vb +++ b/VECTOAux/VectoAuxiliaries/Pneumatics/AirCompressor.vb @@ -1,8 +1,8 @@  Namespace Pneumatics - Public Class AirCompressor + Implements IAirCompressor Private Const MinRatio As Single = 1.25 Private Const MaxRatio As Single = 5.5 @@ -19,7 +19,7 @@ Namespace Pneumatics ''' <value></value> ''' <returns></returns> ''' <remarks></remarks> - Public Property PulleyGearRatio() As Single + Public Property PulleyGearRatio() As Single Implements IAirCompressor.PulleyGearRatio Get Return _pulleyGearRatio End Get @@ -38,7 +38,7 @@ Namespace Pneumatics ''' <value></value> ''' <returns></returns> ''' <remarks></remarks> - Public Property PulleyGearEfficiency() As Single + Public Property PulleyGearEfficiency() As Single Implements IAirCompressor.PulleyGearEfficiency Get Return _pulleyGearEfficiency End Get @@ -78,7 +78,7 @@ Namespace Pneumatics ''' </summary> ''' <returns></returns> ''' <remarks></remarks> - Public Function Initialise() As Boolean + Public Function Initialise() As Boolean Implements IAirCompressor.Initialise Return _map.Initialise() End Function @@ -88,7 +88,7 @@ Namespace Pneumatics ''' <param name="engineRpm">Engine speed in rpm</param> ''' <returns></returns> ''' <remarks></remarks> - Function GetFlowRate(ByVal engineRpm As Integer) As Single + Public Function GetFlowRate(ByVal engineRpm As Integer) As Single Implements IAirCompressor.GetFlowRate Dim compressorRpm As Single = engineRpm * PulleyGearRatio Return _map.GetFlowRate(compressorRpm) End Function @@ -99,7 +99,7 @@ Namespace Pneumatics ''' <param name="engineRpm">Engine speed in rpm</param> ''' <returns></returns> ''' <remarks></remarks> - Public Function GetPowerCompressorOff(ByVal engineRpm As Integer) As Single + Public Function GetPowerCompressorOff(ByVal engineRpm As Integer) As Single Implements IAirCompressor.GetPowerCompressorOff Return GetCompressorPower(engineRpm, False) End Function @@ -109,7 +109,7 @@ Namespace Pneumatics ''' <param name="engineRpm">Engine speed in rpm</param> ''' <returns></returns> ''' <remarks></remarks> - Public Function GetPowerCompressorOn(ByVal engineRpm As Integer) As Single + Public Function GetPowerCompressorOn(ByVal engineRpm As Integer) As Single Implements IAirCompressor.GetPowerCompressorOn Return GetCompressorPower(engineRpm, True) End Function @@ -119,7 +119,7 @@ Namespace Pneumatics ''' <param name="engineRpm">Engine speed in rpm</param> ''' <returns></returns> ''' <remarks></remarks> - Public Function GetPowerDifference(ByVal engineRpm As Integer) As Single + Public Function GetPowerDifference(ByVal engineRpm As Integer) As Single Implements IAirCompressor.GetPowerDifference Dim powerOn As Single = GetPowerCompressorOn(engineRpm) Dim powerOff As Single = GetPowerCompressorOff(engineRpm) Return powerOn - powerOff diff --git a/VECTOAux/VectoAuxiliaries/Pneumatics/IAirCompressor.vb b/VECTOAux/VectoAuxiliaries/Pneumatics/IAirCompressor.vb new file mode 100644 index 0000000000..c2770b87ac --- /dev/null +++ b/VECTOAux/VectoAuxiliaries/Pneumatics/IAirCompressor.vb @@ -0,0 +1,58 @@ +Namespace Pneumatics + Public Interface IAirCompressor + ''' <summary> + ''' Ratio of Gear or Pulley used to drive the compressor + ''' </summary> + ''' <value></value> + ''' <returns></returns> + ''' <remarks></remarks> + Property PulleyGearRatio() As Single + + ''' <summary> + ''' Efficiency of the Pulley or Gear used to drive the compressor + ''' </summary> + ''' <value></value> + ''' <returns></returns> + ''' <remarks></remarks> + Property PulleyGearEfficiency() As Single + + ''' <summary> + ''' Initialises the AirCompressor Class + ''' </summary> + ''' <returns></returns> + ''' <remarks></remarks> + Function Initialise() As Boolean + + ''' <summary> + ''' Returns the flow rate [litres/second] of compressor for the given engine rpm + ''' </summary> + ''' <param name="engineRpm">Engine speed in rpm</param> + ''' <returns></returns> + ''' <remarks></remarks> + Function GetFlowRate(ByVal engineRpm As Integer) As Single + + ''' <summary> + ''' Returns the power consumed for the given engine rpm when compressor is off + ''' </summary> + ''' <param name="engineRpm">Engine speed in rpm</param> + ''' <returns></returns> + ''' <remarks></remarks> + Function GetPowerCompressorOff(ByVal engineRpm As Integer) As Single + + ''' <summary> + ''' Returns the power consumed for the given engine rpm when compressor is on + ''' </summary> + ''' <param name="engineRpm">Engine speed in rpm</param> + ''' <returns></returns> + ''' <remarks></remarks> + Function GetPowerCompressorOn(ByVal engineRpm As Integer) As Single + + ''' <summary> + ''' Returns the difference in power between compressonr on and compressor off operation at the given engine rpm + ''' </summary> + ''' <param name="engineRpm">Engine speed in rpm</param> + ''' <returns></returns> + ''' <remarks></remarks> + Function GetPowerDifference(ByVal engineRpm As Integer) As Single + End Interface +End NameSpace \ No newline at end of file diff --git a/VECTOAux/VectoAuxiliaries/Pneumatics/PneumaticConsumer.vb b/VECTOAux/VectoAuxiliaries/Pneumatics/PneumaticConsumer.vb index 9d021de4a1..27271d25af 100644 --- a/VECTOAux/VectoAuxiliaries/Pneumatics/PneumaticConsumer.vb +++ b/VECTOAux/VectoAuxiliaries/Pneumatics/PneumaticConsumer.vb @@ -46,6 +46,16 @@ ''' <param name="volumePerCycle"></param> ''' <remarks></remarks> Public Sub New(ByVal name As String, ByVal volumePerCycle As Single) + If name = String.Empty Then + Throw New ArgumentException("Name cannot be empty string") + End If + + If Math.Abs(volumePerCycle - 0.0) < 0.001 Then + Throw New ArgumentOutOfRangeException("volumePerCycle", + volumePerCycle, + "Supplied volume should be grater than zero") + End If + _name = name _volumePerCycle = volumePerCycle End Sub diff --git a/VECTOAux/VectoAuxiliaries/VectoAuxiliaries.vbproj b/VECTOAux/VectoAuxiliaries/VectoAuxiliaries.vbproj index 5a1713e23f..9ff0016863 100644 --- a/VECTOAux/VectoAuxiliaries/VectoAuxiliaries.vbproj +++ b/VECTOAux/VectoAuxiliaries/VectoAuxiliaries.vbproj @@ -67,6 +67,7 @@ <Import Include="System.Threading.Tasks" /> </ItemGroup> <ItemGroup> + <Compile Include="Hvac\IHVACMap.vb" /> <Compile Include="Pneumatics\AirCompressor.vb" /> <Compile Include="Electrics\Alternator.vb" /> <Compile Include="Electrics\AlternatorMap.vb" /> @@ -77,6 +78,7 @@ <Compile Include="Hvac\HVACMap.vb" /> <Compile Include="Electrics\IAlternator.vb" /> <Compile Include="Electrics\IAlternatorMap.vb" /> + <Compile Include="Pneumatics\IAirCompressor.vb" /> <Compile Include="Pneumatics\ICompressorMap.vb" /> <Compile Include="Electrics\IElectricalConsumer.vb" /> <Compile Include="My Project\AssemblyInfo.vb" /> diff --git a/VECTOAux/VectoAuxiliariesTests/UnitTests/ElectricalConsumerTests.vb b/VECTOAux/VectoAuxiliariesTests/UnitTests/ElectricalConsumerTests.vb index 22210bb699..00affaea5d 100644 --- a/VECTOAux/VectoAuxiliariesTests/UnitTests/ElectricalConsumerTests.vb +++ b/VECTOAux/VectoAuxiliariesTests/UnitTests/ElectricalConsumerTests.vb @@ -6,7 +6,12 @@ Namespace UnitTests <TestFixture()> Public Class ElectricalConsumerTests -#Region "Factory Methods" +#Region "Helpers" + + Private Const GoodName As String = "Test" + Private Const GoodPower As Single = 10.0 + Private Const BadName As String = "" + Private Const BadPower As Single = 0.0 Public Function GetGoodConsumer() As ElectricalConsumer Return New ElectricalConsumer(GoodName, GoodPower) @@ -14,12 +19,6 @@ Namespace UnitTests #End Region -#Region "Test Constants" - Private Const GoodName As String = "Test" - Private Const GoodPower As Single = 10.0 - Private BadName As String = String.Empty - Private Const BadPower As Single = 0.0 -#End Region <Test()> Public Sub CreateNewTest() diff --git a/VECTOAux/VectoAuxiliariesTests/UnitTests/PneumaticConsumerTests.vb b/VECTOAux/VectoAuxiliariesTests/UnitTests/PneumaticConsumerTests.vb index 11354f25e7..add3f1f3cb 100644 --- a/VECTOAux/VectoAuxiliariesTests/UnitTests/PneumaticConsumerTests.vb +++ b/VECTOAux/VectoAuxiliariesTests/UnitTests/PneumaticConsumerTests.vb @@ -1,42 +1,65 @@ -Imports NUnit.Framework +Imports VectoAuxiliaries.Electrics +Imports NUnit.Framework +Imports VectoAuxiliaries.Pneumatics Namespace UnitTests <TestFixture()> Public Class PneumaticConsumerTests +#Region "Helpers" + + Private Const GoodName As String = "Test" + Private Const GoodVolume As Single = 10.0 + Private Const BadVolume As Single = 0.0 + Private Const BadName As String = "" + + Public Function GetGoodConsumer() As PneumaticConsumer + Return New PneumaticConsumer(GoodName, GoodVolume) + End Function + +#End Region + <Test()> Public Sub CreateNewTest() - Assert.Fail() + Dim target As PneumaticConsumer = GetGoodConsumer() + Assert.IsNotNull(target) End Sub <Test(), ExpectedException("System.ArgumentException")> Public Sub CreateNewInvalidNameTest() - 'Names cannot be zero length - Assert.Fail() + Dim target As PneumaticConsumer = New PneumaticConsumer(BadName, GoodVolume) End Sub <Test(), ExpectedException("System.ArgumentOutOfRangeException")> Public Sub CreateNewInvalidVolumeTest() - 'Initially, zero volume is invalid TODO: Need to check with Pascal etc for valid bounds that make sense - Assert.Fail() + Dim target As PneumaticConsumer = New PneumaticConsumer(GoodName, BadVolume) End Sub <Test()> - Public Sub GetVolumePerCycleTest() - Assert.Fail() + Public Sub GetNameTest() + Dim target As PneumaticConsumer = GetGoodConsumer() + Dim expected As String = GoodName + Dim actual As String = target.Name + Assert.AreEqual(expected, actual) End Sub <Test()> - Public Sub GetNameTest() - Assert.Fail() + Public Sub GetTotalVolumeTest() + Dim target As PneumaticConsumer = GetGoodConsumer() + Dim expected As Single = GoodVolume * 50 + Dim actual As Single = target.GetTotalVolume(50) + Assert.AreEqual(expected, actual) End Sub <Test()> - Public Sub GetTotalVolumeTest() - Assert.Fail() + Public Sub GetVolumeTest() + Dim target As PneumaticConsumer = GetGoodConsumer() + Dim expected As Single = GoodVolume + Dim actual As Single = target.VolumePerCycle + Assert.AreEqual(expected, actual) End Sub End Class diff --git a/VECTOAux/VectoAuxiliariesTests/VectoAuxiliariesTests.vbproj b/VECTOAux/VectoAuxiliariesTests/VectoAuxiliariesTests.vbproj index ce3e52965f..e1f84d28fd 100644 --- a/VECTOAux/VectoAuxiliariesTests/VectoAuxiliariesTests.vbproj +++ b/VECTOAux/VectoAuxiliariesTests/VectoAuxiliariesTests.vbproj @@ -86,6 +86,7 @@ <Import Include="Microsoft.VisualStudio.TestTools.UnitTesting" /> </ItemGroup> <ItemGroup> + <Compile Include="UnitTests\AverageHVACLoadDemandTests.vb" /> <Compile Include="UnitTests\HVACMapTests.vb" /> <Compile Include="UnitTests\PneumaticConsumerTests.vb" /> <Compile Include="UnitTests\AirCompressorTests.vb" /> @@ -192,7 +193,6 @@ </ProjectReference> </ItemGroup> <ItemGroup> - <Folder Include="Hvac\" /> <Folder Include="IntegrationTests\" /> </ItemGroup> <Choose> -- GitLab