diff --git a/.idea/.idea.EvoCalculator.Core/.idea/workspace.xml b/.idea/.idea.EvoCalculator.Core/.idea/workspace.xml
index f47f427..a2538c9 100644
--- a/.idea/.idea.EvoCalculator.Core/.idea/workspace.xml
+++ b/.idea/.idea.EvoCalculator.Core/.idea/workspace.xml
@@ -14,35 +14,10 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
@@ -53,22 +28,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
-
@@ -121,11 +112,11 @@
-
-
-
+
+
+
@@ -194,7 +185,7 @@
-
+
1602593830686
@@ -242,90 +233,90 @@
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
@@ -334,10 +325,10 @@
-
+
-
+
@@ -358,10 +349,10 @@
-
+
-
+
@@ -371,25 +362,34 @@
- file://$PROJECT_DIR$/EvoCalculator.Core.Calculation/Columns/SumColumn.cs
- 41
-
+ file://$PROJECT_DIR$/EvoCalculator.Core.Tests/Calculation/Columns/SumColumnTest.cs
+ 308
+
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/EvoCalculator.Core.Calculation/Columns/BaseColumnWithXIRR.cs b/EvoCalculator.Core.Calculation/Columns/BaseColumnWithXIRR.cs
index f6c3153..0002e64 100644
--- a/EvoCalculator.Core.Calculation/Columns/BaseColumnWithXIRR.cs
+++ b/EvoCalculator.Core.Calculation/Columns/BaseColumnWithXIRR.cs
@@ -7,7 +7,7 @@ namespace EvoCalculator.Core.Calculation.Columns
public class BaseColumnWithXIRR : BaseColumn
{
public double IRR { get; set; }
- private DateTime[] Dates { get; set; }
+ protected DateTime[] Dates { get; set; }
public BaseColumnWithXIRR(int count, DateTempColumn dateTempColumn) : base(count)
diff --git a/EvoCalculator.Core.Calculation/Columns/SumColumn.cs b/EvoCalculator.Core.Calculation/Columns/SumColumn.cs
index 015481a..e572815 100644
--- a/EvoCalculator.Core.Calculation/Columns/SumColumn.cs
+++ b/EvoCalculator.Core.Calculation/Columns/SumColumn.cs
@@ -19,14 +19,14 @@ namespace EvoCalculator.Core.Calculation.Columns
this._percentPaymentColumn = percentPaymentColumn;
}
- public void ComputeValues()
+ public void ComputeValues(double x)
{
Values[0] = -this._preparedValues.BaseCost;
Values[1] = this._preparedValues.FirstPaymentSum;
- for (var i = 3; i < Values.Length - 1; i++)
+ for (var i = 2; i < Values.Length - 1; i++)
{
- Values[i] = Values[2] * _percentPaymentColumn.Values[i] / 100;
+ Values[i] = x * _percentPaymentColumn.Values[i] / 100;
}
Values[^1] = _preparedValues.LastPaymentSum;
@@ -34,8 +34,8 @@ namespace EvoCalculator.Core.Calculation.Columns
public decimal Calculate(decimal inputVariable)
{
- Values[2] = Convert.ToDouble(inputVariable);
- this.ComputeValues();
+ var x = Convert.ToDouble(inputVariable);
+ this.ComputeValues(x);
var XIRR = new XIRR(Flows);
IRR = XIRR.GetResult();
@@ -46,7 +46,14 @@ namespace EvoCalculator.Core.Calculation.Columns
{
var goalSeek = new GoalSeek(this);
goalSeek.SeekResult(requiredIRR,
- new GoalSeekOptions(initialTineSpacing: 10000));
+ new GoalSeekOptions(
+ startingStabPoint: Convert.ToDecimal(this._preparedValues.BaseCost / this._preparedValues.Nmper)
+ , tineExplorePercentage: 10
+ // , maximumAttempts: 10000
+ // , initialTineSpacing: 1
+ // , focusPercentage: 100
+ // , trimFinalInputValue: true
+ ));
}
}
}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/SumColumnTest.cs b/EvoCalculator.Core.Tests/Calculation/Columns/SumColumnTest.cs
index 901e074..a13c135 100644
--- a/EvoCalculator.Core.Tests/Calculation/Columns/SumColumnTest.cs
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/SumColumnTest.cs
@@ -178,5 +178,135 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
var values = sumColumn.Values;
Assert.Equal(expected, values);
}
+
+ [Fact]
+ public void SumColumnTest2()
+ {
+ var preparedValues =
+ new PreparedValues()
+ {
+ BaseCost = 2500000,
+ FirstPaymentSum = 625000,
+ Nmper = 12,
+ LastPaymentSum = 25000,
+ IrrExpected = 0.304
+ };
+
+
+ var percentPaymentColumn = new PercentPaymentColumn(preparedValues.Nmper + 1)
+ {
+ Values = new[]
+ {
+ 0.00,
+ 0.00,
+ 100.00,
+ 100.00,
+ 100.00,
+ 100.00,
+ 100.00,
+ 100.00,
+ 100.00,
+ 100.00,
+ 100.00,
+ 100.00,
+ 0.00,
+ }
+ };
+
+ var dateTempColumn = new DateTempColumn(67)
+ {
+ Values = new[]
+ {
+ new DateTime(2020, 10, 19),
+ new DateTime(2020, 10, 19),
+ new DateTime(2020, 11, 19),
+ new DateTime(2020, 12, 19),
+ new DateTime(2021, 1, 19),
+ new DateTime(2021, 2, 19),
+ new DateTime(2021, 3, 19),
+ new DateTime(2021, 4, 19),
+ new DateTime(2021, 5, 19),
+ new DateTime(2021, 6, 19),
+ new DateTime(2021, 7, 19),
+ new DateTime(2021, 8, 19),
+ new DateTime(2021, 9, 19),
+ new DateTime(2021, 10, 19),
+ new DateTime(2021, 11, 19),
+ new DateTime(2021, 12, 19),
+ new DateTime(2022, 1, 19),
+ new DateTime(2022, 2, 19),
+ new DateTime(2022, 3, 19),
+ new DateTime(2022, 4, 19),
+ new DateTime(2022, 5, 19),
+ new DateTime(2022, 6, 19),
+ new DateTime(2022, 7, 19),
+ new DateTime(2022, 8, 19),
+ new DateTime(2022, 9, 19),
+ new DateTime(2022, 10, 19),
+ new DateTime(2022, 11, 19),
+ new DateTime(2022, 12, 19),
+ new DateTime(2023, 1, 19),
+ new DateTime(2023, 2, 19),
+ new DateTime(2023, 3, 19),
+ new DateTime(2023, 4, 19),
+ new DateTime(2023, 5, 19),
+ new DateTime(2023, 6, 19),
+ new DateTime(2023, 7, 19),
+ new DateTime(2023, 8, 19),
+ new DateTime(2023, 9, 19),
+ new DateTime(2023, 10, 19),
+ new DateTime(2023, 11, 19),
+ new DateTime(2023, 12, 19),
+ new DateTime(2024, 1, 19),
+ new DateTime(2024, 2, 19),
+ new DateTime(2024, 3, 19),
+ new DateTime(2024, 4, 19),
+ new DateTime(2024, 5, 19),
+ new DateTime(2024, 6, 19),
+ new DateTime(2024, 7, 19),
+ new DateTime(2024, 8, 19),
+ new DateTime(2024, 9, 19),
+ new DateTime(2024, 10, 19),
+ new DateTime(2024, 11, 19),
+ new DateTime(2024, 12, 19),
+ new DateTime(2025, 1, 19),
+ new DateTime(2025, 2, 19),
+ new DateTime(2025, 3, 19),
+ new DateTime(2025, 4, 19),
+ new DateTime(2025, 5, 19),
+ new DateTime(2025, 6, 19),
+ new DateTime(2025, 7, 19),
+ new DateTime(2025, 8, 19),
+ new DateTime(2025, 9, 19),
+ }
+ };
+
+
+ var expected = new[]
+ {
+ -2500000,
+ 625000,
+ 209113.783333333,
+ 209113.783333333,
+ 209113.783333333,
+ 209113.783333333,
+ 209113.783333333,
+ 209113.783333333,
+ 209113.783333333,
+ 209113.783333333,
+ 209113.783333333,
+ 209113.783333333,
+ 25000
+ };
+
+ var sumColumn = new SumColumn(
+ preparedValues.Nmper + 1
+ , dateTempColumn
+ , preparedValues
+ , percentPaymentColumn);
+ sumColumn.ComputeValues(Convert.ToDecimal(preparedValues.IrrExpected));
+ var values = sumColumn.Values;
+ Assert.Equal(expected, values);
+ }
}
}
\ No newline at end of file