@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.
Files changed (40) hide show
  1. package/dist/index.js +2452 -0
  2. package/dist/index.js.map +30 -0
  3. package/package.json +26 -36
  4. package/src/helpers/__tests__/asset.test.ts +149 -105
  5. package/src/helpers/__tests__/memo.test.ts +52 -40
  6. package/src/helpers/__tests__/others.test.ts +42 -37
  7. package/src/helpers/__tests__/validators.test.ts +24 -0
  8. package/src/helpers/asset.ts +139 -91
  9. package/src/helpers/derivationPath.ts +53 -0
  10. package/src/helpers/liquidity.ts +50 -43
  11. package/src/helpers/memo.ts +31 -28
  12. package/src/helpers/others.ts +35 -57
  13. package/src/helpers/validators.ts +15 -6
  14. package/src/helpers/web3wallets.ts +177 -0
  15. package/src/index.ts +14 -8
  16. package/src/modules/__tests__/assetValue.test.ts +420 -117
  17. package/src/modules/__tests__/bigIntArithmetics.test.ts +30 -0
  18. package/src/modules/__tests__/swapKitNumber.test.ts +351 -149
  19. package/src/modules/assetValue.ts +243 -171
  20. package/src/modules/bigIntArithmetics.ts +313 -153
  21. package/src/modules/requestClient.ts +39 -0
  22. package/src/modules/swapKitError.ts +33 -5
  23. package/src/modules/swapKitNumber.ts +6 -3
  24. package/src/types/abis/erc20.ts +99 -0
  25. package/src/types/abis/mayaEvmVaults.ts +331 -0
  26. package/src/types/abis/tcEthVault.ts +496 -0
  27. package/src/types/chains.ts +220 -0
  28. package/src/types/commonTypes.ts +119 -0
  29. package/src/types/derivationPath.ts +56 -0
  30. package/src/types/errors/apiV1.ts +0 -0
  31. package/src/types/index.ts +10 -0
  32. package/src/types/network.ts +43 -0
  33. package/src/types/sdk.ts +44 -0
  34. package/src/types/tokens.ts +30 -0
  35. package/src/types/wallet.ts +47 -0
  36. package/LICENSE +0 -201
  37. package/dist/index.cjs +0 -1
  38. package/dist/index.d.ts +0 -333
  39. package/dist/index.es.js +0 -661
  40. package/src/helpers/number.ts +0 -40
@@ -1,67 +1,70 @@
1
- import { describe, expect, test } from 'vitest';
1
+ import { describe, expect, test } from "bun:test";
2
2
 
3
- import { SwapKitNumber } from '../swapKitNumber.ts';
3
+ import { SwapKitNumber } from "../swapKitNumber.ts";
4
4
 
