-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathBCSTest.php
128 lines (107 loc) · 4.47 KB
/
BCSTest.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
<?php
use kriss\bcmath\BCS;
test('get result', function () {
// 默认四舍五入
$result = BCS::create(1.5, ['scale' => 2])->add(1.2)->mul(2)->sub(1.5)->getResult();
expect($result)->toEqual(3.9);
// 四舍五入
$result = BCS::create(1.35, ['scale' => 2, 'round' => true])->add(1.2)->mul(1.35)->getResult();
expect($result)->toEqual(3.44);
// 向上保留
$result = BCS::create(1.35, ['scale' => 2, 'ceil' => true])->add(1.2)->mul(1.35)->getResult();
expect($result)->toEqual(3.45);
// 向上保留,精度为0
$result = BCS::create(82.5, ['scale' => 0, 'ceil' => true])->getResult();
expect($result)->toEqual(83);
// 向上保留,精度为2,尾数多0的情况
$result = BCS::create(10.0000, ['scale' => 2, 'ceil' => true])->getResult();
expect($result)->toEqual(10);
$result = BCS::create(10.0001, ['scale' => 2, 'ceil' => true])->getResult();
expect($result)->toEqual(10.01);
// 舍位
$result = BCS::create(1.35, ['scale' => 2, 'floor' => true])->add(1.2)->mul(1.35)->add(0.002)->getResult();
expect($result)->toEqual(3.44);
// 舍位,末位为9的情况
$result = BCS::create(10.0198, ['scale' => 2, 'floor' => true])->getResult();
expect($result)->toEqual(10.01);
// 舍位,精度为0
$result = BCS::create(82.5, ['scale' => 0, 'floor' => true])->getResult();
expect($result)->toEqual(82);
// 操作过程中精度保留
$result = BCS::create(1.352, ['scale' => 2, 'operateScale' => 2])->add(0.014)->add(0.005)->getResult();
expect($result)->toEqual(1.36);
});
test('is equal', function () {
$result = BCS::create(1.2, ['scale' => 0])->isEqual(1.6);
expect($result)->toEqual(true);
$result = BCS::create(1.2, ['scale' => 2])->isEqual(1.6);
expect($result)->toEqual(false);
$result = BCS::create(1.6, ['scale' => 2])->isEqual(1.6);
expect($result)->toEqual(true);
});
test('is larger than', function () {
$result = BCS::create(1.2, ['scale' => 0])->isLargerThan(1.6);
expect($result)->toEqual(false);
$result = BCS::create(1.2, ['scale' => 2])->isLargerThan(1.6);
expect($result)->toEqual(false);
$result = BCS::create(1.7, ['scale' => 2])->isLargerThan(1.6);
expect($result)->toEqual(true);
});
test('sub', function () {
$result = BCS::create(1.2, ['scale' => 2])->sub(2.37, 3.84, 8.4)->getResult();
expect($result)->toEqual(-13.41);
});
test('get sqrt', function () {
$result = BCS::create(4, ['scale' => 2])->getSqrt();
expect($result)->toEqual(2);
});
test('mul', function () {
$result = BCS::create(1.2, ['scale' => 2])->mul(2.37, 3.84, 8.4)->getResult();
expect($result)->toEqual(91.74);
$result = BCS::create(1.2, ['scale' => 4, 'floor' => true])->mul(2.37, 3.84, 8.4)->getResult();
expect($result)->toEqual(91.7360);
});
test('div', function () {
$result = BCS::create(1.2, ['scale' => 6])->div(2.37, 3.84, 8.4)->getResult();
expect($result)->toEqual(0.015697);
});
test('pow', function () {
$result = BCS::create(1.2, ['scale' => 2])->pow(2, 2)->getResult();
expect($result)->toEqual(2.07);
// pow 不支持小数乘方,会自动转为整数
$result = BCS::create(1.2, ['scale' => 6])->pow(2.37)->getResult();
expect($result)->toEqual(1.44);
});
test('add', function () {
$result = BCS::create(1.2, ['scale' => 2])->add(2.37, 3.84, 8.4)->getResult();
expect($result)->toEqual(15.81);
});
test('compare', function () {
$result = BCS::create(1.2, ['scale' => 0])->compare(1.6);
expect($result)->toEqual(0);
$result = BCS::create(1.2, ['scale' => 2])->compare(1.6);
expect($result)->toEqual(-1);
$result = BCS::create(1.2, ['scale' => 2])->compare(1.2);
expect($result)->toEqual(0);
});
test('mod', function () {
$result = BCS::create(10)->mod(5)->getResult();
expect($result)->toEqual(0);
$result = BCS::create(12)->mod(10)->getResult();
expect($result)->toEqual(2);
});
test('is less than', function () {
$result = BCS::create(1.2, ['scale' => 0])->isLessThan(1.6);
expect($result)->toEqual(false);
$result = BCS::create(1.2, ['scale' => 2])->isLessThan(1.6);
expect($result)->toEqual(true);
});
test('not exist bc method', function () {
BCS::create(1)->xyz(0);
})->throws(Exception::class, 'xyz not in ::bcEnables');
test('change config in invalid', function () {
$bcs = BCS::create(1.2222, ['scale' => 2]);
$bcs->config['round'] = false;
$result = $bcs->add(0.2255)->getResult();
expect($result)->toEqual(1.4477);
});