@swapkit/helpers 1.0.0-rc.71 → 1.0.0-rc.72
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +31 -19
- package/dist/index.es.js +375 -361
- package/dist/index.es.js.map +1 -1
- package/package.json +12 -16
- package/src/helpers/__tests__/asset.test.ts +64 -62
- package/src/helpers/__tests__/memo.test.ts +42 -40
- package/src/helpers/__tests__/others.test.ts +31 -31
- package/src/helpers/asset.ts +53 -52
- package/src/helpers/liquidity.ts +9 -9
- package/src/helpers/memo.ts +17 -18
- package/src/helpers/others.ts +3 -3
- package/src/helpers/validators.ts +5 -5
- package/src/index.ts +9 -9
- package/src/modules/__tests__/assetValue.test.ts +187 -173
- package/src/modules/__tests__/bigIntArithmetics.test.ts +8 -8
- package/src/modules/__tests__/swapKitNumber.test.ts +232 -232
- package/src/modules/assetValue.ts +41 -41
- package/src/modules/bigIntArithmetics.ts +86 -86
- package/src/modules/swapKitError.ts +17 -2
- package/src/modules/swapKitNumber.ts +1 -1
- package/src/types.ts +13 -13
|
@@ -1,55 +1,55 @@
|
|
|
1
|
-
import { describe, expect, test } from
|
|
1
|
+
import { describe, expect, test } from "vitest";
|
|
2
2
|
|
|
3
|
-
import { SwapKitNumber } from
|
|
3
|
+
import { SwapKitNumber } from "../swapKitNumber.ts";
|
|
4
4
|
|
|
5
|
-
describe(
|
|
6
|
-
describe(
|
|
7
|
-
test(
|
|
5
|
+
describe("SwapKitNumber", () => {
|
|
6
|
+
describe("constructors", () => {
|
|
7
|
+
test("creates numbers correctly", () => {
|
|
8
8
|
const skNumber1 = new SwapKitNumber(1);
|
|
9
|
-
expect(skNumber1.getValue(
|
|
10
|
-
expect(skNumber1.getValue(
|
|
11
|
-
expect(skNumber1.getBaseValue(
|
|
9
|
+
expect(skNumber1.getValue("string")).toBe("1");
|
|
10
|
+
expect(skNumber1.getValue("number")).toBe(1);
|
|
11
|
+
expect(skNumber1.getBaseValue("bigint")).toBe(100000000n);
|
|
12
12
|
|
|
13
|
-
const skNumber2 = new SwapKitNumber(
|
|
14
|
-
expect(skNumber2.getValue(
|
|
15
|
-
expect(skNumber2.getBaseValue(
|
|
13
|
+
const skNumber2 = new SwapKitNumber("1");
|
|
14
|
+
expect(skNumber2.getValue("string")).toBe("1");
|
|
15
|
+
expect(skNumber2.getBaseValue("bigint")).toBe(100000000n);
|
|
16
16
|
|
|
17
17
|
/**
|
|
18
18
|
* because by default we have 8 decimals - it will be rounded to 0 on base value
|
|
19
19
|
*/
|
|
20
|
-
const skNumber3 = new SwapKitNumber(
|
|
21
|
-
expect(skNumber3.getValue(
|
|
22
|
-
expect(skNumber3.getBaseValue(
|
|
20
|
+
const skNumber3 = new SwapKitNumber("0.0000000001");
|
|
21
|
+
expect(skNumber3.getValue("string")).toBe("0.0000000001");
|
|
22
|
+
expect(skNumber3.getBaseValue("bigint")).toBe(0n);
|
|
23
23
|
|
|
24
|
-
const skNumber4 = new SwapKitNumber({ value:
|
|
25
|
-
expect(skNumber4.getValue(
|
|
26
|
-
expect(skNumber4.getBaseValue(
|
|
24
|
+
const skNumber4 = new SwapKitNumber({ value: "0.0000000001", decimal: 10 });
|
|
25
|
+
expect(skNumber4.getValue("string")).toBe("0.0000000001");
|
|
26
|
+
expect(skNumber4.getBaseValue("bigint")).toBe(1n);
|
|
27
27
|
|
|
28
28
|
const skNumber5 = new SwapKitNumber({ value: 0.1005, decimal: 3 });
|
|
29
|
-
expect(skNumber5.getValue(
|
|
30
|
-
expect(skNumber5.getBaseValue(
|
|
29
|
+
expect(skNumber5.getValue("string")).toBe("0.101");
|
|
30
|
+
expect(skNumber5.getBaseValue("bigint")).toBe(100n);
|
|
31
31
|
|
|
32
32
|
const skNumber6 = new SwapKitNumber({ value: -0.1005, decimal: 3 });
|
|
33
|
-
expect(skNumber6.getValue(
|
|
34
|
-
expect(skNumber6.getBaseValue(
|
|
33
|
+
expect(skNumber6.getValue("string")).toBe("-0.101");
|
|
34
|
+
expect(skNumber6.getBaseValue("bigint")).toBe(-100n);
|
|
35
35
|
expect(skNumber6.decimal).toBe(3);
|
|
36
|
-
expect(skNumber6.getValue(
|
|
36
|
+
expect(skNumber6.getValue("number")).toBe(-0.101);
|
|
37
37
|
expect(skNumber6.decimalMultiplier).toBe(100000000n);
|
|
38
38
|
});
|
|
39
39
|
|
|
40
|
-
test(
|
|
40
|
+
test("creates SwapKitInstance from BigInt: (12.345678901234, decimals: 12)", () => {
|
|
41
41
|
const skNumber = SwapKitNumber.fromBigInt(12345678901234n, 12);
|
|
42
42
|
|
|
43
|
-
expect(skNumber.getValue(
|
|
44
|
-
expect(skNumber.getBaseValue(
|
|
43
|
+
expect(skNumber.getValue("string")).toBe("12.345678901234");
|
|
44
|
+
expect(skNumber.getBaseValue("bigint")).toBe(12345678901234n);
|
|
45
45
|
});
|
|
46
46
|
});
|
|
47
47
|
|
|
48
|
-
describe(
|
|
49
|
-
test(
|
|
48
|
+
describe("shiftDecimals", () => {
|
|
49
|
+
test("shifts up and bumps number", () => {
|
|
50
50
|
const skNumber = new SwapKitNumber(1);
|
|
51
|
-
expect(skNumber.getValue(
|
|
52
|
-
expect(skNumber.getBaseValue(
|
|
51
|
+
expect(skNumber.getValue("string")).toBe("1");
|
|
52
|
+
expect(skNumber.getBaseValue("bigint")).toBe(100000000n);
|
|
53
53
|
|
|
54
54
|
const shiftedSkNumber = SwapKitNumber.shiftDecimals({
|
|
55
55
|
value: skNumber,
|
|
@@ -57,14 +57,14 @@ describe('SwapKitNumber', () => {
|
|
|
57
57
|
to: 6,
|
|
58
58
|
});
|
|
59
59
|
|
|
60
|
-
expect(shiftedSkNumber.getValue(
|
|
61
|
-
expect(shiftedSkNumber.getBaseValue(
|
|
60
|
+
expect(shiftedSkNumber.getValue("string")).toBe("1");
|
|
61
|
+
expect(shiftedSkNumber.getBaseValue("bigint")).toBe(1000000n);
|
|
62
62
|
});
|
|
63
63
|
|
|
64
|
-
test(
|
|
64
|
+
test("shifts down and rounds down number", () => {
|
|
65
65
|
const skNumber = new SwapKitNumber(2.12345678);
|
|
66
|
-
expect(skNumber.getValue(
|
|
67
|
-
expect(skNumber.getBaseValue(
|
|
66
|
+
expect(skNumber.getValue("string")).toBe("2.12345678");
|
|
67
|
+
expect(skNumber.getBaseValue("bigint")).toBe(212345678n);
|
|
68
68
|
|
|
69
69
|
const shiftedSkNumber = SwapKitNumber.shiftDecimals({
|
|
70
70
|
value: skNumber,
|
|
@@ -72,12 +72,12 @@ describe('SwapKitNumber', () => {
|
|
|
72
72
|
to: 6,
|
|
73
73
|
});
|
|
74
74
|
|
|
75
|
-
expect(shiftedSkNumber.getValue(
|
|
76
|
-
expect(shiftedSkNumber.getBaseValue(
|
|
75
|
+
expect(shiftedSkNumber.getValue("string")).toBe("2.123456");
|
|
76
|
+
expect(shiftedSkNumber.getBaseValue("bigint")).toBe(2123456n);
|
|
77
77
|
});
|
|
78
78
|
|
|
79
|
-
test(
|
|
80
|
-
const skNumber = new SwapKitNumber({ value:
|
|
79
|
+
test("shift eth from 18 to 8", () => {
|
|
80
|
+
const skNumber = new SwapKitNumber({ value: "0.2", decimal: 18 });
|
|
81
81
|
|
|
82
82
|
const shiftedSkNumber = SwapKitNumber.shiftDecimals({
|
|
83
83
|
value: skNumber,
|
|
@@ -85,251 +85,251 @@ describe('SwapKitNumber', () => {
|
|
|
85
85
|
to: 8,
|
|
86
86
|
});
|
|
87
87
|
|
|
88
|
-
expect(shiftedSkNumber.getValue(
|
|
89
|
-
expect(shiftedSkNumber.getBaseValue(
|
|
88
|
+
expect(shiftedSkNumber.getValue("string")).toBe("0.2");
|
|
89
|
+
expect(shiftedSkNumber.getBaseValue("bigint")).toBe(20000000n);
|
|
90
90
|
});
|
|
91
91
|
});
|
|
92
92
|
|
|
93
|
-
describe(
|
|
94
|
-
describe(
|
|
95
|
-
test(
|
|
93
|
+
describe("getValue", () => {
|
|
94
|
+
describe("string", () => {
|
|
95
|
+
test("returns string value", () => {
|
|
96
96
|
const skNumber = new SwapKitNumber(1);
|
|
97
|
-
expect(skNumber.getValue(
|
|
97
|
+
expect(skNumber.getValue("string")).toBe("1");
|
|
98
98
|
});
|
|
99
99
|
|
|
100
|
-
test(
|
|
100
|
+
test("returns string value with decimals", () => {
|
|
101
101
|
const skNumber = new SwapKitNumber(0.01);
|
|
102
|
-
expect(skNumber.getValue(
|
|
102
|
+
expect(skNumber.getValue("string")).toBe("0.01");
|
|
103
103
|
});
|
|
104
104
|
});
|
|
105
105
|
|
|
106
|
-
describe(
|
|
107
|
-
test(
|
|
106
|
+
describe("number", () => {
|
|
107
|
+
test("returns number value", () => {
|
|
108
108
|
const skNumber = new SwapKitNumber(1);
|
|
109
|
-
expect(skNumber.getValue(
|
|
109
|
+
expect(skNumber.getValue("number")).toBe(1);
|
|
110
110
|
});
|
|
111
111
|
|
|
112
|
-
test(
|
|
112
|
+
test("returns number value with decimals", () => {
|
|
113
113
|
const skNumber = new SwapKitNumber(0.01);
|
|
114
|
-
expect(skNumber.getValue(
|
|
114
|
+
expect(skNumber.getValue("number")).toBe(0.01);
|
|
115
115
|
});
|
|
116
116
|
});
|
|
117
117
|
|
|
118
|
-
describe(
|
|
119
|
-
test(
|
|
118
|
+
describe("bigint", () => {
|
|
119
|
+
test("returns bigint value", () => {
|
|
120
120
|
const skNumber = new SwapKitNumber(1);
|
|
121
|
-
expect(skNumber.getBaseValue(
|
|
121
|
+
expect(skNumber.getBaseValue("bigint")).toBe(100000000n);
|
|
122
122
|
});
|
|
123
123
|
});
|
|
124
124
|
});
|
|
125
125
|
|
|
126
|
-
describe(
|
|
127
|
-
describe(
|
|
128
|
-
test(
|
|
126
|
+
describe("toSignificant", () => {
|
|
127
|
+
describe("normal cases", () => {
|
|
128
|
+
test("returns first significant number of digits", () => {
|
|
129
129
|
const usdLikeNumber = new SwapKitNumber(1234.5678);
|
|
130
|
-
expect(usdLikeNumber.toSignificant(2)).toBe(
|
|
131
|
-
expect(usdLikeNumber.toSignificant(3)).toBe(
|
|
132
|
-
expect(usdLikeNumber.toSignificant(4)).toBe(
|
|
133
|
-
expect(usdLikeNumber.toSignificant(5)).toBe(
|
|
134
|
-
expect(usdLikeNumber.toSignificant(6)).toBe(
|
|
135
|
-
expect(usdLikeNumber.toSignificant(7)).toBe(
|
|
136
|
-
expect(usdLikeNumber.toSignificant(8)).toBe(
|
|
130
|
+
expect(usdLikeNumber.toSignificant(2)).toBe("1200");
|
|
131
|
+
expect(usdLikeNumber.toSignificant(3)).toBe("1230");
|
|
132
|
+
expect(usdLikeNumber.toSignificant(4)).toBe("1234");
|
|
133
|
+
expect(usdLikeNumber.toSignificant(5)).toBe("1234.5");
|
|
134
|
+
expect(usdLikeNumber.toSignificant(6)).toBe("1234.56");
|
|
135
|
+
expect(usdLikeNumber.toSignificant(7)).toBe("1234.567");
|
|
136
|
+
expect(usdLikeNumber.toSignificant(8)).toBe("1234.5678");
|
|
137
137
|
|
|
138
138
|
const btcLikeNumber = new SwapKitNumber(0.00005678);
|
|
139
|
-
expect(btcLikeNumber.toSignificant(2)).toBe(
|
|
140
|
-
expect(btcLikeNumber.toSignificant(3)).toBe(
|
|
141
|
-
expect(btcLikeNumber.toSignificant(4)).toBe(
|
|
142
|
-
expect(btcLikeNumber.toSignificant(5)).toBe(
|
|
143
|
-
expect(btcLikeNumber.toSignificant(8)).toBe(
|
|
139
|
+
expect(btcLikeNumber.toSignificant(2)).toBe("0.000056");
|
|
140
|
+
expect(btcLikeNumber.toSignificant(3)).toBe("0.0000567");
|
|
141
|
+
expect(btcLikeNumber.toSignificant(4)).toBe("0.00005678");
|
|
142
|
+
expect(btcLikeNumber.toSignificant(5)).toBe("0.00005678");
|
|
143
|
+
expect(btcLikeNumber.toSignificant(8)).toBe("0.00005678");
|
|
144
144
|
});
|
|
145
145
|
});
|
|
146
146
|
|
|
147
|
-
describe(
|
|
148
|
-
test(
|
|
147
|
+
describe("custom decimals", () => {
|
|
148
|
+
test("returns first significant number of digits", () => {
|
|
149
149
|
const usdLikeNumber = new SwapKitNumber({ value: 1234.5678, decimal: 2 });
|
|
150
|
-
expect(usdLikeNumber.toSignificant(2)).toBe(
|
|
151
|
-
expect(usdLikeNumber.toSignificant(3)).toBe(
|
|
152
|
-
expect(usdLikeNumber.toSignificant(4)).toBe(
|
|
153
|
-
expect(usdLikeNumber.toSignificant(5)).toBe(
|
|
154
|
-
expect(usdLikeNumber.toSignificant(6)).toBe(
|
|
155
|
-
expect(usdLikeNumber.toSignificant(7)).toBe(
|
|
156
|
-
expect(usdLikeNumber.toSignificant(8)).toBe(
|
|
150
|
+
expect(usdLikeNumber.toSignificant(2)).toBe("1200");
|
|
151
|
+
expect(usdLikeNumber.toSignificant(3)).toBe("1230");
|
|
152
|
+
expect(usdLikeNumber.toSignificant(4)).toBe("1234");
|
|
153
|
+
expect(usdLikeNumber.toSignificant(5)).toBe("1234.5");
|
|
154
|
+
expect(usdLikeNumber.toSignificant(6)).toBe("1234.57");
|
|
155
|
+
expect(usdLikeNumber.toSignificant(7)).toBe("1234.57");
|
|
156
|
+
expect(usdLikeNumber.toSignificant(8)).toBe("1234.57");
|
|
157
157
|
|
|
158
158
|
const ethLikeNumber = new SwapKitNumber({ value: 0.00005678, decimal: 18 });
|
|
159
|
-
expect(ethLikeNumber.toSignificant(2)).toBe(
|
|
160
|
-
expect(ethLikeNumber.toSignificant(3)).toBe(
|
|
161
|
-
expect(ethLikeNumber.toSignificant(4)).toBe(
|
|
162
|
-
expect(ethLikeNumber.toSignificant(5)).toBe(
|
|
163
|
-
expect(ethLikeNumber.toSignificant(8)).toBe(
|
|
164
|
-
expect(ethLikeNumber.toSignificant(18)).toBe(
|
|
159
|
+
expect(ethLikeNumber.toSignificant(2)).toBe("0.000056");
|
|
160
|
+
expect(ethLikeNumber.toSignificant(3)).toBe("0.0000567");
|
|
161
|
+
expect(ethLikeNumber.toSignificant(4)).toBe("0.00005678");
|
|
162
|
+
expect(ethLikeNumber.toSignificant(5)).toBe("0.00005678");
|
|
163
|
+
expect(ethLikeNumber.toSignificant(8)).toBe("0.00005678");
|
|
164
|
+
expect(ethLikeNumber.toSignificant(18)).toBe("0.00005678");
|
|
165
165
|
});
|
|
166
166
|
});
|
|
167
167
|
});
|
|
168
168
|
|
|
169
|
-
describe(
|
|
170
|
-
test(
|
|
169
|
+
describe("toAbbreviation", () => {
|
|
170
|
+
test("returns abbreviation with up to 3 integer digits", () => {
|
|
171
171
|
const skNumber = new SwapKitNumber(1234.5678);
|
|
172
|
-
expect(skNumber.toAbbreviation()).toBe(
|
|
172
|
+
expect(skNumber.toAbbreviation()).toBe("1.23K");
|
|
173
173
|
|
|
174
174
|
const skNumber2 = new SwapKitNumber(1234567.5678);
|
|
175
|
-
expect(skNumber2.toAbbreviation()).toBe(
|
|
175
|
+
expect(skNumber2.toAbbreviation()).toBe("1.23M");
|
|
176
176
|
|
|
177
177
|
const skNumber3 = new SwapKitNumber(1234567890.5678);
|
|
178
|
-
expect(skNumber3.toAbbreviation()).toBe(
|
|
178
|
+
expect(skNumber3.toAbbreviation()).toBe("1.23B");
|
|
179
179
|
|
|
180
|
-
const skNumber4 = new SwapKitNumber(1234567890123.5678);
|
|
181
|
-
expect(skNumber4.toAbbreviation()).toBe(
|
|
180
|
+
const skNumber4 = new SwapKitNumber("1234567890123.5678");
|
|
181
|
+
expect(skNumber4.toAbbreviation()).toBe("1.23T");
|
|
182
182
|
|
|
183
|
-
const skNumber5 = new SwapKitNumber(1234567890123456.5678);
|
|
184
|
-
expect(skNumber5.toAbbreviation()).toBe(
|
|
183
|
+
const skNumber5 = new SwapKitNumber("1234567890123456.5678");
|
|
184
|
+
expect(skNumber5.toAbbreviation()).toBe("1.23Q");
|
|
185
185
|
|
|
186
|
-
const skNumber6 = new SwapKitNumber(1234567890123456789.5678);
|
|
187
|
-
expect(skNumber6.toAbbreviation()).toBe(
|
|
186
|
+
const skNumber6 = new SwapKitNumber("1234567890123456789.5678");
|
|
187
|
+
expect(skNumber6.toAbbreviation()).toBe("1.23Qi");
|
|
188
188
|
|
|
189
|
-
const skNumber7 = new SwapKitNumber(1234567890123456789012.5678);
|
|
190
|
-
expect(skNumber7.toAbbreviation()).toBe(
|
|
189
|
+
const skNumber7 = new SwapKitNumber("1234567890123456789012.5678");
|
|
190
|
+
expect(skNumber7.toAbbreviation()).toBe("1.23S");
|
|
191
191
|
|
|
192
192
|
const skNumber8 = new SwapKitNumber(1234.5678);
|
|
193
|
-
expect(skNumber8.toAbbreviation(0)).toBe(
|
|
193
|
+
expect(skNumber8.toAbbreviation(0)).toBe("1K");
|
|
194
194
|
|
|
195
195
|
const skNumber9 = new SwapKitNumber(1234.5678);
|
|
196
|
-
expect(skNumber9.toAbbreviation(1)).toBe(
|
|
196
|
+
expect(skNumber9.toAbbreviation(1)).toBe("1.2K");
|
|
197
197
|
|
|
198
198
|
const skNumber10 = new SwapKitNumber(123456.78);
|
|
199
|
-
expect(skNumber10.toAbbreviation()).toBe(
|
|
199
|
+
expect(skNumber10.toAbbreviation()).toBe("123.46K");
|
|
200
200
|
});
|
|
201
201
|
});
|
|
202
202
|
|
|
203
|
-
describe(
|
|
204
|
-
test(
|
|
203
|
+
describe("toCurrency", () => {
|
|
204
|
+
test("returns abbreviation with up to 3 integer digits", () => {
|
|
205
205
|
const skNumber = new SwapKitNumber(1234.5678);
|
|
206
|
-
expect(skNumber.toCurrency()).toBe(
|
|
206
|
+
expect(skNumber.toCurrency()).toBe("$1,234.56");
|
|
207
207
|
expect(
|
|
208
|
-
skNumber.toCurrency(
|
|
209
|
-
decimalSeparator:
|
|
210
|
-
thousandSeparator:
|
|
211
|
-
currencyPosition:
|
|
208
|
+
skNumber.toCurrency("€", {
|
|
209
|
+
decimalSeparator: ",",
|
|
210
|
+
thousandSeparator: " ",
|
|
211
|
+
currencyPosition: "end",
|
|
212
212
|
}),
|
|
213
|
-
).toBe(
|
|
213
|
+
).toBe("1 234,56€");
|
|
214
214
|
|
|
215
215
|
const skNumber2 = new SwapKitNumber(0.5678);
|
|
216
|
-
expect(skNumber2.toCurrency()).toBe(
|
|
216
|
+
expect(skNumber2.toCurrency()).toBe("$0.5678");
|
|
217
217
|
expect(
|
|
218
|
-
skNumber2.toCurrency(
|
|
219
|
-
decimalSeparator:
|
|
220
|
-
currencyPosition:
|
|
218
|
+
skNumber2.toCurrency("€", {
|
|
219
|
+
decimalSeparator: ",",
|
|
220
|
+
currencyPosition: "end",
|
|
221
221
|
}),
|
|
222
|
-
).toBe(
|
|
222
|
+
).toBe("0,5678€");
|
|
223
223
|
|
|
224
224
|
const skNumber3 = new SwapKitNumber(0.00005678);
|
|
225
|
-
expect(skNumber3.toCurrency()).toBe(
|
|
225
|
+
expect(skNumber3.toCurrency()).toBe("$0.000057");
|
|
226
226
|
expect(
|
|
227
|
-
skNumber3.toCurrency(
|
|
228
|
-
decimalSeparator:
|
|
229
|
-
thousandSeparator:
|
|
230
|
-
currencyPosition:
|
|
227
|
+
skNumber3.toCurrency("€", {
|
|
228
|
+
decimalSeparator: ",",
|
|
229
|
+
thousandSeparator: " ",
|
|
230
|
+
currencyPosition: "end",
|
|
231
231
|
}),
|
|
232
|
-
).toBe(
|
|
232
|
+
).toBe("0,000057€");
|
|
233
233
|
|
|
234
234
|
const skNumber4 = new SwapKitNumber(12345);
|
|
235
|
-
expect(skNumber4.toCurrency()).toBe(
|
|
235
|
+
expect(skNumber4.toCurrency()).toBe("$12,345");
|
|
236
236
|
});
|
|
237
237
|
});
|
|
238
238
|
|
|
239
|
-
describe(
|
|
240
|
-
test(
|
|
239
|
+
describe("add", () => {
|
|
240
|
+
test("adds same type numbers correctly", () => {
|
|
241
241
|
const skNumber1 = new SwapKitNumber(10);
|
|
242
|
-
const skNumber2 = new SwapKitNumber(
|
|
243
|
-
const skNumber3 = new SwapKitNumber(
|
|
242
|
+
const skNumber2 = new SwapKitNumber("5");
|
|
243
|
+
const skNumber3 = new SwapKitNumber("0.5");
|
|
244
244
|
const result = skNumber1.add(skNumber2, skNumber3);
|
|
245
245
|
|
|
246
|
-
expect(result.getValue(
|
|
247
|
-
expect(result.getBaseValue(
|
|
246
|
+
expect(result.getValue("string")).toBe("15.5");
|
|
247
|
+
expect(result.getBaseValue("bigint")).toBe(1550000000n);
|
|
248
248
|
});
|
|
249
249
|
|
|
250
|
-
test(
|
|
250
|
+
test("adds different type numbers correctly", () => {
|
|
251
251
|
const skNumber1 = new SwapKitNumber(10);
|
|
252
|
-
const result = skNumber1.add(6,
|
|
252
|
+
const result = skNumber1.add(6, "0.5");
|
|
253
253
|
|
|
254
|
-
expect(result.getValue(
|
|
255
|
-
expect(result.getBaseValue(
|
|
254
|
+
expect(result.getValue("string")).toBe("16.5");
|
|
255
|
+
expect(result.getBaseValue("bigint")).toBe(1650000000n);
|
|
256
256
|
});
|
|
257
257
|
|
|
258
|
-
test(
|
|
258
|
+
test("adds large decimal numbers correctly", () => {
|
|
259
259
|
const skNumber1 = new SwapKitNumber(0.0000000001);
|
|
260
|
-
const result = skNumber1.add(6.000000000001,
|
|
261
|
-
expect(result.getValue(
|
|
262
|
-
expect(result.getBaseValue(
|
|
260
|
+
const result = skNumber1.add(6.000000000001, "0.0000000000000005");
|
|
261
|
+
expect(result.getValue("string")).toBe("6.0000000001010005");
|
|
262
|
+
expect(result.getBaseValue("bigint")).toBe(600000000n);
|
|
263
263
|
});
|
|
264
264
|
});
|
|
265
265
|
|
|
266
|
-
describe(
|
|
267
|
-
test(
|
|
266
|
+
describe("sub", () => {
|
|
267
|
+
test("subtracts same type numbers correctly", () => {
|
|
268
268
|
const skNumber1 = new SwapKitNumber(10);
|
|
269
|
-
const skNumber2 = new SwapKitNumber(
|
|
269
|
+
const skNumber2 = new SwapKitNumber("5");
|
|
270
270
|
const skNumber3 = new SwapKitNumber(0.5);
|
|
271
271
|
const result = skNumber1.sub(skNumber2, skNumber3);
|
|
272
272
|
|
|
273
|
-
expect(result.getValue(
|
|
274
|
-
expect(result.getBaseValue(
|
|
273
|
+
expect(result.getValue("string")).toBe("4.5");
|
|
274
|
+
expect(result.getBaseValue("bigint")).toBe(450000000n);
|
|
275
275
|
});
|
|
276
276
|
|
|
277
|
-
test(
|
|
277
|
+
test("subtracts different type numbers correctly", () => {
|
|
278
278
|
const skNumber1 = new SwapKitNumber(10);
|
|
279
|
-
const result = skNumber1.sub(6,
|
|
279
|
+
const result = skNumber1.sub(6, "0.5");
|
|
280
280
|
|
|
281
|
-
expect(result.getValue(
|
|
282
|
-
expect(result.getBaseValue(
|
|
281
|
+
expect(result.getValue("string")).toBe("3.5");
|
|
282
|
+
expect(result.getBaseValue("bigint")).toBe(350000000n);
|
|
283
283
|
});
|
|
284
284
|
|
|
285
|
-
test(
|
|
285
|
+
test("can process negative results", () => {
|
|
286
286
|
const skNumber1 = new SwapKitNumber(10);
|
|
287
287
|
const result0 = skNumber1.sub(10);
|
|
288
|
-
const resultMinus = result0.sub(
|
|
288
|
+
const resultMinus = result0.sub("10");
|
|
289
289
|
|
|
290
|
-
expect(result0.getValue(
|
|
291
|
-
expect(resultMinus.getValue(
|
|
292
|
-
expect(result0.getBaseValue(
|
|
293
|
-
expect(resultMinus.getBaseValue(
|
|
290
|
+
expect(result0.getValue("string")).toBe("0");
|
|
291
|
+
expect(resultMinus.getValue("string")).toBe("-10");
|
|
292
|
+
expect(result0.getBaseValue("bigint")).toBe(0n);
|
|
293
|
+
expect(resultMinus.getBaseValue("bigint")).toBe(-1000000000n);
|
|
294
294
|
});
|
|
295
295
|
});
|
|
296
296
|
|
|
297
|
-
describe(
|
|
298
|
-
test(
|
|
297
|
+
describe("mul", () => {
|
|
298
|
+
test("multiplies same type numbers correctly", () => {
|
|
299
299
|
const skNumber1 = new SwapKitNumber(10);
|
|
300
|
-
const skNumber2 = new SwapKitNumber(
|
|
300
|
+
const skNumber2 = new SwapKitNumber("5");
|
|
301
301
|
const skNumber3 = new SwapKitNumber(0.5);
|
|
302
302
|
const result = skNumber1.mul(skNumber2, skNumber3);
|
|
303
303
|
|
|
304
|
-
expect(result.getValue(
|
|
305
|
-
expect(result.getBaseValue(
|
|
304
|
+
expect(result.getValue("string")).toBe("25");
|
|
305
|
+
expect(result.getBaseValue("bigint")).toBe(2500000000n);
|
|
306
306
|
});
|
|
307
307
|
|
|
308
|
-
test(
|
|
308
|
+
test("multiplies different type numbers correctly", () => {
|
|
309
309
|
const skNumber1 = new SwapKitNumber(10);
|
|
310
|
-
const result = skNumber1.mul(6,
|
|
310
|
+
const result = skNumber1.mul(6, "0.5");
|
|
311
311
|
|
|
312
|
-
expect(result.getValue(
|
|
313
|
-
expect(result.getBaseValue(
|
|
312
|
+
expect(result.getValue("string")).toBe("30");
|
|
313
|
+
expect(result.getBaseValue("bigint")).toBe(3000000000n);
|
|
314
314
|
});
|
|
315
315
|
|
|
316
|
-
test(
|
|
316
|
+
test("multiplies numbers correctly if decimals of SKN is lower than number multiplied with", () => {
|
|
317
317
|
const skNumber1 = new SwapKitNumber({ value: 1000000, decimal: 4 });
|
|
318
|
-
const result = skNumber1.mul(
|
|
318
|
+
const result = skNumber1.mul("0.00001");
|
|
319
319
|
|
|
320
|
-
expect(result.getValue(
|
|
321
|
-
expect(result.getBaseValue(
|
|
320
|
+
expect(result.getValue("string")).toBe("10");
|
|
321
|
+
expect(result.getBaseValue("bigint")).toBe(100000n);
|
|
322
322
|
});
|
|
323
323
|
|
|
324
|
-
test(
|
|
324
|
+
test("should correctly round the result of multiplication", () => {
|
|
325
325
|
const skNumber1 = new SwapKitNumber({ decimal: 3, value: 1.23 });
|
|
326
326
|
const skNumber2 = new SwapKitNumber({ decimal: 4, value: 4.56 });
|
|
327
327
|
|
|
328
328
|
const result = skNumber1.mul(skNumber2);
|
|
329
329
|
|
|
330
330
|
// The exact result of 1.23 * 4.56 is 5.6088
|
|
331
|
-
expect(result.getValue(
|
|
332
|
-
expect(result.getBaseValue(
|
|
331
|
+
expect(result.getValue("string")).toBe("5.609");
|
|
332
|
+
expect(result.getBaseValue("bigint")).toBe(5608n);
|
|
333
333
|
|
|
334
334
|
const skNumber3 = new SwapKitNumber({ decimal: 2, value: 1.23 });
|
|
335
335
|
const skNumber4 = new SwapKitNumber(-1.234567891);
|
|
@@ -338,119 +338,119 @@ describe('SwapKitNumber', () => {
|
|
|
338
338
|
|
|
339
339
|
// The exact result of 1.23 * -1.234567891 is -1,518518505
|
|
340
340
|
// If we round it to 2 decimal places, we should get 5.61
|
|
341
|
-
expect(result2.getValue(
|
|
342
|
-
expect(result2.getBaseValue(
|
|
341
|
+
expect(result2.getValue("string")).toBe("-1.52");
|
|
342
|
+
expect(result2.getBaseValue("bigint")).toBe(-151n);
|
|
343
343
|
});
|
|
344
344
|
});
|
|
345
345
|
|
|
346
|
-
describe(
|
|
347
|
-
test(
|
|
346
|
+
describe("div", () => {
|
|
347
|
+
test("divides same type numbers correctly", () => {
|
|
348
348
|
const skNumber1 = new SwapKitNumber(10);
|
|
349
|
-
const skNumber2 = new SwapKitNumber(
|
|
349
|
+
const skNumber2 = new SwapKitNumber("5");
|
|
350
350
|
const skNumber3 = new SwapKitNumber(0.5);
|
|
351
351
|
const result = skNumber1.div(skNumber2, skNumber3);
|
|
352
352
|
|
|
353
|
-
expect(result.getValue(
|
|
354
|
-
expect(result.getBaseValue(
|
|
353
|
+
expect(result.getValue("string")).toBe("4");
|
|
354
|
+
expect(result.getBaseValue("bigint")).toBe(400000000n);
|
|
355
355
|
|
|
356
356
|
const skNumber4 = new SwapKitNumber(10.12);
|
|
357
357
|
const result2 = skNumber4.div(0.0001);
|
|
358
358
|
|
|
359
|
-
expect(result2.getValue(
|
|
360
|
-
expect(result2.getBaseValue(
|
|
359
|
+
expect(result2.getValue("string")).toBe("101200");
|
|
360
|
+
expect(result2.getBaseValue("bigint")).toBe(10120000000000n);
|
|
361
361
|
});
|
|
362
362
|
|
|
363
|
-
test(
|
|
363
|
+
test("divides different type numbers correctly", () => {
|
|
364
364
|
const skNumber1 = new SwapKitNumber(20);
|
|
365
|
-
const result = skNumber1.div(5,
|
|
365
|
+
const result = skNumber1.div(5, "0.5");
|
|
366
366
|
|
|
367
|
-
expect(result.getValue(
|
|
368
|
-
expect(result.getBaseValue(
|
|
367
|
+
expect(result.getValue("string")).toBe("8");
|
|
368
|
+
expect(result.getBaseValue("bigint")).toBe(800000000n);
|
|
369
369
|
});
|
|
370
370
|
|
|
371
|
-
test(
|
|
372
|
-
const skNumber1 = new SwapKitNumber({ value:
|
|
371
|
+
test("divides different type numbers correctly when decimal is set", () => {
|
|
372
|
+
const skNumber1 = new SwapKitNumber({ value: "1.2", decimal: 2 });
|
|
373
373
|
const result = skNumber1.div(0.001);
|
|
374
374
|
|
|
375
|
-
expect(result.getValue(
|
|
376
|
-
expect(result.getBaseValue(
|
|
375
|
+
expect(result.getValue("string")).toBe("1200");
|
|
376
|
+
expect(result.getBaseValue("bigint")).toBe(120000n);
|
|
377
377
|
});
|
|
378
378
|
|
|
379
|
-
test(
|
|
379
|
+
test("divides smaller number by larger number", () => {
|
|
380
380
|
const skNumber1 = new SwapKitNumber(1);
|
|
381
381
|
const result = skNumber1.div(2);
|
|
382
382
|
|
|
383
|
-
expect(result.getValue(
|
|
384
|
-
expect(result.getBaseValue(
|
|
383
|
+
expect(result.getValue("string")).toBe("0.5");
|
|
384
|
+
expect(result.getBaseValue("bigint")).toBe(50000000n);
|
|
385
385
|
});
|
|
386
386
|
|
|
387
|
-
test(
|
|
388
|
-
const skNumber1 = new SwapKitNumber({ value:
|
|
389
|
-
const skNumber2 = new SwapKitNumber({ value:
|
|
387
|
+
test("divides a number with 18 decimals by a negative number with less decimals", () => {
|
|
388
|
+
const skNumber1 = new SwapKitNumber({ value: "1.000000000000000010", decimal: 18 });
|
|
389
|
+
const skNumber2 = new SwapKitNumber({ value: "-2", decimal: 1 });
|
|
390
390
|
|
|
391
391
|
const result = skNumber1.div(skNumber2);
|
|
392
392
|
|
|
393
393
|
// The exact result of 1.000000000000000010 / -2 is -0.500000000000000005
|
|
394
|
-
expect(result.getValue(
|
|
395
|
-
expect(result.getBaseValue(
|
|
394
|
+
expect(result.getValue("string")).toBe("-0.500000000000000005");
|
|
395
|
+
expect(result.getBaseValue("bigint")).toBe(-500000000000000005n);
|
|
396
396
|
});
|
|
397
397
|
|
|
398
|
-
test(
|
|
399
|
-
const skNumber1 = new SwapKitNumber({ value:
|
|
400
|
-
const skNumber2 = new SwapKitNumber({ value:
|
|
398
|
+
test("divides a number with 2 decimals by a negative number with more decimals", () => {
|
|
399
|
+
const skNumber1 = new SwapKitNumber({ value: "2", decimal: 2 });
|
|
400
|
+
const skNumber2 = new SwapKitNumber({ value: "-0.000005", decimal: 18 });
|
|
401
401
|
|
|
402
402
|
const result = skNumber1.div(skNumber2);
|
|
403
403
|
|
|
404
404
|
// The exact result of 2 / -0.000005 is -400000
|
|
405
|
-
expect(result.getValue(
|
|
406
|
-
expect(result.getBaseValue(
|
|
405
|
+
expect(result.getValue("string")).toBe("-400000");
|
|
406
|
+
expect(result.getBaseValue("bigint")).toBe(-40000000n);
|
|
407
407
|
});
|
|
408
408
|
});
|
|
409
409
|
|
|
410
|
-
describe(
|
|
411
|
-
test(
|
|
410
|
+
describe("shitcoin cases", () => {
|
|
411
|
+
test("multiply huge numbers", () => {
|
|
412
412
|
const skNumber1 = new SwapKitNumber({ value: 1_000_000_000_000_001, decimal: 18 });
|
|
413
413
|
const skNumber2 = new SwapKitNumber({ value: 987_654_321_000, decimal: 18 });
|
|
414
414
|
|
|
415
415
|
const result = skNumber1.mul(skNumber2);
|
|
416
|
-
expect(result.getValue(
|
|
417
|
-
expect(result.getBaseValue(
|
|
416
|
+
expect(result.getValue("string")).toBe("987654321000000987654321000");
|
|
417
|
+
expect(result.getBaseValue("bigint")).toBe(987654321000000987654321000000000000000000000n);
|
|
418
418
|
});
|
|
419
419
|
|
|
420
|
-
test(
|
|
420
|
+
test("divide huge numbers", () => {
|
|
421
421
|
const skNumber1 = new SwapKitNumber({ value: 1_000_000_000_000_001, decimal: 18 });
|
|
422
422
|
const skNumber2 = new SwapKitNumber({ value: 987_654_321_000, decimal: 18 });
|
|
423
423
|
|
|
424
424
|
const result = skNumber1.div(skNumber2);
|
|
425
|
-
expect(result.getValue(
|
|
426
|
-
expect(result.getBaseValue(
|
|
425
|
+
expect(result.getValue("string")).toBe("1012.4999999873447625");
|
|
426
|
+
expect(result.getBaseValue("bigint")).toBe(1012499999987344762500n);
|
|
427
427
|
});
|
|
428
428
|
});
|
|
429
429
|
|
|
430
|
-
describe(
|
|
431
|
-
test(
|
|
430
|
+
describe("extending multiplier without loosing precision", () => {
|
|
431
|
+
test("edge case 1", () => {
|
|
432
432
|
const asset1 = new SwapKitNumber({ value: 41.90963702, decimal: 8 });
|
|
433
433
|
const multiplier = 5.337952274462478;
|
|
434
434
|
const divider = 105.2562773915526;
|
|
435
435
|
const result = asset1.mul(multiplier).div(divider);
|
|
436
436
|
|
|
437
|
-
expect(result.getValue(
|
|
437
|
+
expect(result.getValue("string")).toBe("2.12539953");
|
|
438
438
|
});
|
|
439
439
|
|
|
440
|
-
test(
|
|
441
|
-
const asset1 = new SwapKitNumber(
|
|
442
|
-
const multiplier = new SwapKitNumber(
|
|
443
|
-
const divider = new SwapKitNumber(
|
|
440
|
+
test("edge case 2", () => {
|
|
441
|
+
const asset1 = new SwapKitNumber("41.90963702");
|
|
442
|
+
const multiplier = new SwapKitNumber("5.337952274462478");
|
|
443
|
+
const divider = new SwapKitNumber("105.2562773915526");
|
|
444
444
|
const result = asset1.mul(multiplier).div(divider);
|
|
445
445
|
|
|
446
|
-
expect(result.getValue(
|
|
446
|
+
expect(result.getValue("string")).toBe("2.125399527674726");
|
|
447
447
|
});
|
|
448
448
|
});
|
|
449
449
|
|
|
450
|
-
describe(
|
|
451
|
-
test(
|
|
450
|
+
describe("gt", () => {
|
|
451
|
+
test("greater than", () => {
|
|
452
452
|
const skNumber1 = new SwapKitNumber(10);
|
|
453
|
-
const skNumber2 = new SwapKitNumber(
|
|
453
|
+
const skNumber2 = new SwapKitNumber("5");
|
|
454
454
|
|
|
455
455
|
expect(skNumber1.gt(skNumber2)).toBe(true);
|
|
456
456
|
expect(skNumber2.gt(skNumber1)).toBe(false);
|
|
@@ -458,17 +458,17 @@ describe('SwapKitNumber', () => {
|
|
|
458
458
|
|
|
459
459
|
test("different decimals doesn't affect comparison", () => {
|
|
460
460
|
const skNumber1 = new SwapKitNumber({ value: 10, decimal: 18 });
|
|
461
|
-
const skNumber2 = new SwapKitNumber({ value:
|
|
461
|
+
const skNumber2 = new SwapKitNumber({ value: "50", decimal: 8 });
|
|
462
462
|
|
|
463
463
|
expect(skNumber1.lt(skNumber2)).toBe(true);
|
|
464
464
|
expect(skNumber2.gt(skNumber1)).toBe(true);
|
|
465
465
|
});
|
|
466
466
|
});
|
|
467
467
|
|
|
468
|
-
describe(
|
|
469
|
-
test(
|
|
468
|
+
describe("gte", () => {
|
|
469
|
+
test("greater than or equal", () => {
|
|
470
470
|
const skNumber1 = new SwapKitNumber(10);
|
|
471
|
-
const skNumber2 = new SwapKitNumber(
|
|
471
|
+
const skNumber2 = new SwapKitNumber("5");
|
|
472
472
|
|
|
473
473
|
expect(skNumber1.gte(skNumber2)).toBe(true);
|
|
474
474
|
expect(skNumber1.gte(skNumber1)).toBe(true);
|
|
@@ -476,20 +476,20 @@ describe('SwapKitNumber', () => {
|
|
|
476
476
|
});
|
|
477
477
|
});
|
|
478
478
|
|
|
479
|
-
describe(
|
|
480
|
-
test(
|
|
479
|
+
describe("lt", () => {
|
|
480
|
+
test("less than", () => {
|
|
481
481
|
const skNumber1 = new SwapKitNumber(10);
|
|
482
|
-
const skNumber2 = new SwapKitNumber(
|
|
482
|
+
const skNumber2 = new SwapKitNumber("5");
|
|
483
483
|
|
|
484
484
|
expect(skNumber1.lt(skNumber2)).toBe(false);
|
|
485
485
|
expect(skNumber2.lt(skNumber1)).toBe(true);
|
|
486
486
|
});
|
|
487
487
|
});
|
|
488
488
|
|
|
489
|
-
describe(
|
|
490
|
-
test(
|
|
489
|
+
describe("lte", () => {
|
|
490
|
+
test("less than or equal", () => {
|
|
491
491
|
const skNumber1 = new SwapKitNumber(10);
|
|
492
|
-
const skNumber2 = new SwapKitNumber(
|
|
492
|
+
const skNumber2 = new SwapKitNumber("5");
|
|
493
493
|
|
|
494
494
|
expect(skNumber1.lte(skNumber2)).toBe(false);
|
|
495
495
|
expect(skNumber1.lte(skNumber1)).toBe(true);
|
|
@@ -497,10 +497,10 @@ describe('SwapKitNumber', () => {
|
|
|
497
497
|
});
|
|
498
498
|
});
|
|
499
499
|
|
|
500
|
-
describe(
|
|
501
|
-
test(
|
|
500
|
+
describe("eq", () => {
|
|
501
|
+
test("equal", () => {
|
|
502
502
|
const skNumber1 = new SwapKitNumber(10);
|
|
503
|
-
const skNumber2 = new SwapKitNumber(
|
|
503
|
+
const skNumber2 = new SwapKitNumber("5");
|
|
504
504
|
|
|
505
505
|
expect(skNumber1.eq(skNumber2)).toBe(false);
|
|
506
506
|
expect(skNumber1.eq(skNumber1)).toBe(true);
|
|
@@ -508,10 +508,10 @@ describe('SwapKitNumber', () => {
|
|
|
508
508
|
});
|
|
509
509
|
});
|
|
510
510
|
|
|
511
|
-
describe(
|
|
512
|
-
test(
|
|
511
|
+
describe("comparison edge cases with decimals", () => {
|
|
512
|
+
test("compare on cut decimals", () => {
|
|
513
513
|
const skNumber1 = new SwapKitNumber({ value: 0.001, decimal: 3 });
|
|
514
|
-
const value =
|
|
514
|
+
const value = "0.0019";
|
|
515
515
|
|
|
516
516
|
expect(skNumber1.lt(value)).toBe(true);
|
|
517
517
|
expect(skNumber1.gt(value)).toBe(false);
|
|
@@ -521,10 +521,10 @@ describe('SwapKitNumber', () => {
|
|
|
521
521
|
});
|
|
522
522
|
});
|
|
523
523
|
|
|
524
|
-
describe(
|
|
525
|
-
test(
|
|
524
|
+
describe("Throws", () => {
|
|
525
|
+
test("throws if division by zero", () => {
|
|
526
526
|
const skNumber1 = new SwapKitNumber(10);
|
|
527
|
-
const skNumber2 = new SwapKitNumber(
|
|
527
|
+
const skNumber2 = new SwapKitNumber("0");
|
|
528
528
|
|
|
529
529
|
expect(() => skNumber1.div(skNumber2)).toThrow(RangeError);
|
|
530
530
|
expect(() => skNumber1.div(0)).toThrow(RangeError);
|