diff --git a/VECTOAux/VectoAuxiliaries/Hvac/AverageHVACLoadDemand.vb b/VECTOAux/VectoAuxiliaries/Hvac/AverageHVACLoadDemand.vb index 3338fec31eb31a23cda9090ef3d979b41e732c16..3345e20b905480a2308a8045b0b8f37be12140f0 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 2169aa5f71b8254fc36c2cf99ece5f3bc614184d..98d97bf9cd10280bf8fcabe729077278cfd215b2 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 0000000000000000000000000000000000000000..9f13b02cfd9929ddea7c26cb4160ad34e1bd9821 --- /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 8fed402738fa377431f4c8e40601eefc36a05c0f..1b3e45e8e62b166ecfca71db951402cd3fc49d1c 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 0000000000000000000000000000000000000000..c2770b87ac7799762a3961faf0571cc69b677408 --- /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 9d021de4a1f8a197d704dd4e7586300d66146455..27271d25affc06e9d920d9a892f1d7a5a6a492b1 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 5a1713e23fb7920ca20fc39387e202f0a019ef97..9ff001686351e5b7891a0bb0373e444586c7c3e5 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 22210bb699a4d9d45875bd1d046a90aa9e237d7e..00affaea5d141e4adf25fa94d66d365e48efbe2b 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 11354f25e7f3a2ebbc1682a60bdb14402b76263f..add3f1f3cbf71f50a4f07b385906843204af7e06 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 ce3e52965f9907bf9032bf4266d0978a6690cfe1..e1f84d28fd5deda930132ee9ea41a6d9a51fe02c 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>