Passed
Push — master ( e78bca...f65b0a )
by
unknown
14:57 queued 07:09
created

ComplexAssert   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 66
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 9
eloc 41
dl 0
loc 66
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A adjustDelta() 0 10 4
A assertComplexEquals() 0 50 5
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