@tcswap/helpers 4.5.15

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 (139) hide show
  1. package/dist/api/index.cjs +4 -0
  2. package/dist/api/index.cjs.map +16 -0
  3. package/dist/api/index.js +4 -0
  4. package/dist/api/index.js.map +16 -0
  5. package/dist/chunk-pfmeq01a.js +5 -0
  6. package/dist/chunk-pfmeq01a.js.map +9 -0
  7. package/dist/chunk-vb4wtm2w.js +4 -0
  8. package/dist/chunk-vb4wtm2w.js.map +9 -0
  9. package/dist/contracts.cjs +4 -0
  10. package/dist/contracts.cjs.map +10 -0
  11. package/dist/contracts.js +4 -0
  12. package/dist/contracts.js.map +10 -0
  13. package/dist/index.cjs +7 -0
  14. package/dist/index.cjs.map +30 -0
  15. package/dist/index.js +7 -0
  16. package/dist/index.js.map +30 -0
  17. package/dist/tokens.cjs +4 -0
  18. package/dist/tokens.cjs.map +10 -0
  19. package/dist/tokens.js +4 -0
  20. package/dist/tokens.js.map +10 -0
  21. package/dist/types/api/index.d.ts +502 -0
  22. package/dist/types/api/index.d.ts.map +1 -0
  23. package/dist/types/api/memoless/endpoints.d.ts +56 -0
  24. package/dist/types/api/memoless/endpoints.d.ts.map +1 -0
  25. package/dist/types/api/memoless/types.d.ts +85 -0
  26. package/dist/types/api/memoless/types.d.ts.map +1 -0
  27. package/dist/types/api/midgard/endpoints.d.ts +80 -0
  28. package/dist/types/api/midgard/endpoints.d.ts.map +1 -0
  29. package/dist/types/api/midgard/types.d.ts +543 -0
  30. package/dist/types/api/midgard/types.d.ts.map +1 -0
  31. package/dist/types/api/thornode/endpoints.d.ts +34 -0
  32. package/dist/types/api/thornode/endpoints.d.ts.map +1 -0
  33. package/dist/types/api/thornode/types.d.ts +264 -0
  34. package/dist/types/api/thornode/types.d.ts.map +1 -0
  35. package/dist/types/api/uswap/endpoints.d.ts +372 -0
  36. package/dist/types/api/uswap/endpoints.d.ts.map +1 -0
  37. package/dist/types/api/uswap/types.d.ts +1487 -0
  38. package/dist/types/api/uswap/types.d.ts.map +1 -0
  39. package/dist/types/contracts.d.ts +2 -0
  40. package/dist/types/contracts.d.ts.map +1 -0
  41. package/dist/types/index.d.ts +32 -0
  42. package/dist/types/index.d.ts.map +1 -0
  43. package/dist/types/modules/assetValue.d.ts +82 -0
  44. package/dist/types/modules/assetValue.d.ts.map +1 -0
  45. package/dist/types/modules/bigIntArithmetics.d.ts +60 -0
  46. package/dist/types/modules/bigIntArithmetics.d.ts.map +1 -0
  47. package/dist/types/modules/feeMultiplier.d.ts +48 -0
  48. package/dist/types/modules/feeMultiplier.d.ts.map +1 -0
  49. package/dist/types/modules/requestClient.d.ts +33 -0
  50. package/dist/types/modules/requestClient.d.ts.map +1 -0
  51. package/dist/types/modules/uSwapConfig.d.ts +249 -0
  52. package/dist/types/modules/uSwapConfig.d.ts.map +1 -0
  53. package/dist/types/modules/uSwapError.d.ts +879 -0
  54. package/dist/types/modules/uSwapError.d.ts.map +1 -0
  55. package/dist/types/modules/uSwapNumber.d.ts +10 -0
  56. package/dist/types/modules/uSwapNumber.d.ts.map +1 -0
  57. package/dist/types/tokens.d.ts +2 -0
  58. package/dist/types/tokens.d.ts.map +1 -0
  59. package/dist/types/types/commonTypes.d.ts +16 -0
  60. package/dist/types/types/commonTypes.d.ts.map +1 -0
  61. package/dist/types/types/derivationPath.d.ts +4 -0
  62. package/dist/types/types/derivationPath.d.ts.map +1 -0
  63. package/dist/types/types/errors/apiV1.d.ts +2 -0
  64. package/dist/types/types/errors/apiV1.d.ts.map +1 -0
  65. package/dist/types/types/index.d.ts +6 -0
  66. package/dist/types/types/index.d.ts.map +1 -0
  67. package/dist/types/types/quotes.d.ts +180 -0
  68. package/dist/types/types/quotes.d.ts.map +1 -0
  69. package/dist/types/types/sdk.d.ts +35 -0
  70. package/dist/types/types/sdk.d.ts.map +1 -0
  71. package/dist/types/types/wallet.d.ts +130 -0
  72. package/dist/types/types/wallet.d.ts.map +1 -0
  73. package/dist/types/utils/asset.d.ts +37 -0
  74. package/dist/types/utils/asset.d.ts.map +1 -0
  75. package/dist/types/utils/chains.d.ts +13 -0
  76. package/dist/types/utils/chains.d.ts.map +1 -0
  77. package/dist/types/utils/derivationPath.d.ts +21 -0
  78. package/dist/types/utils/derivationPath.d.ts.map +1 -0
  79. package/dist/types/utils/explorerUrls.d.ts +10 -0
  80. package/dist/types/utils/explorerUrls.d.ts.map +1 -0
  81. package/dist/types/utils/liquidity.d.ts +62 -0
  82. package/dist/types/utils/liquidity.d.ts.map +1 -0
  83. package/dist/types/utils/memo.d.ts +65 -0
  84. package/dist/types/utils/memo.d.ts.map +1 -0
  85. package/dist/types/utils/others.d.ts +15 -0
  86. package/dist/types/utils/others.d.ts.map +1 -0
  87. package/dist/types/utils/validators.d.ts +6 -0
  88. package/dist/types/utils/validators.d.ts.map +1 -0
  89. package/dist/types/utils/wallets.d.ts +36 -0
  90. package/dist/types/utils/wallets.d.ts.map +1 -0
  91. package/package.json +67 -0
  92. package/src/api/index.ts +15 -0
  93. package/src/api/memoless/endpoints.ts +62 -0
  94. package/src/api/memoless/types.ts +83 -0
  95. package/src/api/midgard/endpoints.ts +352 -0
  96. package/src/api/midgard/types.ts +515 -0
  97. package/src/api/thornode/endpoints.ts +109 -0
  98. package/src/api/thornode/types.ts +247 -0
  99. package/src/api/uswap/endpoints.ts +252 -0
  100. package/src/api/uswap/types.ts +626 -0
  101. package/src/contracts.ts +1 -0
  102. package/src/index.ts +32 -0
  103. package/src/modules/__tests__/assetValue.test.ts +2452 -0
  104. package/src/modules/__tests__/bigIntArithmetics.test.ts +410 -0
  105. package/src/modules/__tests__/feeMultiplier.test.ts +131 -0
  106. package/src/modules/__tests__/uSwapConfig.test.ts +429 -0
  107. package/src/modules/__tests__/uSwapNumber.test.ts +439 -0
  108. package/src/modules/assetValue.ts +536 -0
  109. package/src/modules/bigIntArithmetics.ts +366 -0
  110. package/src/modules/feeMultiplier.ts +84 -0
  111. package/src/modules/requestClient.ts +116 -0
  112. package/src/modules/uSwapConfig.ts +189 -0
  113. package/src/modules/uSwapError.ts +474 -0
  114. package/src/modules/uSwapNumber.ts +17 -0
  115. package/src/tokens.ts +1 -0
  116. package/src/types/commonTypes.ts +10 -0
  117. package/src/types/derivationPath.ts +11 -0
  118. package/src/types/errors/apiV1.ts +0 -0
  119. package/src/types/index.ts +5 -0
  120. package/src/types/quotes.ts +182 -0
  121. package/src/types/sdk.ts +38 -0
  122. package/src/types/wallet.ts +124 -0
  123. package/src/utils/__tests__/asset.test.ts +186 -0
  124. package/src/utils/__tests__/derivationPath.test.ts +142 -0
  125. package/src/utils/__tests__/explorerUrls.test.ts +59 -0
  126. package/src/utils/__tests__/liquidity.test.ts +302 -0
  127. package/src/utils/__tests__/memo.test.ts +99 -0
  128. package/src/utils/__tests__/others.test.ts +169 -0
  129. package/src/utils/__tests__/validators.test.ts +84 -0
  130. package/src/utils/__tests__/wallets.test.ts +625 -0
  131. package/src/utils/asset.ts +399 -0
  132. package/src/utils/chains.ts +104 -0
  133. package/src/utils/derivationPath.ts +101 -0
  134. package/src/utils/explorerUrls.ts +32 -0
  135. package/src/utils/liquidity.ts +154 -0
  136. package/src/utils/memo.ts +102 -0
  137. package/src/utils/others.ts +64 -0
  138. package/src/utils/validators.ts +36 -0
  139. package/src/utils/wallets.ts +238 -0
