//+ TestMethods private void a_valid_FxArray(double[][] data, double eRate) { var stochArray = new FxArray(data, eRate); bool result = _fxArrayCache.TryAddItem(stochArray, out _fxHash, FxArrayIdentifier); result.ShouldBeTrue(); }
private static string ReadFxArray(string fullPath, Cache <FxArray> cache, int maxHorizon, int maxSim) { List <List <double> > unstructuredData = new List <List <double> >(); double currentExchangeRate; using (var reader = new StreamReader(fullPath)) { string line = reader.ReadLine(); var values = line.Split(','); if (!(string.Equals(values[0], "1") && string.Equals(values[1], "0"))) { throw new ArgumentException("Fx Data is in an unexpected format"); } var firstLoopData = new List <double>(); currentExchangeRate = values[2].ConvertParameterToDouble("Fx Value"); int colsToRead = 1; do { if (reader.EndOfStream) { throw new ArgumentException("Fx Data is in an unexpected format"); } line = reader.ReadLine(); values = line.Split(','); if (values[1].ConvertParameterToInt("Fx Data") == 0) { if (currentExchangeRate != values[2].ConvertParameterToDouble("Fx Value")) { throw new ArgumentException("Fx Data is in an unexpected format"); } break; } if (colsToRead > maxHorizon) { continue; } if (!string.Equals(values[0], "1") || values[1].ConvertParameterToInt("Fx Value") != colsToRead) { throw new ArgumentException("Fx Data is in an unexpected format"); } var data = new List <double>(); data.Add(values[2].ConvertParameterToDouble("Fx Value")); unstructuredData.Add(data); colsToRead++; } while (true); int currentSim = 2; var yearsRead = new Queue <int>(Enumerable.Range(1, colsToRead - 1)); int currentYear = 0; while (!reader.EndOfStream) { line = reader.ReadLine(); values = line.Split(','); // in case you have blank rows if (values.All(val => string.IsNullOrWhiteSpace(val))) { continue; } int simRead = values[0].ConvertParameterToInt("Fx Data"); int yearRead = values[1].ConvertParameterToInt("Fx Data"); if (yearRead > maxHorizon) { continue; } if (yearsRead.Count() == 0) { yearsRead = new Queue <int>(Enumerable.Range(1, colsToRead - 1)); currentSim++; if (currentSim > maxSim) { break; } if (!values[2].ConvertParameterToDouble("Fx Value").EqualsWithPrecision(currentExchangeRate)) { throw new ArgumentException("Current Exchange Rates do not match in ESG File"); } continue; } currentYear = yearsRead.Dequeue(); if (simRead != currentSim || yearRead != currentYear) { throw new ArgumentException("Fx Data is in an unexpected format"); } unstructuredData[currentYear - 1].Add(values[2].ConvertParameterToDouble("Fx Data")); } } var structuredData = unstructuredData.InvertEnumerableOrder(); var fxArray = new FxArray(structuredData, currentExchangeRate); _ = cache.TryAddItem(fxArray, out var hash, fullPath, maxHorizon, maxSim); return(hash); }
public void TestInitialiser() { _fxArray = null; _stochArray = null; }
public void TestCompletion() { _fxArray = null; _stochArray = null; }
//+ TestMethods private void a_valid_fxArray(double[][] rates, double currentFx) { _fxArray = new FxArray(rates, currentFx); }