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