Passed
Push — master ( 62401f...daf94f )
by Alec
07:24
created

DataOHLCVWithDataProviderTest::check()   D

Complexity

Conditions 10
Paths 512

Size

Total Lines 28
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 10
eloc 18
nc 512
nop 0
dl 0
loc 28
rs 4.1777
c 0
b 0
f 0

How to fix   Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
/**
3
 * User: alec
4
 * Date: 31.10.18
5
 * Time: 16:33
6
 */
7
8
namespace Unit;
9
10
11
use AlecRabbit\DataOHLCV;
12
use PHPUnit\Framework\TestCase;
13
use Unit\DataProviders\OHLCBasicDataProvider;
14
15
class DataOHLCVWithDataProviderTest extends TestCase
16
{
17
    /** @var DataOHLCV */
18
    protected $ohlcv;
19
20
    public function setUp()
21
    {
22
        $this->ohlcv = new DataOHLCV('btc_usd', 1440);
23
        foreach (OHLCBasicDataProvider::data() as $item) {
24
            [$timestamp, $type, $price, $amount] = $item;
25
            $this->ohlcv->addTrade($timestamp, $type, $price, $amount);
26
        }
27
    }
28
29
    /**
30
     * @test
31
     */
32
    public function check(): void
33
    {
34
        foreach ($this->dataToCheckVolumes() as $resolution => $expected) {
35
            $this->assertEquals($expected, $this->ohlcv->getVolumes($resolution));
36
        }
37
        foreach ($this->dataToCheckOpens() as $resolution => $expected) {
38
            $this->assertEquals($expected, $this->ohlcv->getOpens($resolution));
39
        }
40
        foreach ($this->dataToCheckHighs() as $resolution => $expected) {
41
            $this->assertEquals($expected, $this->ohlcv->getHighs($resolution));
42
        }
43
        foreach ($this->dataToCheckLows() as $resolution => $expected) {
44
            $this->assertEquals($expected, $this->ohlcv->getLows($resolution));
45
        }
46
        foreach ($this->dataToCheckCloses() as $resolution => $expected) {
47
            $this->assertEquals($expected, $this->ohlcv->getCloses($resolution));
48
        }
49
        foreach ($this->dataToCheckHasPeriods() as $resolution => $expected) {
50
            $this->assertEquals($expected, $this->ohlcv->hasPeriods($resolution, 1));
51
        }
52
        foreach ($this->dataToCheckLastHigh() as $resolution => $expected) {
53
            $this->assertEquals($expected, $this->ohlcv->getLastHigh($resolution), "Resolution: {$resolution}");
54
        }
55
        foreach ($this->dataToCheckLastLow() as $resolution => $expected) {
56
            $this->assertEquals($expected, $this->ohlcv->getLastLow($resolution), "Resolution: {$resolution}");
57
        }
58
        foreach ($this->dataToCheckLastClose() as $resolution => $expected) {
59
            $this->assertEquals($expected, $this->ohlcv->getLastClose($resolution), "Resolution: {$resolution}");
60
        }
61
    }
62
63
    private function dataToCheckVolumes(): array
64
    {
65
        return [
66
            RESOLUTION_01min => array_fill(0, 1439, 0.001111),
67
            RESOLUTION_03min => array_fill(0, 479, 0.003333),
68
            RESOLUTION_05min => array_fill(0, 287, 0.005555),
69
            RESOLUTION_15min => array_fill(0, 95, 0.016665),
70
            RESOLUTION_30min => array_fill(0, 47, 0.03333),
71
            RESOLUTION_45min => array_fill(0, 31, 0.049995),
72
            RESOLUTION_01hour => array_fill(0, 23, 0.06666),
73
            RESOLUTION_02hour => array_fill(0, 11, 0.13332),
74
            RESOLUTION_03hour => array_fill(0, 7, 0.19998),
75
            RESOLUTION_04hour => array_fill(0, 5, 0.26664),
76
            RESOLUTION_01day => array_fill(0, 0, 1.59984),
77
        ];
78
    }
79
80
    private function dataToCheckOpens(): array
81
    {
82
        return [
83
            RESOLUTION_01min => array_fill(0, 1439, 10000.0022),
84
            RESOLUTION_03min => array_fill(0, 479, 10000.0022),
85
            RESOLUTION_05min => array_fill(0, 287, 10000.0022),
86
            RESOLUTION_15min => array_fill(0, 95, 10000.0022),
87
            RESOLUTION_30min => array_fill(0, 47, 10000.0022),
88
            RESOLUTION_45min => array_fill(0, 31, 10000.0022),
89
            RESOLUTION_01hour => array_fill(0, 23, 10000.0022),
90
            RESOLUTION_02hour => array_fill(0, 11, 10000.0022),
91
            RESOLUTION_03hour => array_fill(0, 7, 10000.0022),
92
            RESOLUTION_04hour => array_fill(0, 5, 10000.0022),
93
            RESOLUTION_01day => array_fill(0, 0, 10000.0022),
94
        ];
95
    }
96
97
    private function dataToCheckHighs(): array
98
    {
99
        return [
100
            RESOLUTION_01min => array_fill(0, 1439, 10000.2022),
101
            RESOLUTION_03min => array_fill(0, 479, 10000.2022),
102
            RESOLUTION_05min => array_fill(0, 287, 10000.2022),
103
            RESOLUTION_15min => array_fill(0, 95, 10000.2022),
104
            RESOLUTION_30min => array_fill(0, 47, 10000.2022),
105
            RESOLUTION_45min => array_fill(0, 31, 10000.2022),
106
            RESOLUTION_01hour => array_fill(0, 23, 10000.2022),
107
            RESOLUTION_02hour => array_fill(0, 11, 10000.2022),
108
            RESOLUTION_03hour => array_fill(0, 7, 10000.2022),
109
            RESOLUTION_04hour => array_fill(0, 5, 10000.2022),
110
            RESOLUTION_01day => array_fill(0, 0, 10000.2022),
111
        ];
112
    }
113
114
    private function dataToCheckLows(): array
115
    {
116
        return [
117
            RESOLUTION_01min => array_fill(0, 1439, 10000.0001),
118
            RESOLUTION_03min => array_fill(0, 479, 10000.0001),
119
            RESOLUTION_05min => array_fill(0, 287, 10000.0001),
120
            RESOLUTION_15min => array_fill(0, 95, 10000.0001),
121
            RESOLUTION_30min => array_fill(0, 47, 10000.0001),
122
            RESOLUTION_45min => array_fill(0, 31, 10000.0001),
123
            RESOLUTION_01hour => array_fill(0, 23, 10000.0001),
124
            RESOLUTION_02hour => array_fill(0, 11, 10000.0001),
125
            RESOLUTION_03hour => array_fill(0, 7, 10000.0001),
126
            RESOLUTION_04hour => array_fill(0, 5, 10000.0001),
127
            RESOLUTION_01day => array_fill(0, 0, 10000.0001),
128
        ];
129
    }
130
131
    private function dataToCheckCloses(): array
132
    {
133
        return [
134
            RESOLUTION_01min => array_fill(0, 1439, 10000.0505),
135
            RESOLUTION_03min => array_fill(0, 479, 10000.0505),
136
            RESOLUTION_05min => array_fill(0, 287, 10000.0505),
137
            RESOLUTION_15min => array_fill(0, 95, 10000.0505),
138
            RESOLUTION_30min => array_fill(0, 47, 10000.0505),
139
            RESOLUTION_45min => array_fill(0, 31, 10000.0505),
140
            RESOLUTION_01hour => array_fill(0, 23, 10000.0505),
141
            RESOLUTION_02hour => array_fill(0, 11, 10000.0505),
142
            RESOLUTION_03hour => array_fill(0, 7, 10000.0505),
143
            RESOLUTION_04hour => array_fill(0, 5, 10000.0505),
144
            RESOLUTION_01day => array_fill(0, 0, 10000.0505),
145
        ];
146
    }
147
148
    private function dataToCheckHasPeriods(): array
149
    {
150
        return [
151
            RESOLUTION_01min => true,
152
            RESOLUTION_03min => true,
153
            RESOLUTION_05min => true,
154
            RESOLUTION_15min => true,
155
            RESOLUTION_30min => true,
156
            RESOLUTION_45min => true,
157
            RESOLUTION_01hour => true,
158
            RESOLUTION_02hour => true,
159
            RESOLUTION_03hour => true,
160
            RESOLUTION_04hour => true,
161
            RESOLUTION_01day => false,
162
        ];
163
    }
164
165
    private function dataToCheckLastHigh(): array
166
    {
167
        return [
168
            RESOLUTION_01min => 10000.2022,
169
            RESOLUTION_03min => 10000.2022,
170
            RESOLUTION_05min => 10000.2022,
171
            RESOLUTION_15min => 10000.2022,
172
            RESOLUTION_30min => 10000.2022,
173
            RESOLUTION_45min => 10000.2022,
174
            RESOLUTION_01hour => 10000.2022,
175
            RESOLUTION_02hour => 10000.2022,
176
            RESOLUTION_03hour => 10000.2022,
177
            RESOLUTION_04hour => 10000.2022,
178
            RESOLUTION_01day => null,
179
        ];
180
    }
181
182
    private function dataToCheckLastLow(): array
183
    {
184
        return [
185
            RESOLUTION_01min => 10000.0001,
186
            RESOLUTION_03min => 10000.0001,
187
            RESOLUTION_05min => 10000.0001,
188
            RESOLUTION_15min => 10000.0001,
189
            RESOLUTION_30min => 10000.0001,
190
            RESOLUTION_45min => 10000.0001,
191
            RESOLUTION_01hour => 10000.0001,
192
            RESOLUTION_02hour => 10000.0001,
193
            RESOLUTION_03hour => 10000.0001,
194
            RESOLUTION_04hour => 10000.0001,
195
            RESOLUTION_01day => null,
196
        ];
197
    }
198
199
    private function dataToCheckLastClose(): array
200
    {
201
        return [
202
            RESOLUTION_01min => 10000.0505,
203
            RESOLUTION_03min => 10000.0505,
204
            RESOLUTION_05min => 10000.0505,
205
            RESOLUTION_15min => 10000.0505,
206
            RESOLUTION_30min => 10000.0505,
207
            RESOLUTION_45min => 10000.0505,
208
            RESOLUTION_01hour => 10000.0505,
209
            RESOLUTION_02hour => 10000.0505,
210
            RESOLUTION_03hour => 10000.0505,
211
            RESOLUTION_04hour => 10000.0505,
212
            RESOLUTION_01day => null,
213
        ];
214
    }
215
216
    protected function tearDown()
217
    {
218
        unset($this->ohlcv);
219
    }
220
221
}