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