Skip to content

Commit df12b06

Browse files
author
MarkBaker
committed
Text function array value tests, plus some cleanup
1 parent 5ab3cbc commit df12b06

File tree

20 files changed

+281
-50
lines changed

20 files changed

+281
-50
lines changed

phpstan-baseline.neon

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -927,7 +927,12 @@ parameters:
927927

928928
-
929929
message: "#^Parameter \\#1 \\$year of static method PhpOffice\\\\PhpSpreadsheet\\\\Calculation\\\\Financial\\\\Helpers\\:\\:daysPerYear\\(\\) expects int\\|string, array\\|int\\|string given\\.$#"
930-
count: 3
930+
count: 1
931+
path: src/PhpSpreadsheet/Calculation/Financial/Coupons.php
932+
933+
-
934+
message: "#^Parameter \\#1 \\$year of static method PhpOffice\\\\PhpSpreadsheet\\\\Calculation\\\\Financial\\\\Helpers\\:\\:daysPerYear\\(\\) expects int\\|string, mixed given\\.$#"
935+
count: 2
931936
path: src/PhpSpreadsheet/Calculation/Financial/Coupons.php
932937

933938
-
@@ -976,12 +981,12 @@ parameters:
976981
path: src/PhpSpreadsheet/Calculation/Financial/Dollar.php
977982

978983
-
979-
message: "#^Method PhpOffice\\\\PhpSpreadsheet\\\\Calculation\\\\Financial\\\\Securities\\\\AccruedInterest\\:\\:atMaturity\\(\\) should return float\\|string but returns array\\|string\\.$#"
984+
message: "#^Method PhpOffice\\\\PhpSpreadsheet\\\\Calculation\\\\Financial\\\\Securities\\\\AccruedInterest\\:\\:atMaturity\\(\\) should return float\\|string but returns mixed\\.$#"
980985
count: 1
981986
path: src/PhpSpreadsheet/Calculation/Financial/Securities/AccruedInterest.php
982987

983988
-
984-
message: "#^Method PhpOffice\\\\PhpSpreadsheet\\\\Calculation\\\\Financial\\\\Securities\\\\AccruedInterest\\:\\:periodic\\(\\) should return float\\|string but returns array\\|string\\.$#"
989+
message: "#^Method PhpOffice\\\\PhpSpreadsheet\\\\Calculation\\\\Financial\\\\Securities\\\\AccruedInterest\\:\\:periodic\\(\\) should return float\\|string but returns mixed\\.$#"
985990
count: 2
986991
path: src/PhpSpreadsheet/Calculation/Financial/Securities/AccruedInterest.php
987992

@@ -991,12 +996,12 @@ parameters:
991996
path: src/PhpSpreadsheet/Calculation/Financial/Securities/Price.php
992997

993998
-
994-
message: "#^Method PhpOffice\\\\PhpSpreadsheet\\\\Calculation\\\\Financial\\\\Securities\\\\Price\\:\\:priceAtMaturity\\(\\) should return float\\|string but returns array\\|string\\.$#"
995-
count: 3
999+
message: "#^Method PhpOffice\\\\PhpSpreadsheet\\\\Calculation\\\\Financial\\\\Securities\\\\Price\\:\\:priceAtMaturity\\(\\) should return float\\|string but returns mixed\\.$#"
1000+
count: 4
9961001
path: src/PhpSpreadsheet/Calculation/Financial/Securities/Price.php
9971002

9981003
-
999-
message: "#^Method PhpOffice\\\\PhpSpreadsheet\\\\Calculation\\\\Financial\\\\Securities\\\\Price\\:\\:priceDiscounted\\(\\) should return float\\|string but returns array\\|string\\.$#"
1004+
message: "#^Method PhpOffice\\\\PhpSpreadsheet\\\\Calculation\\\\Financial\\\\Securities\\\\Price\\:\\:priceDiscounted\\(\\) should return float\\|string but returns mixed\\.$#"
10001005
count: 1
10011006
path: src/PhpSpreadsheet/Calculation/Financial/Securities/Price.php
10021007

