public SolarVsUtilityProjection CalculateFutureProjection( IYearlyKwhUsage solarEstimate, ProjectionParameters projectionParameters ) { var projection = new List <IYearlyKwhUsageCompare>(); var utilityEstimate = projectionParameters.UtilityYear; var paidOffSolarEstimate = new YearlyKwhUsageFromAnnual( 0, solarEstimate.TotalKiloWattHours ); // Each year to project for (int i = 0; i < projectionParameters.YearsToProject; i++) { projection.Add(new YearlyKwhUsageCompare( FormulaHelpers.CompoundInterest(utilityEstimate.TotalCost, projectionParameters.PercentIncreasePerYear, 1, i), utilityEstimate.TotalKiloWattHours, i, // After financeYears, solar panels are no longer paid for i < projectionParameters.FinanceYears ? solarEstimate : paidOffSolarEstimate )); } return(new SolarVsUtilityProjection(solarEstimate, projection, projectionParameters.FinanceYears)); }
public void ShouldMatchActualUsageFromSampleData() { _subject = new YearlyKwhUsageFromAnnual(2357.22, 17019); // Pulling expected values from spreadsheet calculations Assert.AreEqual(196.435, _subject.AverageCostPerMonth, .01, nameof(_subject.AverageCostPerMonth)); Assert.AreEqual(0.1385052001, _subject.AverageCostKiloWattHour, .01, nameof(_subject.AverageCostKiloWattHour)); }