1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
declare(strict_types=1); |
4
|
|
|
|
5
|
|
|
namespace PhpOffice\PhpSpreadsheetTests\Custom; |
6
|
|
|
|
7
|
|
|
use Complex\Complex; |
8
|
|
|
use PHPUnit\Framework\TestCase; |
9
|
|
|
|
10
|
|
|
class ComplexAssert extends TestCase |
11
|
|
|
{ |
12
|
|
|
protected float $complexPrecision = 1E-12; |
13
|
|
|
|
14
|
|
|
private function adjustDelta(float $expected, float $actual, float $delta): float |
15
|
|
|
{ |
16
|
|
|
$adjustedDelta = $delta; |
17
|
|
|
|
18
|
|
|
if (abs($actual) > 10 && abs($expected) > 10) { |
19
|
|
|
$variance = floor(log10(abs($expected))); |
20
|
|
|
$adjustedDelta *= 10 ** $variance; |
21
|
|
|
} |
22
|
|
|
|
23
|
|
|
return $adjustedDelta > 1.0 ? 1.0 : $adjustedDelta; |
24
|
|
|
} |
25
|
|
|
|
26
|
|
|
public function assertComplexEquals(mixed $expected, mixed $actual, ?float $delta = null): bool |
27
|
|
|
{ |
28
|
|
|
if ($expected === INF) { |
29
|
|
|
self::assertSame('INF', $actual); |
30
|
|
|
|
31
|
|
|
return true; |
32
|
|
|
} |
33
|
|
|
if (is_string($expected) && $expected[0] === '#') { |
34
|
|
|
self::assertSame( |
35
|
|
|
$expected, |
36
|
|
|
$actual, |
37
|
|
|
'Mismatched Error' |
38
|
|
|
); |
39
|
|
|
|
40
|
|
|
return true; |
41
|
|
|
} |
42
|
|
|
|
43
|
|
|
if ($delta === null) { |
44
|
|
|
$delta = $this->complexPrecision; |
45
|
|
|
} |
46
|
|
|
$expectedComplex = new Complex($expected); |
47
|
|
|
$actualComplex = new Complex($actual); |
48
|
|
|
|
49
|
|
|
$comparand1 = $expectedComplex->getReal(); |
50
|
|
|
$comparand2 = $actualComplex->getReal(); |
51
|
|
|
$adjustedDelta = $this->adjustDelta($comparand1, $comparand2, $delta); |
52
|
|
|
self::assertEqualsWithDelta( |
53
|
|
|
$comparand1, |
54
|
|
|
$comparand2, |
55
|
|
|
$adjustedDelta, |
56
|
|
|
'Mismatched Real part' |
57
|
|
|
); |
58
|
|
|
|
59
|
|
|
$comparand1 = $expectedComplex->getImaginary(); |
60
|
|
|
$comparand2 = $actualComplex->getImaginary(); |
61
|
|
|
$adjustedDelta = $this->adjustDelta($comparand1, $comparand2, $delta); |
62
|
|
|
self::assertEqualsWithDelta( |
63
|
|
|
$comparand1, |
64
|
|
|
$comparand2, |
65
|
|
|
$adjustedDelta, |
66
|
|
|
'Mismatched Imaginary part' |
67
|
|
|
); |
68
|
|
|
|
69
|
|
|
self::assertSame( |
70
|
|
|
$expectedComplex->getSuffix(), |
71
|
|
|
$actualComplex->getSuffix(), |
72
|
|
|
'Mismatched Suffix' |
73
|
|
|
); |
74
|
|
|
|
75
|
|
|
return true; |
76
|
|
|
} |
77
|
|
|
} |
78
|
|
|
|