Additional unit tests for negative interest rates in the financial functions, and also tests using negative present/future value arguments (#2166)

This commit is contained in:
Mark Baker 2021-06-16 14:16:48 +02:00 committed by GitHub
parent ebdeb231eb
commit d2076fefab
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 191 additions and 232 deletions

View File

@ -44,7 +44,7 @@ class Periodic
$type = ($type === null) ? FinancialConstants::PAYMENT_END_OF_PERIOD : Functions::flattenSingleValue($type); $type = ($type === null) ? FinancialConstants::PAYMENT_END_OF_PERIOD : Functions::flattenSingleValue($type);
try { try {
$rate = CashFlowValidations::validateFloat($rate); $rate = CashFlowValidations::validateRate($rate);
$numberOfPeriods = CashFlowValidations::validateInt($numberOfPeriods); $numberOfPeriods = CashFlowValidations::validateInt($numberOfPeriods);
$payment = CashFlowValidations::validateFloat($payment); $payment = CashFlowValidations::validateFloat($payment);
$presentValue = CashFlowValidations::validatePresentValue($presentValue); $presentValue = CashFlowValidations::validatePresentValue($presentValue);

View File

@ -18,7 +18,7 @@ class FvTest extends TestCase
* *
* @param mixed $expectedResult * @param mixed $expectedResult
*/ */
public function testFV($expectedResult, ...$args): void public function testFV($expectedResult, array $args): void
{ {
$result = Financial::FV(...$args); $result = Financial::FV(...$args);
self::assertEqualsWithDelta($expectedResult, $result, 1E-8); self::assertEqualsWithDelta($expectedResult, $result, 1E-8);

View File

@ -18,7 +18,7 @@ class IPmtTest extends TestCase
* *
* @param mixed $expectedResult * @param mixed $expectedResult
*/ */
public function testIPMT($expectedResult, ...$args): void public function testIPMT($expectedResult, array $args): void
{ {
$result = Financial::IPMT(...$args); $result = Financial::IPMT(...$args);
self::assertEqualsWithDelta($expectedResult, $result, 1E-8); self::assertEqualsWithDelta($expectedResult, $result, 1E-8);

View File

@ -18,7 +18,7 @@ class NPerTest extends TestCase
* *
* @param mixed $expectedResult * @param mixed $expectedResult
*/ */
public function testNPER($expectedResult, ...$args): void public function testNPER($expectedResult, array $args): void
{ {
$result = Financial::NPER(...$args); $result = Financial::NPER(...$args);
self::assertEqualsWithDelta($expectedResult, $result, 1E-8); self::assertEqualsWithDelta($expectedResult, $result, 1E-8);

View File

@ -5,129 +5,118 @@
return [ return [
[ [
2581.4033740600998, 2581.4033740600998,
0.005, [0.005, 10, -200, -500, 1],
10, ],
-200, [
-500, 2421.371872695160,
1, [-0.005, 10, -200, -500, 1],
], ],
[ [
12682.503013197, 12682.503013197,
0.01, [0.01, 12, -1000],
12, ],
-1000, [
11361.512828387000,
[-0.01, 12, -1000],
], ],
[ [
82859.19732763403, 82859.19732763403,
0.009175, [0.009175, 35, -2000, null, 1],
35,
-2000,
null,
1,
], ],
[ [
2301.4018303408998, 2301.4018303408998,
0.005, [0.005, 12, -100, -1000, 1],
12, ],
-100, [
-1000, 2103.328949318290,
1, [-0.005, 12, -100, -1000, 1],
],
[
-178.046206611904,
[0.005, 12, 100, -1000, 1],
],
[
178.046206611904,
[0.005, 12, -100, 1000, 1],
],
[
-2301.401830340900,
[0.005, 12, 100, 1000, 1],
],
[
-220.083335489543,
[-0.005, 12, 100, -1000, 1],
],
[
220.083335489543,
[-0.005, 12, -100, 1000, 1],
],
[
-2103.328949318290,
[-0.005, 12, 100, 1000, 1],
], ],
[ [
68023.43754198513, 68023.43754198513,
0.004175, [0.004175, 60, -1000],
60,
-1000,
], ],
[ [
39729.460894165997, 39729.460894165997,
0.025, [0.025, 16, -2000, 0, 1],
16,
-2000,
0,
1,
], ],
[ [
1300, 1300,
0.0, [0.0, 12, -100, -100],
12, ],
-100, [
-100, -1100,
[0.0, 12, 100, -100],
],
[
1100,
[0.0, 12, -100, 100],
],
[
-1300,
[0.0, 12, 100, 100],
], ],
[ [
'#VALUE!', '#VALUE!',
'NaN', ['NaN', 12, -100, -100],
12,
-100,
-100,
], ],
[ [
'#VALUE!', '#VALUE!',
0.0, [0.0, 'NaN', -100, -100],
'NaN',
-100,
-100,
], ],
[ [
'#VALUE!', '#VALUE!',
0.0, [0.0, 12, 'NaN', -100],
12,
'NaN',
-100,
], ],
[ [
'#VALUE!', '#VALUE!',
0.0, [0.0, 12, -100, 'NaN'],
12,
-100,
'NaN',
], ],
[ [
'#VALUE!', '#VALUE!',
0.0, [0.0, 12, -100, -100, 'NaN'],
12,
-100,
-100,
'NaN',
], ],
[ [
-33882857.54639115, -33882857.54639115,
-0.10, [-0.10, -100, -100, 0, 1],
-100,
-100,
0,
1,
], ],
[ [
-10000.00, -10000.00,
0.0, [0.0, -100, -100, 0, 1],
-100,
-100,
0,
1,
], ],
[ [
-100.0, -100.0,
0.10, [0.10, -1, -100, 0, 1],
-1,
-100,
0,
1,
], ],
[ [
'#NUM!', '#NUM!',
0.10, [0.10, 12, -100, 0, 2],
12,
-100,
0,
2,
], ],
[ [
'#NUM!', '#NUM!',
0.10, [0.10, 12, -100, 0, -1],
12,
-100,
0,
-1,
], ],
]; ];

View File

@ -5,129 +5,86 @@
return [ return [
[ [
-22.858787457480013, -22.858787457480013,
0.0085, [0.0085, 3, 3, 8000],
3, ],
3, [
8000, 22.473454124370,
[-0.0085, 3, 3, 8000],
], ],
[ [
-292.44712990937001, -292.44712990937001,
0.10, [0.10, 3, 3, 8000],
3, ],
3, [
8000, 239.114391143911,
[-0.10, 3, 3, 8000],
], ],
[ [
-212.50, -212.50,
0.00425, [0.00425, 1, 60, 50000],
1, ],
60, [
50000, 212.50,
[-0.00425, 1, 60, 50000],
], ],
[ [
-209.38324500656188, -209.38324500656188,
0.00425, [0.00425, 2, 60, 50000],
2, ],
60, [
50000, 208.495090812845,
[-0.00425, 2, 60, 50000],
], ],
[ [
0.0, 0.0,
0.00875, [0.00875, 1, 8, 10000, 5000, 1],
1, ],
8, [
10000, 0.0,
5000, [-0.00875, 1, 8, 10000, 5000, 1],
1,
], ],
[ [
-70.968650395558996, -70.968650395558996,
0.00875, [0.00875, 2, 8, 10000, 5000, 1],
2, ],
8, [
10000, 71.207753426393,
5000, [-0.00875, 2, 8, 10000, 5000, 1],
1,
], ],
[ [
'#VALUE!', '#VALUE!',
'NaN', ['NaN', 2, 8, 10000, 5000, 1],
2,
8,
10000,
5000,
1,
], ],
[ [
'#VALUE!', '#VALUE!',
0.00875, [0.00875, 'NaN', 8, 10000, 5000, 1],
'NaN',
8,
10000,
5000,
1,
], ],
[ [
'#VALUE!', '#VALUE!',
0.00875, [0.00875, 2, 'NaN', 10000, 5000, 1],
2,
'NaN',
10000,
5000,
1,
], ],
[ [
'#VALUE!', '#VALUE!',
0.00875, [0.00875, 2, 8, 'NaN', 5000, 1],
2,
8,
'NaN',
5000,
1,
], ],
[ [
'#VALUE!', '#VALUE!',
0.00875, [0.00875, 2, 8, 10000, 'NaN', 1],
2,
8,
10000,
'NaN',
1,
], ],
[ [
'#VALUE!', '#VALUE!',
0.00875, [0.00875, 2, 8, 10000, 5000, 'NaN'],
2,
8,
10000,
5000,
'NaN',
], ],
[ [
'#NUM!', '#NUM!',
0.00875, [0.00875, 2, 8, 10000, 5000, 2],
2,
8,
10000,
5000,
2,
], ],
[ [
'#NUM!', '#NUM!',
0.005, [0.005, -1, 8, 2500, 200, 1],
-1,
8,
2500,
200,
1,
], ],
[ [
'#NUM!', '#NUM!',
0.005, [0.005, 8, 2, 2500, 200, 1],
8,
2,
2500,
200,
1,
], ],
]; ];

View File

@ -5,117 +5,78 @@
return [ return [
[ [
59.673865674295001, 59.673865674295001,
0.01, [0.01, -100, -1000, 10000, 1],
-100,
-1000,
10000,
1,
], ],
[ [
60.082122853762002, 60.082122853762002,
0.01, [0.01, -100, -1000, 10000],
-100,
-1000,
10000,
], ],
[ [
-9.5785940398132006, -9.5785940398132006,
0.01, [0.01, -100, -1000],
-100,
-1000,
], ],
[ [
54.787577259999999, 54.787577259999999,
0.003333333333, [0.003333333333, -1000, 50000],
-1000,
50000,
], ],
[ [
11.90373729, 11.90373729,
0.015, [0.015, -1200, 9000, 5000, 1],
-1200, ],
9000, [
5000, 11.493114445230,
1, [-0.015, -1200, 9000, 5000, 1],
],
[
-11.328655672030,
[0.015, 1200, 9000, 5000, 1],
],
[
-3.046573306812,
[0.015, -1200, -9000, 5000, 1],
],
[
3.621654926975,
[0.015, -1200, 9000, -5000, 1],
], ],
[ [
11.666666667, 11.666666667,
0.0, [0.0, -1200, 9000, 5000, 1],
-1200,
9000,
5000,
1,
], ],
[ [
'#VALUE!', '#VALUE!',
'NaN', ['NaN', -1200, 9000, 5000, 1],
-1200,
9000,
5000,
1,
], ],
[ [
'#VALUE!', '#VALUE!',
0.015, [0.015, 'NaN', 9000, 5000, 1],
'NaN',
9000,
5000,
1,
], ],
[ [
'#VALUE!', '#VALUE!',
0.015, [0.015, -1200, 'NaN', 5000, 1],
-1200,
'NaN',
5000,
1,
], ],
[ [
'#VALUE!', '#VALUE!',
0.015, [0.015, -1200, 9000, 'NaN', 1],
-1200,
9000,
'NaN',
1,
], ],
[ [
'#VALUE!', '#VALUE!',
0.015, [0.015, -1200, 9000, 5000, 'NaN'],
-1200,
9000,
5000,
'NaN',
], ],
[ [
'#NUM!', '#NUM!',
0.015, [0.015, -1200, 9000, 5000, 2],
-1200,
9000,
5000,
2,
], ],
[ [
'#NUM!', '#NUM!',
0.015, [0.015, 0.0, 0.0, 5000, 1],
0.0,
0.0,
5000,
1,
], ],
[ [
'#NUM!', '#NUM!',
0.0, [0.0, 0.0, -500, 5000, 1],
0.0,
-500,
5000,
1,
], ],
[ [
'#NUM!', '#NUM!',
0.25, [0.25, 0.5, 0.0, 150, 1],
0.5,
0.0,
150,
1,
], ],
]; ];

View File

@ -5,10 +5,18 @@ return [
-1037.032089359164, -1037.032089359164,
[0.08 / 12, 10, 10000], [0.08 / 12, 10, 10000],
], ],
[
-963.701199976010,
[-0.08 / 12, 10, 10000],
],
[ [
-1030.164327177977, -1030.164327177977,
[0.08 / 12, 10, 10000, null, 1], [0.08 / 12, 10, 10000, null, 1],
], ],
[
-970.168993264440,
[-0.08 / 12, 10, 10000, null, 1],
],
[ [
-129.081160867995, -129.081160867995,
[0.06 / 12, 18 * 12, 0.0, 50000], [0.06 / 12, 18 * 12, 0.0, 50000],

View File

@ -13,14 +13,26 @@ return [
-27598.053462421, -27598.053462421,
[0.08, 10, 10, 200000], [0.08, 10, 10, 200000],
], ],
[
-13356.484444134500,
[-0.08, 10, 10, 200000],
],
[ [
-735.22834886722, -735.22834886722,
[0.05 / 12, 1, 60, 50000], [0.05 / 12, 1, 60, 50000],
], ],
[
-940.107483227145,
[-0.05 / 12, 1, 60, 50000],
],
[ [
-738.29180032083, -738.29180032083,
[0.05 / 12, 2, 60, 50000], [0.05 / 12, 2, 60, 50000],
], ],
[
-936.190368713698,
[-0.05 / 12, 2, 60, 50000],
],
[ [
-600.85202718047, -600.85202718047,
[0.035 / 4, 1, 8, 0, 5000, 1], [0.035 / 4, 1, 8, 0, 5000, 1],

View File

@ -5,10 +5,42 @@ return [
-52990.70632392715, -52990.70632392715,
[0.05 / 12, 60, 1000], [0.05 / 12, 60, 1000],
], ],
[
-68327.092460502600,
[-0.05 / 12, 60, 1000],
],
[ [
-26762.755452881098, -26762.755452881098,
[0.10 / 4, 16, 2000, 0, 1], [0.10 / 4, 16, 2000, 0, 1],
], ],
[
-38955.527352284700,
[-0.10 / 4, 16, 2000, 0, 1],
],
[
26762.755452881100,
[0.10 / 4, 16, -2000, 0, 1],
],
[
-34846.254654898500,
[0.10 / 4, 16, 2000, 12000, 1],
],
[
18679.256250863700,
[0.10 / 4, 16, -2000, 12000, 1],
],
[
-18679.256250863700,
[0.10 / 4, 16, 2000, -12000, 1],
],
[
34846.254654898500,
[0.10 / 4, 16, -2000, -12000, 1],
],
[
56948.685406482400,
[-0.10 / 4, 16, -2000, -12000, 1],
],
[ [
-5555.6058459337655, -5555.6058459337655,
[0.075 / 12, 2 * 12, 250, null, 0], [0.075 / 12, 2 * 12, 250, null, 0],