From 14f99e0f725486148d6ee410d12dc81cf2c0896f Mon Sep 17 00:00:00 2001 From: Chika Date: Mon, 26 Oct 2020 16:06:07 +0300 Subject: [PATCH] new column type | new columns --- .../.idea/contentModel.xml | 23 +- .../.idea/workspace.xml | 250 ++++++---- .../Columns/BaseColumnWithNominal.cs | 13 + .../Columns/BaseColumnWithSum.cs | 2 +- .../Columns/BaseColumnWithXIRR.cs | 2 +- .../Columns/BaseColumnWithXNPV.cs | 2 +- .../Columns/CashflowLeasingColumn.cs | 2 - .../Columns/CashflowMSFOColumn.cs | 4 +- .../Columns/CashflowNPVColumn.cs | 28 ++ .../Columns/DeprecationLDColumn.cs | 3 +- .../Columns/ExpensesColumn.cs | 4 +- .../Columns/IRRGrColumn.cs | 18 + .../Columns/InsuranceBonusExpensesColumn.cs | 22 +- .../Columns/InterestColumn.cs | 15 + .../Columns/NIColumn.cs | 18 + .../Columns/NPVColumn.cs | 17 + .../Columns/NPVWeightColumn.cs | 23 + .../Columns/NSIBBruttoGrColumn.cs | 2 +- .../Columns/NSIBExpensesColumn.cs | 4 +- .../Columns/PercentPaymentColumn.cs | 5 +- .../Columns/SumColumn.cs | 5 +- .../Columns/SumCurrentColumn.cs | 19 + .../Columns/SumCurrentInterestColumn.cs | 16 + .../Columns/SumCurrentNegativeColumn.cs | 19 + .../Columns/SumCurrentTLMColumn.cs | 21 + .../Columns/SumRepaymentColumn.cs | 22 + .../Columns/TaxColumn.cs | 4 +- ...rensesColumn.cs => TransExpensesColumn.cs} | 4 +- .../Columns/CashflowLeasingTests.cs | 16 +- .../Calculation/Columns/CashflowMSFOTests.cs | 27 +- .../Calculation/Columns/CashflowNPV.cs | 467 ++++++++++++++++++ .../Calculation/Columns/DateColumnTests.cs | 1 - .../Calculation/Columns/DeprecationLDTests.cs | 10 +- .../Calculation/Columns/DeprecationLPTests.cs | 18 +- .../Calculation/Columns/DeprecationTests.cs | 6 +- .../Calculation/Columns/ExpensesTests.cs | 26 +- .../Calculation/Columns/GPSExpensesTests.cs | 4 +- .../Calculation/Columns/GPS_GrTests.cs | 2 +- .../Calculation/Columns/IRRGr.cs | 205 ++++++++ .../Columns/InsuranceBonusExpensesTests.cs | 2 +- .../Calculation/Columns/Interest.cs | 164 ++++++ .../Calculation/Columns/NI.cs | 164 ++++++ .../Calculation/Columns/NPV.cs | 241 +++++++++ .../Columns/NPVBonusExpensesTests.cs | 6 +- .../Calculation/Columns/NPVWeight.cs | 172 +++++++ .../Calculation/Columns/NSIBBruttoGrTests.cs | 4 +- .../Calculation/Columns/NSIBExpensesTests.cs | 8 +- .../Calculation/Columns/SumCurrent.cs | 89 ++++ .../Calculation/Columns/SumCurrentInterest.cs | 88 ++++ .../Calculation/Columns/SumCurrentNegative.cs | 89 ++++ .../Calculation/Columns/SumCurrentTLM.cs | 89 ++++ .../Calculation/Columns/SumRepaymentColumn.cs | 192 +++++++ .../Calculation/Columns/TLMExpensesTests.cs | 4 +- .../Calculation/Columns/TLM_GrTests.cs | 2 +- .../Calculation/Columns/TaxColumnTests.cs | 2 +- .../Columns/TransExprensesTests.cs | 4 +- .../Calculation/Columns/VATColumnTests.cs | 4 +- .../Controllers/v1/CalculationController.cs | 2 +- 58 files changed, 2467 insertions(+), 208 deletions(-) create mode 100644 EvoCalculator.Core.Calculation/Columns/BaseColumnWithNominal.cs create mode 100644 EvoCalculator.Core.Calculation/Columns/CashflowNPVColumn.cs create mode 100644 EvoCalculator.Core.Calculation/Columns/IRRGrColumn.cs create mode 100644 EvoCalculator.Core.Calculation/Columns/InterestColumn.cs create mode 100644 EvoCalculator.Core.Calculation/Columns/NIColumn.cs create mode 100644 EvoCalculator.Core.Calculation/Columns/NPVColumn.cs create mode 100644 EvoCalculator.Core.Calculation/Columns/NPVWeightColumn.cs create mode 100644 EvoCalculator.Core.Calculation/Columns/SumCurrentColumn.cs create mode 100644 EvoCalculator.Core.Calculation/Columns/SumCurrentInterestColumn.cs create mode 100644 EvoCalculator.Core.Calculation/Columns/SumCurrentNegativeColumn.cs create mode 100644 EvoCalculator.Core.Calculation/Columns/SumCurrentTLMColumn.cs create mode 100644 EvoCalculator.Core.Calculation/Columns/SumRepaymentColumn.cs rename EvoCalculator.Core.Calculation/Columns/{TransExprensesColumn.cs => TransExpensesColumn.cs} (82%) create mode 100644 EvoCalculator.Core.Tests/Calculation/Columns/CashflowNPV.cs create mode 100644 EvoCalculator.Core.Tests/Calculation/Columns/IRRGr.cs create mode 100644 EvoCalculator.Core.Tests/Calculation/Columns/Interest.cs create mode 100644 EvoCalculator.Core.Tests/Calculation/Columns/NI.cs create mode 100644 EvoCalculator.Core.Tests/Calculation/Columns/NPV.cs create mode 100644 EvoCalculator.Core.Tests/Calculation/Columns/NPVWeight.cs create mode 100644 EvoCalculator.Core.Tests/Calculation/Columns/SumCurrent.cs create mode 100644 EvoCalculator.Core.Tests/Calculation/Columns/SumCurrentInterest.cs create mode 100644 EvoCalculator.Core.Tests/Calculation/Columns/SumCurrentNegative.cs create mode 100644 EvoCalculator.Core.Tests/Calculation/Columns/SumCurrentTLM.cs create mode 100644 EvoCalculator.Core.Tests/Calculation/Columns/SumRepaymentColumn.cs diff --git a/.idea/.idea.EvoCalculator.Core/.idea/contentModel.xml b/.idea/.idea.EvoCalculator.Core/.idea/contentModel.xml index 8762407..379e082 100644 --- a/.idea/.idea.EvoCalculator.Core/.idea/contentModel.xml +++ b/.idea/.idea.EvoCalculator.Core/.idea/contentModel.xml @@ -45,12 +45,14 @@ + + @@ -61,21 +63,30 @@ + + + + + + + + + - + @@ -152,6 +163,7 @@ + @@ -163,15 +175,24 @@ + + + + + + + + + diff --git a/.idea/.idea.EvoCalculator.Core/.idea/workspace.xml b/.idea/.idea.EvoCalculator.Core/.idea/workspace.xml index 61aae1a..2331513 100644 --- a/.idea/.idea.EvoCalculator.Core/.idea/workspace.xml +++ b/.idea/.idea.EvoCalculator.Core/.idea/workspace.xml @@ -14,12 +14,52 @@ - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -125,7 +166,7 @@ - + @@ -181,7 +222,8 @@ - + + 1602593830686 @@ -265,90 +307,90 @@ - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + @@ -361,18 +403,18 @@ - + - + - + - + @@ -381,22 +423,26 @@ + + + + - + - + - + - + @@ -427,6 +473,32 @@ diff --git a/EvoCalculator.Core.Calculation/Columns/BaseColumnWithNominal.cs b/EvoCalculator.Core.Calculation/Columns/BaseColumnWithNominal.cs new file mode 100644 index 0000000..0fba824 --- /dev/null +++ b/EvoCalculator.Core.Calculation/Columns/BaseColumnWithNominal.cs @@ -0,0 +1,13 @@ +using System; + +namespace EvoCalculator.Core.Calculation.Columns +{ + public class BaseColumnWithNominal : BaseColumnWithXIRR + { + public BaseColumnWithNominal(int count, DateTempColumn dateTempColumn) : base(count, dateTempColumn) + { + } + + public double Nominal => (Math.Pow(IRR + 1, (double) 1 / 12) - 1) * 12; + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/Columns/BaseColumnWithSum.cs b/EvoCalculator.Core.Calculation/Columns/BaseColumnWithSum.cs index 58afc35..0be37c7 100644 --- a/EvoCalculator.Core.Calculation/Columns/BaseColumnWithSum.cs +++ b/EvoCalculator.Core.Calculation/Columns/BaseColumnWithSum.cs @@ -4,7 +4,7 @@ namespace EvoCalculator.Core.Calculation.Columns { public class BaseColumnWithSum : BaseColumn { - protected BaseColumnWithSum(int count) : base(count) + public BaseColumnWithSum(int count) : base(count) { } diff --git a/EvoCalculator.Core.Calculation/Columns/BaseColumnWithXIRR.cs b/EvoCalculator.Core.Calculation/Columns/BaseColumnWithXIRR.cs index 890cc75..56f6d81 100644 --- a/EvoCalculator.Core.Calculation/Columns/BaseColumnWithXIRR.cs +++ b/EvoCalculator.Core.Calculation/Columns/BaseColumnWithXIRR.cs @@ -6,7 +6,7 @@ namespace EvoCalculator.Core.Calculation.Columns { public class BaseColumnWithXIRR : BaseColumn { - protected BaseColumnWithXIRR(int count, DateTempColumn dateTempColumn) : base(count) + public BaseColumnWithXIRR(int count, DateTempColumn dateTempColumn) : base(count) { Dates = dateTempColumn.Values; } diff --git a/EvoCalculator.Core.Calculation/Columns/BaseColumnWithXNPV.cs b/EvoCalculator.Core.Calculation/Columns/BaseColumnWithXNPV.cs index 4b7de86..91a30ff 100644 --- a/EvoCalculator.Core.Calculation/Columns/BaseColumnWithXNPV.cs +++ b/EvoCalculator.Core.Calculation/Columns/BaseColumnWithXNPV.cs @@ -8,7 +8,7 @@ namespace EvoCalculator.Core.Calculation.Columns { private readonly double rate; - protected BaseColumnWithXNPV(int count, DateTempColumn dateTempColumn, double rate) : base(count) + public BaseColumnWithXNPV(int count, DateTempColumn dateTempColumn, double rate) : base(count) { Dates = dateTempColumn.Values; this.rate = rate; diff --git a/EvoCalculator.Core.Calculation/Columns/CashflowLeasingColumn.cs b/EvoCalculator.Core.Calculation/Columns/CashflowLeasingColumn.cs index 47f201b..7a765aa 100644 --- a/EvoCalculator.Core.Calculation/Columns/CashflowLeasingColumn.cs +++ b/EvoCalculator.Core.Calculation/Columns/CashflowLeasingColumn.cs @@ -15,13 +15,11 @@ namespace EvoCalculator.Core.Calculation.Columns Values[0] = -preparedValues.AcquisitionExpenses; Values[1] = sumColumn.Values[1]; for (var i = 2; i < Values.Length; i++) - { Values[i] = sumColumn.Values[i] + negativeCashflowColumn.Values[i] - nsibBruttoGrColumn.Values[i] - tlmGrColumn.Values[i] - gpsGrColumn.Values[i]; - } } } } \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/Columns/CashflowMSFOColumn.cs b/EvoCalculator.Core.Calculation/Columns/CashflowMSFOColumn.cs index 6ed441b..38fa216 100644 --- a/EvoCalculator.Core.Calculation/Columns/CashflowMSFOColumn.cs +++ b/EvoCalculator.Core.Calculation/Columns/CashflowMSFOColumn.cs @@ -2,7 +2,7 @@ namespace EvoCalculator.Core.Calculation.Columns { - public class CashflowMSFOColumn : BaseColumnWithXIRR + public class CashflowMSFOColumn : BaseColumnWithNominal { public CashflowMSFOColumn(int count, DateTempColumn dateTempColumn) : base(count, dateTempColumn) { @@ -16,7 +16,6 @@ namespace EvoCalculator.Core.Calculation.Columns Values[0] = -preparedValues.AcquisitionExpenses; Values[1] = sumColumn.Values[1] + npvBonusExpensesColumn.Values[1] + agentComissionExpensesColumn.Values[1]; for (var i = 2; i < Values.Length; i++) - { Values[i] = sumColumn.Values[i] + negativeCashflowColumn.Values[i] - nsibBruttoGrColumn.Values[i] @@ -24,7 +23,6 @@ namespace EvoCalculator.Core.Calculation.Columns - gpsGrColumn.Values[i] + npvBonusExpensesColumn.Values[i] + agentComissionExpensesColumn.Values[i]; - } } } } \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/Columns/CashflowNPVColumn.cs b/EvoCalculator.Core.Calculation/Columns/CashflowNPVColumn.cs new file mode 100644 index 0000000..130cd17 --- /dev/null +++ b/EvoCalculator.Core.Calculation/Columns/CashflowNPVColumn.cs @@ -0,0 +1,28 @@ +using EvoCalculator.Core.Models.Calculation.Models.Prepared; + +namespace EvoCalculator.Core.Calculation.Columns +{ + public class CashflowNPVColumn : BaseColumn + { + public CashflowNPVColumn(int count) : base(count) + { + } + + public void ComputeValues(PreparedValues preparedValues, SumColumn sumColumn, + NPVBonusExpensesColumn npvBonusExpensesColumn, AgentComissionExpensesColumn agentComissionExpensesColumn, + TaxColumn taxColumn, NSIBExpensesColumn nsibExpensesColumn, NegativeCashflowColumn negativeCashflowColumn, + RatExpensesColumn ratExpensesColumn, TransExpensesColumn transExpensesColumn, + TLMExpensesColumn tlmExpensesColumn, GPSExpensesColumn gpsExpensesColumn) + { + Values[0] = -preparedValues.AcquisitionExpenses; + Values[1] = sumColumn.Values[1] + npvBonusExpensesColumn.Values[1] + + agentComissionExpensesColumn.Values[1] - taxColumn.Values[1] + nsibExpensesColumn.Values[1]; + + for (var i = 2; i < Values.Length; i++) + Values[i] = sumColumn.Values[i] + negativeCashflowColumn.Values[i] + npvBonusExpensesColumn.Values[i] + + agentComissionExpensesColumn.Values[i] + ratExpensesColumn.Values[i] - taxColumn.Values[i] - + transExpensesColumn.Values[i] + nsibExpensesColumn.Values[i] + tlmExpensesColumn.Values[i] + + gpsExpensesColumn.Values[i]; + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/Columns/DeprecationLDColumn.cs b/EvoCalculator.Core.Calculation/Columns/DeprecationLDColumn.cs index a9300ee..982b9fa 100644 --- a/EvoCalculator.Core.Calculation/Columns/DeprecationLDColumn.cs +++ b/EvoCalculator.Core.Calculation/Columns/DeprecationLDColumn.cs @@ -1,5 +1,4 @@ -using System; -using System.Linq; +using System.Linq; using EvoCalculator.Core.Models.Calculation.Models.Prepared; namespace EvoCalculator.Core.Calculation.Columns diff --git a/EvoCalculator.Core.Calculation/Columns/ExpensesColumn.cs b/EvoCalculator.Core.Calculation/Columns/ExpensesColumn.cs index 339a5b1..25022da 100644 --- a/EvoCalculator.Core.Calculation/Columns/ExpensesColumn.cs +++ b/EvoCalculator.Core.Calculation/Columns/ExpensesColumn.cs @@ -7,7 +7,7 @@ } public void ComputeValues(AgentComissionExpensesColumn agentComissionExpensesColumn, - RatExpensesColumn ratExpensesColumn, TransExprensesColumn transExprensesColumn, + RatExpensesColumn ratExpensesColumn, TransExpensesColumn transExpensesColumn, NSIBExpensesColumn nsibExpensesColumn, TLMExpensesColumn tlmExpensesColumn, GPSExpensesColumn gpsExpensesColumn, RegistrExpensesColumn registrExpensesColumn, InsuranceBonusExpensesColumn insuranceBonusExpensesColumn, @@ -17,7 +17,7 @@ Values[i] = agentComissionExpensesColumn.Values[i] + ratExpensesColumn.Values[i] - + transExprensesColumn.Values[i] + + transExpensesColumn.Values[i] + nsibExpensesColumn.Values[i] + tlmExpensesColumn.Values[i] + gpsExpensesColumn.Values[i] diff --git a/EvoCalculator.Core.Calculation/Columns/IRRGrColumn.cs b/EvoCalculator.Core.Calculation/Columns/IRRGrColumn.cs new file mode 100644 index 0000000..d794049 --- /dev/null +++ b/EvoCalculator.Core.Calculation/Columns/IRRGrColumn.cs @@ -0,0 +1,18 @@ +using System; + +namespace EvoCalculator.Core.Calculation.Columns +{ + public class IRRGrColumn : BaseColumn + { + public IRRGrColumn(int count) : base(count) + { + } + + public void ComputeValues(DateTempColumn dateTempColumn, CashflowColumn cashflowColumn) + { + for (var i = 1; i < Values.Length; i++) + Values[i] = Math.Pow(1 + cashflowColumn.IRR, + (double) (dateTempColumn.Values[i] - dateTempColumn.Values[i - 1]).Days / 365) - 1; + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/Columns/InsuranceBonusExpensesColumn.cs b/EvoCalculator.Core.Calculation/Columns/InsuranceBonusExpensesColumn.cs index 8f1be16..3b7b7df 100644 --- a/EvoCalculator.Core.Calculation/Columns/InsuranceBonusExpensesColumn.cs +++ b/EvoCalculator.Core.Calculation/Columns/InsuranceBonusExpensesColumn.cs @@ -11,36 +11,24 @@ namespace EvoCalculator.Core.Calculation.Columns public void ComputeValues(PreparedValues preparedValues, Constants.Calculation constants) { if (preparedValues.NmperInsurance < constants.MaxOnePolicePeriod) - { Values[2] = preparedValues.InsuranceBonus; - } else - { /* - * +1 - компенсация того, что считается с 0 позиции - */ + * +1 - компенсация того, что считается с 0 позиции + */ for (var i = 2; i < Values.Length; i += i == 2 ? 11 : 12) if (preparedValues.NmperInsurance - i >= 3) { if ( - (preparedValues.NmperInsurance == constants.MaxOnePolicePeriod && i <= 3) || - (preparedValues.NmperInsurance > constants.MaxOnePolicePeriod && - preparedValues.NmperInsurance - i > constants.MaxOnePolicePeriod) + preparedValues.NmperInsurance == constants.MaxOnePolicePeriod && i <= 3 || + preparedValues.NmperInsurance > constants.MaxOnePolicePeriod && + preparedValues.NmperInsurance - i > constants.MaxOnePolicePeriod ) - { Values[i] = preparedValues.InsuranceBonus / preparedValues.NmperInsurance * 12; - } else - { Values[i] = preparedValues.InsuranceBonus / preparedValues.NmperInsurance * (preparedValues.NmperInsurance - i + 1); - } } - else - { - // 0 - } - } Values[0] = Sum; } diff --git a/EvoCalculator.Core.Calculation/Columns/InterestColumn.cs b/EvoCalculator.Core.Calculation/Columns/InterestColumn.cs new file mode 100644 index 0000000..62ab046 --- /dev/null +++ b/EvoCalculator.Core.Calculation/Columns/InterestColumn.cs @@ -0,0 +1,15 @@ +namespace EvoCalculator.Core.Calculation.Columns +{ + public class InterestColumn : BaseColumn + { + public InterestColumn(int count) : base(count) + { + } + + public void ComputeValues(IRRGrColumn irrGrColumn, NIColumn niColumn) + { + for (var i = 2; i < Values.Length; i++) + Values[i] = niColumn.Values[i - 1] * (decimal) irrGrColumn.Values[i]; + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/Columns/NIColumn.cs b/EvoCalculator.Core.Calculation/Columns/NIColumn.cs new file mode 100644 index 0000000..e6f7369 --- /dev/null +++ b/EvoCalculator.Core.Calculation/Columns/NIColumn.cs @@ -0,0 +1,18 @@ +using EvoCalculator.Core.Models.Calculation.Models.Prepared; + +namespace EvoCalculator.Core.Calculation.Columns +{ + public class NIColumn : BaseColumn + { + public NIColumn(int count) : base(count) + { + } + + public void ComputeValues(PreparedValues preparedValues, CashflowColumn cashflowColumn, IRRGrColumn irrGrColumn) + { + Values[1] = preparedValues.NiAtInception; + for (var i = 2; i < Values.Length; i++) + Values[i] = Values[i - 1] + Values[i - 1] * (decimal) irrGrColumn.Values[i] - cashflowColumn.Values[i]; + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/Columns/NPVColumn.cs b/EvoCalculator.Core.Calculation/Columns/NPVColumn.cs new file mode 100644 index 0000000..f6a5c20 --- /dev/null +++ b/EvoCalculator.Core.Calculation/Columns/NPVColumn.cs @@ -0,0 +1,17 @@ +namespace EvoCalculator.Core.Calculation.Columns +{ + public class NPVColumn : BaseColumnWithNominal + { + public NPVColumn(int count, DateTempColumn dateTempColumn) : base(count, dateTempColumn) + { + } + + public void ComputeValues(CashflowNPVColumn cashflowNpvColumn, NPVWeightColumn npvWeightColumn) + { + for (var i = 0; i < Values.Length; i++) + { + Values[i] = cashflowNpvColumn.Values[i] * (decimal) npvWeightColumn.Values[i]; + } + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/Columns/NPVWeightColumn.cs b/EvoCalculator.Core.Calculation/Columns/NPVWeightColumn.cs new file mode 100644 index 0000000..0cd2279 --- /dev/null +++ b/EvoCalculator.Core.Calculation/Columns/NPVWeightColumn.cs @@ -0,0 +1,23 @@ +using System; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; + +namespace EvoCalculator.Core.Calculation.Columns +{ + public class NPVWeightColumn : BaseColumn + { + public NPVWeightColumn(int count) : base(count) + { + } + + public void ComputeValues(PreparedValues preparedValues, DateTempColumn dateTempColumn) + { + Values[0] = 1; + for (var i = 1; i < Values.Length; i++) + { + Values[i] = Values[i - 1] / Math.Pow( + 1 + preparedValues.LoanRate / 365, + (dateTempColumn.Values[i] - dateTempColumn.Values[i - 1]).Days); + } + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/Columns/NSIBBruttoGrColumn.cs b/EvoCalculator.Core.Calculation/Columns/NSIBBruttoGrColumn.cs index 770595e..aec37e5 100644 --- a/EvoCalculator.Core.Calculation/Columns/NSIBBruttoGrColumn.cs +++ b/EvoCalculator.Core.Calculation/Columns/NSIBBruttoGrColumn.cs @@ -12,7 +12,7 @@ namespace EvoCalculator.Core.Calculation.Columns { Values[1] = 0; for (var i = 2; i < Values.Length; i++) - Values[i] = (decimal) preparedValues.NsibBrutto / (preparedValues.Nmper - 1); + Values[i] = preparedValues.NsibBrutto / (preparedValues.Nmper - 1); Values[0] = Sum; } diff --git a/EvoCalculator.Core.Calculation/Columns/NSIBExpensesColumn.cs b/EvoCalculator.Core.Calculation/Columns/NSIBExpensesColumn.cs index 3e7054f..343fafb 100644 --- a/EvoCalculator.Core.Calculation/Columns/NSIBExpensesColumn.cs +++ b/EvoCalculator.Core.Calculation/Columns/NSIBExpensesColumn.cs @@ -16,10 +16,10 @@ namespace EvoCalculator.Core.Calculation.Columns if (preparedValues.Nmper - i >= 3) { if (preparedValues.Nmper - i < 16 - 1) - Values[i] = -(decimal) preparedValues.NsibNetto / preparedValues.Nmper * + Values[i] = -preparedValues.NsibNetto / preparedValues.Nmper * (preparedValues.Nmper - i + 1); else - Values[i] = -(decimal) preparedValues.NsibNetto / preparedValues.Nmper * 12; + Values[i] = -preparedValues.NsibNetto / preparedValues.Nmper * 12; } else { diff --git a/EvoCalculator.Core.Calculation/Columns/PercentPaymentColumn.cs b/EvoCalculator.Core.Calculation/Columns/PercentPaymentColumn.cs index 5afc858..1899862 100644 --- a/EvoCalculator.Core.Calculation/Columns/PercentPaymentColumn.cs +++ b/EvoCalculator.Core.Calculation/Columns/PercentPaymentColumn.cs @@ -12,10 +12,7 @@ namespace EvoCalculator.Core.Calculation.Columns { Values[0] = 0; Values[1] = 0; - for (var i = 2; i < Values.Length - 1; i++) - { - Values[i] = preparedPayments.Rows[i - 1].PercentPayment; - } + for (var i = 2; i < Values.Length - 1; i++) Values[i] = preparedPayments.Rows[i - 1].PercentPayment; Values[^1] = 0; } diff --git a/EvoCalculator.Core.Calculation/Columns/SumColumn.cs b/EvoCalculator.Core.Calculation/Columns/SumColumn.cs index d3ccd9a..5b107a7 100644 --- a/EvoCalculator.Core.Calculation/Columns/SumColumn.cs +++ b/EvoCalculator.Core.Calculation/Columns/SumColumn.cs @@ -28,10 +28,7 @@ namespace EvoCalculator.Core.Calculation.Columns Values[0] = -_preparedValues.BaseCost; Values[1] = _preparedValues.FirstPaymentSum; - for (var i = 2; i < Values.Length - 1; i++) - { - Values[i] = x * (decimal) _percentPaymentColumn.Values[i] / 100; - } + for (var i = 2; i < Values.Length - 1; i++) Values[i] = x * (decimal) _percentPaymentColumn.Values[i] / 100; Values[^1] = _preparedValues.LastPaymentSum; } diff --git a/EvoCalculator.Core.Calculation/Columns/SumCurrentColumn.cs b/EvoCalculator.Core.Calculation/Columns/SumCurrentColumn.cs new file mode 100644 index 0000000..02e588d --- /dev/null +++ b/EvoCalculator.Core.Calculation/Columns/SumCurrentColumn.cs @@ -0,0 +1,19 @@ +using System.Linq; + +namespace EvoCalculator.Core.Calculation.Columns +{ + public class SumCurrentColumn : BaseColumn + { + public SumCurrentColumn(int count) : base(count) + { + } + + public void ComputeValues(SumWithVATColumn sumWithVatColumn) + { + for (var i = 1; i < Values.Length; i++) + { + Values[i] = sumWithVatColumn.Values.Skip(i).Sum(x => x); + } + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/Columns/SumCurrentInterestColumn.cs b/EvoCalculator.Core.Calculation/Columns/SumCurrentInterestColumn.cs new file mode 100644 index 0000000..b7a8bbb --- /dev/null +++ b/EvoCalculator.Core.Calculation/Columns/SumCurrentInterestColumn.cs @@ -0,0 +1,16 @@ +using System.Linq; + +namespace EvoCalculator.Core.Calculation.Columns +{ + public class SumCurrentInterestColumn : BaseColumn + { + public SumCurrentInterestColumn(int count) : base(count) + { + } + + public void ComputeValues(InterestColumn interestColumn) + { + for (var i = 1; i < Values.Length; i++) Values[i] = interestColumn.Values.Skip(i).Sum(x => x); + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/Columns/SumCurrentNegativeColumn.cs b/EvoCalculator.Core.Calculation/Columns/SumCurrentNegativeColumn.cs new file mode 100644 index 0000000..57ed362 --- /dev/null +++ b/EvoCalculator.Core.Calculation/Columns/SumCurrentNegativeColumn.cs @@ -0,0 +1,19 @@ +using System.Linq; + +namespace EvoCalculator.Core.Calculation.Columns +{ + public class SumCurrentNegativeColumn : BaseColumn + { + public SumCurrentNegativeColumn(int count) : base(count) + { + } + + public void ComputeValues(NegativeCashflowColumn negativeCashflowColumn) + { + for (var i = 1; i < Values.Length; i++) + { + Values[i] = negativeCashflowColumn.Values.Skip(i).Sum(x => x); + } + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/Columns/SumCurrentTLMColumn.cs b/EvoCalculator.Core.Calculation/Columns/SumCurrentTLMColumn.cs new file mode 100644 index 0000000..b38a406 --- /dev/null +++ b/EvoCalculator.Core.Calculation/Columns/SumCurrentTLMColumn.cs @@ -0,0 +1,21 @@ +using System.Linq; + +namespace EvoCalculator.Core.Calculation.Columns +{ + public class SumCurrentTLMColumn : BaseColumn + { + public SumCurrentTLMColumn(int count) : base(count) + { + } + + public void ComputeValues(TLM_GrColumn tlmGrColumn) + { + const int FIRST_YEAR_NUM = 13; + for (var i = 1; i < Values.Length; i++) + if (i < FIRST_YEAR_NUM) + Values[i] = tlmGrColumn.Values.Skip(FIRST_YEAR_NUM).Sum(x => x); + else + Values[i] = tlmGrColumn.Values.Skip(i + 1).Sum(x => x); + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/Columns/SumRepaymentColumn.cs b/EvoCalculator.Core.Calculation/Columns/SumRepaymentColumn.cs new file mode 100644 index 0000000..fd6f38e --- /dev/null +++ b/EvoCalculator.Core.Calculation/Columns/SumRepaymentColumn.cs @@ -0,0 +1,22 @@ +using EvoCalculator.Core.Models.Calculation.Models.Prepared; + +namespace EvoCalculator.Core.Calculation.Columns +{ + public class SumRepaymentColumn : BaseColumn + { + public SumRepaymentColumn(int count) : base(count) + { + } + + public void ComputeValues(Constants.Calculation calculation, PreparedValues preparedValues, + SumCurrentColumn sumCurrentColumn, SumCurrentNegativeColumn sumCurrentNegativeColumn, + SumCurrentInterestColumn sumCurrentInterestColumn, SumCurrentTLMColumn sumCurrentTlmColumn) + { + for (var i = 2; i < Values.Length; i++) + Values[i] = sumCurrentColumn.Values[i] + sumCurrentNegativeColumn.Values[i] - + sumCurrentTlmColumn.Values[i] * (1 + (decimal) calculation.VatValue) - + sumCurrentInterestColumn.Values[i] * (1 + (decimal) calculation.VatValue) * + (decimal) preparedValues.Repayment; + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/Columns/TaxColumn.cs b/EvoCalculator.Core.Calculation/Columns/TaxColumn.cs index ceff258..fd5800b 100644 --- a/EvoCalculator.Core.Calculation/Columns/TaxColumn.cs +++ b/EvoCalculator.Core.Calculation/Columns/TaxColumn.cs @@ -9,7 +9,7 @@ public void ComputeValues(Constants.Calculation constants, SumColumn sumColumn, AcceptInsuranceColumn acceptInsuranceColumn, DeprecationColumn deprecationColumn, RatExpensesColumn ratExpensesColumn, RegistrExpensesColumn registrExpensesColumn, - ComissionBonusExpensesColumn comissionBonusExpensesColumn, TransExprensesColumn transExprensesColumn, + ComissionBonusExpensesColumn comissionBonusExpensesColumn, TransExpensesColumn transExpensesColumn, NPVBonusExpensesColumn npvBonusExpensesColumn, AgentComissionExpensesColumn agentComissionExpensesColumn, InsuranceBonusExpensesColumn insuranceBonusExpensesColumn, TLMExpensesColumn tlmExpensesColumn, GPSExpensesColumn gpsExpensesColumn) @@ -21,7 +21,7 @@ + ratExpensesColumn.Values[i] + registrExpensesColumn.Values[i] + comissionBonusExpensesColumn.Values[i] - + transExprensesColumn.Values[i] + + transExpensesColumn.Values[i] + npvBonusExpensesColumn.Values[i] + agentComissionExpensesColumn.Values[i] + insuranceBonusExpensesColumn.Values[i] diff --git a/EvoCalculator.Core.Calculation/Columns/TransExprensesColumn.cs b/EvoCalculator.Core.Calculation/Columns/TransExpensesColumn.cs similarity index 82% rename from EvoCalculator.Core.Calculation/Columns/TransExprensesColumn.cs rename to EvoCalculator.Core.Calculation/Columns/TransExpensesColumn.cs index 4b38728..fe7424f 100644 --- a/EvoCalculator.Core.Calculation/Columns/TransExprensesColumn.cs +++ b/EvoCalculator.Core.Calculation/Columns/TransExpensesColumn.cs @@ -3,9 +3,9 @@ using EvoCalculator.Core.Models.Calculation.Models.Prepared; namespace EvoCalculator.Core.Calculation.Columns { - public class TransExprensesColumn : BaseColumnWithSum + public class TransExpensesColumn : BaseColumnWithSum { - public TransExprensesColumn(int count) : base(count) + public TransExpensesColumn(int count) : base(count) { } diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/CashflowLeasingTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/CashflowLeasingTests.cs index b4dd733..30eb07b 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/CashflowLeasingTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/Columns/CashflowLeasingTests.cs @@ -10,7 +10,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns [Fact] public void CashflowLeasingTest1() { - var preparedValues = new PreparedValues() + var preparedValues = new PreparedValues { Nmper = 25, AcquisitionExpenses = 2507300 @@ -86,7 +86,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns new DateTime(2023, 12, 31), new DateTime(2024, 1, 31), new DateTime(2024, 2, 29), - new DateTime(2024, 3, 31), + new DateTime(2024, 3, 31) } }; @@ -119,7 +119,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns 108000, 96000, 96000, - 25000, + 25000 } }; @@ -152,7 +152,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns 0, 0, 0, - 0, + 0 } }; @@ -185,7 +185,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns 1113.75868055556m, 1113.75868055556m, 1113.75868055556m, - 1113.75868055556m, + 1113.75868055556m } }; @@ -218,7 +218,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns 900m, 900m, 900m, - 900m, + 900m } }; @@ -252,7 +252,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns 1000m, 1000m, 1000m, - 1000m, + 1000m } }; @@ -290,7 +290,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns 104986.241319444m, 92986.2413194444m, 92986.2413194444m, - 21986.2413194444m, + 21986.2413194444m }; diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/CashflowMSFOTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/CashflowMSFOTests.cs index f3130de..5569f44 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/CashflowMSFOTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/Columns/CashflowMSFOTests.cs @@ -5,12 +5,12 @@ using Xunit; namespace EvoCalculator.Core.Tests.Calculation.Columns { - public class CashflowMSFOTests + public class CashflowMsfoTests { [Fact] - public void CashflowMSFOTest1() + public void CashflowMsfoTest1() { - var preparedValues = new PreparedValues() + var preparedValues = new PreparedValues { Nmper = 25, AcquisitionExpenses = 2507300 @@ -86,7 +86,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns new DateTime(2023, 12, 31), new DateTime(2024, 1, 31), new DateTime(2024, 2, 29), - new DateTime(2024, 3, 31), + new DateTime(2024, 3, 31) } }; @@ -119,7 +119,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns 108000, 96000, 96000, - 25000, + 25000 } }; @@ -152,7 +152,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns 0, 0, 0, - 0, + 0 } }; @@ -185,7 +185,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns 1113.75868055556m, 1113.75868055556m, 1113.75868055556m, - 1113.75868055556m, + 1113.75868055556m } }; @@ -218,7 +218,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns 900m, 900m, 900m, - 900m, + 900m } }; @@ -252,7 +252,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns 1000m, 1000m, 1000m, - 1000m, + 1000m } }; @@ -285,7 +285,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns 0, 0, 0, - 0, + 0 } }; @@ -318,7 +318,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns 0, 0, 0, - 0, + 0 } }; @@ -359,12 +359,13 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns 104986.241319444m, 92986.2413194444m, 92986.2413194444m, - 21986.2413194444m, + 21986.2413194444m }; Assert.Equal(expected.Length, cashflowMsfoColumn.Values.Length); - Assert.Equal(0.0517445296049118, cashflowMsfoColumn.IRR, new DoubleArrayComparer(0.01)); + Assert.Equal(0.0517445296049118, cashflowMsfoColumn.IRR, new DoubleArrayComparer()); + Assert.Equal(0.0505564421421205, cashflowMsfoColumn.Nominal, new DoubleArrayComparer()); Assert.Equal(expected, cashflowMsfoColumn.Values, new DecimalArrayComparer()); } } diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/CashflowNPV.cs b/EvoCalculator.Core.Tests/Calculation/Columns/CashflowNPV.cs new file mode 100644 index 0000000..e0975be --- /dev/null +++ b/EvoCalculator.Core.Tests/Calculation/Columns/CashflowNPV.cs @@ -0,0 +1,467 @@ +using System; +using EvoCalculator.Core.Calculation.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using Xunit; + +namespace EvoCalculator.Core.Tests.Calculation.Columns +{ + public class CashflowNpvTests + { + [Fact] + public void CashflowNpvTest1() + { + var preparedValues = new PreparedValues + { + Nmper = 25, + AcquisitionExpenses = 2507300 + }; + + var dateTempColumn = new DateTempColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + new DateTime(2018, 10, 31), + new DateTime(2018, 10, 31), + new DateTime(2018, 11, 30), + new DateTime(2018, 12, 31), + new DateTime(2019, 1, 31), + new DateTime(2019, 2, 28), + new DateTime(2019, 3, 31), + new DateTime(2019, 4, 30), + new DateTime(2019, 5, 31), + new DateTime(2019, 6, 30), + new DateTime(2019, 7, 31), + new DateTime(2019, 8, 31), + new DateTime(2019, 9, 30), + new DateTime(2019, 10, 31), + new DateTime(2019, 11, 30), + new DateTime(2019, 12, 31), + new DateTime(2020, 1, 31), + new DateTime(2020, 2, 29), + new DateTime(2020, 3, 31), + new DateTime(2020, 4, 30), + new DateTime(2020, 5, 31), + new DateTime(2020, 6, 30), + new DateTime(2020, 7, 31), + new DateTime(2020, 8, 31), + new DateTime(2020, 9, 30), + new DateTime(2020, 10, 31), + new DateTime(2020, 11, 30), + new DateTime(2020, 12, 31), + new DateTime(2021, 1, 31), + new DateTime(2021, 2, 28), + new DateTime(2021, 3, 31), + new DateTime(2021, 4, 30), + new DateTime(2021, 5, 31), + new DateTime(2021, 6, 30), + new DateTime(2021, 7, 31), + new DateTime(2021, 8, 31), + new DateTime(2021, 9, 30), + new DateTime(2021, 10, 31), + new DateTime(2021, 11, 30), + new DateTime(2021, 12, 31), + new DateTime(2022, 1, 31), + new DateTime(2022, 2, 28), + new DateTime(2022, 3, 31), + new DateTime(2022, 4, 30), + new DateTime(2022, 5, 31), + new DateTime(2022, 6, 30), + new DateTime(2022, 7, 31), + new DateTime(2022, 8, 31), + new DateTime(2022, 9, 30), + new DateTime(2022, 10, 31), + new DateTime(2022, 11, 30), + new DateTime(2022, 12, 31), + new DateTime(2023, 1, 31), + new DateTime(2023, 2, 28), + new DateTime(2023, 3, 31), + new DateTime(2023, 4, 30), + new DateTime(2023, 5, 31), + new DateTime(2023, 6, 30), + new DateTime(2023, 7, 31), + new DateTime(2023, 8, 31), + new DateTime(2023, 9, 30), + new DateTime(2023, 10, 31), + new DateTime(2023, 11, 30), + new DateTime(2023, 12, 31), + new DateTime(2024, 1, 31), + new DateTime(2024, 2, 29), + new DateTime(2024, 3, 31) + } + }; + + + var sumColumn = new SumColumn(preparedValues.Nmper + 1, dateTempColumn, preparedValues, null) + { + Values = new[] + { + -2542903.66268442m, + 625000m, + 120000m, + 120000m, + 120000m, + 120000m, + 120000m, + 120000m, + 120000m, + 120000m, + 120000m, + 120000m, + 108000m, + 108000m, + 108000m, + 108000m, + 108000m, + 108000m, + 108000m, + 108000m, + 108000m, + 108000m, + 108000m, + 96000m, + 96000m, + 25000m + } + }; + + var npvBonusExpenses = new NPVBonusExpensesColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + -29266.5425270833m, + -1676.30246875m, + -27590.2400583333m, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + } + }; + + var agentComissionExpenses = new AgentComissionExpensesColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + -446104.166666667m, + 0, + -446104.166666667m, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + } + }; + + var taxColumn = new TaxColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + 60301.716983905m, + 47477.2805581053m, + -87962.9468973872m, + 4527.53444761279m, + 5727.53444761279m, + 4527.53444761279m, + 4527.53444761279m, + 4527.53444761279m, + 4527.53444761279m, + 4527.53444761279m, + 4527.53444761279m, + 4527.53444761279m, + 3900.22165941717m, + 7184.77620487171m, + 4445.67620487171m, + 4445.67620487171m, + 4445.67620487171m, + 4445.67620487171m, + 4445.67620487171m, + 4445.67620487171m, + 4445.67620487171m, + 4445.67620487171m, + 4445.67620487171m, + 3818.36341667609m, + 3818.36341667609m, + 106.762753185324m + } + }; + + var nsibExpensesColumn = new NSIBExpensesColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + -4811.4375m, + -2309.49m, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -2501.9475m, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + } + }; + + var negativeCashflowColumn = new NegativeCashflowColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + -110416.666666667m, + -53000m, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -57416.6666666667m, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + } + }; + + var ratExpensesColumn = new RatExpensesColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + -6000m, + -12000m, + 0, + 0, + 6000m, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + } + }; + + var transExpensesColumn = new TransExpensesColumn(preparedValues.Nmper + 1) + { + Values = new decimal[] + { + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + } + }; + + var tlmExpensesColumn = new TLMExpensesColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + 0, + -20000m, + -1600m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m + } + }; + + var gpsExpensesColumn = new GPSExpensesColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + 0, + -15000m, + -1200m, + -600m, + -600m, + -600m, + -600m, + -600m, + -600m, + -600m, + -600m, + -600m, + -600m, + -600m, + -600m, + -600m, + -600m, + -600m, + -600m, + -600m, + -600m, + -600m, + -600m, + -600m, + -600m, + -600m + } + }; + + + var cashflowNpvColumn = new CashflowNPVColumn(preparedValues.Nmper + 1); + cashflowNpvColumn.ComputeValues(preparedValues, sumColumn, npvBonusExpenses, agentComissionExpenses, + taxColumn, + nsibExpensesColumn, negativeCashflowColumn, ratExpensesColumn, transExpensesColumn, tlmExpensesColumn, + gpsExpensesColumn); + + + var expected = new[] + { + -2507300m, + 573536.926973145m, + -268531.459827613m, + 114072.465552387m, + 118872.465552387m, + 114072.465552387m, + 114072.465552387m, + 114072.465552387m, + 114072.465552387m, + 114072.465552387m, + 114072.465552387m, + 114072.465552387m, + 102699.778340583m, + 39496.6096284616m, + 102154.323795128m, + 102154.323795128m, + 102154.323795128m, + 102154.323795128m, + 102154.323795128m, + 102154.323795128m, + 102154.323795128m, + 102154.323795128m, + 102154.323795128m, + 90781.6365833239m, + 90781.6365833239m, + 23493.2372468147m + }; + + + Assert.Equal(expected.Length, cashflowNpvColumn.Values.Length); + Assert.Equal(expected, cashflowNpvColumn.Values, new DecimalArrayComparer()); + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/DateColumnTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/DateColumnTests.cs index 615a994..58998c3 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/DateColumnTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/Columns/DateColumnTests.cs @@ -2,7 +2,6 @@ using EvoCalculator.Core.Calculation.Columns; using EvoCalculator.Core.Models.Calculation.Models.Prepared; using Xunit; -using Xunit.Abstractions; namespace EvoCalculator.Core.Tests.Calculation.Columns { diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/DeprecationLDTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/DeprecationLDTests.cs index 3e379cf..1539df1 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/DeprecationLDTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/Columns/DeprecationLDTests.cs @@ -4,10 +4,10 @@ using Xunit; namespace EvoCalculator.Core.Tests.Calculation.Columns { - public class DeprecationLDTests + public class DeprecationLdTests { [Fact] - public void DeprecationLDTest1() + public void DeprecationLdTest1() { var preparedValues = new PreparedValues { @@ -18,8 +18,8 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns }; - var deprecationLDColumn = new DeprecationLDColumn(preparedValues.NmperDeprecation + 2); - deprecationLDColumn.ComputeValues(preparedValues); + var deprecationLdColumn = new DeprecationLDColumn(preparedValues.NmperDeprecation + 2); + deprecationLdColumn.ComputeValues(preparedValues); var expected = new[] { @@ -65,7 +65,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns }; - var values = deprecationLDColumn.Values; + var values = deprecationLdColumn.Values; Assert.Equal(expected, values, new DecimalArrayComparer()); } } diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/DeprecationLPTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/DeprecationLPTests.cs index 5f17c2e..53a79de 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/DeprecationLPTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/Columns/DeprecationLPTests.cs @@ -4,10 +4,10 @@ using Xunit; namespace EvoCalculator.Core.Tests.Calculation.Columns { - public class DeprecationLPTests + public class DeprecationLpTests { [Fact] - public void DeprecationLPTest1() + public void DeprecationLpTest1() { var preparedValues = new PreparedValues { @@ -53,8 +53,8 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns } }; - var deprecationLPColumn = new DeprecationLPColumn(preparedValues.Nmper + 1); - deprecationLPColumn.ComputeValues(preparedValues, acceptSumColumn); + var deprecationLpColumn = new DeprecationLPColumn(preparedValues.Nmper + 1); + deprecationLpColumn.ComputeValues(preparedValues, acceptSumColumn); var expected = new[] { @@ -92,12 +92,12 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns }; - var values = deprecationLPColumn.Values; + var values = deprecationLpColumn.Values; Assert.Equal(expected, values, new DecimalArrayComparer()); } [Fact] - public void DeprecationLPTest2() + public void DeprecationLpTest2() { var preparedValues = new PreparedValues { @@ -143,8 +143,8 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns } }; - var deprecationLPColumn = new DeprecationLPColumn(preparedValues.Nmper + 1); - deprecationLPColumn.ComputeValues(preparedValues, acceptSumColumn); + var deprecationLpColumn = new DeprecationLPColumn(preparedValues.Nmper + 1); + deprecationLpColumn.ComputeValues(preparedValues, acceptSumColumn); var expected = new[] { @@ -182,7 +182,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns }; - var values = deprecationLPColumn.Values; + var values = deprecationLpColumn.Values; Assert.Equal(expected, values, new DecimalArrayComparer()); } } diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/DeprecationTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/DeprecationTests.cs index 38e1e96..b1ced0e 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/DeprecationTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/Columns/DeprecationTests.cs @@ -15,7 +15,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns Nmper = 30 }; - var deprecationLPColumn = new DeprecationLPColumn(preparedValues.Nmper + 1) + var deprecationLpColumn = new DeprecationLPColumn(preparedValues.Nmper + 1) { Values = new[] { @@ -53,7 +53,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns } }; - var deprecationLDColumn = new DeprecationLDColumn(preparedValues.NmperDeprecation + 2) + var deprecationLdColumn = new DeprecationLDColumn(preparedValues.NmperDeprecation + 2) { Values = new[] { @@ -100,7 +100,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns }; var deprecationColumn = new DeprecationColumn(preparedValues.NmperDeprecation + 2); - deprecationColumn.ComputeValues(deprecationLPColumn, deprecationLDColumn); + deprecationColumn.ComputeValues(deprecationLpColumn, deprecationLdColumn); var expected = new[] { diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/ExpensesTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/ExpensesTests.cs index 8f50b72..aaab2ba 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/ExpensesTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/Columns/ExpensesTests.cs @@ -14,7 +14,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns Nmper = 24 }; - var AgentComissionExpensesColumn = new AgentComissionExpensesColumn(preparedValues.Nmper + 1) + var agentComissionExpensesColumn = new AgentComissionExpensesColumn(preparedValues.Nmper + 1) { Values = new[] { @@ -46,7 +46,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns } }; - var RatExpensesColumn = new RatExpensesColumn(preparedValues.Nmper + 1) + var ratExpensesColumn = new RatExpensesColumn(preparedValues.Nmper + 1) { Values = new[] { @@ -78,7 +78,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns } }; - var TransExprensesColumn = new TransExprensesColumn(preparedValues.Nmper + 1) + var transExprensesColumn = new TransExpensesColumn(preparedValues.Nmper + 1) { Values = new[] { @@ -110,7 +110,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns } }; - var NsibExpensesColumn = new NSIBExpensesColumn(preparedValues.Nmper + 1) + var nsibExpensesColumn = new NSIBExpensesColumn(preparedValues.Nmper + 1) { Values = new[] { @@ -142,7 +142,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns } }; - var TLMExpensesColumn = new TLMExpensesColumn(preparedValues.Nmper + 1) + var tlmExpensesColumn = new TLMExpensesColumn(preparedValues.Nmper + 1) { Values = new[] { @@ -174,7 +174,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns } }; - var GPSExpensesColumn = new GPSExpensesColumn(preparedValues.Nmper + 1) + var gpsExpensesColumn = new GPSExpensesColumn(preparedValues.Nmper + 1) { Values = new[] { @@ -206,7 +206,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns } }; - var RegistrExpensesColumn = new RegistrExpensesColumn(preparedValues.Nmper + 1) + var registrExpensesColumn = new RegistrExpensesColumn(preparedValues.Nmper + 1) { Values = new[] { @@ -238,7 +238,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns } }; - var InsuranceBonusExpensesColumn = new InsuranceBonusExpensesColumn(preparedValues.Nmper + 1) + var insuranceBonusExpensesColumn = new InsuranceBonusExpensesColumn(preparedValues.Nmper + 1) { Values = new[] { @@ -270,7 +270,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns } }; - var ComissionBonusExpensesColumn = new ComissionBonusExpensesColumn(preparedValues.Nmper + 1) + var comissionBonusExpensesColumn = new ComissionBonusExpensesColumn(preparedValues.Nmper + 1) { Values = new[] { @@ -302,7 +302,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns } }; - var NPVBonusExpensesColumn = new NPVBonusExpensesColumn(preparedValues.Nmper + 1) + var npvBonusExpensesColumn = new NPVBonusExpensesColumn(preparedValues.Nmper + 1) { Values = new[] { @@ -336,9 +336,9 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns var expensesColumn = new ExpensesColumn(preparedValues.Nmper + 1); - expensesColumn.ComputeValues(AgentComissionExpensesColumn, RatExpensesColumn, TransExprensesColumn, - NsibExpensesColumn, TLMExpensesColumn, GPSExpensesColumn, RegistrExpensesColumn, - InsuranceBonusExpensesColumn, ComissionBonusExpensesColumn, NPVBonusExpensesColumn); + expensesColumn.ComputeValues(agentComissionExpensesColumn, ratExpensesColumn, transExprensesColumn, + nsibExpensesColumn, tlmExpensesColumn, gpsExpensesColumn, registrExpensesColumn, + insuranceBonusExpensesColumn, comissionBonusExpensesColumn, npvBonusExpensesColumn); var expected = new[] diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/GPSExpensesTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/GPSExpensesTests.cs index b70e6a0..4555b2f 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/GPSExpensesTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/Columns/GPSExpensesTests.cs @@ -4,10 +4,10 @@ using Xunit; namespace EvoCalculator.Core.Tests.Calculation.Columns { - public class GPSExpensesTests + public class GpsExpensesTests { [Fact] - public void GPSExpensesTest1() + public void GpsExpensesTest1() { var preparedValues = new PreparedValues { diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/GPS_GrTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/GPS_GrTests.cs index d5d5d6e..ac9cdc0 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/GPS_GrTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/Columns/GPS_GrTests.cs @@ -5,7 +5,7 @@ using Xunit; namespace EvoCalculator.Core.Tests.Calculation.Columns { - public class GPS_GrTests + public class GpsGrTests { [Fact] public void GPS_GrTest1() diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/IRRGr.cs b/EvoCalculator.Core.Tests/Calculation/Columns/IRRGr.cs new file mode 100644 index 0000000..d3f6369 --- /dev/null +++ b/EvoCalculator.Core.Tests/Calculation/Columns/IRRGr.cs @@ -0,0 +1,205 @@ +using System; +using EvoCalculator.Core.Calculation.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using Xunit; + +namespace EvoCalculator.Core.Tests.Calculation.Columns +{ + public class IrrGrTests + { + [Fact] + public void IrrGrTest1() + { + var preparedValues = new PreparedValues + { + Nmper = 25 + }; + + var dateTempColumn = new DateTempColumn(67) + { + Values = new[] + { + new DateTime(2018, 10, 31), + new DateTime(2018, 10, 31), + new DateTime(2018, 11, 30), + new DateTime(2018, 12, 31), + new DateTime(2019, 1, 31), + new DateTime(2019, 2, 28), + new DateTime(2019, 3, 31), + new DateTime(2019, 4, 30), + new DateTime(2019, 5, 31), + new DateTime(2019, 6, 30), + new DateTime(2019, 7, 31), + new DateTime(2019, 8, 31), + new DateTime(2019, 9, 30), + new DateTime(2019, 10, 31), + new DateTime(2019, 11, 30), + new DateTime(2019, 12, 31), + new DateTime(2020, 1, 31), + new DateTime(2020, 2, 29), + new DateTime(2020, 3, 31), + new DateTime(2020, 4, 30), + new DateTime(2020, 5, 31), + new DateTime(2020, 6, 30), + new DateTime(2020, 7, 31), + new DateTime(2020, 8, 31), + new DateTime(2020, 9, 30), + new DateTime(2020, 10, 31), + new DateTime(2020, 11, 30), + new DateTime(2020, 12, 31), + new DateTime(2021, 1, 31), + new DateTime(2021, 2, 28), + new DateTime(2021, 3, 31), + new DateTime(2021, 4, 30), + new DateTime(2021, 5, 31), + new DateTime(2021, 6, 30), + new DateTime(2021, 7, 31), + new DateTime(2021, 8, 31), + new DateTime(2021, 9, 30), + new DateTime(2021, 10, 31), + new DateTime(2021, 11, 30), + new DateTime(2021, 12, 31), + new DateTime(2022, 1, 31), + new DateTime(2022, 2, 28), + new DateTime(2022, 3, 31), + new DateTime(2022, 4, 30), + new DateTime(2022, 5, 31), + new DateTime(2022, 6, 30), + new DateTime(2022, 7, 31), + new DateTime(2022, 8, 31), + new DateTime(2022, 9, 30), + new DateTime(2022, 10, 31), + new DateTime(2022, 11, 30), + new DateTime(2022, 12, 31), + new DateTime(2023, 1, 31), + new DateTime(2023, 2, 28), + new DateTime(2023, 3, 31), + new DateTime(2023, 4, 30), + new DateTime(2023, 5, 31), + new DateTime(2023, 6, 30), + new DateTime(2023, 7, 31), + new DateTime(2023, 8, 31), + new DateTime(2023, 9, 30), + new DateTime(2023, 10, 31), + new DateTime(2023, 11, 30), + new DateTime(2023, 12, 31), + new DateTime(2024, 1, 31), + new DateTime(2024, 2, 29), + new DateTime(2024, 3, 31) + } + }; + + var cashflowColumn = new CashflowColumn(preparedValues.Nmper + 1, dateTempColumn) + { + Values = new[] + { + -2507300m, + 625000m, + 120000m, + 120000m, + 120000m, + 120000m, + 120000m, + 120000m, + 120000m, + 120000m, + 120000m, + 120000m, + 108000m, + 50583.3333333333m, + 108000m, + 108000m, + 108000m, + 108000m, + 108000m, + 108000m, + 108000m, + 108000m, + 108000m, + 96000m, + 96000m, + 25000m + } + }; + + var irrGrColumn = new IRRGrColumn(67); + irrGrColumn.ComputeValues(dateTempColumn, cashflowColumn); + + + var expected = new[] + { + 0, + 0, + 0.0272992090422726, + 0.0282219060742697, + 0.0282219060742697, + 0.0254562982413058, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0282219060742697, + 0.0263773400122931, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0282219060742697, + 0.0254562982413058, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0282219060742697, + 0.0254562982413058, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0282219060742697, + 0.0254562982413058, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0282219060742697, + 0.0263773400122931, + 0.0282219060742697 + }; + + + Assert.Equal(expected.Length, irrGrColumn.Values.Length); + Assert.Equal(expected, irrGrColumn.Values, new DoubleArrayComparer()); + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/InsuranceBonusExpensesTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/InsuranceBonusExpensesTests.cs index aced5b6..ac42dcf 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/InsuranceBonusExpensesTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/Columns/InsuranceBonusExpensesTests.cs @@ -249,7 +249,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns 0, 0, 0, - 0, + 0 }; diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/Interest.cs b/EvoCalculator.Core.Tests/Calculation/Columns/Interest.cs new file mode 100644 index 0000000..9af1b4b --- /dev/null +++ b/EvoCalculator.Core.Tests/Calculation/Columns/Interest.cs @@ -0,0 +1,164 @@ +using EvoCalculator.Core.Calculation.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using Xunit; + +namespace EvoCalculator.Core.Tests.Calculation.Columns +{ + public class InterestTests + { + [Fact] + public void InterestTest1() + { + var preparedValues = new PreparedValues + { + Nmper = 25 + }; + + var irrGrColumn = new IRRGrColumn(67) + { + Values = new[] + { + 0, + 0, + 0.0272992090422726, + 0.0282219060742697, + 0.0282219060742697, + 0.0254562982413058, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0282219060742697, + 0.0263773400122931, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0282219060742697, + 0.0254562982413058, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0282219060742697, + 0.0254562982413058, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0282219060742697, + 0.0254562982413058, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0282219060742697, + 0.0263773400122931, + 0.0282219060742697 + } + }; + + var niColumn = new NIColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + 0, + 1882300m, + 1813685.30118027m, + 1744870.95739846m, + 1674114.54166988m, + 1596731.30073274m, + 1521794.10152786m, + 1443337.87682477m, + 1364071.62281796m, + 1281309.69919789m, + 1197470.70118071m, + 1111265.60683612m, + 1033602.27893863m, + 1012189.17203965m, + 931821.135837486m, + 850118.904411111m, + 766110.880283362m, + 678318.847459713m, + 589462.298261128m, + 497554.152763897m, + 403596.079330063m, + 306613.933068336m, + 207267.162688453m, + 117116.637086127m, + 24313.8286442689m, + 0.0112325733425678m + } + }; + + + var interestColumn = new InterestColumn(preparedValues.Nmper + 1); + interestColumn.ComputeValues(irrGrColumn, niColumn); + + + var expected = new[] + { + 0, + 0, + 51385.3011802696m, + 51185.6562181931m, + 49243.5842714204m, + 42616.7590628555m, + 45062.8007951257m, + 41543.7752969065m, + 40733.7459931845m, + 37238.0763799393m, + 36161.0019828137m, + 33794.9056554118m, + 30336.6721025071m, + 29170.226434357m, + 27631.9637978352m, + 26297.7685736248m, + 23991.9758722514m, + 20207.9671763514m, + 19143.4508014149m, + 16091.854502769m, + 14041.9265661655m, + 11017.853738273m, + 8653.22962011698m, + 5849.47439767389m, + 3197.19155814215m, + 686.182588304444m + }; + + + Assert.Equal(expected.Length, interestColumn.Values.Length); + Assert.Equal(expected, interestColumn.Values, new DecimalArrayComparer()); + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/NI.cs b/EvoCalculator.Core.Tests/Calculation/Columns/NI.cs new file mode 100644 index 0000000..e28cbaa --- /dev/null +++ b/EvoCalculator.Core.Tests/Calculation/Columns/NI.cs @@ -0,0 +1,164 @@ +using EvoCalculator.Core.Calculation.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using Xunit; + +namespace EvoCalculator.Core.Tests.Calculation.Columns +{ + public class NiTests + { + [Fact] + public void NiTest1() + { + var preparedValues = new PreparedValues + { + Nmper = 25, + NiAtInception = 1882300 + }; + + var cashflowColumn = new CashflowColumn(preparedValues.Nmper + 1, new DateTempColumn(67)) + { + Values = new[] + { + -2507300m, + 625000m, + 120000m, + 120000m, + 120000m, + 120000m, + 120000m, + 120000m, + 120000m, + 120000m, + 120000m, + 120000m, + 108000m, + 50583.3333333333m, + 108000m, + 108000m, + 108000m, + 108000m, + 108000m, + 108000m, + 108000m, + 108000m, + 108000m, + 96000m, + 96000m, + 25000m + } + }; + + var irrGrColumn = new IRRGrColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + 0, + 0, + 0.0272992090422726, + 0.0282219060742697, + 0.0282219060742697, + 0.0254562982413058, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0282219060742697, + 0.0263773400122931, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0282219060742697, + 0.0254562982413058, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0282219060742697, + 0.0254562982413058, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0282219060742697, + 0.0254562982413058, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0272992090422726, + 0.0282219060742697, + 0.0282219060742697, + 0.0263773400122931, + 0.0282219060742697 + } + }; + + var targetColumn = new NIColumn(preparedValues.Nmper + 1); + targetColumn.ComputeValues(preparedValues, cashflowColumn, irrGrColumn); + + + var expected = new[] + { + 0, + 1882300m, + 1813685.30118027m, + 1744870.95739846m, + 1674114.54166988m, + 1596731.30073274m, + 1521794.10152786m, + 1443337.87682477m, + 1364071.62281796m, + 1281309.69919789m, + 1197470.70118071m, + 1111265.60683612m, + 1033602.27893863m, + 1012189.17203965m, + 931821.135837486m, + 850118.904411111m, + 766110.880283362m, + 678318.847459713m, + 589462.298261128m, + 497554.152763897m, + 403596.079330063m, + 306613.933068336m, + 207267.162688453m, + 117116.637086127m, + 24313.8286442689m, + 0.0112325733425678m + }; + + + Assert.Equal(expected.Length, targetColumn.Values.Length); + Assert.Equal(expected, targetColumn.Values, new DecimalArrayComparer()); + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/NPV.cs b/EvoCalculator.Core.Tests/Calculation/Columns/NPV.cs new file mode 100644 index 0000000..f7f4395 --- /dev/null +++ b/EvoCalculator.Core.Tests/Calculation/Columns/NPV.cs @@ -0,0 +1,241 @@ +using System; +using EvoCalculator.Core.Calculation.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using Xunit; + +namespace EvoCalculator.Core.Tests.Calculation.Columns +{ + public class NpvTests + { + [Fact] + public void NpvTest1() + { + var preparedValues = new PreparedValues + { + Nmper = 25 + }; + + var dateTempColumn = new DateTempColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + new DateTime(2018, 10, 31), + new DateTime(2018, 10, 31), + new DateTime(2018, 11, 30), + new DateTime(2018, 12, 31), + new DateTime(2019, 1, 31), + new DateTime(2019, 2, 28), + new DateTime(2019, 3, 31), + new DateTime(2019, 4, 30), + new DateTime(2019, 5, 31), + new DateTime(2019, 6, 30), + new DateTime(2019, 7, 31), + new DateTime(2019, 8, 31), + new DateTime(2019, 9, 30), + new DateTime(2019, 10, 31), + new DateTime(2019, 11, 30), + new DateTime(2019, 12, 31), + new DateTime(2020, 1, 31), + new DateTime(2020, 2, 29), + new DateTime(2020, 3, 31), + new DateTime(2020, 4, 30), + new DateTime(2020, 5, 31), + new DateTime(2020, 6, 30), + new DateTime(2020, 7, 31), + new DateTime(2020, 8, 31), + new DateTime(2020, 9, 30), + new DateTime(2020, 10, 31), + new DateTime(2020, 11, 30), + new DateTime(2020, 12, 31), + new DateTime(2021, 1, 31), + new DateTime(2021, 2, 28), + new DateTime(2021, 3, 31), + new DateTime(2021, 4, 30), + new DateTime(2021, 5, 31), + new DateTime(2021, 6, 30), + new DateTime(2021, 7, 31), + new DateTime(2021, 8, 31), + new DateTime(2021, 9, 30), + new DateTime(2021, 10, 31), + new DateTime(2021, 11, 30), + new DateTime(2021, 12, 31), + new DateTime(2022, 1, 31), + new DateTime(2022, 2, 28), + new DateTime(2022, 3, 31), + new DateTime(2022, 4, 30), + new DateTime(2022, 5, 31), + new DateTime(2022, 6, 30), + new DateTime(2022, 7, 31), + new DateTime(2022, 8, 31), + new DateTime(2022, 9, 30), + new DateTime(2022, 10, 31), + new DateTime(2022, 11, 30), + new DateTime(2022, 12, 31), + new DateTime(2023, 1, 31), + new DateTime(2023, 2, 28), + new DateTime(2023, 3, 31), + new DateTime(2023, 4, 30), + new DateTime(2023, 5, 31), + new DateTime(2023, 6, 30), + new DateTime(2023, 7, 31), + new DateTime(2023, 8, 31), + new DateTime(2023, 9, 30), + new DateTime(2023, 10, 31), + new DateTime(2023, 11, 30), + new DateTime(2023, 12, 31), + new DateTime(2024, 1, 31), + new DateTime(2024, 2, 29), + new DateTime(2024, 3, 31) + } + }; + + var cashflowNpvColumn = new CashflowNPVColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + -2507300m, + 571313.823489742m, + -259747.895766236m, + 122856.029613764m, + 127656.029613764m, + 122856.029613764m, + 122856.029613764m, + 122856.029613764m, + 122856.029613764m, + 122856.029613764m, + 122856.029613764m, + 122856.029613764m, + 110604.985995822m, + 47401.8172837004m, + 110059.531450367m, + 110059.531450367m, + 110059.531450367m, + 110059.531450367m, + 110059.531450367m, + 110059.531450367m, + 110059.531450367m, + 110059.531450367m, + 110059.531450367m, + 97808.4878324251m, + 97808.4878324251m, + 23404.3131074786m + } + }; + + var npvWeightColumn = new NPVWeightColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + 1, + 1, + 0.994263643057415, + 0.98837064137184, + 0.982512567513616, + 0.977251253020835, + 0.97145908378937, + 0.965886447729637, + 0.960161637711399, + 0.954653807834909, + 0.948995573685451, + 0.943370875895905, + 0.937959363822527, + 0.93240007766075, + 0.927051498001993, + 0.921556862772709, + 0.916094794252359, + 0.911014429114697, + 0.905614845610017, + 0.900419915603094, + 0.895083125791432, + 0.889948609488607, + 0.884673883119589, + 0.879430420059453, + 0.874385693263824, + 0.869203208316068, + 0.864217148457527, + 0.859094932485813, + 0.854003075893692, + 0.849429924456607, + 0.844395352377508, + 0.83955159923561, + 0.834575576000758, + 0.829788152601254, + 0.824869997325142, + 0.81998099196066, + 0.815277288304638, + 0.810445138936875, + 0.80579613633755, + 0.801020181767729, + 0.796272534285798, + 0.792008527530705, + 0.787314292133165, + 0.78279797632749, + 0.778158331876872, + 0.773694537927379, + 0.769108849565985, + 0.764550340584458, + 0.76016460693029, + 0.755659110484519, + 0.751324380099863, + 0.746871279688058, + 0.7424445728072, + 0.738468812577606, + 0.734091907128381, + 0.729880893920429, + 0.725554889074355, + 0.721392847249186, + 0.717117151064894, + 0.712866796936501, + 0.708777538536756, + 0.704576613300819, + 0.700534910353527, + 0.696382839183729, + 0.692255377344236, + 0.688416353143374, + 0.684336108675241 + } + }; + + + var npvColumn = new NPVColumn(preparedValues.Nmper + 1, dateTempColumn); + npvColumn.ComputeValues(cashflowNpvColumn, npvWeightColumn); + + + var expected = new[] + { + -2507300m, + 571313.823489742m, + -258257.889121036m, + 121427.292785753m, + 125423.653414413m, + 120061.208881215m, + 119349.605966586m, + 118664.974025805m, + 117961.646596671m, + 117284.976486258m, + 116589.82830403m, + 115898.800265829m, + 103742.98230024m, + 44197.4581165829m, + 102030.85350046m, + 101426.116521635m, + 100824.963819535m, + 100265.821212887m, + 99671.545582335m, + 99099.7940198555m, + 98512.429433735m, + 97947.3269752218m, + 97366.7930625188m, + 86015.7595398495m, + 85522.3424404413m, + 20343.1040414542m + }; + + + Assert.Equal(expected.Length, npvColumn.Values.Length); + Assert.Equal(0.053786775, npvColumn.IRR, new DoubleArrayComparer()); + Assert.Equal(0.0525046595222296, npvColumn.Nominal, new DoubleArrayComparer()); + Assert.Equal(expected, npvColumn.Values, new DecimalArrayComparer()); + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/NPVBonusExpensesTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/NPVBonusExpensesTests.cs index 55a6114..29c1281 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/NPVBonusExpensesTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/Columns/NPVBonusExpensesTests.cs @@ -4,10 +4,10 @@ using Xunit; namespace EvoCalculator.Core.Tests.Calculation.Columns { - public class NPVBonusExpensesTests + public class NpvBonusExpensesTests { [Fact] - public void NPVBonusExpensesTest1() + public void NpvBonusExpensesTest1() { var preparedValues = new PreparedValues { @@ -68,7 +68,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns [Fact] - public void NPVBonusExpensesTest2() + public void NpvBonusExpensesTest2() { var preparedValue = new PreparedValues { diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/NPVWeight.cs b/EvoCalculator.Core.Tests/Calculation/Columns/NPVWeight.cs new file mode 100644 index 0000000..ea84c8a --- /dev/null +++ b/EvoCalculator.Core.Tests/Calculation/Columns/NPVWeight.cs @@ -0,0 +1,172 @@ +using System; +using EvoCalculator.Core.Calculation.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using Xunit; + +namespace EvoCalculator.Core.Tests.Calculation.Columns +{ + public class NpvWeightTests + { + [Fact] + public void NpvWeightTest1() + { + var preparedValues = new PreparedValues + { + LoanRate = 0.07 + }; + + var dateTempColumn = new DateTempColumn(67) + { + Values = new[] + { + new DateTime(2018, 10, 31), + new DateTime(2018, 10, 31), + new DateTime(2018, 11, 30), + new DateTime(2018, 12, 31), + new DateTime(2019, 1, 31), + new DateTime(2019, 2, 28), + new DateTime(2019, 3, 31), + new DateTime(2019, 4, 30), + new DateTime(2019, 5, 31), + new DateTime(2019, 6, 30), + new DateTime(2019, 7, 31), + new DateTime(2019, 8, 31), + new DateTime(2019, 9, 30), + new DateTime(2019, 10, 31), + new DateTime(2019, 11, 30), + new DateTime(2019, 12, 31), + new DateTime(2020, 1, 31), + new DateTime(2020, 2, 29), + new DateTime(2020, 3, 31), + new DateTime(2020, 4, 30), + new DateTime(2020, 5, 31), + new DateTime(2020, 6, 30), + new DateTime(2020, 7, 31), + new DateTime(2020, 8, 31), + new DateTime(2020, 9, 30), + new DateTime(2020, 10, 31), + new DateTime(2020, 11, 30), + new DateTime(2020, 12, 31), + new DateTime(2021, 1, 31), + new DateTime(2021, 2, 28), + new DateTime(2021, 3, 31), + new DateTime(2021, 4, 30), + new DateTime(2021, 5, 31), + new DateTime(2021, 6, 30), + new DateTime(2021, 7, 31), + new DateTime(2021, 8, 31), + new DateTime(2021, 9, 30), + new DateTime(2021, 10, 31), + new DateTime(2021, 11, 30), + new DateTime(2021, 12, 31), + new DateTime(2022, 1, 31), + new DateTime(2022, 2, 28), + new DateTime(2022, 3, 31), + new DateTime(2022, 4, 30), + new DateTime(2022, 5, 31), + new DateTime(2022, 6, 30), + new DateTime(2022, 7, 31), + new DateTime(2022, 8, 31), + new DateTime(2022, 9, 30), + new DateTime(2022, 10, 31), + new DateTime(2022, 11, 30), + new DateTime(2022, 12, 31), + new DateTime(2023, 1, 31), + new DateTime(2023, 2, 28), + new DateTime(2023, 3, 31), + new DateTime(2023, 4, 30), + new DateTime(2023, 5, 31), + new DateTime(2023, 6, 30), + new DateTime(2023, 7, 31), + new DateTime(2023, 8, 31), + new DateTime(2023, 9, 30), + new DateTime(2023, 10, 31), + new DateTime(2023, 11, 30), + new DateTime(2023, 12, 31), + new DateTime(2024, 1, 31), + new DateTime(2024, 2, 29), + new DateTime(2024, 3, 31) + } + }; + + var npvWeightColumn = new NPVWeightColumn(67); + npvWeightColumn.ComputeValues(preparedValues, dateTempColumn); + + + var expected = new[] + { + 1, + 1, + 0.994263643057415, + 0.98837064137184, + 0.982512567513616, + 0.977251253020835, + 0.97145908378937, + 0.965886447729637, + 0.960161637711399, + 0.954653807834909, + 0.948995573685451, + 0.943370875895905, + 0.937959363822527, + 0.93240007766075, + 0.927051498001993, + 0.921556862772709, + 0.916094794252359, + 0.911014429114697, + 0.905614845610017, + 0.900419915603094, + 0.895083125791432, + 0.889948609488607, + 0.884673883119589, + 0.879430420059453, + 0.874385693263824, + 0.869203208316068, + 0.864217148457527, + 0.859094932485813, + 0.854003075893692, + 0.849429924456607, + 0.844395352377508, + 0.83955159923561, + 0.834575576000758, + 0.829788152601254, + 0.824869997325142, + 0.81998099196066, + 0.815277288304638, + 0.810445138936875, + 0.80579613633755, + 0.801020181767729, + 0.796272534285798, + 0.792008527530705, + 0.787314292133165, + 0.78279797632749, + 0.778158331876872, + 0.773694537927379, + 0.769108849565985, + 0.764550340584458, + 0.76016460693029, + 0.755659110484519, + 0.751324380099863, + 0.746871279688058, + 0.7424445728072, + 0.738468812577606, + 0.734091907128381, + 0.729880893920429, + 0.725554889074355, + 0.721392847249186, + 0.717117151064894, + 0.712866796936501, + 0.708777538536756, + 0.704576613300819, + 0.700534910353527, + 0.696382839183729, + 0.692255377344236, + 0.688416353143374, + 0.684336108675241 + }; + + + Assert.Equal(expected.Length, npvWeightColumn.Values.Length); + Assert.Equal(expected, npvWeightColumn.Values, new DoubleArrayComparer()); + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/NSIBBruttoGrTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/NSIBBruttoGrTests.cs index 249b5ad..f17b0e1 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/NSIBBruttoGrTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/Columns/NSIBBruttoGrTests.cs @@ -4,10 +4,10 @@ using Xunit; namespace EvoCalculator.Core.Tests.Calculation.Columns { - public class NSIBBruttoGrTests + public class NsibBruttoGrTests { [Fact] - public void NSIBBruttoGrTest1() + public void NsibBruttoGrTest1() { var preparedValues = new PreparedValues { diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/NSIBExpensesTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/NSIBExpensesTests.cs index 716f5fd..27efd19 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/NSIBExpensesTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/Columns/NSIBExpensesTests.cs @@ -4,10 +4,10 @@ using Xunit; namespace EvoCalculator.Core.Tests.Calculation.Columns { - public class NSIBExpensesTests + public class NsibExpensesTests { [Fact] - public void NSIBExpensesTest1() + public void NsibExpensesTest1() { var preparedValues = new PreparedValues { @@ -58,7 +58,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns } [Fact] - public void NSIBExpensesTest2() + public void NsibExpensesTest2() { var preparedValues = new PreparedValues { @@ -94,7 +94,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns } [Fact] - public void NSIBExpensesTest3() + public void NsibExpensesTest3() { var preparedValues = new PreparedValues { diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/SumCurrent.cs b/EvoCalculator.Core.Tests/Calculation/Columns/SumCurrent.cs new file mode 100644 index 0000000..e1711c7 --- /dev/null +++ b/EvoCalculator.Core.Tests/Calculation/Columns/SumCurrent.cs @@ -0,0 +1,89 @@ +using EvoCalculator.Core.Calculation.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using Xunit; + +namespace EvoCalculator.Core.Tests.Calculation.Columns +{ + public class SumCurrentTests + { + [Fact] + public void SumCurrentTest1() + { + var preparedValues = new PreparedValues + { + Nmper = 25 + }; + + var sumWithVatColumn = new SumWithVATColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + 4626000m, + 1500000m, + 144000m, + 144000m, + 144000m, + 144000m, + 144000m, + 144000m, + 144000m, + 144000m, + 144000m, + 144000m, + 129600m, + 129600m, + 129600m, + 129600m, + 129600m, + 129600m, + 129600m, + 129600m, + 129600m, + 129600m, + 129600m, + 115200m, + 115200m, + 30000m + } + }; + + var sumCurrentColumn = new SumCurrentColumn(preparedValues.Nmper + 1); + sumCurrentColumn.ComputeValues(sumWithVatColumn); + + + var expected = new[] + { + 0, + 4626000m, + 3126000m, + 2982000m, + 2838000m, + 2694000m, + 2550000m, + 2406000m, + 2262000m, + 2118000m, + 1974000m, + 1830000m, + 1686000m, + 1556400m, + 1426800m, + 1297200m, + 1167600m, + 1038000m, + 908400m, + 778800m, + 649200m, + 519600m, + 390000m, + 260400m, + 145200m, + 30000m + }; + + + Assert.Equal(expected.Length, sumCurrentColumn.Values.Length); + Assert.Equal(expected, sumCurrentColumn.Values, new DecimalArrayComparer()); + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/SumCurrentInterest.cs b/EvoCalculator.Core.Tests/Calculation/Columns/SumCurrentInterest.cs new file mode 100644 index 0000000..dc145c0 --- /dev/null +++ b/EvoCalculator.Core.Tests/Calculation/Columns/SumCurrentInterest.cs @@ -0,0 +1,88 @@ +using EvoCalculator.Core.Calculation.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using Xunit; + +namespace EvoCalculator.Core.Tests.Calculation.Columns +{ + public class SumCurrentInterestTests + { + [Fact] + public void SumCurrentInterestTest1() + { + var preparedValues = new PreparedValues + { + Nmper = 25 + }; + + var interestColumn = new InterestColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + 0, + 51385.3011802696m, + 51185.6562181931m, + 49243.5842714204m, + 42616.7590628555m, + 45062.8007951257m, + 41543.7752969065m, + 40733.7459931845m, + 37238.0763799393m, + 36161.0019828137m, + 33794.9056554118m, + 30336.6721025071m, + 29170.226434357m, + 27631.9637978352m, + 26297.7685736248m, + 23991.9758722514m, + 20207.9671763514m, + 19143.4508014149m, + 16091.854502769m, + 14041.9265661655m, + 11017.853738273m, + 8653.22962011698m, + 5849.47439767389m, + 3197.19155814215m, + 686.182588304444m + } + }; + + var sumCurrentInterestColumn = new SumCurrentInterestColumn(preparedValues.Nmper + 1); + sumCurrentInterestColumn.ComputeValues(interestColumn); + + + var expected = new[] + { + 0, + 665283.367743173m, + 613898.066562903m, + 562712.41034471m, + 513468.826073289m, + 470852.067010434m, + 425789.266215308m, + 384245.490918402m, + 343511.744925217m, + 306273.668545278m, + 270112.666562464m, + 236317.760907052m, + 205981.088804545m, + 176810.862370188m, + 149178.898572353m, + 122881.129998728m, + 98889.1541264768m, + 78681.1869501255m, + 59537.7361487106m, + 43445.8816459416m, + 29403.9550797761m, + 18386.1013415031m, + 9732.87172138608m, + 3883.39732371219m, + 686.205765570042m, + 0.0231772655979618m + }; + + + Assert.Equal(expected.Length, sumCurrentInterestColumn.Values.Length); + Assert.Equal(expected, sumCurrentInterestColumn.Values, new DecimalArrayComparer(0.1)); + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/SumCurrentNegative.cs b/EvoCalculator.Core.Tests/Calculation/Columns/SumCurrentNegative.cs new file mode 100644 index 0000000..2204761 --- /dev/null +++ b/EvoCalculator.Core.Tests/Calculation/Columns/SumCurrentNegative.cs @@ -0,0 +1,89 @@ +using EvoCalculator.Core.Calculation.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using Xunit; + +namespace EvoCalculator.Core.Tests.Calculation.Columns +{ + public class SumCurrentNegativeTests + { + [Fact] + public void SumCurrentNegativeTest1() + { + var preparedValues = new PreparedValues + { + Nmper = 25 + }; + + var negativeCashflowColumn = new NegativeCashflowColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + -110416.666666667m, + -53000m, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -57416.6666666667m, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + } + }; + + var sumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper + 1); + sumCurrentNegativeColumn.ComputeValues(negativeCashflowColumn); + + + var expected = new[] + { + 0, + -110416.666666667m, + -57416.6666666667m, + -57416.6666666667m, + -57416.6666666667m, + -57416.6666666667m, + -57416.6666666667m, + -57416.6666666667m, + -57416.6666666667m, + -57416.6666666667m, + -57416.6666666667m, + -57416.6666666667m, + -57416.6666666667m, + -57416.6666666667m, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + }; + + + Assert.Equal(expected.Length, sumCurrentNegativeColumn.Values.Length); + Assert.Equal(expected, sumCurrentNegativeColumn.Values, new DecimalArrayComparer()); + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/SumCurrentTLM.cs b/EvoCalculator.Core.Tests/Calculation/Columns/SumCurrentTLM.cs new file mode 100644 index 0000000..2fb72ff --- /dev/null +++ b/EvoCalculator.Core.Tests/Calculation/Columns/SumCurrentTLM.cs @@ -0,0 +1,89 @@ +using EvoCalculator.Core.Calculation.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using Xunit; + +namespace EvoCalculator.Core.Tests.Calculation.Columns +{ + public class SumCurrentTlmTests + { + [Fact] + public void SumCurrentTlmTest1() + { + var preparedValues = new PreparedValues + { + Nmper = 25 + }; + + var tlmGrColumn = new TLM_GrColumn(preparedValues.Nmper + 1, new DateTempColumn(67), 0) + { + Values = new[] + { + -17757.5461595619m, + 0, + 1800m, + 900m, + 900m, + 900m, + 900m, + 900m, + 900m, + 900m, + 900m, + 900m, + 900m, + 900m, + 900m, + 900m, + 900m, + 900m, + 900m, + 900m, + 900m, + 900m, + 900m, + 900m, + 900m, + 900m + } + }; + + var sumCurrentTlmColumn = new SumCurrentTLMColumn(preparedValues.Nmper + 1); + sumCurrentTlmColumn.ComputeValues(tlmGrColumn); + + + var expected = new[] + { + 0, + 11700m, + 11700m, + 11700m, + 11700m, + 11700m, + 11700m, + 11700m, + 11700m, + 11700m, + 11700m, + 11700m, + 11700m, + 10800m, + 9900m, + 9000m, + 8100m, + 7200m, + 6300m, + 5400m, + 4500m, + 3600m, + 2700m, + 1800m, + 900m, + 0m + }; + + + Assert.Equal(expected.Length, sumCurrentTlmColumn.Values.Length); + Assert.Equal(expected, sumCurrentTlmColumn.Values, new DecimalArrayComparer()); + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/SumRepaymentColumn.cs b/EvoCalculator.Core.Tests/Calculation/Columns/SumRepaymentColumn.cs new file mode 100644 index 0000000..9209479 --- /dev/null +++ b/EvoCalculator.Core.Tests/Calculation/Columns/SumRepaymentColumn.cs @@ -0,0 +1,192 @@ +using EvoCalculator.Core.Calculation.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using Xunit; + +namespace EvoCalculator.Core.Tests.Calculation.Columns +{ + public class SumRepaymentTests + { + [Fact] + public void SumRepaymentTest1() + { + var preparedValues = new PreparedValues + { + Nmper = 25, + Repayment = 0.25 + }; + + var sumCurrentColumn = new SumCurrentColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + 0, + 3876000m, + 3126000m, + 2982000m, + 2838000m, + 2694000m, + 2550000m, + 2406000m, + 2262000m, + 2118000m, + 1974000m, + 1830000m, + 1686000m, + 1556400m, + 1426800m, + 1297200m, + 1167600m, + 1038000m, + 908400m, + 778800m, + 649200m, + 519600m, + 390000m, + 260400m, + 145200m, + 30000m + } + }; + + var sumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + 0, + -110416.666666667m, + -57416.6666666667m, + -57416.6666666667m, + -57416.6666666667m, + -57416.6666666667m, + -57416.6666666667m, + -57416.6666666667m, + -57416.6666666667m, + -57416.6666666667m, + -57416.6666666667m, + -57416.6666666667m, + -57416.6666666667m, + -57416.6666666667m, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + } + }; + + var sumCurrentInterestColumn = new SumCurrentInterestColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + 0, + 665283.367743173m, + 613898.066562903m, + 562712.41034471m, + 513468.826073289m, + 470852.067010434m, + 425789.266215308m, + 384245.490918402m, + 343511.744925217m, + 306273.668545278m, + 270112.666562464m, + 236317.760907052m, + 205981.088804545m, + 176810.862370188m, + 149178.898572353m, + 122881.129998728m, + 98889.1541264768m, + 78681.1869501255m, + 59537.7361487106m, + 43445.8816459416m, + 29403.9550797761m, + 18386.1013415031m, + 9732.87172138608m, + 3883.39732371219m, + 686.205765570042m, + 0.0231772655979618m + } + }; + + var sumCurrentTlmColumn = new SumCurrentTLMColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + 0, + 11700m, + 11700m, + 11700m, + 11700m, + 11700m, + 11700m, + 11700m, + 11700m, + 11700m, + 11700m, + 11700m, + 11700m, + 10800m, + 9900m, + 9000m, + 8100m, + 7200m, + 6300m, + 5400m, + 4500m, + 3600m, + 2700m, + 1800m, + 900m, + 0m + } + }; + + + var sumRepaymentColumnColumn = new SumRepaymentColumn(preparedValues.Nmper + 1); + sumRepaymentColumnColumn.ComputeValues(new Constants.Calculation(), preparedValues, sumCurrentColumn, + sumCurrentNegativeColumn, + sumCurrentInterestColumn, sumCurrentTlmColumn); + + + var expected = new[] + { + 0, + 0, + 2870373.91336446m, + 2741729.61022992m, + 2612502.68551135m, + 2481287.7132302m, + 2350806.55346874m, + 2219269.68605781m, + 2087489.80985577m, + 1954661.23276975m, + 1821509.53336459m, + 1687648.00506122m, + 1552749.00669197m, + 1432980.07462228m, + 1370166.33042829m, + 1249535.66100038m, + 1128213.25376206m, + 1005755.64391496m, + 882978.679155387m, + 759286.235506218m, + 634978.813476067m, + 509764.169597549m, + 383840.138483584m, + 257074.980802886m, + 143914.138270329m, + 29999.9930468203m + }; + + + Assert.Equal(expected.Length, sumRepaymentColumnColumn.Values.Length); + Assert.Equal(expected, sumRepaymentColumnColumn.Values, new DecimalArrayComparer()); + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/TLMExpensesTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/TLMExpensesTests.cs index ad96e9e..9164ad0 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/TLMExpensesTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/Columns/TLMExpensesTests.cs @@ -4,10 +4,10 @@ using Xunit; namespace EvoCalculator.Core.Tests.Calculation.Columns { - public class TLMExpensesTests + public class TlmExpensesTests { [Fact] - public void TLMExpensesTest1() + public void TlmExpensesTest1() { var preparedValues = new PreparedValues { diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/TLM_GrTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/TLM_GrTests.cs index 919f085..11c1673 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/TLM_GrTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/Columns/TLM_GrTests.cs @@ -5,7 +5,7 @@ using Xunit; namespace EvoCalculator.Core.Tests.Calculation.Columns { - public class TLM_GrTests + public class TlmGrTests { [Fact] public void TLM_GrTest1() diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/TaxColumnTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/TaxColumnTests.cs index 069bb46..ae2779b 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/TaxColumnTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/Columns/TaxColumnTests.cs @@ -213,7 +213,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns } }; - var transExprensesColumn = new TransExprensesColumn(preparedValues.Nmper + 1) + var transExprensesColumn = new TransExpensesColumn(preparedValues.Nmper + 1) { Values = new[] { diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/TransExprensesTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/TransExprensesTests.cs index 1594301..f353c4d 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/TransExprensesTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/Columns/TransExprensesTests.cs @@ -16,7 +16,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns TransportTaxGr = 30000 }; - var transExprensesColumn = new TransExprensesColumn(preparedValues.Nmper + 1); + var transExprensesColumn = new TransExpensesColumn(preparedValues.Nmper + 1); transExprensesColumn.ComputeValues(preparedValues); @@ -70,7 +70,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns TransportTaxGr = 24000 }; - var transExprensesColumn = new TransExprensesColumn(preparedValues.Nmper + 1); + var transExprensesColumn = new TransExpensesColumn(preparedValues.Nmper + 1); transExprensesColumn.ComputeValues(preparedValues); diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/VATColumnTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/VATColumnTests.cs index 10c01e4..3af034f 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/VATColumnTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/Columns/VATColumnTests.cs @@ -4,10 +4,10 @@ using Xunit; namespace EvoCalculator.Core.Tests.Calculation.Columns { - public class VATColumnTests + public class VatColumnTests { [Fact] - public void VATColumnTest1() + public void VatColumnTest1() { var preparedValues = new PreparedValues { diff --git a/EvoCalculator.Core/Controllers/v1/CalculationController.cs b/EvoCalculator.Core/Controllers/v1/CalculationController.cs index 8ab84a8..a04b9c7 100644 --- a/EvoCalculator.Core/Controllers/v1/CalculationController.cs +++ b/EvoCalculator.Core/Controllers/v1/CalculationController.cs @@ -101,7 +101,7 @@ namespace EvoCalculator.Core.Controllers.V1 ratExpensesColumn.ComputeValues(preparedValues); - var transExprensesColumn = new TransExprensesColumn(preparedValues.Nmper + 1); + var transExprensesColumn = new TransExpensesColumn(preparedValues.Nmper + 1); transExprensesColumn.ComputeValues(preparedValues);