From fa56960157676e7afd1efc902481746a68618d26 Mon Sep 17 00:00:00 2001
From: "Burns, Terry" <Terry.Burns@ricardo.com>
Date: Thu, 19 Mar 2015 20:26:32 +0000
Subject: [PATCH] WIP - CBA - SavePoint

git-tfs-id: [http://tfs00.element.root.com:8080/tfs/TFSCollection]$/VECTO;C1832
---
 HVACTOOL/HVACTOOL.vbproj                      |   2 +-
 HVACTOOL/Module1.vb                           |   6 +-
 .../VectoAuxiliaries/Electrics/Alternator.vb  | 119 +++++
 .../Electrics/CombinedAlternatorSignals.vb    |  28 ++
 .../VectoAuxiliaries/Electrics/IAlternator.vb |  18 +
 .../Electrics/ICombinedAlternatorSignals.vb   |  20 +
 .../UI/frmCombinedAlternators.Designer.vb     |   2 +-
 .../VectoAuxiliaries/VectoAuxiliaries.vbproj  |   4 +
 .../UnitTests/CombinedAlternatorTests.vb      | 454 +++++++++---------
 .../VectoAuxiliariesTests.vbproj              |   1 +
 10 files changed, 431 insertions(+), 223 deletions(-)
 create mode 100644 VECTOAux/VectoAuxiliaries/Electrics/Alternator.vb
 create mode 100644 VECTOAux/VectoAuxiliaries/Electrics/CombinedAlternatorSignals.vb
 create mode 100644 VECTOAux/VectoAuxiliaries/Electrics/IAlternator.vb
 create mode 100644 VECTOAux/VectoAuxiliaries/Electrics/ICombinedAlternatorSignals.vb

diff --git a/HVACTOOL/HVACTOOL.vbproj b/HVACTOOL/HVACTOOL.vbproj
index 0b0ea2e90c..3b8f886576 100644
--- a/HVACTOOL/HVACTOOL.vbproj
+++ b/HVACTOOL/HVACTOOL.vbproj
@@ -27,7 +27,7 @@
     <UpdatePeriodically>false</UpdatePeriodically>
     <UpdateRequired>false</UpdateRequired>
     <MapFileExtensions>true</MapFileExtensions>
-    <ApplicationRevision>6</ApplicationRevision>
+    <ApplicationRevision>7</ApplicationRevision>
     <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
     <UseApplicationTrust>false</UseApplicationTrust>
     <PublishWizardCompleted>true</PublishWizardCompleted>
diff --git a/HVACTOOL/Module1.vb b/HVACTOOL/Module1.vb
index ad9062e9be..2543252562 100644
--- a/HVACTOOL/Module1.vb
+++ b/HVACTOOL/Module1.vb
@@ -5,8 +5,12 @@ module Main
 Sub main()
 
    Dim frm As New frmHVACTool("BusDatabase.abdb", "ssm.ahsm")
+   Dim frmAlt As New frmCombinedAlternators()
 
-   frm.ShowDialog()
+
+
+   'frm.ShowDialog()
+   frmAlt.ShowDialog()
 
    frm.Dispose
 
diff --git a/VECTOAux/VectoAuxiliaries/Electrics/Alternator.vb b/VECTOAux/VectoAuxiliaries/Electrics/Alternator.vb
new file mode 100644
index 0000000000..e6a59bd2a5
--- /dev/null
+++ b/VECTOAux/VectoAuxiliaries/Electrics/Alternator.vb
@@ -0,0 +1,119 @@
+
+Namespace Electrics
+
+Public class AltUserInput
+
+  Public Amps As Single
+  Public Eff As Single 
+
+  Sub new( amps As Single , eff As single)
+
+   Me.Amps=amps
+   Me.Eff = eff
+
+  End Sub
+
+
+ Public Function IsEqual(  other As AltUserInput, Optional rounding As Integer=7) As Boolean
+
+    Return Math.round(Me.Amps,rounding)= Math.Round(other.Amps,rounding) AndAlso _
+        Math.Round(Me.Eff,rounding) = Math.Round(other.eff,rounding)
+
+ End Function
+
+
+End class
+
+
+Public Class Alternator
+ Implements IAlternator
+
+
+ Public InputTable2000 As  New List(Of AltUserInput)
+ Public InputTable4000 As  New List(Of AltUserInput)
+ Public InputTable6000 As  New List(Of AltUserInput)
+
+
+ Private signals As ICombinedAlternatorSignals
+ Private pulleyRation As Single
+ 
+
+ Public ReadOnly Property Efficiency As Double Implements IAlternator.Efficiency
+            Get
+
+            End Get
+        End Property
+
+ Public ReadOnly Property SpindleSpeed As Double Implements IAlternator.SpindleSpeed
+            Get
+
+            End Get
+        End Property
+
+ Sub new( isignals As ICombinedAlternatorSignals, pulleyRatio As single)
+
+
+     If isignals is Nothing then Throw New ArgumentException("Alternator - ISignals supplied is nothing")
+     signals = isignals
+
+  
+
+
+ End Sub
+
+
+
+  public Sub BuildInputTable(  inputs As Dictionary(of Single, single), targetTable As List (Of AltUserInput ))
+
+
+       Dim C11,C12,C13,C14,D11,D12,D13,D14 As single
+       Dim tmpAmp As single
+
+       targetTable.Clear()
+
+       'Row0
+       targetTable.Add( New AltUserInput(0,D14))
+
+       'Row1
+       targetTable.Add( New AltUserInput( 10, inputs(10)))
+
+       'Row2
+       targetTable.Add( New AltUserInput( 40, inputs(40)))
+
+       'Row3
+       targetTable.Add( New AltUserInput( 60, inputs(60)))
+
+       C11= targetTable(1).Amps : C12=targetTable(2).Amps : C13=targetTable(3).Amps
+       D11= targetTable(1).Eff  : D12=targetTable(2).Eff  : D13=targetTable(3).Eff
+       D14= IF(D12>D13,0, Math.Max(Math.MAX(D11,D12),D13))
+
+
+       'Row4  - Eff
+       targetTable.Add( new AltUserInput( 0 ,D14 ))
+
+
+       'Row4  - Amps
+       tmpAmp =IF((D13=0 OrElse D13=D12),C13+1,IF(D12>D13,((((C13-C12)/(D12-D13))*D13)+C13),((((C13-C12)/(D12-D13))*(D13-D14))+C13)))
+       targetTable(4).Amps = tmpAmp
+
+       'Row5 
+       tmpAmp  =IF(C14>200,C14+1,200)
+       targetTable.Add( New AltUserInput(tmpAmp,D14))
+
+       'Row0
+       targetTable(0).Eff=D11
+
+
+  End Sub
+
+
+
+End Class
+
+
+
+
+End Namespace
+
+
+
diff --git a/VECTOAux/VectoAuxiliaries/Electrics/CombinedAlternatorSignals.vb b/VECTOAux/VectoAuxiliaries/Electrics/CombinedAlternatorSignals.vb
new file mode 100644
index 0000000000..64ab6a8772
--- /dev/null
+++ b/VECTOAux/VectoAuxiliaries/Electrics/CombinedAlternatorSignals.vb
@@ -0,0 +1,28 @@
+
+
+Namespace Electrics
+
+
+Public Class CombinedAlternatorSignals
+ Implements ICombinedAlternatorSignals
+
+
+
+        Public Property CrankRPM As Single Implements ICombinedAlternatorSignals.CrankRPM
+
+        Public Property CurrentDemandAmps As Single Implements ICombinedAlternatorSignals.CurrentDemandAmps
+
+        Public Property NumberOfAlternators As Single Implements ICombinedAlternatorSignals.NumberOfAlternators
+
+
+
+End Class
+
+
+
+End Namespace
+
+
+
+
+
diff --git a/VECTOAux/VectoAuxiliaries/Electrics/IAlternator.vb b/VECTOAux/VectoAuxiliaries/Electrics/IAlternator.vb
new file mode 100644
index 0000000000..34bbbfb975
--- /dev/null
+++ b/VECTOAux/VectoAuxiliaries/Electrics/IAlternator.vb
@@ -0,0 +1,18 @@
+
+Namespace Electrics
+
+
+     Public Interface IAlternator
+            
+     
+         Readonly property SpindleSpeed As Double
+
+         ReadOnly Property Efficiency  As Double
+     
+     
+     End Interface
+
+
+End Namespace
+
+
diff --git a/VECTOAux/VectoAuxiliaries/Electrics/ICombinedAlternatorSignals.vb b/VECTOAux/VectoAuxiliaries/Electrics/ICombinedAlternatorSignals.vb
new file mode 100644
index 0000000000..6a0e71d3cb
--- /dev/null
+++ b/VECTOAux/VectoAuxiliaries/Electrics/ICombinedAlternatorSignals.vb
@@ -0,0 +1,20 @@
+
+Namespace Electrics
+
+
+Public Interface ICombinedAlternatorSignals
+
+
+    Property NumberOfAlternators As Single
+    Property CrankRPM As Single
+    Property CurrentDemandAmps As Single
+    
+
+End Interface
+
+
+
+
+End Namespace
+
+
diff --git a/VECTOAux/VectoAuxiliaries/UI/frmCombinedAlternators.Designer.vb b/VECTOAux/VectoAuxiliaries/UI/frmCombinedAlternators.Designer.vb
index c157f6faa0..1dd4aafc16 100644
--- a/VECTOAux/VectoAuxiliaries/UI/frmCombinedAlternators.Designer.vb
+++ b/VECTOAux/VectoAuxiliaries/UI/frmCombinedAlternators.Designer.vb
@@ -28,7 +28,7 @@ Partial Class frmCombinedAlternators
         '
         Me.AutoScaleDimensions = New System.Drawing.SizeF(6!, 13!)
         Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
-        Me.ClientSize = New System.Drawing.Size(729, 490)
+        Me.ClientSize = New System.Drawing.Size(935, 579)
         Me.Name = "frmCombinedAlternators"
         Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
         Me.Text = "frmCombinedAlternators"
diff --git a/VECTOAux/VectoAuxiliaries/VectoAuxiliaries.vbproj b/VECTOAux/VectoAuxiliaries/VectoAuxiliaries.vbproj
index 0230674e97..6b58468b00 100644
--- a/VECTOAux/VectoAuxiliaries/VectoAuxiliaries.vbproj
+++ b/VECTOAux/VectoAuxiliaries/VectoAuxiliaries.vbproj
@@ -108,11 +108,15 @@
     <Compile Include="DownstreamModules\M7.vb" />
     <Compile Include="DownstreamModules\M8.vb" />
     <Compile Include="DownstreamModules\M9.vb" />
+    <Compile Include="Electrics\Alternator.vb" />
     <Compile Include="Electrics\AlternatorMapValues.vb" />
     <Compile Include="Electrics\AlternatorMap.vb" />
     <Compile Include="Electrics\CombinedAltEntry.vb" />
     <Compile Include="Electrics\CombinedAlternator.vb" />
+    <Compile Include="Electrics\CombinedAlternatorSignals.vb" />
     <Compile Include="Electrics\ElectricsUserInputsConfig.vb" />
+    <Compile Include="Electrics\IAlternator.vb" />
+    <Compile Include="Electrics\ICombinedAlternatorSignals.vb" />
     <Compile Include="Electrics\IElectricsUserInputsConfig.vb" />
     <Compile Include="Electrics\IM0_5_SmartAlternatorSetEfficiency.vb" />
     <Compile Include="Electrics\IM2_AverageElectricalLoadDemand.vb" />
diff --git a/VECTOAux/VectoAuxiliariesTests/UnitTests/CombinedAlternatorTests.vb b/VECTOAux/VectoAuxiliariesTests/UnitTests/CombinedAlternatorTests.vb
index 3bc59ab1a3..5c1fd0ab45 100644
--- a/VECTOAux/VectoAuxiliariesTests/UnitTests/CombinedAlternatorTests.vb
+++ b/VECTOAux/VectoAuxiliariesTests/UnitTests/CombinedAlternatorTests.vb
@@ -1,243 +1,257 @@
-Imports VectoAuxiliaries.Electrics
-Imports VectoAuxiliaries.Pneumatics
-Imports VectoAuxiliaries.Hvac
-Imports VectoAuxiliaries.DownstreamModules
-Imports NUnit.Framework
+Imports NUnit.Framework
+Imports VectoAuxiliaries.Electrics
+Imports VectoAuxiliariesTests.Mocks
 Imports VectoAuxiliaries
-Imports Moq
+Imports VectoAuxiliaries.Hvac
 
 Namespace UnitTests
 
+ <TestFixture()>
+ Public Class CombinedAlternatorTests
+
+  private Alt1ExpectedTable2000 As new List(Of AltUserInput)
+  private Alt1ExpectedTable4000 As new List(Of AltUserInput)
+  private Alt1ExpectedTable6000 As new List(Of AltUserInput)
+  private Alt2ExpectedTable2000 As new List(Of AltUserInput)
+  private Alt2ExpectedTable4000 As new List(Of AltUserInput)
+  private Alt2ExpectedTable6000 As new List(Of AltUserInput)
+  private Alt3ExpectedTable2000 As new List(Of AltUserInput)
+  private Alt3ExpectedTable4000 As new List(Of AltUserInput)
+  private Alt3ExpectedTable6000 As new List(Of AltUserInput)
+  private Alt4ExpectedTable2000 As new List(Of AltUserInput)
+  private Alt4ExpectedTable4000 As new List(Of AltUserInput)
+  private Alt4ExpectedTable6000 As new List(Of AltUserInput)
+
+
+
+  Sub new ()
+
+  Alt1ExpectedTable2000 = New List(Of AltUserInput)() from  {  New AltUserInput(  0,50), _
+                                                               New AltUserInput( 10,50), _
+                                                               New AltUserInput( 40,50), _
+                                                               New AltUserInput( 60,50), _
+                                                               New AltUserInput( 61,50), _
+                                                               New AltUserInput(200,50) }
+
+  Alt1ExpectedTable4000 = New List(Of AltUserInput)() from  {  New AltUserInput(  0,70), _
+                                                               New AltUserInput( 10,70), _
+                                                               New AltUserInput( 40,70), _
+                                                               New AltUserInput( 60,70), _
+                                                               New AltUserInput( 61,70), _
+                                                               New AltUserInput(200,70) }
+
+
+  Alt1ExpectedTable6000 = New List(Of AltUserInput)() from  {  New AltUserInput(  0,60), _
+                                                               New AltUserInput( 10,60), _
+                                                               New AltUserInput( 40,60), _
+                                                               New AltUserInput( 60,60), _
+                                                               New AltUserInput( 61,60), _
+                                                               New AltUserInput(200,60) }
+
+  'ALT 2
+  Alt2ExpectedTable2000 = New List(Of AltUserInput)() from  {  New AltUserInput(  0,80), _
+                                                               New AltUserInput( 10,80), _
+                                                               New AltUserInput( 40,80), _
+                                                               New AltUserInput( 60,80), _
+                                                               New AltUserInput( 61,80), _
+                                                               New AltUserInput(200,80) }
+
+  Alt2ExpectedTable4000 = New List(Of AltUserInput)() from  {  New AltUserInput(  0,40), _
+                                                               New AltUserInput( 10,40), _
+                                                               New AltUserInput( 40,40), _
+                                                               New AltUserInput( 60,40), _
+                                                               New AltUserInput( 61,40), _
+                                                               New AltUserInput(200,40) }
+
+
+  Alt2ExpectedTable6000 = New List(Of AltUserInput)() from  {  New AltUserInput(  0,60), _
+                                                               New AltUserInput( 10,60), _
+                                                               New AltUserInput( 40,60), _
+                                                               New AltUserInput( 60,60), _
+                                                               New AltUserInput( 61,60), _
+                                                               New AltUserInput(200,60) }
+
+
+  'ALT 3
+  Alt3ExpectedTable2000 = New List(Of AltUserInput)() from  {  New AltUserInput(  0,95), _
+                                                               New AltUserInput( 10,95), _
+                                                               New AltUserInput( 40,50), _
+                                                               New AltUserInput( 60,90), _
+                                                               New AltUserInput(62.5,95), _
+                                                               New AltUserInput(200, 95) }
+
+  Alt3ExpectedTable4000 = New List(Of AltUserInput)() from  {  New AltUserInput(  0,99), _
+                                                               New AltUserInput( 10,99), _
+                                                               New AltUserInput( 40, 1), _
+                                                               New AltUserInput( 60,55), _
+                                                               New AltUserInput( 76.2962963,99), _
+                                                               New AltUserInput(200,99) }
+
+
+  Alt3ExpectedTable6000 = New List(Of AltUserInput)() from  {  New AltUserInput(  0,94), _
+                                                               New AltUserInput( 10,94), _
+                                                               New AltUserInput( 40, 86), _
+                                                               New AltUserInput( 60,13), _
+                                                               New AltUserInput( 63.5616438,0), _
+                                                               New AltUserInput(200,0) }
+
+
+  'ALT 4
+  Alt4ExpectedTable2000 = New List(Of AltUserInput)() from  {  New AltUserInput(  0,55), _
+                                                               New AltUserInput( 10,55), _
+                                                               New AltUserInput( 40,45), _
+                                                               New AltUserInput( 60,67), _
+                                                               New AltUserInput( 60,67), _
+                                                               New AltUserInput(200,67) }
+
+  Alt4ExpectedTable4000 = New List(Of AltUserInput)() from  {  New AltUserInput(  0,77), _
+                                                               New AltUserInput( 10,77), _
+                                                               New AltUserInput( 40,39), _
+                                                               New AltUserInput( 60,23), _
+                                                               New AltUserInput( 88.75,0), _
+                                                               New AltUserInput(200,0) }
+
+
+  Alt4ExpectedTable6000 = New List(Of AltUserInput)() from  {  New AltUserInput(  0,34), _
+                                                               New AltUserInput( 10,34), _
+                                                               New AltUserInput( 40, 67), _
+                                                               New AltUserInput( 60,35), _
+                                                               New AltUserInput( 81.875,0), _
+                                                               New AltUserInput(200,0) }
+
+
+
+  End Sub
+
+
+  <Test()>
+  Public Sub Alt1TableConstructTest()
+
+  Dim inputs2000 As New Dictionary(Of single,single)() From {{10,50}, {40,50}, {60,50}}
+  Dim inputs4000 As New Dictionary(Of single,single)() From {{10,70}, {40,70}, {60,70}}
+  Dim inputs6000 As New Dictionary(Of single,single)() From {{10,60}, {40,60}, {60,60}}
+
+  Dim Alt As New Alternator( New CombinedAlternatorSignals(), 3)
+
+
+   Alt.BuildInputTable( inputs2000, Alt.InputTable2000)
+   Alt.BuildInputTable( inputs4000, Alt.InputTable4000)
+   Alt.BuildInputTable( inputs6000, Alt.InputTable6000)
+
+   Dim idx As integer
+
+   For idx = 0 to Alt.InputTable2000.Count-1
+      Assert.IsTrue( Alt.InputTable2000(idx).IsEqual( Alt1ExpectedTable2000(idx)))
+   Next
+
+   For idx = 0 to Alt.InputTable4000.Count-1
+      Assert.IsTrue( Alt.InputTable4000(idx).IsEqual( Alt1ExpectedTable4000(idx)))
+   Next
+
+   For idx = 0 to Alt.InputTable6000.Count-1
+      Assert.IsTrue( Alt.InputTable6000(idx).IsEqual( Alt1ExpectedTable6000(idx)))
+   Next
+
+
+  End Sub
+  <Test()>
+  Public Sub Alt2TableConstructTest()
+
+  Dim inputs2000 As New Dictionary(Of single,single)() From {{10,80}, {40,80}, {60,80}}
+  Dim inputs4000 As New Dictionary(Of single,single)() From {{10,40}, {40,40}, {60,40}}
+  Dim inputs6000 As New Dictionary(Of single,single)() From {{10,60}, {40,60}, {60,60}}
+
+  Dim Alt As New Alternator( New CombinedAlternatorSignals(), 2.5)
+
+
+   Alt.BuildInputTable( inputs2000, Alt.InputTable2000)
+   Alt.BuildInputTable( inputs4000, Alt.InputTable4000)
+   Alt.BuildInputTable( inputs6000, Alt.InputTable6000)
+
+   Dim idx As integer
+
+   For idx = 0 to Alt.InputTable2000.Count-1
+      Assert.IsTrue( Alt.InputTable2000(idx).IsEqual( Alt2ExpectedTable2000(idx)))
+   Next
+
+   For idx = 0 to Alt.InputTable4000.Count-1
+      Assert.IsTrue( Alt.InputTable4000(idx).IsEqual( Alt2ExpectedTable4000(idx)))
+   Next
+
+   For idx = 0 to Alt.InputTable6000.Count-1
+      Assert.IsTrue( Alt.InputTable6000(idx).IsEqual( Alt2ExpectedTable6000(idx)))
+   Next
+                              
+
+  End Sub
+  <Test()>
+  Public Sub Alt3TableConstructTest()
+
+  Dim inputs2000 As New Dictionary(Of single,single)() From {{10,95}, {40,50}, {60,90}}
+  Dim inputs4000 As New Dictionary(Of single,single)() From {{10,99}, {40, 1}, {60,55}}
+  Dim inputs6000 As New Dictionary(Of single,single)() From {{10,94}, {40,86}, {60,13}}
+
+  Dim Alt As New Alternator( New CombinedAlternatorSignals(), 3.5)
+
 
-<TestFixture()>
-Public Class CombinedAlternatorTests
-
-   <Test()>
-   public sub One_AlternatorTestSet()
-
-     Dim target  As New CombinedAlternator("c:\alt.xlsx",3,4,5,6,1)
-
-
-     Assert.IsTrue( ValueSetsEqual( target.GetCombinedMap, OneAltValues))
-
-
-   End Sub
-
-
-
-Public   function OneAltValues() As List( OF CombinedAltEntry)
-
-Dim results As New List( of CombinedAltEntry)
-
-
-    results.Add( new CombinedAltEntry with { .Amps=10.00	,.EngineSpeed=500	,.Efficiency=0.60   })
-    results.Add( new CombinedAltEntry with { .Amps=25.00	,.EngineSpeed=500	,.Efficiency=0.60   })
-    results.Add( new CombinedAltEntry with { .Amps=50.00	,.EngineSpeed=500	,.Efficiency=0.60   })
-    results.Add( new CombinedAltEntry with { .Amps=75.00	,.EngineSpeed=500	,.Efficiency=0.60   })
-    results.Add( new CombinedAltEntry with { .Amps=100.00	,.EngineSpeed=500	,.Efficiency=0.60   })
-    results.Add( new CombinedAltEntry with { .Amps=150.00	,.EngineSpeed=500	,.Efficiency=0.60   })
-    results.Add( new CombinedAltEntry with { .Amps=200.00	,.EngineSpeed=500	,.Efficiency=0.60   })
-    results.Add( new CombinedAltEntry with { .Amps=10.00	,.EngineSpeed=667	,.Efficiency=0.60   })
-    results.Add( new CombinedAltEntry with { .Amps=25.00	,.EngineSpeed=667	,.Efficiency=0.60   })
-    results.Add( new CombinedAltEntry with { .Amps=50.00	,.EngineSpeed=667	,.Efficiency=0.60   })
-    results.Add( new CombinedAltEntry with { .Amps=75.00	,.EngineSpeed=667	,.Efficiency=0.60   })
-    results.Add( new CombinedAltEntry with { .Amps=100.00	,.EngineSpeed=667	,.Efficiency=0.60   })
-    results.Add( new CombinedAltEntry with { .Amps=150.00	,.EngineSpeed=667	,.Efficiency=0.60   })
-    results.Add( new CombinedAltEntry with { .Amps=200.00	,.EngineSpeed=667	,.Efficiency=0.60   })
-    results.Add( new CombinedAltEntry with { .Amps=10.00	,.EngineSpeed=1333	,.Efficiency=0.60   })
-    results.Add( new CombinedAltEntry with { .Amps=25.00	,.EngineSpeed=1333	,.Efficiency=0.60   })
-    results.Add( new CombinedAltEntry with { .Amps=50.00	,.EngineSpeed=1333	,.Efficiency=0.60   })
-    results.Add( new CombinedAltEntry with { .Amps=75.00	,.EngineSpeed=1333	,.Efficiency=0.60   })
-    results.Add( new CombinedAltEntry with { .Amps=100.00	,.EngineSpeed=1333	,.Efficiency=0.60   })
-    results.Add( new CombinedAltEntry with { .Amps=150.00	,.EngineSpeed=1333	,.Efficiency=0.60   })
-    results.Add( new CombinedAltEntry with { .Amps=200.00	,.EngineSpeed=1333	,.Efficiency=0.60   })
-    results.Add( new CombinedAltEntry with { .Amps=10.00	,.EngineSpeed=2000	,.Efficiency=0.70   })
-    results.Add( new CombinedAltEntry with { .Amps=25.00	,.EngineSpeed=2000	,.Efficiency=0.67   })
-    results.Add( new CombinedAltEntry with { .Amps=50.00	,.EngineSpeed=2000	,.Efficiency=0.63   })
-    results.Add( new CombinedAltEntry with { .Amps=75.00	,.EngineSpeed=2000	,.Efficiency=0.59   })
-    results.Add( new CombinedAltEntry with { .Amps=100.00	,.EngineSpeed=2000	,.Efficiency=0.54   })
-    results.Add( new CombinedAltEntry with { .Amps=150.00	,.EngineSpeed=2000	,.Efficiency=0.46   })
-    results.Add( new CombinedAltEntry with { .Amps=200.00	,.EngineSpeed=2000	,.Efficiency=0.37   })
-    results.Add( new CombinedAltEntry with { .Amps=10.00	,.EngineSpeed=2333	,.Efficiency=0.70   })
-    results.Add( new CombinedAltEntry with { .Amps=25.00	,.EngineSpeed=2333	,.Efficiency=0.67   })
-    results.Add( new CombinedAltEntry with { .Amps=50.00	,.EngineSpeed=2333	,.Efficiency=0.63   })
-    results.Add( new CombinedAltEntry with { .Amps=75.00	,.EngineSpeed=2333	,.Efficiency=0.58   })
-    results.Add( new CombinedAltEntry with { .Amps=100.00	,.EngineSpeed=2333	,.Efficiency=0.52   })
-    results.Add( new CombinedAltEntry with { .Amps=150.00	,.EngineSpeed=2333	,.Efficiency=0.39   })
-    results.Add( new CombinedAltEntry with { .Amps=200.00	,.EngineSpeed=2333	,.Efficiency=0.26   })
-
-
-Return results
-
-
-End Function
-Public  Function TwoAltValues() As List( of CombinedAltEntry)
-
-  Dim results As New List( Of CombinedAltEntry)
-
-   Results.Add( new CombinedAltEntry With { .AMPS=20.00	    ,.EngineSpeed=500	,.Efficiency=0.75   })
-   Results.Add( new CombinedAltEntry With { .AMPS=50.00	    ,.EngineSpeed=500	,.Efficiency=0.75   })
-   Results.Add( new CombinedAltEntry With { .AMPS=100.00	,.EngineSpeed=500	,.Efficiency=0.75   })
-   Results.Add( new CombinedAltEntry With { .AMPS=150.00	,.EngineSpeed=500	,.Efficiency=0.75   })
-   Results.Add( new CombinedAltEntry With { .AMPS=200.00	,.EngineSpeed=500	,.Efficiency=0.75   })
-   Results.Add( new CombinedAltEntry With { .AMPS=300.00	,.EngineSpeed=500	,.Efficiency=0.75   })
-   Results.Add( new CombinedAltEntry With { .AMPS=400.00	,.EngineSpeed=500	,.Efficiency=0.75   })
-   Results.Add( new CombinedAltEntry With { .AMPS=20.00	    ,.EngineSpeed=667	,.Efficiency=0.72   })
-   Results.Add( new CombinedAltEntry With { .AMPS=50.00	    ,.EngineSpeed=667	,.Efficiency=0.72   })
-   Results.Add( new CombinedAltEntry With { .AMPS=100.00	,.EngineSpeed=667	,.Efficiency=0.72   })
-   Results.Add( new CombinedAltEntry With { .AMPS=150.00	,.EngineSpeed=667	,.Efficiency=0.72   })
-   Results.Add( new CombinedAltEntry With { .AMPS=200.00	,.EngineSpeed=667	,.Efficiency=0.72   })
-   Results.Add( new CombinedAltEntry With { .AMPS=300.00	,.EngineSpeed=667	,.Efficiency=0.72   })
-   Results.Add( new CombinedAltEntry With { .AMPS=400.00	,.EngineSpeed=667	,.Efficiency=0.72   })
-   Results.Add( new CombinedAltEntry With { .AMPS=20.00	    ,.EngineSpeed=1333	,.Efficiency=0.72   })
-   Results.Add( new CombinedAltEntry With { .AMPS=50.00	    ,.EngineSpeed=1333	,.Efficiency=0.72   })
-   Results.Add( new CombinedAltEntry With { .AMPS=100.00	,.EngineSpeed=1333	,.Efficiency=0.72   })
-   Results.Add( new CombinedAltEntry With { .AMPS=150.00	,.EngineSpeed=1333	,.Efficiency=0.72   })
-   Results.Add( new CombinedAltEntry With { .AMPS=200.00	,.EngineSpeed=1333	,.Efficiency=0.72   })
-   Results.Add( new CombinedAltEntry With { .AMPS=300.00	,.EngineSpeed=1333	,.Efficiency=0.72   })
-   Results.Add( new CombinedAltEntry With { .AMPS=400.00	,.EngineSpeed=1333	,.Efficiency=0.72   })
-   Results.Add( new CombinedAltEntry With { .AMPS=20.00	    ,.EngineSpeed=2000	,.Efficiency=0.90   })
-   Results.Add( new CombinedAltEntry With { .AMPS=50.00	    ,.EngineSpeed=2000	,.Efficiency=0.89   })
-   Results.Add( new CombinedAltEntry With { .AMPS=100.00	,.EngineSpeed=2000	,.Efficiency=0.87   })
-   Results.Add( new CombinedAltEntry With { .AMPS=150.00	,.EngineSpeed=2000	,.Efficiency=0.84   })
-   Results.Add( new CombinedAltEntry With { .AMPS=200.00	,.EngineSpeed=2000	,.Efficiency=0.82   })
-   Results.Add( new CombinedAltEntry With { .AMPS=300.00	,.EngineSpeed=2000	,.Efficiency=0.78   })
-   Results.Add( new CombinedAltEntry With { .AMPS=400.00	,.EngineSpeed=2000	,.Efficiency=0.74   })
-   Results.Add( new CombinedAltEntry With { .AMPS=20.00	    ,.EngineSpeed=2333	,.Efficiency=0.80   })
-   Results.Add( new CombinedAltEntry With { .AMPS=50.00	    ,.EngineSpeed=2333	,.Efficiency=0.79   })
-   Results.Add( new CombinedAltEntry With { .AMPS=100.00	,.EngineSpeed=2333	,.Efficiency=0.77   })
-   Results.Add( new CombinedAltEntry With { .AMPS=150.00	,.EngineSpeed=2333	,.Efficiency=0.74   })
-   Results.Add( new CombinedAltEntry With { .AMPS=200.00	,.EngineSpeed=2333	,.Efficiency=0.71   })
-   Results.Add( new CombinedAltEntry With { .AMPS=300.00	,.EngineSpeed=2333	,.Efficiency=0.64   })
-   Results.Add( new CombinedAltEntry With { .AMPS=400.00	,.EngineSpeed=2333	,.Efficiency=0.58   })
-   
-
-  Return results
-
-
-End Function
-Public  Function ThreeAltValues()    As List( of CombinedAltEntry)
-
-  Dim results As New List( Of CombinedAltEntry)
-
-  results.Add( new CombinedAltEntry With { .AMPS=30	    ,.EngineSpeed = 500	    ,.Efficiency = 0.71    })
-  results.Add( new CombinedAltEntry With { .AMPS=75	    ,.EngineSpeed = 500	    ,.Efficiency = 0.73    })
-  results.Add( new CombinedAltEntry With { .AMPS=150	,.EngineSpeed = 500	    ,.Efficiency = 0.77    })
-  results.Add( new CombinedAltEntry With { .AMPS=225	,.EngineSpeed = 500	    ,.Efficiency = 0.00    })
-  results.Add( new CombinedAltEntry With { .AMPS=300	,.EngineSpeed = 500	    ,.Efficiency = 0.00    })
-  results.Add( new CombinedAltEntry With { .AMPS=450	,.EngineSpeed = 500	    ,.Efficiency = 0.00    })
-  results.Add( new CombinedAltEntry With { .AMPS=600	,.EngineSpeed = 500	    ,.Efficiency = 0.00    })
-  results.Add( new CombinedAltEntry With { .AMPS=30	    ,.EngineSpeed = 667	    ,.Efficiency = 0.69    })
-  results.Add( new CombinedAltEntry With { .AMPS=75	    ,.EngineSpeed = 667	    ,.Efficiency = 0.70    })
-  results.Add( new CombinedAltEntry With { .AMPS=150	,.EngineSpeed = 667	    ,.Efficiency = 0.73    })
-  results.Add( new CombinedAltEntry With { .AMPS=225	,.EngineSpeed = 667	    ,.Efficiency = 0.22    })
-  results.Add( new CombinedAltEntry With { .AMPS=300	,.EngineSpeed = 667	    ,.Efficiency = 0.00    })
-  results.Add( new CombinedAltEntry With { .AMPS=450	,.EngineSpeed = 667	    ,.Efficiency = 0.00    })
-  results.Add( new CombinedAltEntry With { .AMPS=600	,.EngineSpeed = 667	    ,.Efficiency = 0.00    })
-  results.Add( new CombinedAltEntry With { .AMPS=30	    ,.EngineSpeed = 1333	,.Efficiency = 0.64    })
-  results.Add( new CombinedAltEntry With { .AMPS=75	    ,.EngineSpeed = 1333	,.Efficiency = 0.66    })
-  results.Add( new CombinedAltEntry With { .AMPS=150	,.EngineSpeed = 1333	,.Efficiency = 0.69    })
-  results.Add( new CombinedAltEntry With { .AMPS=225	,.EngineSpeed = 1333	,.Efficiency = 0.70    })
-  results.Add( new CombinedAltEntry With { .AMPS=300	,.EngineSpeed = 1333	,.Efficiency = 0.69    })
-  results.Add( new CombinedAltEntry With { .AMPS=450	,.EngineSpeed = 1333	,.Efficiency = 0.67    })
-  results.Add( new CombinedAltEntry With { .AMPS=600	,.EngineSpeed = 1333	,.Efficiency = 0.65    })
-  results.Add( new CombinedAltEntry With { .AMPS=30	    ,.EngineSpeed = 2000	,.Efficiency = 0.70    })
-  results.Add( new CombinedAltEntry With { .AMPS=75	    ,.EngineSpeed = 2000	,.Efficiency = 0.72    })
-  results.Add( new CombinedAltEntry With { .AMPS=150	,.EngineSpeed = 2000	,.Efficiency = 0.75    })
-  results.Add( new CombinedAltEntry With { .AMPS=225	,.EngineSpeed = 2000	,.Efficiency = 0.77    })
-  results.Add( new CombinedAltEntry With { .AMPS=300	,.EngineSpeed = 2000	,.Efficiency = 0.74    })
-  results.Add( new CombinedAltEntry With { .AMPS=450	,.EngineSpeed = 2000	,.Efficiency = 0.69    })
-  results.Add( new CombinedAltEntry With { .AMPS=600	,.EngineSpeed = 2000	,.Efficiency = 0.63    })
-  results.Add( new CombinedAltEntry With { .AMPS=30	    ,.EngineSpeed = 2333	,.Efficiency = 0.61    })
-  results.Add( new CombinedAltEntry With { .AMPS=75	    ,.EngineSpeed = 2333	,.Efficiency = 0.63    })
-  results.Add( new CombinedAltEntry With { .AMPS=150	,.EngineSpeed = 2333	,.Efficiency = 0.66    })
-  results.Add( new CombinedAltEntry With { .AMPS=225	,.EngineSpeed = 2333	,.Efficiency = 0.69    })
-  results.Add( new CombinedAltEntry With { .AMPS=300	,.EngineSpeed = 2333	,.Efficiency = 0.65    })
-  results.Add( new CombinedAltEntry With { .AMPS=450	,.EngineSpeed = 2333	,.Efficiency = 0.58    })
-  results.Add( new CombinedAltEntry With { .AMPS=600	,.EngineSpeed = 2333	,.Efficiency = 0.51    })
-
-
-
-  Return results
-  
-
-End Function
-Public  Function FourAltValues()  As List( of CombinedAltEntry)
-
-  Dim results As New List( Of CombinedAltEntry)
-
-
-   results.Add( new CombinedAltEntry With {.AMPS=40	    ,.EngineSpeed=500	    ,.Efficiency=0.61    })
-   results.Add( new CombinedAltEntry With {.AMPS=100.00	,.EngineSpeed=500	    ,.Efficiency=0.68    })
-   results.Add( new CombinedAltEntry With {.AMPS=200.00	,.EngineSpeed=500	    ,.Efficiency=0.78    })
-   results.Add( new CombinedAltEntry With {.AMPS=300.00	,.EngineSpeed=500	    ,.Efficiency=0.00    })
-   results.Add( new CombinedAltEntry With {.AMPS=400.00	,.EngineSpeed=500	    ,.Efficiency=0.00    })
-   results.Add( new CombinedAltEntry With {.AMPS=600.00	,.EngineSpeed=500	    ,.Efficiency=0.00    })
-   results.Add( new CombinedAltEntry With {.AMPS=800.00	,.EngineSpeed=500	    ,.Efficiency=0.00    })
-   results.Add( new CombinedAltEntry With {.AMPS=40.00	,.EngineSpeed=667	    ,.Efficiency=0.68    })
-   results.Add( new CombinedAltEntry With {.AMPS=100.00	,.EngineSpeed=667	    ,.Efficiency=0.70    })
-   results.Add( new CombinedAltEntry With {.AMPS=200.00	,.EngineSpeed=667	    ,.Efficiency=0.73    })
-   results.Add( new CombinedAltEntry With {.AMPS=300.00	,.EngineSpeed=667	    ,.Efficiency=0.35    })
-   results.Add( new CombinedAltEntry With {.AMPS=400.00	,.EngineSpeed=667	    ,.Efficiency=0.00    })
-   results.Add( new CombinedAltEntry With {.AMPS=600.00	,.EngineSpeed=667	    ,.Efficiency=0.00    })
-   results.Add( new CombinedAltEntry With {.AMPS=800.00	,.EngineSpeed=667	    ,.Efficiency=0.00    })
-   results.Add( new CombinedAltEntry With {.AMPS=40.00	,.EngineSpeed=1333	    ,.Efficiency=0.59    })
-   results.Add( new CombinedAltEntry With {.AMPS=100.00	,.EngineSpeed=1333	    ,.Efficiency=0.61    })
-   results.Add( new CombinedAltEntry With {.AMPS=200.00	,.EngineSpeed=1333	    ,.Efficiency=0.66    })
-   results.Add( new CombinedAltEntry With {.AMPS=300.00	,.EngineSpeed=1333	    ,.Efficiency=0.69    })
-   results.Add( new CombinedAltEntry With {.AMPS=400.00	,.EngineSpeed=1333	    ,.Efficiency=0.68    })
-   results.Add( new CombinedAltEntry With {.AMPS=600.00	,.EngineSpeed=1333	    ,.Efficiency=0.64    })
-   results.Add( new CombinedAltEntry With {.AMPS=800.00	,.EngineSpeed=1333	    ,.Efficiency=0.61    })
-   results.Add( new CombinedAltEntry With {.AMPS=40.00	,.EngineSpeed=2000	    ,.Efficiency=0.58    })
-   results.Add( new CombinedAltEntry With {.AMPS=100.00	,.EngineSpeed=2000	    ,.Efficiency=0.61    })
-   results.Add( new CombinedAltEntry With {.AMPS=200.00	,.EngineSpeed=2000	    ,.Efficiency=0.67    })
-   results.Add( new CombinedAltEntry With {.AMPS=300.00	,.EngineSpeed=2000	    ,.Efficiency=0.72    })
-   results.Add( new CombinedAltEntry With {.AMPS=400.00	,.EngineSpeed=2000	    ,.Efficiency=0.69    })
-   results.Add( new CombinedAltEntry With {.AMPS=600.00	,.EngineSpeed=2000	    ,.Efficiency=0.63    })
-   results.Add( new CombinedAltEntry With {.AMPS=800.00	,.EngineSpeed=2000	    ,.Efficiency=0.56    })
-   results.Add( new CombinedAltEntry With {.AMPS=40.00	,.EngineSpeed=2333	    ,.Efficiency=0.48    })
-   results.Add( new CombinedAltEntry With {.AMPS=100.00	,.EngineSpeed=2333	    ,.Efficiency=0.52    })
-   results.Add( new CombinedAltEntry With {.AMPS=200.00	,.EngineSpeed=2333	    ,.Efficiency=0.59    })
-   results.Add( new CombinedAltEntry With {.AMPS=300.00	,.EngineSpeed=2333	    ,.Efficiency=0.65    })
-   results.Add( new CombinedAltEntry With {.AMPS=400.00	,.EngineSpeed=2333	    ,.Efficiency=0.61    })
-   results.Add( new CombinedAltEntry With {.AMPS=600.00	,.EngineSpeed=2333	    ,.Efficiency=0.53    })
-   results.Add( new CombinedAltEntry With {.AMPS=800.00	,.EngineSpeed=2333	    ,.Efficiency=0.45    })
-
-
-  Return results
-
-End Function
-
-
-Public Function ValueSetsEqual( set1 As List(Of CombinedAltEntry),set2 As List(Of CombinedAltEntry)) As Boolean
-
-   'Bsic Count Check
-   If set1.Count<> set2.Count then Return False
-   
-   'Values Check, position for position
-   For i As Integer = 0 to set1.Count-1
-
-     If set1(i).Amps<> set2(i).Amps OrElse set1(i).EngineSpeed<> set2(i).EngineSpeed OrElse set1(i).Efficiency <> set2(i).Efficiency then
-       Return False    
-     End If
+   Alt.BuildInputTable( inputs2000, Alt.InputTable2000)
+   Alt.BuildInputTable( inputs4000, Alt.InputTable4000)
+   Alt.BuildInputTable( inputs6000, Alt.InputTable6000)
 
+   Dim idx As integer
+
+   For idx = 0 to Alt.InputTable2000.Count-1
+      Assert.IsTrue( Alt.InputTable2000(idx).IsEqual( Alt3ExpectedTable2000(idx)))
    Next
 
-   Return true
+   For idx = 0 to Alt.InputTable4000.Count-1
+      Assert.IsTrue( Alt.InputTable4000(idx).IsEqual( Alt3ExpectedTable4000(idx),3))
+   Next
 
-End Function
+   For idx = 0 to Alt.InputTable6000.Count-1
+      Assert.IsTrue( Alt.InputTable6000(idx).IsEqual( Alt3ExpectedTable6000(idx),3))
+   Next
+                              
 
+  End Sub
+  <Test()>
+  Public Sub Alt4TableConstructTest()
 
+  Dim inputs2000 As New Dictionary(Of single,single)() From {{10,55}, {40,45}, {60,67}}
+  Dim inputs4000 As New Dictionary(Of single,single)() From {{10,77}, {40,39}, {60,23}}
+  Dim inputs6000 As New Dictionary(Of single,single)() From {{10,34}, {40,67}, {60,35}}
 
+  Dim Alt As New Alternator( New CombinedAlternatorSignals(), 3.5)
 
 
-End Class
+   Alt.BuildInputTable( inputs2000, Alt.InputTable2000)
+   Alt.BuildInputTable( inputs4000, Alt.InputTable4000)
+   Alt.BuildInputTable( inputs6000, Alt.InputTable6000)
 
+   Dim idx As integer
 
+   For idx = 0 to Alt.InputTable2000.Count-1
+      Assert.IsTrue( Alt.InputTable2000(idx).IsEqual( Alt4ExpectedTable2000(idx)))
+   Next
 
+   For idx = 0 to Alt.InputTable4000.Count-1
+      Assert.IsTrue( Alt.InputTable4000(idx).IsEqual( Alt4ExpectedTable4000(idx),3))
+   Next
+
+   For idx = 0 to Alt.InputTable6000.Count-1
+      Assert.IsTrue( Alt.InputTable6000(idx).IsEqual( Alt4ExpectedTable6000(idx),3))
+   Next
+                              
+
+  End Sub
+
+
+ End Class
 
 
 End Namespace
 
 
 
+    
+
diff --git a/VECTOAux/VectoAuxiliariesTests/VectoAuxiliariesTests.vbproj b/VECTOAux/VectoAuxiliariesTests/VectoAuxiliariesTests.vbproj
index 0a157ee5b3..834218aee4 100644
--- a/VECTOAux/VectoAuxiliariesTests/VectoAuxiliariesTests.vbproj
+++ b/VECTOAux/VectoAuxiliariesTests/VectoAuxiliariesTests.vbproj
@@ -109,6 +109,7 @@
     <Compile Include="Mocks\M7_Mock.vb" />
     <Compile Include="Mocks\MockFuel50PC.vb" />
     <Compile Include="UnitTests\BusDatabaseTests.vb" />
+    <Compile Include="UnitTests\CombinedAlternatorTests.vb" />
     <Compile Include="UnitTests\FilePathUtilityTests.vb" />
     <Compile Include="UnitTests\FuelMapTests.vb" />
     <Compile Include="UnitTests\HVACSSMMapTests.vb" />
-- 
GitLab