From 2ddda12d7b52a85aceb7c108bd5f0ac80873929c Mon Sep 17 00:00:00 2001
From: Dana Nurse <Dana.Nurse@ricardo-aea.com>
Date: Fri, 12 Sep 2014 10:04:29 +0000
Subject: [PATCH] Added HnacMap tests

git-tfs-id: [http://tfs00.element.root.com:8080/tfs/TFSCollection]$/VECTO;C1600
---
 VECTOAux/VectoAuxiliaries/Hvac/HVACMap.vb     | 104 +++++++++++++-----
 .../Hvac/HVACMapTests.vb                      |  40 -------
 .../TestFiles/testHvacMapInvalidRowData.csv   |  21 ++++
 .../TestFiles/testHvacMapWrongColumns.csv     |  21 ++++
 .../UnitTests/HVACMapTests.vb                 |  95 ++++++++++++++++
 .../VectoAuxiliariesTests.vbproj              |  69 +++++++++---
 6 files changed, 266 insertions(+), 84 deletions(-)
 delete mode 100644 VECTOAux/VectoAuxiliariesTests/Hvac/HVACMapTests.vb
 create mode 100644 VECTOAux/VectoAuxiliariesTests/TestFiles/testHvacMapInvalidRowData.csv
 create mode 100644 VECTOAux/VectoAuxiliariesTests/TestFiles/testHvacMapWrongColumns.csv
 create mode 100644 VECTOAux/VectoAuxiliariesTests/UnitTests/HVACMapTests.vb

diff --git a/VECTOAux/VectoAuxiliaries/Hvac/HVACMap.vb b/VECTOAux/VectoAuxiliaries/Hvac/HVACMap.vb
index 294fdf5717..2169aa5f71 100644
--- a/VECTOAux/VectoAuxiliaries/Hvac/HVACMap.vb
+++ b/VECTOAux/VectoAuxiliaries/Hvac/HVACMap.vb
@@ -1,3 +1,5 @@
+Imports System.IO
+
 Namespace Hvac
     Public Class HVACMap
         'Some sort of multi-dimensional map implemented here
@@ -15,23 +17,81 @@ Namespace Hvac
 
         'could define the list of inputs based on the supplied map
 
-        Private map As Dictionary(Of InputValues, OutputValues)
+        ''' <summary>
+        ''' Path to HVAC map csv
+        ''' </summary>
+        ''' <remarks></remarks>
+        Private ReadOnly filePath As String
 
-        Public Sub New()
-            map = New Dictionary(Of InputValues, OutputValues)()
+        ''' <summary>
+        ''' Dictionary of values keyed by input value combinations
+        ''' </summary>
+        ''' <remarks></remarks>
+        Private map As Dictionary(Of InputValues, OutputValues)
 
-            For i As Integer = 25 To 50
-                For j As Integer = 25 To 50
-                    Dim input As New InputValues(i, j)
-                    Dim output As New OutputValues(i * i * j, i * i * j * 5)
-                    map.Add(input, output)
-                Next
-            Next
+        ''' <summary>
+        ''' Creates a new instance of and HVACMap class
+        ''' </summary>
+        ''' <remarks></remarks>
+        Public Sub New(ByVal path As String)
+            filePath = path
         End Sub
 
+        Public Function Initialise() As Boolean
+            If (File.Exists(filePath)) Then
+                Using sr As StreamReader = New StreamReader(filePath)
+                    'get array of lines from csv
+                    Dim lines() As String = sr.ReadToEnd().Split(CType(Environment.NewLine, Char()), StringSplitOptions.RemoveEmptyEntries)
+
+                    map = New Dictionary(Of InputValues, OutputValues)()
+                    Dim firstline As Boolean = True
+
+                    For Each line As String In lines
+                        If Not firstline Then
+                            'split the line
+                            Dim elements() As String = line.Split(New Char() {","}, StringSplitOptions.RemoveEmptyEntries)
+                            '4 entries per line required
+                            If (elements.Length <> 4) Then Throw New ArgumentException("Incorrect number of values in csv file")
+                            'add values to map
+                            Dim region As String = elements(0)
+                            Dim season As String = elements(1)
+                            Dim input As New InputValues(region, season)
+                            Dim electricalDemand As String = elements(2)
+                            Dim mechanicalDemand As String = elements(3)
+                            Dim output As New OutputValues(electricalDemand, mechanicalDemand)
+                            map.Add(input, output)
+                        Else
+                            firstline = False
+                        End If
+                    Next
+                End Using
+                Return True
+            Else
+                Throw New ArgumentException("supplied input file does not exist")
+            End If
+        End Function
+
+
+        Public Function GetMechanicalDemand(ByVal region As Integer, ByVal season As Integer) As Integer
+            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
+            Dim key As InputValues = New InputValues(region, season)
+            If (map.ContainsKey(key)) Then
+                Dim val As OutputValues = map(key)
+                Return val.ElectricalDemand
+            Else
+                Throw New ArgumentException("Key was not present")
+            End If
+        End Function
+
+#Region "Nested Structures"
         Private Structure InputValues
-            Public ReadOnly Region As Integer
-            Public ReadOnly Season As Integer
+            Private ReadOnly region As Integer
+            Private ReadOnly season As Integer
 
             Public Sub New(ByVal region As Integer, ByVal season As Integer)
                 Me.Region = region
@@ -40,27 +100,15 @@ Namespace Hvac
         End Structure
 
         Private Structure OutputValues
-            Public ReadOnly MechanicalDemand As Integer
-            Public ReadOnly ElectricalDemand As Integer
+            Public ReadOnly MechanicalDemand As Single
+            Public ReadOnly ElectricalDemand As Single
 
-            Public Sub New(ByVal mechanicalDemand As Integer, ByVal electricalDemand As Integer)
+            Public Sub New(ByVal electricalDemand As Single, ByVal mechanicalDemand As Single)
                 Me.MechanicalDemand = mechanicalDemand
                 Me.ElectricalDemand = electricalDemand
             End Sub
         End Structure
+#End Region
 
-        Public Function GetMechanicalDemand(ByVal region As Integer, ByVal season As Integer) As Integer
-            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
-            Dim key As InputValues = New InputValues(region, season)
-            Dim val As OutputValues = map(key)
-            Return val.ElectricalDemand
-        End Function
     End Class
 End Namespace
\ No newline at end of file
diff --git a/VECTOAux/VectoAuxiliariesTests/Hvac/HVACMapTests.vb b/VECTOAux/VectoAuxiliariesTests/Hvac/HVACMapTests.vb
deleted file mode 100644
index 32a4fb6340..0000000000
--- a/VECTOAux/VectoAuxiliariesTests/Hvac/HVACMapTests.vb
+++ /dev/null
@@ -1,40 +0,0 @@
-Imports VectoAuxiliaries.Hvac
-Imports NUnit.Framework
-
-
Namespace Hvac
-
    <TestFixture()> Public Class HVACMapTests
-
-        <Test()>
-        Public Sub NewTest()
-            Dim target As HVACMap = New HVACMap()
-            Assert.IsNotNull(target)
-        End Sub
-
-        <TestCase(30, 30)>
-        Public Sub GetMechanicalDemandTest(ByVal region As Integer, ByVal season As Integer)
-            Dim target As HVACMap = New HVACMap()
-            Dim actual As Integer = target.GetMechanicalDemand(region, season)
-            Assert.Fail("test implementation not complete - compare to expected value")
-        End Sub
-
-        <TestCase(30, 30)>
-        Public Sub GetElectricalDemandTest(ByVal region As Integer, ByVal season As Integer)
-            Dim target As HVACMap = New HVACMap()
-            Dim actual As Integer = target.GetElectricalDemand(region, season)
-            Assert.Fail("test implementation not complete - compare to expected value")
-        End Sub
-
-        <TestCase(5, 30)> _
-        <TestCase(30, 5)> _
-        <ExpectedException("System.InvalidArgumentException")>
-        Public Sub GetElectricalDemandKeyNotPresentTest(ByVal region As Integer, ByVal season As Integer)
-            Dim target As HVACMap = New HVACMap()
-            Dim actual As Integer = target.GetElectricalDemand(region, season)
-        End Sub
-
-    End Class
-
-
-End Namespace
-
-
diff --git a/VECTOAux/VectoAuxiliariesTests/TestFiles/testHvacMapInvalidRowData.csv b/VECTOAux/VectoAuxiliariesTests/TestFiles/testHvacMapInvalidRowData.csv
new file mode 100644
index 0000000000..cc09a28af8
--- /dev/null
+++ b/VECTOAux/VectoAuxiliariesTests/TestFiles/testHvacMapInvalidRowData.csv
@@ -0,0 +1,21 @@
+Region,Season,Elec,Mech
+aa,1,4,8
+2,1,8,16
+3,1,12,24
+4,1,16,32
+5,1,20,40
+1,2,16,64
+2,2,32,128
+3,2,48,192
+4,2,64,256
+5,2,80,320
+1,3,4,8
+2,3,8,16
+3,3,12,24
+4,3,16,32
+5,3,20,40
+1,4,16,64
+2,4,32,128
+3,4,48,192
+4,4,64,256
+5,4,80,320
diff --git a/VECTOAux/VectoAuxiliariesTests/TestFiles/testHvacMapWrongColumns.csv b/VECTOAux/VectoAuxiliariesTests/TestFiles/testHvacMapWrongColumns.csv
new file mode 100644
index 0000000000..1e5d9c3399
--- /dev/null
+++ b/VECTOAux/VectoAuxiliariesTests/TestFiles/testHvacMapWrongColumns.csv
@@ -0,0 +1,21 @@
+Region,Season,Elec
+1,1,4
+2,1,8
+3,1,12
+4,1,16
+5,1,20
+1,2,16
+2,2,32
+3,2,48
+4,2,64
+5,2,80
+1,3,4
+2,3,8
+3,3,12
+4,3,16
+5,3,20
+1,4,16
+2,4,32
+3,4,48
+4,4,64
+5,4,80
diff --git a/VECTOAux/VectoAuxiliariesTests/UnitTests/HVACMapTests.vb b/VECTOAux/VectoAuxiliariesTests/UnitTests/HVACMapTests.vb
new file mode 100644
index 0000000000..bd5e0d8f82
--- /dev/null
+++ b/VECTOAux/VectoAuxiliariesTests/UnitTests/HVACMapTests.vb
@@ -0,0 +1,95 @@
+Imports NUnit.Framework
+Imports VectoAuxiliaries.Hvac
+
+
+Namespace UnitTests
+
+    <TestFixture()> Public Class HVACMapTests
+#Region "Test Values"
+        Dim goodMap As String = "TestFiles\TestHvacMap.csv"
+        Const badMapWrongColumns As String = "TestFiles\testHvacMapWrongColumns.csv"
+        Const badMapInvalidRows As String = "TestFiles\testHvacMapInvalidRowData.csv"
+        Const badMapFileNotExist As String = "TestFiles\fileNotExist.csv"
+
+        Private Function GetGoodMap() As HVACMap
+            Return New HVACMap(goodMap)
+        End Function
+
+        Private Function GetInitialisedMap() As HVACMap
+            Dim map As HVACMap = GetGoodMap()
+            map.Initialise()
+            Return map
+        End Function
+
+#End Region
+
+        <Test()>
+        Public Sub CreateNewTest()
+            Dim target As HVACMap = GetGoodMap()
+            Assert.IsNotNull(target)
+        End Sub
+
+        <Test()>
+        Public Sub InitialiseTest()
+            Dim target As HVACMap = GetGoodMap()
+            Assert.IsTrue(target.Initialise())
+        End Sub
+
+        <TestCase(badMapWrongColumns)>
+        <ExpectedException("System.ArgumentException")>
+        Public Sub InitialiseInvalidColumnCountTest(ByVal path As String)
+            Dim target As HVACMap = New HVACMap(path)
+            Assert.IsTrue(target.Initialise())
+        End Sub
+
+        <TestCase(badMapInvalidRows)>
+        <ExpectedException("System.InvalidCastException")>
+        Public Sub InitialiseInvalidRowDataTest(ByVal path As String)
+            Dim target As HVACMap = New HVACMap(path)
+            Assert.IsTrue(target.Initialise())
+        End Sub
+
+        <TestCase(badMapFileNotExist)>
+        <ExpectedException("System.ArgumentException")>
+        Public Sub InitialiseFileNotExistTest(ByVal path As String)
+            Dim target As HVACMap = New HVACMap(path)
+            Assert.IsTrue(target.Initialise())
+        End Sub
+
+
+        <TestCase(3, 1, 24)>
+        <TestCase(3, 2, 192)>
+        <TestCase(3, 3, 24)>
+        <TestCase(3, 4, 192)>
+        Public Sub GetMechanicalDemandTest(ByVal region As Integer, ByVal season As Integer, result As Integer)
+            Dim target As HVACMap = GetInitialisedMap()
+            Dim expected As Integer = result
+            Dim actual As Integer = target.GetMechanicalDemand(region, season)
+            Assert.AreEqual(expected, actual)
+        End Sub
+
+        <TestCase(3, 1, 12)>
+        <TestCase(3, 2, 48)>
+        <TestCase(3, 3, 12)>
+        <TestCase(3, 4, 48)>
+        Public Sub GetElectricalDemandTest(ByVal region As Integer, ByVal season As Integer, result As Integer)
+            Dim target As HVACMap = GetInitialisedMap()
+            Dim expected As Integer = result
+            Dim actual As Integer = target.GetElectricalDemand(region, season)
+            Assert.AreEqual(expected, actual)
+        End Sub
+
+        <TestCase(3, 6)> _
+        <TestCase(6, 3)> _
+        <ExpectedException("System.ArgumentException")>
+        Public Sub GetElectricalDemandKeyNotPresentTest(ByVal region As Integer, ByVal season As Integer)
+            Dim target As HVACMap = GetInitialisedMap()
+            Dim actual As Integer = target.GetElectricalDemand(region, season)
+        End Sub
+
+    End Class
+
+
+End Namespace
+
+
diff --git a/VECTOAux/VectoAuxiliariesTests/VectoAuxiliariesTests.vbproj b/VECTOAux/VectoAuxiliariesTests/VectoAuxiliariesTests.vbproj
index ab4ab2b5c9..ce3e52965f 100644
--- a/VECTOAux/VectoAuxiliariesTests/VectoAuxiliariesTests.vbproj
+++ b/VECTOAux/VectoAuxiliariesTests/VectoAuxiliariesTests.vbproj
@@ -86,7 +86,7 @@
     <Import Include="Microsoft.VisualStudio.TestTools.UnitTesting" />
   </ItemGroup>
   <ItemGroup>
-    <Compile Include="Hvac\HVACMapTests.vb" />
+    <Compile Include="UnitTests\HVACMapTests.vb" />
     <Compile Include="UnitTests\PneumaticConsumerTests.vb" />
     <Compile Include="UnitTests\AirCompressorTests.vb" />
     <Compile Include="UnitTests\AlternatorMapTests.vb" />
@@ -133,21 +133,57 @@
       <LastGenOutput>Settings.Designer.vb</LastGenOutput>
     </None>
     <None Include="packages.config" />
-    <None Include="TestFiles\testAlternatorMap.csv" />
-    <None Include="TestFiles\testAlternatorMapNotEnoughRows.csv" />
-    <None Include="TestFiles\testAlternatorMapReadOnly.csv" />
-    <None Include="TestFiles\testAlternatorMapWithInvalidEfficiency.csv" />
-    <None Include="TestFiles\testAlternatorMapWithInvalidPower.csv" />
-    <None Include="TestFiles\testAlternatorMapWithInvalidRpm.csv" />
-    <None Include="TestFiles\testAlternatorMapWrongNoOfColumns.csv" />
-    <None Include="TestFiles\testCompressorMap.csv" />
-    <None Include="TestFiles\testCompressorMapInvalidFlow.csv" />
-    <None Include="TestFiles\testCompressorMapInvalidOffPower.csv" />
-    <None Include="TestFiles\testCompressorMapInvalidOnPower.csv" />
-    <None Include="TestFiles\testCompressorMapInvalidRpm.csv" />
-    <None Include="TestFiles\testCompressorMapNotEnoughRows.csv" />
-    <None Include="TestFiles\testCompressorMapWrongNumberOfColumns.csv" />
-    <None Include="TestFiles\TestHvacMap.csv" />
+    <Content Include="TestFiles\testAlternatorMap.csv">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="TestFiles\testAlternatorMapNotEnoughRows.csv">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="TestFiles\testAlternatorMapReadOnly.csv">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="TestFiles\testAlternatorMapWithInvalidEfficiency.csv">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="TestFiles\testAlternatorMapWithInvalidPower.csv">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="TestFiles\testAlternatorMapWithInvalidRpm.csv">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="TestFiles\testAlternatorMapWrongNoOfColumns.csv">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="TestFiles\testCompressorMap.csv">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="TestFiles\testCompressorMapInvalidFlow.csv">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="TestFiles\testCompressorMapInvalidOffPower.csv">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="TestFiles\testCompressorMapInvalidOnPower.csv">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="TestFiles\testCompressorMapInvalidRpm.csv">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="TestFiles\testCompressorMapNotEnoughRows.csv">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="TestFiles\testCompressorMapWrongNumberOfColumns.csv">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="TestFiles\TestHvacMap.csv">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="TestFiles\testHvacMapInvalidRowData.csv">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="TestFiles\testHvacMapWrongColumns.csv">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
   </ItemGroup>
   <ItemGroup>
     <ProjectReference Include="..\VectoAuxiliaries\VectoAuxiliaries.vbproj">
@@ -156,6 +192,7 @@
     </ProjectReference>
   </ItemGroup>
   <ItemGroup>
+    <Folder Include="Hvac\" />
     <Folder Include="IntegrationTests\" />
   </ItemGroup>
   <Choose>
-- 
GitLab