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