@@ -1011,22 +1016,22 @@ parameters:
10111016
path: src/PhpSpreadsheet/Calculation/Financial/Securities/Price.php
10121017

10131018
-
1014-
message: "#^Method PhpOffice\\\\PhpSpreadsheet\\\\Calculation\\\\Financial\\\\Securities\\\\Rates\\:\\:discount\\(\\) should return float\\|string but returns array\\|string\\.$#"
1019+
message: "#^Method PhpOffice\\\\PhpSpreadsheet\\\\Calculation\\\\Financial\\\\Securities\\\\Rates\\:\\:discount\\(\\) should return float\\|string but returns mixed\\.$#"
10151020
count: 1
10161021
path: src/PhpSpreadsheet/Calculation/Financial/Securities/Rates.php
10171022

10181023
-
1019-
message: "#^Method PhpOffice\\\\PhpSpreadsheet\\\\Calculation\\\\Financial\\\\Securities\\\\Rates\\:\\:interest\\(\\) should return float\\|string but returns array\\|string\\.$#"
1024+
message: "#^Method PhpOffice\\\\PhpSpreadsheet\\\\Calculation\\\\Financial\\\\Securities\\\\Rates\\:\\:interest\\(\\) should return float\\|string but returns mixed\\.$#"
10201025
count: 1
10211026
path: src/PhpSpreadsheet/Calculation/Financial/Securities/Rates.php
10221027

10231028
-
1024-
message: "#^Method PhpOffice\\\\PhpSpreadsheet\\\\Calculation\\\\Financial\\\\Securities\\\\Yields\\:\\:yieldAtMaturity\\(\\) should return float\\|string but returns array\\|string\\.$#"
1029+
message: "#^Method PhpOffice\\\\PhpSpreadsheet\\\\Calculation\\\\Financial\\\\Securities\\\\Yields\\:\\:yieldAtMaturity\\(\\) should return float\\|string but returns mixed\\.$#"
10251030
count: 3
10261031
path: src/PhpSpreadsheet/Calculation/Financial/Securities/Yields.php
10271032

10281033
-
1029-
message: "#^Method PhpOffice\\\\PhpSpreadsheet\\\\Calculation\\\\Financial\\\\Securities\\\\Yields\\:\\:yieldDiscounted\\(\\) should return float\\|string but returns array\\|string\\.$#"
1034+
message: "#^Method PhpOffice\\\\PhpSpreadsheet\\\\Calculation\\\\Financial\\\\Securities\\\\Yields\\:\\:yieldDiscounted\\(\\) should return float\\|string but returns mixed\\.$#"
10301035
count: 1
10311036
path: src/PhpSpreadsheet/Calculation/Financial/Securities/Yields.php
10321037

@@ -1036,7 +1041,7 @@ parameters:
10361041
path: src/PhpSpreadsheet/Calculation/Financial/Securities/Yields.php
10371042

10381043
-
1039-
message: "#^Parameter \\#1 \\$year of static method PhpOffice\\\\PhpSpreadsheet\\\\Calculation\\\\Financial\\\\Helpers\\:\\:daysPerYear\\(\\) expects int\\|string, array\\|int\\|string given\\.$#"
1044+
message: "#^Parameter \\#1 \\$year of static method PhpOffice\\\\PhpSpreadsheet\\\\Calculation\\\\Financial\\\\Helpers\\:\\:daysPerYear\\(\\) expects int\\|string, mixed given\\.$#"
10401045
count: 3
10411046
path: src/PhpSpreadsheet/Calculation/Financial/TreasuryBill.php
10421047