@@ -0,0 +1,439 @@
1
+ /**
2
+ * Modifications © 2025 Horizontal Systems.
3
+ */
4
+
5
+ import { describe, expect, test } from "bun:test";
6
+
7
+ import { USwapNumber } from "../uSwapNumber";
8
+
9
+ describe("USwapNumber", () => {
10
+ describe("constructors", () => {
11
+ test("creates numbers correctly", () => {
12
+ const skNumber1 = new USwapNumber(1);
13
+ expect(skNumber1.getValue("string")).toBe("1");
14
+ expect(skNumber1.getValue("number")).toBe(1);
15
+ expect(skNumber1.getBaseValue("bigint")).toBe(100000000n);
16
+
17
+ const skNumber2 = new USwapNumber("1");
18
+ expect(skNumber2.getValue("string")).toBe("1");
19
+ expect(skNumber2.getBaseValue("bigint")).toBe(100000000n);
20
+
21
+ /**
22
+ * because by default we have 8 decimals - it will be rounded to 0 on base value
23
+ */
24
+ const skNumber3 = new USwapNumber("0.0000000001");
25
+ expect(skNumber3.getValue("string")).toBe("0.0000000001");
26
+ expect(skNumber3.getBaseValue("bigint")).toBe(0n);
27
+
28
+ const skNumber4 = new USwapNumber({ decimal: 10, value: "0.0000000001" });
29
+ expect(skNumber4.getValue("string")).toBe("0.0000000001");
30
+ expect(skNumber4.getBaseValue("bigint")).toBe(1n);
31
+
32
+ const skNumber5 = new USwapNumber({ decimal: 3, value: 0.1005 });
33
+ expect(skNumber5.getValue("string")).toBe("0.101");
34
+ expect(skNumber5.getBaseValue("bigint")).toBe(101n);
35
+
36
+ const skNumber6 = new USwapNumber({ decimal: 3, value: -0.1005 });
37
+ expect(skNumber6.getValue("string")).toBe("-0.101");
38
+ expect(skNumber6.getBaseValue("bigint")).toBe(-101n);
39
+ expect(skNumber6.decimal).toBe(3);
40
+ expect(skNumber6.getValue("number")).toBe(-0.101);
41
+ expect(skNumber6.decimalMultiplier).toBe(100000000n);
42
+ });
43
+
44
+ test("creates SwapKitInstance from BigInt: (12.345678901234, decimals: 12)", () => {
45
+ const skNumber = USwapNumber.fromBigInt(12345678901234n, 12);
46
+
47
+ expect(skNumber.getValue("string")).toBe("12.345678901234");
48
+ expect(skNumber.getBaseValue("bigint")).toBe(12345678901234n);
49
+ });
50
+ });
51
+
52
+ describe("shiftDecimals", () => {
53
+ test("shifts up and bumps number", () => {
54
+ const skNumber = new USwapNumber(1);
55
+ expect(skNumber.getValue("string")).toBe("1");
56
+ expect(skNumber.getBaseValue("bigint")).toBe(100000000n);
57
+
58
+ const shiftedSkNumber = USwapNumber.shiftDecimals({ from: 8, to: 6, value: skNumber });
59
+
60
+ expect(shiftedSkNumber.getValue("string")).toBe("1");
61
+ expect(shiftedSkNumber.getBaseValue("bigint")).toBe(1000000n);
62
+ });
63
+
64
+ test("shifts down and rounds down number", () => {
65
+ const skNumber = new USwapNumber(2.12345678);
66
+ expect(skNumber.getValue("string")).toBe("2.12345678");
67
+ expect(skNumber.getBaseValue("bigint")).toBe(212345678n);
68
+
69
+ const shiftedSkNumber = USwapNumber.shiftDecimals({ from: 8, to: 6, value: skNumber });
70
+
71
+ expect(shiftedSkNumber.getValue("string")).toBe("2.123456");
72
+ expect(shiftedSkNumber.getBaseValue("bigint")).toBe(2123456n);
73
+ });
74
+
75
+ test("shift eth from 18 to 8", () => {
76
+ const skNumber = new USwapNumber({ decimal: 18, value: "0.2" });
77
+
78
+ const shiftedSkNumber = USwapNumber.shiftDecimals({ from: 18, to: 8, value: skNumber });
79
+
80
+ expect(shiftedSkNumber.getValue("string")).toBe("0.2");
81
+ expect(shiftedSkNumber.getBaseValue("bigint")).toBe(20000000n);
82
+ });
83
+ });
84
+
85
+ describe("getValue", () => {
86
+ describe("string", () => {
87
+ test("returns string value", () => {
88
+ const skNumber = new USwapNumber(1);
89
+ expect(skNumber.getValue("string")).toBe("1");
90
+ });
91
+
92
+ test("returns string value with decimals", () => {
93
+ const skNumber = new USwapNumber(0.01);
94
+ expect(skNumber.getValue("string")).toBe("0.01");
95
+ });
96
+
97
+ test("returns string value with adjusted decimals", () => {
98
+ const skNumber = new USwapNumber({ decimal: 18, value: "1.234567890123456789" });
99
+ expect(skNumber.getValue("string", 8)).toBe("1.23456789");
100
+ });
101
+
102
+ test("returns string base value with adjusted decimals", () => {
103
+ const skNumber = new USwapNumber({ decimal: 18, value: "1.234567890123456789" });
104
+ expect(skNumber.getBaseValue("string", 8)).toBe("123456789");
105
+ expect(skNumber.getBaseValue("string", 10)).toBe("12345678901");
106
+ });
107
+ });
108
+
109
+ describe("number", () => {
110
+ test("returns number value", () => {
111
+ const skNumber = new USwapNumber(1);
112
+ expect(skNumber.getValue("number")).toBe(1);
113
+ });
114
+
115
+ test("returns number value with decimals", () => {
116
+ const skNumber = new USwapNumber(0.01);
117
+ expect(skNumber.getValue("number")).toBe(0.01);
118
+ });
119
+
120
+ test("returns number value with adjusted decimals", () => {
121
+ const skNumber = new USwapNumber({ decimal: 18, value: "1.234567890123456789" });
122
+ expect(skNumber.getValue("number", 8)).toBe(1.23456789);
123
+ });
124
+
125
+ test("returns number base value with adjusted decimals", () => {
126
+ const skNumber = new USwapNumber({ decimal: 18, value: "1.234567890123456789" });
127
+ expect(skNumber.getBaseValue("number", 8)).toBe(123456789);
128
+ expect(skNumber.getBaseValue("number", 10)).toBe(12345678901);
129
+ });
130
+ });
131
+
132
+ describe("bigint", () => {
133
+ test("returns bigint value", () => {
134
+ const skNumber = new USwapNumber(1);
135
+ expect(skNumber.getBaseValue("bigint")).toBe(100000000n);
136
+ });
137
+
138
+ test("returns bigint value with adjusted decimals", () => {
139
+ const skNumber = new USwapNumber({ decimal: 18, value: "1.234567890123456789" });
140
+ expect(skNumber.getBaseValue("bigint", 8)).toBe(123456789n);
141
+ expect(skNumber.getBaseValue("bigint", 10)).toBe(12345678901n);
142
+ });
143
+ });
144
+ });
145
+
146
+ describe("add", () => {
147
+ test("adds same type numbers correctly", () => {
148
+ const skNumber1 = new USwapNumber(10);
149
+ const skNumber2 = new USwapNumber("5");
150
+ const skNumber3 = new USwapNumber("0.5");
151
+ const result = skNumber1.add(skNumber2, skNumber3);
152
+
153
+ expect(result.getValue("string")).toBe("15.5");
154
+ expect(result.getBaseValue("bigint")).toBe(1550000000n);
155
+ });
156
+
157
+ test("adds different type numbers correctly", () => {
158
+ const skNumber1 = new USwapNumber(10);
159
+ const result = skNumber1.add(6, "0.5");
160
+
161
+ expect(result.getValue("string")).toBe("16.5");
162
+ expect(result.getBaseValue("bigint")).toBe(1650000000n);
163
+ });
164
+
165
+ test("adds large decimal numbers correctly", () => {
166
+ const skNumber1 = new USwapNumber(0.0000000001);
167
+ const result = skNumber1.add(6.000000000001, "0.0000000000000005");
168
+ expect(result.getValue("string")).toBe("6.0000000001010005");
169
+ expect(result.getBaseValue("bigint")).toBe(600000000n);
170
+ });
171
+ });
172
+
173
+ describe("sub", () => {
174
+ test("subtracts same type numbers correctly", () => {
175
+ const skNumber1 = new USwapNumber(10);
176
+ const skNumber2 = new USwapNumber("5");
177
+ const skNumber3 = new USwapNumber(0.5);
178
+ const result = skNumber1.sub(skNumber2, skNumber3);
179
+
180
+ expect(result.getValue("string")).toBe("4.5");
181
+ expect(result.getBaseValue("bigint")).toBe(450000000n);
182
+ });
183
+
184
+ test("subtracts different type numbers correctly", () => {
185
+ const skNumber1 = new USwapNumber(10);
186
+ const result = skNumber1.sub(6, "0.5");
187
+
188
+ expect(result.getValue("string")).toBe("3.5");
189
+ expect(result.getBaseValue("bigint")).toBe(350000000n);
190
+ });
191
+
192
+ test("can process negative results", () => {
193
+ const skNumber1 = new USwapNumber(10);
194
+ const result0 = skNumber1.sub(10);
195
+ const resultMinus = result0.sub("10");
196
+
197
+ expect(result0.getValue("string")).toBe("0");
198
+ expect(resultMinus.getValue("string")).toBe("-10");
199
+ expect(result0.getBaseValue("bigint")).toBe(0n);
200
+ expect(resultMinus.getBaseValue("bigint")).toBe(-1000000000n);
201
+ });
202
+ });
203
+
204
+ describe("mul", () => {
205
+ test("multiplies same type numbers correctly", () => {
206
+ const skNumber1 = new USwapNumber(10);
207
+ const skNumber2 = new USwapNumber("5");
208
+ const skNumber3 = new USwapNumber(0.5);
209
+ const result = skNumber1.mul(skNumber2, skNumber3);
210
+
211
+ expect(result.getValue("string")).toBe("25");
212
+ expect(result.getBaseValue("bigint")).toBe(2500000000n);
213
+ });
214
+
215
+ test("multiplies different type numbers correctly", () => {
216
+ const skNumber1 = new USwapNumber(10);
217
+ const result = skNumber1.mul(6, "0.5");
218
+
219
+ expect(result.getValue("string")).toBe("30");
220
+ expect(result.getBaseValue("bigint")).toBe(3000000000n);
221
+ });
222
+
223
+ test("multiplies numbers correctly if decimals of SKN is lower than number multiplied with", () => {
224
+ const skNumber1 = new USwapNumber({ decimal: 4, value: 1000000 });
225
+ const result = skNumber1.mul("0.00001");
226
+
227
+ expect(result.getValue("string")).toBe("10");
228
+ expect(result.getBaseValue("bigint")).toBe(100000n);
229
+ });
230
+
231
+ test("should correctly round the result of multiplication", () => {
232
+ const skNumber1 = new USwapNumber({ decimal: 3, value: 1.23 });
233
+ const skNumber2 = new USwapNumber({ decimal: 4, value: 4.56 });
234
+
235
+ const result = skNumber1.mul(skNumber2);
236
+
237
+ expect(result.getValue("string")).toBe("5.609");
238
+ expect(result.getBaseValue("bigint")).toBe(5609n);
239
+
240
+ const skNumber3 = new USwapNumber({ decimal: 2, value: 1.23 });
241
+ const skNumber4 = new USwapNumber(-1.234567891);
242
+
243
+ const result2 = skNumber3.mul(skNumber4);
244
+
245
+ // The exact result of 1.23 * -1.234567891 is -1,518518505
246
+ // If we round it to 2 decimal places, we should get 5.61
247
+ expect(result2.getValue("string")).toBe("-1.52");
248
+ expect(result2.getBaseValue("bigint")).toBe(-152n);
249
+ });
250
+ });
251
+
252
+ describe("div", () => {
253
+ test("divides same type numbers correctly", () => {
254
+ const skNumber1 = new USwapNumber(10);
255
+ const skNumber2 = new USwapNumber("5");
256
+ const skNumber3 = new USwapNumber(0.5);
257
+ const result = skNumber1.div(skNumber2, skNumber3);
258
+
259
+ expect(result.getValue("string")).toBe("4");
260
+ expect(result.getBaseValue("bigint")).toBe(400000000n);
261
+
262
+ const skNumber4 = new USwapNumber(10.12);
263
+ const result2 = skNumber4.div(0.0001);
264
+
265
+ expect(result2.getValue("string")).toBe("101200");
266
+ expect(result2.getBaseValue("bigint")).toBe(10120000000000n);
267
+ });
268
+
269
+ test("divides different type numbers correctly", () => {
270
+ const skNumber1 = new USwapNumber(20);
271
+ const result = skNumber1.div(5, "0.5");
272
+
273
+ expect(result.getValue("string")).toBe("8");
274
+ expect(result.getBaseValue("bigint")).toBe(800000000n);
275
+ });
276
+
277
+ test("divides different type numbers correctly when decimal is set", () => {
278
+ const skNumber1 = new USwapNumber({ decimal: 2, value: "1.2" });
279
+ const result = skNumber1.div(0.001);
280
+
281
+ expect(result.getValue("string")).toBe("1200");
282
+ expect(result.getBaseValue("bigint")).toBe(120000n);
283
+ });
284
+
285
+ test("divides smaller number by larger number", () => {
286
+ const skNumber1 = new USwapNumber(1);
287
+ const result = skNumber1.div(2);
288
+
289
+ expect(result.getValue("string")).toBe("0.5");
290
+ expect(result.getBaseValue("bigint")).toBe(50000000n);
291
+ });
292
+
293
+ test("divides a number with 18 decimals by a negative number with less decimals", () => {
294
+ const skNumber1 = new USwapNumber({ decimal: 18, value: "1.000000000000000010" });
295
+ const skNumber2 = new USwapNumber({ decimal: 1, value: "-2" });
296
+
297
+ const result = skNumber1.div(skNumber2);
298
+
299
+ // The exact result of 1.000000000000000010 / -2 is -0.500000000000000005
300
+ expect(result.getValue("string")).toBe("-0.500000000000000005");
301
+ expect(result.getBaseValue("bigint")).toBe(-500000000000000005n);
302
+ });
303
+
304
+ test("divides a number with 2 decimals by a negative number with more decimals", () => {
305
+ const skNumber1 = new USwapNumber({ decimal: 2, value: "2" });
306
+ const skNumber2 = new USwapNumber({ decimal: 18, value: "-0.000005" });
307
+
308
+ const result = skNumber1.div(skNumber2);
309
+
310
+ // The exact result of 2 / -0.000005 is -400000
311
+ expect(result.getValue("string")).toBe("-400000");
312
+ expect(result.getBaseValue("bigint")).toBe(-40000000n);
313
+ });
314
+ });
315
+
316
+ describe("shitcoin cases", () => {
317
+ test("multiply huge numbers", () => {
318
+ const skNumber1 = new USwapNumber({ decimal: 18, value: 1_000_000_000_000_001 });
319
+ const skNumber2 = new USwapNumber({ decimal: 18, value: 987_654_321_000 });
320
+
321
+ const result = skNumber1.mul(skNumber2);
322
+ expect(result.getValue("string")).toBe("987654321000000987654321000");
323
+ expect(result.getBaseValue("bigint")).toBe(987654321000000987654321000000000000000000000n);
324
+ });
325
+
326
+ test("divide huge numbers", () => {
327
+ const skNumber1 = new USwapNumber({ decimal: 18, value: 1_000_000_000_000_001 });
328
+ const skNumber2 = new USwapNumber({ decimal: 18, value: 987_654_321_000 });
329
+
330
+ const result = skNumber1.div(skNumber2);
331
+ expect(result.getValue("string")).toBe("1012.4999999873447625");
332
+ expect(result.getBaseValue("bigint")).toBe(1012499999987344762500n);
333
+ });
334
+ });
335
+
336
+ describe("extending multiplier without loosing precision", () => {
337
+ test("edge case 1", () => {
338
+ const asset1 = new USwapNumber({ decimal: 8, value: 41.90963702 });
339
+ const multiplier = 5.337952274462478;
340
+ const divider = 105.2562773915526;
341
+ const result = asset1.mul(multiplier).div(divider);
342
+
343
+ expect(result.getValue("string")).toBe("2.12539953");
344
+ });
345
+
346
+ test("edge case 2", () => {
347
+ const asset1 = new USwapNumber("41.90963702");
348
+ const multiplier = new USwapNumber("5.337952274462478");
349
+ const divider = new USwapNumber("105.2562773915526");
350
+ const result = asset1.mul(multiplier).div(divider);
351
+
352
+ expect(result.getValue("string")).toBe("2.12539952767472630150052259932285534");
353
+ });
354
+ });
355
+
356
+ describe("gt", () => {
357
+ test("greater than", () => {
358
+ const skNumber1 = new USwapNumber(10);
359
+ const skNumber2 = new USwapNumber("5");
360
+
361
+ expect(skNumber1.gt(skNumber2)).toBe(true);
362
+ expect(skNumber2.gt(skNumber1)).toBe(false);
363
+ });
364
+
365
+ test("different decimals doesn't affect comparison", () => {
366
+ const skNumber1 = new USwapNumber({ decimal: 18, value: 10 });
367
+ const skNumber2 = new USwapNumber({ decimal: 8, value: "50" });
368
+
369
+ expect(skNumber1.lt(skNumber2)).toBe(true);
370
+ expect(skNumber2.gt(skNumber1)).toBe(true);
371
+ });
372
+ });
373
+
374
+ describe("gte", () => {
375
+ test("greater than or equal", () => {
376
+ const skNumber1 = new USwapNumber(10);
377
+ const skNumber2 = new USwapNumber("5");
378
+
379
+ expect(skNumber1.gte(skNumber2)).toBe(true);
380
+ expect(skNumber1.gte(skNumber1)).toBe(true);
381
+ expect(skNumber2.gte(skNumber1)).toBe(false);
382
+ });
383
+ });
384
+
385
+ describe("lt", () => {
386
+ test("less than", () => {
387
+ const skNumber1 = new USwapNumber(10);
388
+ const skNumber2 = new USwapNumber("5");
389
+
390
+ expect(skNumber1.lt(skNumber2)).toBe(false);
391
+ expect(skNumber2.lt(skNumber1)).toBe(true);
392
+ });
393
+ });
394
+
395
+ describe("lte", () => {
396
+ test("less than or equal", () => {
397
+ const skNumber1 = new USwapNumber(10);
398
+ const skNumber2 = new USwapNumber("5");
399
+
400
+ expect(skNumber1.lte(skNumber2)).toBe(false);
401
+ expect(skNumber1.lte(skNumber1)).toBe(true);
402
+ expect(skNumber2.lte(skNumber1)).toBe(true);
403
+ });
404
+ });
405
+
406
+ describe("eq", () => {
407
+ test("equal", () => {
408
+ const skNumber1 = new USwapNumber(10);
409
+ const skNumber2 = new USwapNumber("5");
410
+
411
+ expect(skNumber1.eq(skNumber2)).toBe(false);
412
+ expect(skNumber1.eq(skNumber1)).toBe(true);
413
+ expect(skNumber2.eq(skNumber1)).toBe(false);
414
+ });
415
+ });
416
+
417
+ describe("comparison edge cases with decimals", () => {
418
+ test("compare on cut decimals", () => {
419
+ const skNumber1 = new USwapNumber({ decimal: 3, value: 0.001 });
420
+ const value = "0.0019";
421
+
422
+ expect(skNumber1.lt(value)).toBe(true);
423
+ expect(skNumber1.gt(value)).toBe(false);
424
+ expect(skNumber1.eq(value)).toBe(false);
425
+ expect(skNumber1.lte(value)).toBe(true);
426
+ expect(skNumber1.gte(value)).toBe(false);
427
+ });
428
+ });
429
+
430
+ describe("Throws", () => {
431
+ test("throws if division by zero", () => {
432
+ const skNumber1 = new USwapNumber(10);
433
+ const skNumber2 = new USwapNumber("0");
434
+
435
+ expect(() => skNumber1.div(skNumber2)).toThrow(RangeError);
436
+ expect(() => skNumber1.div(0)).toThrow(RangeError);
437
+ });
438
+ });
439
+ });