5
- describe('SwapKitNumber', () => {
6
- describe('constructors', () => {
7
- test('creates numbers correctly', () => {
5
+ describe("SwapKitNumber", () => {
6
+ describe("constructors", () => {
7
+ test("creates numbers correctly", () => {
8
8
  const skNumber1 = new SwapKitNumber(1);
9
- expect(skNumber1.value).toBe('1');
10
- expect(skNumber1.bigIntValue).toBe(100000000n);
11
-
12
- const skNumber2 = new SwapKitNumber('1');
13
- expect(skNumber2.value).toBe('1');
14
- expect(skNumber2.bigIntValue).toBe(100000000n);
15
-
16
- const skNumber3 = new SwapKitNumber('0.0000000001');
17
- expect(skNumber3.value).toBe('0.0000000001');
18
- expect(skNumber3.bigIntValue).toBe(1n);
19
-
20
- const skNumber4 = new SwapKitNumber(0.000000001);
21
- expect(skNumber4.value).toBe('0.000000001');
22
- expect(skNumber4.bigIntValue).toBe(1n);
23
-
24
- const skNumber6 = new SwapKitNumber({ value: 0.1005, decimal: 3 });
25
- expect(skNumber6.value).toBe('0.101');
26
- expect(skNumber6.bigIntValue).toBe(10050000n);
27
-
28
- const skNumber7 = new SwapKitNumber({ value: -0.1005, decimal: 3 });
29
- expect(skNumber7.value).toBe('-0.101');
30
- expect(skNumber7.bigIntValue).toBe(-10050000n);
31
- expect(skNumber7.decimal).toBe(3);
32
- expect(skNumber7.unsafeNumber).toBe(0);
33
- expect(skNumber7.decimalMultiplier).toBe(100000000n);
34
- expect(skNumber7.toString()).toBe('-0.101');
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('creates SwapKitInstance from BigInt: (12.345678901234, decimals: 12)', () => {
40
+ test("creates SwapKitInstance from BigInt: (12.345678901234, decimals: 12)", () => {
38
41
  const skNumber = SwapKitNumber.fromBigInt(12345678901234n, 12);
39
42
 
40
- expect(skNumber.value).toBe('12.345678901234');
41
- expect(skNumber.bigIntValue).toBe(12345678901234n);
43
+ expect(skNumber.getValue("string")).toBe("12.345678901234");
44
+ expect(skNumber.getBaseValue("bigint")).toBe(12345678901234n);
42
45
  });
43
46
  });
44
47
 
45
- describe('shiftDecimals', () => {
46
- test('shifts up and bumps number', () => {
48
+ describe("shiftDecimals", () => {
49
+ test("shifts up and bumps number", () => {
47
50
  const skNumber = new SwapKitNumber(1);
48
- expect(skNumber.value).toBe('1');
49
- expect(skNumber.bigIntValue).toBe(100000000n);
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: 6,
54
- to: 8,
56
+ from: 8,
57
+ to: 6,
55
58
  });
56
59
 
57
- expect(shiftedSkNumber.value).toBe('100');
58
- expect(shiftedSkNumber.bigIntValue).toBe(10000000000n);
60
+ expect(shiftedSkNumber.getValue("string")).toBe("1");
61
+ expect(shiftedSkNumber.getBaseValue("bigint")).toBe(1000000n);
59
62
  });
60
63
 
61
- test.skip('shifts down and rounds down number', () => {
64
+ test("shifts down and rounds down number", () => {
62
65
  const skNumber = new SwapKitNumber(2.12345678);
63
- expect(skNumber.value).toBe('2.12345678');
64
- expect(skNumber.bigIntValue).toBe(212345678n);
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.value).toBe('2.123456');
73
- expect(shiftedSkNumber.bigIntValue).toBe(2123456n);
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('add', () => {
78
- test('adds same type numbers correctly', () => {
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('5');
81
- const skNumber3 = new SwapKitNumber('0.5');
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.value).toBe('15.5');
85
- expect(result.bigIntValue).toBe(1550000000n);
246
+ expect(result.getValue("string")).toBe("15.5");
247
+ expect(result.getBaseValue("bigint")).toBe(1550000000n);
86
248
  });
87
249
 
88
- test('adds different type numbers correctly', () => {
250
+ test("adds different type numbers correctly", () => {
89
251
  const skNumber1 = new SwapKitNumber(10);
90
- const result = skNumber1.add(6, '0.5');
252
+ const result = skNumber1.add(6, "0.5");
91
253
 
92
- expect(result.value).toBe('16.5');
93
- expect(result.bigIntValue).toBe(1650000000n);
254
+ expect(result.getValue("string")).toBe("16.5");
255
+ expect(result.getBaseValue("bigint")).toBe(1650000000n);
94
256
  });
95
257
 
96
- test('adds large decimal numbers correctly', () => {
258
+ test("adds large decimal numbers correctly", () => {
97
259
  const skNumber1 = new SwapKitNumber(0.0000000001);
98
- const result = skNumber1.add(6.000000000001, '0.0000000000000005');
99
- expect(result.value).toBe('6.0000000001010005');
100
- expect(result.bigIntValue).toBe(60000000001010005n);
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('sub', () => {
105
- test('subtracts same type numbers correctly', () => {
266
+ describe("sub", () => {
267
+ test("subtracts same type numbers correctly", () => {
106
268
  const skNumber1 = new SwapKitNumber(10);
107
- const skNumber2 = new SwapKitNumber('5');
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.value).toBe('4.5');
112
- expect(result.bigIntValue).toBe(450000000n);
273
+ expect(result.getValue("string")).toBe("4.5");
274
+ expect(result.getBaseValue("bigint")).toBe(450000000n);
113
275
  });
114
276
 
115
- test('subtracts different type numbers correctly', () => {
277
+ test("subtracts different type numbers correctly", () => {
116
278
  const skNumber1 = new SwapKitNumber(10);
117
- const result = skNumber1.sub(6, '0.5');
279
+ const result = skNumber1.sub(6, "0.5");
118
280
 
119
- expect(result.value).toBe('3.5');
120
- expect(result.bigIntValue).toBe(350000000n);
281
+ expect(result.getValue("string")).toBe("3.5");
282
+ expect(result.getBaseValue("bigint")).toBe(350000000n);
121
283
  });
122
284
 
123
- test('can process negative results', () => {
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('10');
288
+ const resultMinus = result0.sub("10");
127
289
 
128
- expect(result0.value).toBe('0');
129
- expect(resultMinus.value).toBe('-10');
130
- expect(result0.bigIntValue).toBe(0n);
131
- expect(resultMinus.bigIntValue).toBe(-1000000000n);
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('mul', () => {
136
- test('multiplies same type numbers correctly', () => {
297
+ describe("mul", () => {
298
+ test("multiplies same type numbers correctly", () => {
137
299
  const skNumber1 = new SwapKitNumber(10);
138
- const skNumber2 = new SwapKitNumber('5');
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.value).toBe('25');
143
- expect(result.bigIntValue).toBe(2500000000n);
304
+ expect(result.getValue("string")).toBe("25");
305
+ expect(result.getBaseValue("bigint")).toBe(2500000000n);
144
306
  });
145
307
 
146
- test('multiplies different type numbers correctly', () => {
308
+ test("multiplies different type numbers correctly", () => {
147
309
  const skNumber1 = new SwapKitNumber(10);
148
- const result = skNumber1.mul(6, '0.5');
310
+ const result = skNumber1.mul(6, "0.5");
149
311
 
150
- expect(result.value).toBe('30');
151
- expect(result.bigIntValue).toBe(3000000000n);
312
+ expect(result.getValue("string")).toBe("30");
313
+ expect(result.getBaseValue("bigint")).toBe(3000000000n);
152
314
  });
153
315
 
154
- test('multiplies numbers correctly if decimals of SKN is lower than number multiplied with', () => {
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('0.00001');
318
+ const result = skNumber1.mul("0.00001");
157
319
 
158
- expect(result.value).toBe('10');
159
- expect(result.bigIntValue).toBe(1000000000n);
320
+ expect(result.getValue("string")).toBe("10");
321
+ expect(result.getBaseValue("bigint")).toBe(100000n);
160
322
  });
161
323
 
162
- test('should correctly round the result of multiplication', () => {
163
- const skNumber1 = new SwapKitNumber({ decimal: 2, value: 1.23 });
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
- // If we round it to 2 decimal places, we should get 5.61
170
- expect(result.value).toBe('5.61');
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.value).toBe('-1.52');
181
- expect(result2.bigIntValue).toBe(-1518518505n);
341
+ expect(result2.getValue("string")).toBe("-1.52");
342
+ expect(result2.getBaseValue("bigint")).toBe(-151n);
182
343
  });
183
344
  });
184
345
 
185
- describe('div', () => {
186
- test('divides same type numbers correctly', () => {
346
+ describe("div", () => {
347
+ test("divides same type numbers correctly", () => {
187
348
  const skNumber1 = new SwapKitNumber(10);
188
- const skNumber2 = new SwapKitNumber('5');
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.value).toBe('4');
193
- expect(result.bigIntValue).toBe(400000000n);
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.value).toBe('101200');
199
- expect(result2.bigIntValue).toBe(10120000000000n);
359
+ expect(result2.getValue("string")).toBe("101200");
360
+ expect(result2.getBaseValue("bigint")).toBe(10120000000000n);
200
361
  });
201
362
 
202
- test('divides different type numbers correctly', () => {
363
+ test("divides different type numbers correctly", () => {
203
364
  const skNumber1 = new SwapKitNumber(20);
204
- const result = skNumber1.div(5, '0.5');
365
+ const result = skNumber1.div(5, "0.5");
205
366
 
206
- expect(result.value).toBe('8');
207
- expect(result.bigIntValue).toBe(800000000n);
367
+ expect(result.getValue("string")).toBe("8");
368
+ expect(result.getBaseValue("bigint")).toBe(800000000n);
208
369
  });
209
370
 
210
- test('divides different type numbers correctly when decimal is set', () => {
211
- const skNumber1 = new SwapKitNumber({ value: '1.2', decimal: 2 });
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.value).toBe('1200');
215
- expect(result.bigIntValue).toBe(120000000000n);
375
+ expect(result.getValue("string")).toBe("1200");
376
+ expect(result.getBaseValue("bigint")).toBe(120000n);
216
377
  });
217
378
 
218
- test('divides smaller number by larger number', () => {
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.value).toBe('0.5');
223
- expect(result.bigIntValue).toBe(50000000n);
383
+ expect(result.getValue("string")).toBe("0.5");
384
+ expect(result.getBaseValue("bigint")).toBe(50000000n);
224
385
  });
225
386
 
226
- test('divides a number with 18 decimals by a negative number with less decimals', () => {
227
- const skNumber1 = new SwapKitNumber({ value: '1.000000000000000010', decimal: 18 });
228
- const skNumber2 = new SwapKitNumber({ value: '-2', decimal: 1 });
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.value).toBe('-0.500000000000000005');
234
- expect(result.bigIntValue).toBe(-500000000000000005n);
394
+ expect(result.getValue("string")).toBe("-0.500000000000000005");
395
+ expect(result.getBaseValue("bigint")).toBe(-500000000000000005n);
235
396
  });
236
397
 
237
- test('divides a number with 2 decimals by a negative number with more decimals', () => {
238
- const skNumber1 = new SwapKitNumber({ value: '2', decimal: 2 });
239
- const skNumber2 = new SwapKitNumber({ value: '-0.000005', decimal: 18 });
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.value).toBe('-400000');
245
- expect(result.bigIntValue).toBe(-40000000000000n);
405
+ expect(result.getValue("string")).toBe("-400000");
406
+ expect(result.getBaseValue("bigint")).toBe(-40000000n);
246
407
  });
247
408
  });
248
409
 
249
- describe('shitcoin cases', () => {
250
- test('multiply huge numbers', () => {
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.value).toBe('987654321000000987654321000');
256
- expect(result.bigIntValue).toBe(987654321000000987654321000000000000000000000n);
416
+ expect(result.getValue("string")).toBe("987654321000000987654321000");
417
+ expect(result.getBaseValue("bigint")).toBe(987654321000000987654321000000000000000000000n);
257
418
  });
258
419
 
259
- test('divide huge numbers', () => {
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.value).toBe('1012.4999999873447625');
265
- expect(result.bigIntValue).toBe(1012499999987344762500n);
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('gt', () => {
270
- test('greater than', () => {
450
+ describe("gt", () => {
451
+ test("greater than", () => {
271
452
  const skNumber1 = new SwapKitNumber(10);
272
- const skNumber2 = new SwapKitNumber('5');
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('gte', () => {
280
- test('greater than or equal', () => {
468
+ describe("gte", () => {
469
+ test("greater than or equal", () => {
281
470
  const skNumber1 = new SwapKitNumber(10);
282
- const skNumber2 = new SwapKitNumber('5');
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('lt', () => {
291
- test('less than', () => {
479
+ describe("lt", () => {
480
+ test("less than", () => {
292
481
  const skNumber1 = new SwapKitNumber(10);
293
- const skNumber2 = new SwapKitNumber('5');
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('lte', () => {
301
- test('less than or equal', () => {
489
+ describe("lte", () => {
490
+ test("less than or equal", () => {
302
491
  const skNumber1 = new SwapKitNumber(10);
303
- const skNumber2 = new SwapKitNumber('5');
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('eq', () => {
312
- test('equal', () => {
500
+ describe("eq", () => {
501
+ test("equal", () => {
313
502
  const skNumber1 = new SwapKitNumber(10);
314
- const skNumber2 = new SwapKitNumber('5');
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('Throws', () => {
323
- test('throws if division by zero', () => {
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('0');
527
+ const skNumber2 = new SwapKitNumber("0");
326
528
 
327
529
  expect(() => skNumber1.div(skNumber2)).toThrow(RangeError);
328
530
  expect(() => skNumber1.div(0)).toThrow(RangeError);