src/PhpSpreadsheet/Calculation/Financial.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -587,10 +587,10 @@ public static function DISC($settlement, $maturity, $price, $redemption, $basis
587587
* @see Financial\Dollar::decimal()
588588
* Use the decimal() method in the Financial\Dollar class instead
589589
*
590-
* @param float $fractional_dollar Fractional Dollar
591-
* @param int $fraction Fraction
590+
* @param array|float $fractional_dollar Fractional Dollar
591+
* @param array|int $fraction Fraction
592592
*
593-
* @return float|string
593+
* @return array|float|string
594594
*/
595595
public static function DOLLARDE($fractional_dollar = null, $fraction = 0)
596596
{
@@ -612,10 +612,10 @@ public static function DOLLARDE($fractional_dollar = null, $fraction = 0)
612612
* @see Financial\Dollar::fractional()
613613
* Use the fractional() method in the Financial\Dollar class instead
614614
*
615-
* @param float $decimal_dollar Decimal Dollar
616-
* @param int $fraction Fraction
615+
* @param array|float $decimal_dollar Decimal Dollar
616+
* @param array|int $fraction Fraction
617617
*
618-
* @return float|string
618+
* @return array|float|string
619619
*/
620620
public static function DOLLARFR($decimal_dollar = null, $fraction = 0)
621621
{

src/PhpSpreadsheet/Calculation/Financial/Amortization.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ public static function AMORLINC(
168168

169169
if (
170170
($basis == FinancialConstants::BASIS_DAYS_PER_YEAR_ACTUAL) &&
171-
($yearFrac < 1) && (DateTimeExcel\Helpers::isLeapYear($purchasedYear))
171+
($yearFrac < 1) && (Functions::scalar(DateTimeExcel\Helpers::isLeapYear($purchasedYear)))
172172
) {
173173
$yearFrac *= 365 / 366;
174174
}

src/PhpSpreadsheet/Calculation/Financial/Coupons.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ public static function COUPDAYBS(
6464
return $e->getMessage();
6565
}
6666

67-
$daysPerYear = Helpers::daysPerYear(DateTimeExcel\DateParts::year($settlement), $basis);
67+
$daysPerYear = Helpers::daysPerYear(Functions::scalar(DateTimeExcel\DateParts::year($settlement)), $basis);
6868
if (is_string($daysPerYear)) {
6969
return Functions::VALUE();
7070
}
@@ -134,7 +134,7 @@ public static function COUPDAYS(
134134
case FinancialConstants::BASIS_DAYS_PER_YEAR_ACTUAL:
135135
// Actual/actual
136136
if ($frequency == FinancialConstants::FREQUENCY_ANNUAL) {
137-
$daysPerYear = (int) Helpers::daysPerYear(DateTimeExcel\DateParts::year($settlement), $basis);
137+
$daysPerYear = (int) Helpers::daysPerYear(Functions::scalar(DateTimeExcel\DateParts::year($settlement)), $basis);
138138

139139
return $daysPerYear / $frequency;
140140
}

src/PhpSpreadsheet/Calculation/Financial/Dollar.php

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,25 @@
22

33
namespace PhpOffice\PhpSpreadsheet\Calculation\Financial;
44

5+
use PhpOffice\PhpSpreadsheet\Calculation\ArrayEnabled;
56
use PhpOffice\PhpSpreadsheet\Calculation\Functions;
67
use PhpOffice\PhpSpreadsheet\Calculation\TextData\Format;
78

89
class Dollar
910
{
11+
use ArrayEnabled;
12+
1013
/**
1114
* DOLLAR.
1215
*
1316
* This function converts a number to text using currency format, with the decimals rounded to the specified place.
1417
* The format used is $#,##0.00_);($#,##0.00)..
1518
*
16-
* @param mixed $number The value to format
19+
* @param mixed $number The value to format, or can be an array of numbers
1720
* @param mixed $precision The number of digits to display to the right of the decimal point (as an integer).
1821
* If precision is negative, number is rounded to the left of the decimal point.
1922
* If you omit precision, it is assumed to be 2
23+
* Or can be an array of precision values
2024
*/
2125
public static function format($number, $precision = 2): string
2226
{
@@ -34,12 +38,18 @@ public static function format($number, $precision = 2): string
3438
* DOLLARDE(fractional_dollar,fraction)
3539
*
3640
* @param mixed $fractionalDollar Fractional Dollar
41+
* Or can be an array of values
3742
* @param mixed $fraction Fraction
43+
* Or can be an array of values
3844
*
39-
* @return float|string
45+
* @return array|float|string
4046
*/
4147
public static function decimal($fractionalDollar = null, $fraction = 0)
4248
{
49+
if (is_array($fractionalDollar) || is_array($fraction)) {
50+
return self::evaluateArrayArguments([self::class, __FUNCTION__], $fractionalDollar, $fraction);
51+
}
52+
4353
$fractionalDollar = Functions::flattenSingleValue($fractionalDollar);
4454
$fraction = (int) Functions::flattenSingleValue($fraction);
4555

@@ -51,8 +61,8 @@ public static function decimal($fractionalDollar = null, $fraction = 0)
5161
return Functions::DIV0();
5262
}
5363

54-
$dollars = floor($fractionalDollar);
55-
$cents = fmod($fractionalDollar, 1);
64+
$dollars = ($fractionalDollar < 0) ? ceil($fractionalDollar): floor($fractionalDollar);
65+
$cents = fmod($fractionalDollar, 1.0);
5666
$cents /= $fraction;
5767
$cents *= 10 ** ceil(log10($fraction));
5868

@@ -70,12 +80,18 @@ public static function decimal($fractionalDollar = null, $fraction = 0)
7080
* DOLLARFR(decimal_dollar,fraction)
7181
*
7282
* @param mixed $decimalDollar Decimal Dollar
83+
* Or can be an array of values
7384
* @param mixed $fraction Fraction
85+
* Or can be an array of values
7486
*
75-
* @return float|string
87+
* @return array|float|string
7688
*/
7789
public static function fractional($decimalDollar = null, $fraction = 0)
7890
{
91+
if (is_array($decimalDollar) || is_array($fraction)) {
92+
return self::evaluateArrayArguments([self::class, __FUNCTION__], $decimalDollar, $fraction);
93+
}
94+
7995
$decimalDollar = Functions::flattenSingleValue($decimalDollar);
8096
$fraction = (int) Functions::flattenSingleValue($fraction);
8197

src/PhpSpreadsheet/Calculation/Financial/Securities/AccruedInterest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,12 +78,12 @@ public static function periodic(
7878
return $e->getMessage();
7979
}
8080

81-
$daysBetweenIssueAndSettlement = YearFrac::fraction($issue, $settlement, $basis);
81+
$daysBetweenIssueAndSettlement = Functions::scalar(YearFrac::fraction($issue, $settlement, $basis));
8282
if (!is_numeric($daysBetweenIssueAndSettlement)) {
8383
// return date error
8484
return $daysBetweenIssueAndSettlement;
8585
}
86-
$daysBetweenFirstInterestAndSettlement = YearFrac::fraction($firstInterest, $settlement, $basis);
86+
$daysBetweenFirstInterestAndSettlement = Functions::scalar(YearFrac::fraction($firstInterest, $settlement, $basis));
8787
if (!is_numeric($daysBetweenFirstInterestAndSettlement)) {
8888
// return date error
8989
return $daysBetweenFirstInterestAndSettlement;
@@ -140,7 +140,7 @@ public static function atMaturity(
140140
return $e->getMessage();
141141
}
142142

143-
$daysBetweenIssueAndSettlement = YearFrac::fraction($issue, $settlement, $basis);
143+
$daysBetweenIssueAndSettlement = Functions::scalar(YearFrac::fraction($issue, $settlement, $basis));
144144
if (!is_numeric($daysBetweenIssueAndSettlement)) {
145145
// return date error
146146
return $daysBetweenIssueAndSettlement;

src/PhpSpreadsheet/Calculation/Financial/Securities/Price.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ public static function priceDiscounted(
134134
return $e->getMessage();
135135
}
136136

137-
$daysBetweenSettlementAndMaturity = DateTimeExcel\YearFrac::fraction($settlement, $maturity, $basis);
137+
$daysBetweenSettlementAndMaturity = Functions::scalar(DateTimeExcel\YearFrac::fraction($settlement, $maturity, $basis));
138138
if (!is_numeric($daysBetweenSettlementAndMaturity)) {
139139
// return date error
140140
return $daysBetweenSettlementAndMaturity;
@@ -194,23 +194,23 @@ public static function priceAtMaturity(
194194
return $e->getMessage();
195195
}
196196

197-
$daysPerYear = Helpers::daysPerYear(DateTimeExcel\DateParts::year($settlement), $basis);
197+
$daysPerYear = Functions::scalar(Helpers::daysPerYear(DateTimeExcel\DateParts::year($settlement), $basis));
198198
if (!is_numeric($daysPerYear)) {
199199
return $daysPerYear;
200200
}
201-
$daysBetweenIssueAndSettlement = DateTimeExcel\YearFrac::fraction($issue, $settlement, $basis);
201+
$daysBetweenIssueAndSettlement = Functions::scalar(DateTimeExcel\YearFrac::fraction($issue, $settlement, $basis));
202202
if (!is_numeric($daysBetweenIssueAndSettlement)) {
203203
// return date error
204204
return $daysBetweenIssueAndSettlement;
205205
}
206206
$daysBetweenIssueAndSettlement *= $daysPerYear;
207-
$daysBetweenIssueAndMaturity = DateTimeExcel\YearFrac::fraction($issue, $maturity, $basis);
207+
$daysBetweenIssueAndMaturity = Functions::scalar(DateTimeExcel\YearFrac::fraction($issue, $maturity, $basis));
208208
if (!is_numeric($daysBetweenIssueAndMaturity)) {
209209
// return date error
210210
return $daysBetweenIssueAndMaturity;
211211
}
212212
$daysBetweenIssueAndMaturity *= $daysPerYear;
213-
$daysBetweenSettlementAndMaturity = DateTimeExcel\YearFrac::fraction($settlement, $maturity, $basis);
213+
$daysBetweenSettlementAndMaturity = Functions::scalar(DateTimeExcel\YearFrac::fraction($settlement, $maturity, $basis));
214214
if (!is_numeric($daysBetweenSettlementAndMaturity)) {
215215
// return date error
216216
return $daysBetweenSettlementAndMaturity;

src/PhpSpreadsheet/Calculation/Financial/Securities/Rates.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public static function discount(
6363
return Functions::NAN();
6464
}
6565

66-
$daysBetweenSettlementAndMaturity = DateTimeExcel\YearFrac::fraction($settlement, $maturity, $basis);
66+
$daysBetweenSettlementAndMaturity = Functions::scalar(DateTimeExcel\YearFrac::fraction($settlement, $maturity, $basis));
6767
if (!is_numeric($daysBetweenSettlementAndMaturity)) {
6868
// return date error
6969
return $daysBetweenSettlementAndMaturity;
@@ -126,7 +126,7 @@ public static function interest(
126126
return Functions::NAN();
127127
}
128128

129-
$daysBetweenSettlementAndMaturity = DateTimeExcel\YearFrac::fraction($settlement, $maturity, $basis);
129+
$daysBetweenSettlementAndMaturity = Functions::scalar(DateTimeExcel\YearFrac::fraction($settlement, $maturity, $basis));
130130
if (!is_numeric($daysBetweenSettlementAndMaturity)) {
131131
// return date error
132132
return $daysBetweenSettlementAndMaturity;

src/PhpSpreadsheet/Calculation/Financial/Securities/Yields.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ public static function yieldDiscounted(
6161
if (!is_numeric($daysPerYear)) {
6262
return $daysPerYear;
6363
}
64-
$daysBetweenSettlementAndMaturity = DateTimeExcel\YearFrac::fraction($settlement, $maturity, $basis);
64+
$daysBetweenSettlementAndMaturity = Functions::scalar(DateTimeExcel\YearFrac::fraction($settlement, $maturity, $basis));
6565
if (!is_numeric($daysBetweenSettlementAndMaturity)) {
6666
// return date error
6767
return $daysBetweenSettlementAndMaturity;
@@ -126,19 +126,19 @@ public static function yieldAtMaturity(
126126
if (!is_numeric($daysPerYear)) {
127127
return $daysPerYear;
128128
}
129-
$daysBetweenIssueAndSettlement = DateTimeExcel\YearFrac::fraction($issue, $settlement, $basis);
129+
$daysBetweenIssueAndSettlement = Functions::scalar(DateTimeExcel\YearFrac::fraction($issue, $settlement, $basis));
130130
if (!is_numeric($daysBetweenIssueAndSettlement)) {
131131
// return date error
132132
return $daysBetweenIssueAndSettlement;
133133
}
134134
$daysBetweenIssueAndSettlement *= $daysPerYear;
135-
$daysBetweenIssueAndMaturity = DateTimeExcel\YearFrac::fraction($issue, $maturity, $basis);
135+
$daysBetweenIssueAndMaturity = Functions::scalar(DateTimeExcel\YearFrac::fraction($issue, $maturity, $basis));
136136
if (!is_numeric($daysBetweenIssueAndMaturity)) {
137137
// return date error
138138
return $daysBetweenIssueAndMaturity;
139139
}
140140
$daysBetweenIssueAndMaturity *= $daysPerYear;
141-
$daysBetweenSettlementAndMaturity = DateTimeExcel\YearFrac::fraction($settlement, $maturity, $basis);
141+
$daysBetweenSettlementAndMaturity = Functions::scalar(DateTimeExcel\YearFrac::fraction($settlement, $maturity, $basis));
142142
if (!is_numeric($daysBetweenSettlementAndMaturity)) {
143143
// return date error
144144
return $daysBetweenSettlementAndMaturity;

src/PhpSpreadsheet/Calculation/Financial/TreasuryBill.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public static function bondEquivalentYield($settlement, $maturity, $discount)
4343

4444
$daysBetweenSettlementAndMaturity = $maturity - $settlement;
4545
$daysPerYear = Helpers::daysPerYear(
46-
DateTimeExcel\DateParts::year($maturity),
46+
Functions::scalar(DateTimeExcel\DateParts::year($maturity)),
4747
FinancialConstants::BASIS_DAYS_PER_YEAR_ACTUAL
4848
);
4949

@@ -88,7 +88,7 @@ public static function price($settlement, $maturity, $discount)
8888

8989
$daysBetweenSettlementAndMaturity = $maturity - $settlement;
9090
$daysPerYear = Helpers::daysPerYear(
91-
DateTimeExcel\DateParts::year($maturity),
91+
Functions::scalar(DateTimeExcel\DateParts::year($maturity)),
9292
FinancialConstants::BASIS_DAYS_PER_YEAR_ACTUAL
9393
);
9494

@@ -134,7 +134,7 @@ public static function yield($settlement, $maturity, $price)
134134

135135
$daysBetweenSettlementAndMaturity = $maturity - $settlement;
136136
$daysPerYear = Helpers::daysPerYear(
137-
DateTimeExcel\DateParts::year($maturity),
137+
Functions::scalar(DateTimeExcel\DateParts::year($maturity)),
138138
FinancialConstants::BASIS_DAYS_PER_YEAR_ACTUAL
139139
);
140140

src/PhpSpreadsheet/Calculation/MathTrig/Sqrt.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class Sqrt
1616
*
1717
* @param mixed $number Should be numeric, or can be an array of numbers
1818
*
19-
* @return array|float|string square roor
19+
* @return array|float|string square root
2020
* If an array of numbers is passed as the argument, then the returned result will also be an array
2121
* with the same dimensions
2222
*/

0 commit comments

Comments
 (0)