@swapkit/helpers 1.0.0-rc.9 → 1.0.0-rc.91
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 +2099 -0
- package/dist/index.js.map +29 -0
- package/package.json +24 -37
- package/src/helpers/__tests__/asset.test.ts +126 -108
- 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 +118 -93
- package/src/helpers/derivationPath.ts +52 -0
- package/src/helpers/liquidity.ts +50 -43
- package/src/helpers/memo.ts +31 -28
- package/src/helpers/others.ts +30 -13
- package/src/helpers/validators.ts +15 -6
- package/src/helpers/web3wallets.ts +178 -0
- package/src/index.ts +14 -9
- package/src/modules/__tests__/assetValue.test.ts +325 -116
- package/src/modules/__tests__/bigIntArithmetics.test.ts +30 -0
- package/src/modules/__tests__/swapKitNumber.test.ts +306 -183
- package/src/modules/assetValue.ts +216 -152
- package/src/modules/bigIntArithmetics.ts +214 -147
- package/src/modules/requestClient.ts +29 -0
- package/src/modules/swapKitError.ts +32 -5
- package/src/modules/swapKitNumber.ts +8 -1
- package/src/types/abis/erc20.ts +99 -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/index.ts +9 -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 -354
- package/dist/index.es.js +0 -1054
- package/src/helpers/request.ts +0 -16
|
@@ -1,70 +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.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,
|
|
56
|
-
from:
|
|
57
|
-
to:
|
|
56
|
+
from: 8,
|
|
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,182 +72,264 @@ 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
|
+
});
|
|
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);
|
|
77
90
|
});
|
|
78
91
|
});
|
|
79
92
|
|
|
80
|
-
describe(
|
|
81
|
-
describe(
|
|
82
|
-
test(
|
|
93
|
+
describe("getValue", () => {
|
|
94
|
+
describe("string", () => {
|
|
95
|
+
test("returns string value", () => {
|
|
83
96
|
const skNumber = new SwapKitNumber(1);
|
|
84
|
-
expect(skNumber.getValue(
|
|
97
|
+
expect(skNumber.getValue("string")).toBe("1");
|
|
85
98
|
});
|
|
86
99
|
|
|
87
|
-
test(
|
|
100
|
+
test("returns string value with decimals", () => {
|
|
88
101
|
const skNumber = new SwapKitNumber(0.01);
|
|
89
|
-
expect(skNumber.getValue(
|
|
102
|
+
expect(skNumber.getValue("string")).toBe("0.01");
|
|
90
103
|
});
|
|
91
104
|
});
|
|
92
105
|
|
|
93
|
-
describe(
|
|
94
|
-
test(
|
|
106
|
+
describe("number", () => {
|
|
107
|
+
test("returns number value", () => {
|
|
95
108
|
const skNumber = new SwapKitNumber(1);
|
|
96
|
-
expect(skNumber.getValue(
|
|
109
|
+
expect(skNumber.getValue("number")).toBe(1);
|
|
97
110
|
});
|
|
98
111
|
|
|
99
|
-
test(
|
|
112
|
+
test("returns number value with decimals", () => {
|
|
100
113
|
const skNumber = new SwapKitNumber(0.01);
|
|
101
|
-
expect(skNumber.getValue(
|
|
114
|
+
expect(skNumber.getValue("number")).toBe(0.01);
|
|
102
115
|
});
|
|
103
116
|
});
|
|
104
117
|
|
|
105
|
-
describe(
|
|
106
|
-
test(
|
|
118
|
+
describe("bigint", () => {
|
|
119
|
+
test("returns bigint value", () => {
|
|
107
120
|
const skNumber = new SwapKitNumber(1);
|
|
108
|
-
expect(skNumber.getBaseValue(
|
|
121
|
+
expect(skNumber.getBaseValue("bigint")).toBe(100000000n);
|
|
109
122
|
});
|
|
110
123
|
});
|
|
111
124
|
});
|
|
112
125
|
|
|
113
|
-
describe(
|
|
114
|
-
describe(
|
|
115
|
-
test(
|
|
126
|
+
describe("toSignificant", () => {
|
|
127
|
+
describe("normal cases", () => {
|
|
128
|
+
test("returns first significant number of digits", () => {
|
|
116
129
|
const usdLikeNumber = new SwapKitNumber(1234.5678);
|
|
117
|
-
expect(usdLikeNumber.toSignificant(2)).toBe(
|
|
118
|
-
expect(usdLikeNumber.toSignificant(3)).toBe(
|
|
119
|
-
expect(usdLikeNumber.toSignificant(4)).toBe(
|
|
120
|
-
expect(usdLikeNumber.toSignificant(5)).toBe(
|
|
121
|
-
expect(usdLikeNumber.toSignificant(6)).toBe(
|
|
122
|
-
expect(usdLikeNumber.toSignificant(7)).toBe(
|
|
123
|
-
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");
|
|
124
137
|
|
|
125
138
|
const btcLikeNumber = new SwapKitNumber(0.00005678);
|
|
126
|
-
expect(btcLikeNumber.toSignificant(2)).toBe(
|
|
127
|
-
expect(btcLikeNumber.toSignificant(3)).toBe(
|
|
128
|
-
expect(btcLikeNumber.toSignificant(4)).toBe(
|
|
129
|
-
expect(btcLikeNumber.toSignificant(5)).toBe(
|
|
130
|
-
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");
|
|
131
144
|
});
|
|
132
145
|
});
|
|
133
146
|
|
|
134
|
-
describe(
|
|
135
|
-
test(
|
|
147
|
+
describe("custom decimals", () => {
|
|
148
|
+
test("returns first significant number of digits", () => {
|
|
136
149
|
const usdLikeNumber = new SwapKitNumber({ value: 1234.5678, decimal: 2 });
|
|
137
|
-
expect(usdLikeNumber.toSignificant(2)).toBe(
|
|
138
|
-
expect(usdLikeNumber.toSignificant(3)).toBe(
|
|
139
|
-
expect(usdLikeNumber.toSignificant(4)).toBe(
|
|
140
|
-
expect(usdLikeNumber.toSignificant(5)).toBe(
|
|
141
|
-
expect(usdLikeNumber.toSignificant(6)).toBe(
|
|
142
|
-
expect(usdLikeNumber.toSignificant(7)).toBe(
|
|
143
|
-
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");
|
|
144
157
|
|
|
145
158
|
const ethLikeNumber = new SwapKitNumber({ value: 0.00005678, decimal: 18 });
|
|
146
|
-
expect(ethLikeNumber.toSignificant(2)).toBe(
|
|
147
|
-
expect(ethLikeNumber.toSignificant(3)).toBe(
|
|
148
|
-
expect(ethLikeNumber.toSignificant(4)).toBe(
|
|
149
|
-
expect(ethLikeNumber.toSignificant(5)).toBe(
|
|
150
|
-
expect(ethLikeNumber.toSignificant(8)).toBe(
|
|
151
|
-
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");
|
|
152
165
|
});
|
|
153
166
|
});
|
|
154
167
|
});
|
|
155
168
|
|
|
156
|
-
describe(
|
|
157
|
-
test(
|
|
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", () => {
|
|
158
241
|
const skNumber1 = new SwapKitNumber(10);
|
|
159
|
-
const skNumber2 = new SwapKitNumber(
|
|
160
|
-
const skNumber3 = new SwapKitNumber(
|
|
242
|
+
const skNumber2 = new SwapKitNumber("5");
|
|
243
|
+
const skNumber3 = new SwapKitNumber("0.5");
|
|
161
244
|
const result = skNumber1.add(skNumber2, skNumber3);
|
|
162
245
|
|
|
163
|
-
expect(result.getValue(
|
|
164
|
-
expect(result.getBaseValue(
|
|
246
|
+
expect(result.getValue("string")).toBe("15.5");
|
|
247
|
+
expect(result.getBaseValue("bigint")).toBe(1550000000n);
|
|
165
248
|
});
|
|
166
249
|
|
|
167
|
-
test(
|
|
250
|
+
test("adds different type numbers correctly", () => {
|
|
168
251
|
const skNumber1 = new SwapKitNumber(10);
|
|
169
|
-
const result = skNumber1.add(6,
|
|
252
|
+
const result = skNumber1.add(6, "0.5");
|
|
170
253
|
|
|
171
|
-
expect(result.getValue(
|
|
172
|
-
expect(result.getBaseValue(
|
|
254
|
+
expect(result.getValue("string")).toBe("16.5");
|
|
255
|
+
expect(result.getBaseValue("bigint")).toBe(1650000000n);
|
|
173
256
|
});
|
|
174
257
|
|
|
175
|
-
test(
|
|
258
|
+
test("adds large decimal numbers correctly", () => {
|
|
176
259
|
const skNumber1 = new SwapKitNumber(0.0000000001);
|
|
177
|
-
const result = skNumber1.add(6.000000000001,
|
|
178
|
-
expect(result.getValue(
|
|
179
|
-
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);
|
|
180
263
|
});
|
|
181
264
|
});
|
|
182
265
|
|
|
183
|
-
describe(
|
|
184
|
-
test(
|
|
266
|
+
describe("sub", () => {
|
|
267
|
+
test("subtracts same type numbers correctly", () => {
|
|
185
268
|
const skNumber1 = new SwapKitNumber(10);
|
|
186
|
-
const skNumber2 = new SwapKitNumber(
|
|
269
|
+
const skNumber2 = new SwapKitNumber("5");
|
|
187
270
|
const skNumber3 = new SwapKitNumber(0.5);
|
|
188
271
|
const result = skNumber1.sub(skNumber2, skNumber3);
|
|
189
272
|
|
|
190
|
-
expect(result.getValue(
|
|
191
|
-
expect(result.getBaseValue(
|
|
273
|
+
expect(result.getValue("string")).toBe("4.5");
|
|
274
|
+
expect(result.getBaseValue("bigint")).toBe(450000000n);
|
|
192
275
|
});
|
|
193
276
|
|
|
194
|
-
test(
|
|
277
|
+
test("subtracts different type numbers correctly", () => {
|
|
195
278
|
const skNumber1 = new SwapKitNumber(10);
|
|
196
|
-
const result = skNumber1.sub(6,
|
|
279
|
+
const result = skNumber1.sub(6, "0.5");
|
|
197
280
|
|
|
198
|
-
expect(result.getValue(
|
|
199
|
-
expect(result.getBaseValue(
|
|
281
|
+
expect(result.getValue("string")).toBe("3.5");
|
|
282
|
+
expect(result.getBaseValue("bigint")).toBe(350000000n);
|
|
200
283
|
});
|
|
201
284
|
|
|
202
|
-
test(
|
|
285
|
+
test("can process negative results", () => {
|
|
203
286
|
const skNumber1 = new SwapKitNumber(10);
|
|
204
287
|
const result0 = skNumber1.sub(10);
|
|
205
|
-
const resultMinus = result0.sub(
|
|
288
|
+
const resultMinus = result0.sub("10");
|
|
206
289
|
|
|
207
|
-
expect(result0.getValue(
|
|
208
|
-
expect(resultMinus.getValue(
|
|
209
|
-
expect(result0.getBaseValue(
|
|
210
|
-
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);
|
|
211
294
|
});
|
|
212
295
|
});
|
|
213
296
|
|
|
214
|
-
describe(
|
|
215
|
-
test(
|
|
297
|
+
describe("mul", () => {
|
|
298
|
+
test("multiplies same type numbers correctly", () => {
|
|
216
299
|
const skNumber1 = new SwapKitNumber(10);
|
|
217
|
-
const skNumber2 = new SwapKitNumber(
|
|
300
|
+
const skNumber2 = new SwapKitNumber("5");
|
|
218
301
|
const skNumber3 = new SwapKitNumber(0.5);
|
|
219
302
|
const result = skNumber1.mul(skNumber2, skNumber3);
|
|
220
303
|
|
|
221
|
-
expect(result.getValue(
|
|
222
|
-
expect(result.getBaseValue(
|
|
304
|
+
expect(result.getValue("string")).toBe("25");
|
|
305
|
+
expect(result.getBaseValue("bigint")).toBe(2500000000n);
|
|
223
306
|
});
|
|
224
307
|
|
|
225
|
-
test(
|
|
308
|
+
test("multiplies different type numbers correctly", () => {
|
|
226
309
|
const skNumber1 = new SwapKitNumber(10);
|
|
227
|
-
const result = skNumber1.mul(6,
|
|
310
|
+
const result = skNumber1.mul(6, "0.5");
|
|
228
311
|
|
|
229
|
-
expect(result.getValue(
|
|
230
|
-
expect(result.getBaseValue(
|
|
312
|
+
expect(result.getValue("string")).toBe("30");
|
|
313
|
+
expect(result.getBaseValue("bigint")).toBe(3000000000n);
|
|
231
314
|
});
|
|
232
315
|
|
|
233
|
-
test(
|
|
316
|
+
test("multiplies numbers correctly if decimals of SKN is lower than number multiplied with", () => {
|
|
234
317
|
const skNumber1 = new SwapKitNumber({ value: 1000000, decimal: 4 });
|
|
235
|
-
const result = skNumber1.mul(
|
|
318
|
+
const result = skNumber1.mul("0.00001");
|
|
236
319
|
|
|
237
|
-
expect(result.getValue(
|
|
238
|
-
expect(result.getBaseValue(
|
|
320
|
+
expect(result.getValue("string")).toBe("10");
|
|
321
|
+
expect(result.getBaseValue("bigint")).toBe(100000n);
|
|
239
322
|
});
|
|
240
323
|
|
|
241
|
-
test(
|
|
324
|
+
test("should correctly round the result of multiplication", () => {
|
|
242
325
|
const skNumber1 = new SwapKitNumber({ decimal: 3, value: 1.23 });
|
|
243
326
|
const skNumber2 = new SwapKitNumber({ decimal: 4, value: 4.56 });
|
|
244
327
|
|
|
245
328
|
const result = skNumber1.mul(skNumber2);
|
|
246
329
|
|
|
247
330
|
// The exact result of 1.23 * 4.56 is 5.6088
|
|
248
|
-
|
|
249
|
-
expect(result.
|
|
250
|
-
expect(result.getBaseValue('bigint')).toBe(5608n);
|
|
331
|
+
expect(result.getValue("string")).toBe("5.609");
|
|
332
|
+
expect(result.getBaseValue("bigint")).toBe(5608n);
|
|
251
333
|
|
|
252
334
|
const skNumber3 = new SwapKitNumber({ decimal: 2, value: 1.23 });
|
|
253
335
|
const skNumber4 = new SwapKitNumber(-1.234567891);
|
|
@@ -256,109 +338,137 @@ describe('SwapKitNumber', () => {
|
|
|
256
338
|
|
|
257
339
|
// The exact result of 1.23 * -1.234567891 is -1,518518505
|
|
258
340
|
// If we round it to 2 decimal places, we should get 5.61
|
|
259
|
-
expect(result2.getValue(
|
|
260
|
-
expect(result2.getBaseValue(
|
|
341
|
+
expect(result2.getValue("string")).toBe("-1.52");
|
|
342
|
+
expect(result2.getBaseValue("bigint")).toBe(-151n);
|
|
261
343
|
});
|
|
262
344
|
});
|
|
263
345
|
|
|
264
|
-
describe(
|
|
265
|
-
test(
|
|
346
|
+
describe("div", () => {
|
|
347
|
+
test("divides same type numbers correctly", () => {
|
|
266
348
|
const skNumber1 = new SwapKitNumber(10);
|
|
267
|
-
const skNumber2 = new SwapKitNumber(
|
|
349
|
+
const skNumber2 = new SwapKitNumber("5");
|
|
268
350
|
const skNumber3 = new SwapKitNumber(0.5);
|
|
269
351
|
const result = skNumber1.div(skNumber2, skNumber3);
|
|
270
352
|
|
|
271
|
-
expect(result.getValue(
|
|
272
|
-
expect(result.getBaseValue(
|
|
353
|
+
expect(result.getValue("string")).toBe("4");
|
|
354
|
+
expect(result.getBaseValue("bigint")).toBe(400000000n);
|
|
273
355
|
|
|
274
356
|
const skNumber4 = new SwapKitNumber(10.12);
|
|
275
357
|
const result2 = skNumber4.div(0.0001);
|
|
276
358
|
|
|
277
|
-
expect(result2.getValue(
|
|
278
|
-
expect(result2.getBaseValue(
|
|
359
|
+
expect(result2.getValue("string")).toBe("101200");
|
|
360
|
+
expect(result2.getBaseValue("bigint")).toBe(10120000000000n);
|
|
279
361
|
});
|
|
280
362
|
|
|
281
|
-
test(
|
|
363
|
+
test("divides different type numbers correctly", () => {
|
|
282
364
|
const skNumber1 = new SwapKitNumber(20);
|
|
283
|
-
const result = skNumber1.div(5,
|
|
365
|
+
const result = skNumber1.div(5, "0.5");
|
|
284
366
|
|
|
285
|
-
expect(result.getValue(
|
|
286
|
-
expect(result.getBaseValue(
|
|
367
|
+
expect(result.getValue("string")).toBe("8");
|
|
368
|
+
expect(result.getBaseValue("bigint")).toBe(800000000n);
|
|
287
369
|
});
|
|
288
370
|
|
|
289
|
-
test(
|
|
290
|
-
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 });
|
|
291
373
|
const result = skNumber1.div(0.001);
|
|
292
374
|
|
|
293
|
-
expect(result.getValue(
|
|
294
|
-
expect(result.getBaseValue(
|
|
375
|
+
expect(result.getValue("string")).toBe("1200");
|
|
376
|
+
expect(result.getBaseValue("bigint")).toBe(120000n);
|
|
295
377
|
});
|
|
296
378
|
|
|
297
|
-
test(
|
|
379
|
+
test("divides smaller number by larger number", () => {
|
|
298
380
|
const skNumber1 = new SwapKitNumber(1);
|
|
299
381
|
const result = skNumber1.div(2);
|
|
300
382
|
|
|
301
|
-
expect(result.getValue(
|
|
302
|
-
expect(result.getBaseValue(
|
|
383
|
+
expect(result.getValue("string")).toBe("0.5");
|
|
384
|
+
expect(result.getBaseValue("bigint")).toBe(50000000n);
|
|
303
385
|
});
|
|
304
386
|
|
|
305
|
-
test(
|
|
306
|
-
const skNumber1 = new SwapKitNumber({ value:
|
|
307
|
-
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 });
|
|
308
390
|
|
|
309
391
|
const result = skNumber1.div(skNumber2);
|
|
310
392
|
|
|
311
393
|
// The exact result of 1.000000000000000010 / -2 is -0.500000000000000005
|
|
312
|
-
expect(result.getValue(
|
|
313
|
-
expect(result.getBaseValue(
|
|
394
|
+
expect(result.getValue("string")).toBe("-0.500000000000000005");
|
|
395
|
+
expect(result.getBaseValue("bigint")).toBe(-500000000000000005n);
|
|
314
396
|
});
|
|
315
397
|
|
|
316
|
-
test(
|
|
317
|
-
const skNumber1 = new SwapKitNumber({ value:
|
|
318
|
-
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 });
|
|
319
401
|
|
|
320
402
|
const result = skNumber1.div(skNumber2);
|
|
321
403
|
|
|
322
404
|
// The exact result of 2 / -0.000005 is -400000
|
|
323
|
-
expect(result.getValue(
|
|
324
|
-
expect(result.getBaseValue(
|
|
405
|
+
expect(result.getValue("string")).toBe("-400000");
|
|
406
|
+
expect(result.getBaseValue("bigint")).toBe(-40000000n);
|
|
325
407
|
});
|
|
326
408
|
});
|
|
327
409
|
|
|
328
|
-
describe(
|
|
329
|
-
test(
|
|
410
|
+
describe("shitcoin cases", () => {
|
|
411
|
+
test("multiply huge numbers", () => {
|
|
330
412
|
const skNumber1 = new SwapKitNumber({ value: 1_000_000_000_000_001, decimal: 18 });
|
|
331
413
|
const skNumber2 = new SwapKitNumber({ value: 987_654_321_000, decimal: 18 });
|
|
332
414
|
|
|
333
415
|
const result = skNumber1.mul(skNumber2);
|
|
334
|
-
expect(result.getValue(
|
|
335
|
-
expect(result.getBaseValue(
|
|
416
|
+
expect(result.getValue("string")).toBe("987654321000000987654321000");
|
|
417
|
+
expect(result.getBaseValue("bigint")).toBe(987654321000000987654321000000000000000000000n);
|
|
336
418
|
});
|
|
337
419
|
|
|
338
|
-
test(
|
|
420
|
+
test("divide huge numbers", () => {
|
|
339
421
|
const skNumber1 = new SwapKitNumber({ value: 1_000_000_000_000_001, decimal: 18 });
|
|
340
422
|
const skNumber2 = new SwapKitNumber({ value: 987_654_321_000, decimal: 18 });
|
|
341
423
|
|
|
342
424
|
const result = skNumber1.div(skNumber2);
|
|
343
|
-
expect(result.getValue(
|
|
344
|
-
expect(result.getBaseValue(
|
|
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");
|
|
345
447
|
});
|
|
346
448
|
});
|
|
347
449
|
|
|
348
|
-
describe(
|
|
349
|
-
test(
|
|
450
|
+
describe("gt", () => {
|
|
451
|
+
test("greater than", () => {
|
|
350
452
|
const skNumber1 = new SwapKitNumber(10);
|
|
351
|
-
const skNumber2 = new SwapKitNumber(
|
|
453
|
+
const skNumber2 = new SwapKitNumber("5");
|
|
352
454
|
|
|
353
455
|
expect(skNumber1.gt(skNumber2)).toBe(true);
|
|
354
456
|
expect(skNumber2.gt(skNumber1)).toBe(false);
|
|
355
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
|
+
});
|
|
356
466
|
});
|
|
357
467
|
|
|
358
|
-
describe(
|
|
359
|
-
test(
|
|
468
|
+
describe("gte", () => {
|
|
469
|
+
test("greater than or equal", () => {
|
|
360
470
|
const skNumber1 = new SwapKitNumber(10);
|
|
361
|
-
const skNumber2 = new SwapKitNumber(
|
|
471
|
+
const skNumber2 = new SwapKitNumber("5");
|
|
362
472
|
|
|
363
473
|
expect(skNumber1.gte(skNumber2)).toBe(true);
|
|
364
474
|
expect(skNumber1.gte(skNumber1)).toBe(true);
|
|
@@ -366,20 +476,20 @@ describe('SwapKitNumber', () => {
|
|
|
366
476
|
});
|
|
367
477
|
});
|
|
368
478
|
|
|
369
|
-
describe(
|
|
370
|
-
test(
|
|
479
|
+
describe("lt", () => {
|
|
480
|
+
test("less than", () => {
|
|
371
481
|
const skNumber1 = new SwapKitNumber(10);
|
|
372
|
-
const skNumber2 = new SwapKitNumber(
|
|
482
|
+
const skNumber2 = new SwapKitNumber("5");
|
|
373
483
|
|
|
374
484
|
expect(skNumber1.lt(skNumber2)).toBe(false);
|
|
375
485
|
expect(skNumber2.lt(skNumber1)).toBe(true);
|
|
376
486
|
});
|
|
377
487
|
});
|
|
378
488
|
|
|
379
|
-
describe(
|
|
380
|
-
test(
|
|
489
|
+
describe("lte", () => {
|
|
490
|
+
test("less than or equal", () => {
|
|
381
491
|
const skNumber1 = new SwapKitNumber(10);
|
|
382
|
-
const skNumber2 = new SwapKitNumber(
|
|
492
|
+
const skNumber2 = new SwapKitNumber("5");
|
|
383
493
|
|
|
384
494
|
expect(skNumber1.lte(skNumber2)).toBe(false);
|
|
385
495
|
expect(skNumber1.lte(skNumber1)).toBe(true);
|
|
@@ -387,10 +497,10 @@ describe('SwapKitNumber', () => {
|
|
|
387
497
|
});
|
|
388
498
|
});
|
|
389
499
|
|
|
390
|
-
describe(
|
|
391
|
-
test(
|
|
500
|
+
describe("eq", () => {
|
|
501
|
+
test("equal", () => {
|
|
392
502
|
const skNumber1 = new SwapKitNumber(10);
|
|
393
|
-
const skNumber2 = new SwapKitNumber(
|
|
503
|
+
const skNumber2 = new SwapKitNumber("5");
|
|
394
504
|
|
|
395
505
|
expect(skNumber1.eq(skNumber2)).toBe(false);
|
|
396
506
|
expect(skNumber1.eq(skNumber1)).toBe(true);
|
|
@@ -398,10 +508,23 @@ describe('SwapKitNumber', () => {
|
|
|
398
508
|
});
|
|
399
509
|
});
|
|
400
510
|
|
|
401
|
-
describe(
|
|
402
|
-
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", () => {
|
|
403
526
|
const skNumber1 = new SwapKitNumber(10);
|
|
404
|
-
const skNumber2 = new SwapKitNumber(
|
|
527
|
+
const skNumber2 = new SwapKitNumber("0");
|
|
405
528
|
|
|
406
529
|
expect(() => skNumber1.div(skNumber2)).toThrow(RangeError);
|
|
407
530
|
expect(() => skNumber1.div(0)).toThrow(RangeError);
|