[TestMethod]
public void TestCasesSixToTen()
{
// inputs for test cases 6 to 10
double[] tempIn = new double[] { 40.5d, 3.9d, 89.0d, 5.0d, 75.0d, };
double[] pressIn = new double[] { 700.0d, 400.0d, 3700.0d, 200.0d, 1000.0d };
double[] densIn = new double[] { 903.5d, 779.0d, 1008.0d, 875.5d, 640.0d };
double[] volIn = new double[] { 60.0d, 15.0d, 100.0d, 250.0d, 150.0d, };
// expected values from D017
double[] ctlVolExpected = new double[] { 58.842368d, 15.167952d, 95.472126d, 251.998452d, 136.203308d, };
double[] ctlCplVolExpected = new double[] { 58.871812d, 15.173133d, 95.715578d, 252.030396d, 136.700489d, };
double[] ctlExpected = new double[] { 0.98071d, 1.01120d, 0.95472d, 1.00799d, 0.90802d, };
double[] cplExpected = new double[] { 1.00050d, 1.00034d, 1.00255d, 1.00013d, 1.00365d, };
double[] volExpected = new double[] {58.9d, 15.2d, 95.7d, 252.0d, 136.7d, };
// get base temp in F
double tBase = UnitsHelpers.ConvertUnits(15.0d, AllUnits.celsius, AllUnits.fahrenheit);
int testCase;
for (int i = 0; i < tempIn.Length; i++)
{
testCase = 6 + i;
// convert values to standard units
// algorithm requires inputs in standard units
double t = UnitsHelpers.ConvertUnits(tempIn[i], AllUnits.celsius, AllUnits.fahrenheit);
double p = UnitsHelpers.ConvertUnits(pressIn[i], AllUnits.kPa, AllUnits.psi);
// calculate the result
var result = Mpms11Oil.CalculateRhoTp(CommodityTypes.crudeOil, densIn[i], t, p, tBase);
// calculate output values and diffs
double ctlRounded = Math.Round(result.Ctl, 5);
double ctlDiffPercent = (Math.Abs(ctlExpected[i] - ctlRounded) / ctlExpected[i]) * 100.0d;
double cplRounded = Math.Round(result.Cpl, 5);
double cplDiffPercent = (Math.Abs(cplExpected[i] - cplRounded) / cplExpected[i]) * 100.0d;
double volCtl = volIn[i] * result.Ctl;
double volCtlRounded = Math.Round(volCtl, 6);
double volCtlDiffPercent = (Math.Abs(ctlVolExpected[i] - volCtlRounded) / ctlVolExpected[i]) * 100.0d;
double volCtlCpl = volIn[i] * result.Ctpl;
double volCtlCplRounded = Math.Round(volCtlCpl, 6);
double volCtlCplDiffPercent = (Math.Abs(ctlCplVolExpected[i] - volCtlCplRounded) / ctlCplVolExpected[i]) * 100.0d;
double volCalcRounded = Math.Round(volCtlCpl, 1);
double volExpectedDiffPercent = (Math.Abs(volExpected[i] - volCalcRounded) / volExpected[i]) * 100.0d;
Console.WriteLine($"[{testCase:00}]");
Console.WriteLine($"\tCTL expected {ctlExpected[i]}, CTL calculated {ctlRounded}, diff {ctlDiffPercent} (%)");
Console.WriteLine($"\tCPL expected {cplExpected[i]}, CPL calculated {cplRounded}, diff {cplDiffPercent} (%)");
Console.WriteLine($"\tCTL vol expected {ctlVolExpected[i]} (m3), CTL vol calculated {volCtlRounded} (m3), diff {volCtlDiffPercent} (%)");
Console.WriteLine($"\tCTL CPL vol expected {ctlCplVolExpected[i]} (m3), CTL CPL vol calculated {volCtlCplRounded} (m3), diff {volCtlCplDiffPercent} (%)");
Console.WriteLine($"\tVol expected {volExpected[i]} (m3), vol calculated {volCalcRounded} (m3), diff {volExpectedDiffPercent} (%)");
Console.WriteLine();
}
}