@bsv/sdk 1.0.0 → 1.0.1

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 (123) hide show
  1. package/README.md +25 -3
  2. package/package.json +9 -5
  3. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -40
  4. package/.github/ISSUE_TEMPLATE/discussion.md +0 -24
  5. package/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +0 -23
  6. package/CHANGELOG.md +0 -72
  7. package/CONTRIBUTING.md +0 -85
  8. package/ROADMAP.md +0 -3
  9. package/docs/getting-started/COMMONJS.md +0 -94
  10. package/docs/getting-started/REACT-TS.md +0 -131
  11. package/docs/getting-started/TS-NODE.md +0 -106
  12. package/docs/getting-started/VUE.md +0 -103
  13. package/jest.config.js +0 -6
  14. package/mod.ts +0 -8
  15. package/src/compat/BSM.ts +0 -51
  16. package/src/compat/ECIES.ts +0 -557
  17. package/src/compat/HD.ts +0 -348
  18. package/src/compat/Mnemonic.ts +0 -295
  19. package/src/compat/__tests/BSM.test.ts +0 -38
  20. package/src/compat/__tests/ECIES.test.ts +0 -90
  21. package/src/compat/__tests/HD.test.ts +0 -405
  22. package/src/compat/__tests/Mnemonic.test.ts +0 -177
  23. package/src/compat/__tests/Mnemonic.vectors.ts +0 -172
  24. package/src/compat/bip-39-wordlist-en.ts +0 -2053
  25. package/src/compat/index.ts +0 -4
  26. package/src/messages/EncryptedMessage.ts +0 -70
  27. package/src/messages/SignedMessage.ts +0 -87
  28. package/src/messages/__tests/EncryptedMessage.test.ts +0 -36
  29. package/src/messages/__tests/SignedMessage.test.ts +0 -53
  30. package/src/messages/index.ts +0 -2
  31. package/src/primitives/AESGCM.ts +0 -479
  32. package/src/primitives/BasePoint.ts +0 -21
  33. package/src/primitives/BigNumber.ts +0 -4619
  34. package/src/primitives/Curve.ts +0 -1163
  35. package/src/primitives/DRBG.ts +0 -102
  36. package/src/primitives/ECDSA.ts +0 -164
  37. package/src/primitives/Hash.ts +0 -1420
  38. package/src/primitives/JacobianPoint.ts +0 -410
  39. package/src/primitives/K256.ts +0 -116
  40. package/src/primitives/Mersenne.ts +0 -123
  41. package/src/primitives/MontgomoryMethod.ts +0 -160
  42. package/src/primitives/Point.ts +0 -852
  43. package/src/primitives/PrivateKey.ts +0 -195
  44. package/src/primitives/PublicKey.ts +0 -154
  45. package/src/primitives/Random.ts +0 -55
  46. package/src/primitives/ReductionContext.ts +0 -528
  47. package/src/primitives/Signature.ts +0 -235
  48. package/src/primitives/SymmetricKey.ts +0 -75
  49. package/src/primitives/TransactionSignature.ts +0 -189
  50. package/src/primitives/__tests/AESGCM.test.ts +0 -338
  51. package/src/primitives/__tests/BRC42.private.vectors.ts +0 -33
  52. package/src/primitives/__tests/BRC42.public.vectors.ts +0 -33
  53. package/src/primitives/__tests/BigNumber.arithmatic.test.ts +0 -572
  54. package/src/primitives/__tests/BigNumber.binary.test.ts +0 -203
  55. package/src/primitives/__tests/BigNumber.constructor.test.ts +0 -176
  56. package/src/primitives/__tests/BigNumber.dhGroup.test.ts +0 -18
  57. package/src/primitives/__tests/BigNumber.fixtures.ts +0 -264
  58. package/src/primitives/__tests/BigNumber.serializers.test.ts +0 -157
  59. package/src/primitives/__tests/BigNumber.utils.test.ts +0 -347
  60. package/src/primitives/__tests/Curve.unit.test.ts +0 -192
  61. package/src/primitives/__tests/DRBG.test.ts +0 -18
  62. package/src/primitives/__tests/DRBG.vectors.ts +0 -167
  63. package/src/primitives/__tests/ECDH.test.ts +0 -31
  64. package/src/primitives/__tests/ECDSA.test.ts +0 -58
  65. package/src/primitives/__tests/HMAC.test.ts +0 -59
  66. package/src/primitives/__tests/Hash.test.ts +0 -121
  67. package/src/primitives/__tests/PBKDF2.vectors.ts +0 -119
  68. package/src/primitives/__tests/PrivateKey.test.ts +0 -17
  69. package/src/primitives/__tests/PublicKey.test.ts +0 -66
  70. package/src/primitives/__tests/Random.test.ts +0 -14
  71. package/src/primitives/__tests/Reader.test.ts +0 -296
  72. package/src/primitives/__tests/ReductionContext.test.ts +0 -279
  73. package/src/primitives/__tests/SymmetricKey.test.ts +0 -58
  74. package/src/primitives/__tests/SymmetricKey.vectors.ts +0 -40
  75. package/src/primitives/__tests/Writer.test.ts +0 -198
  76. package/src/primitives/__tests/sighash.vectors.ts +0 -3503
  77. package/src/primitives/__tests/utils.test.ts +0 -108
  78. package/src/primitives/index.ts +0 -8
  79. package/src/primitives/utils.ts +0 -665
  80. package/src/script/LockingScript.ts +0 -30
  81. package/src/script/OP.ts +0 -219
  82. package/src/script/Script.ts +0 -426
  83. package/src/script/ScriptChunk.ts +0 -7
  84. package/src/script/ScriptTemplate.ts +0 -36
  85. package/src/script/Spend.ts +0 -1379
  86. package/src/script/UnlockingScript.ts +0 -30
  87. package/src/script/__tests/Script.test.ts +0 -369
  88. package/src/script/__tests/Spend.test.ts +0 -248
  89. package/src/script/__tests/script.invalid.vectors.ts +0 -925
  90. package/src/script/__tests/script.valid.vectors.ts +0 -1120
  91. package/src/script/__tests/scriptFromVector.ts +0 -42
  92. package/src/script/__tests/spend.valid.vectors.ts +0 -2288
  93. package/src/script/index.ts +0 -7
  94. package/src/script/templates/P2PKH.ts +0 -109
  95. package/src/script/templates/RPuzzle.ts +0 -140
  96. package/src/script/templates/index.ts +0 -2
  97. package/src/transaction/Broadcaster.ts +0 -42
  98. package/src/transaction/ChainTracker.ts +0 -22
  99. package/src/transaction/FeeModel.ts +0 -13
  100. package/src/transaction/MerklePath.ts +0 -259
  101. package/src/transaction/Transaction.ts +0 -602
  102. package/src/transaction/TransactionInput.ts +0 -63
  103. package/src/transaction/TransactionOutput.ts +0 -37
  104. package/src/transaction/__tests/MerklePath.test.ts +0 -181
  105. package/src/transaction/__tests/Transaction.test.ts +0 -413
  106. package/src/transaction/__tests/bigtx.vectors.ts +0 -4
  107. package/src/transaction/__tests/bump.invalid.vectors.ts +0 -8
  108. package/src/transaction/__tests/bump.valid.vectors.ts +0 -4
  109. package/src/transaction/__tests/tx.invalid.vectors.ts +0 -281
  110. package/src/transaction/__tests/tx.valid.vectors.ts +0 -364
  111. package/src/transaction/broadcasters/ARC.ts +0 -106
  112. package/src/transaction/broadcasters/__tests/ARC.test.ts +0 -115
  113. package/src/transaction/broadcasters/index.ts +0 -1
  114. package/src/transaction/fee-models/SatoshisPerKilobyte.ts +0 -71
  115. package/src/transaction/fee-models/index.ts +0 -1
  116. package/src/transaction/index.ts +0 -6
  117. package/ts2md.json +0 -5
  118. package/tsconfig.base.json +0 -26
  119. package/tsconfig.cjs.json +0 -11
  120. package/tsconfig.eslint.json +0 -12
  121. package/tsconfig.esm.json +0 -9
  122. package/tsconfig.json +0 -17
  123. package/tsconfig.types.json +0 -11
@@ -1,572 +0,0 @@
1
- /* global describe, it */
2
-
3
- import BigNumber from '../../../dist/cjs/src/primitives/BigNumber'
4
- import * as fixtures from './BigNumber.fixtures'
5
-
6
- describe('BN.js/Arithmetic', () => {
7
- describe('.add()', () => {
8
- it('should add numbers', () => {
9
- expect(new BigNumber(14).add(new BigNumber(26)).toString(16)).toBe('28')
10
- const k = new BigNumber(0x1234)
11
- let r = k
12
-
13
- for (let i = 0; i < 257; i++) {
14
- r = r.add(k)
15
- }
16
-
17
- expect(r.toString(16)).toBe('125868')
18
- })
19
-
20
- it('should handle carry properly (in-place)', () => {
21
- const k = new BigNumber('abcdefabcdefabcdef', 16)
22
- const r = new BigNumber('deadbeef', 16)
23
-
24
- for (let i = 0; i < 257; i++) {
25
- r.iadd(k)
26
- }
27
-
28
- expect(r.toString(16)).toBe('ac79bd9b79be7a277bde')
29
- })
30
-
31
- it('should properly do positive + negative', () => {
32
- let a = new BigNumber('abcd', 16)
33
- let b = new BigNumber('-abce', 16)
34
-
35
- expect(a.iadd(b).toString(16)).toBe('-1')
36
-
37
- a = new BigNumber('abcd', 16)
38
- b = new BigNumber('-abce', 16)
39
-
40
- expect(a.add(b).toString(16)).toBe('-1')
41
- expect(b.add(a).toString(16)).toBe('-1')
42
- })
43
- })
44
-
45
- describe('.iaddn()', () => {
46
- it('should allow a sign change', () => {
47
- const a = new BigNumber(-100)
48
- expect(a.negative).toBe(1)
49
-
50
- a.iaddn(200)
51
-
52
- expect(a.negative).toBe(0)
53
- expect(a.toString()).toBe('100')
54
- })
55
-
56
- it('should add negative number', () => {
57
- const a = new BigNumber(-100)
58
- expect(a.negative).toBe(1)
59
-
60
- a.iaddn(-200)
61
-
62
- expect(a.toString()).toBe('-300')
63
- })
64
-
65
- it('should allow neg + pos with big number', () => {
66
- const a = new BigNumber('-1000000000', 10)
67
- expect(a.negative).toBe(1)
68
-
69
- a.iaddn(200)
70
-
71
- expect(a.toString()).toBe('-999999800')
72
- })
73
-
74
- it('should carry limb', () => {
75
- const a = new BigNumber('3ffffff', 16)
76
-
77
- expect(a.iaddn(1).toString(16)).toBe('4000000')
78
- })
79
-
80
- it('should throw error with num eq 0x4000000', () => {
81
- expect(() => new BigNumber(0).iaddn(0x4000000)).toThrow('num is too large')
82
- })
83
-
84
- it('should reset sign if value equal to value in instance', () => {
85
- const a = new BigNumber(-1)
86
- expect(a.addn(1).toString()).toBe('0')
87
- })
88
- })
89
-
90
- describe('.sub()', () => {
91
- it('should subtract small numbers', () => {
92
- expect(new BigNumber(26).sub(new BigNumber(14)).toString(16)).toBe('c')
93
- expect(new BigNumber(14).sub(new BigNumber(26)).toString(16)).toBe('-c')
94
- expect(new BigNumber(26).sub(new BigNumber(26)).toString(16)).toBe('0')
95
- expect(new BigNumber(-26).sub(new BigNumber(26)).toString(16)).toBe('-34')
96
- })
97
-
98
- const a = new BigNumber(
99
- '31ff3c61db2db84b9823d320907a573f6ad37c437abe458b1802cda041d6384' +
100
- 'a7d8daef41395491e2',
101
- 16)
102
- const b = new BigNumber(
103
- '6f0e4d9f1d6071c183677f601af9305721c91d31b0bbbae8fb790000',
104
- 16)
105
- const r = new BigNumber(
106
- '31ff3c61db2db84b9823d3208989726578fd75276287cd9516533a9acfb9a67' +
107
- '76281f34583ddb91e2',
108
- 16)
109
-
110
- it('should subtract big numbers', () => {
111
- expect(a.sub(b).cmp(r)).toBe(0)
112
- })
113
-
114
- it('should subtract numbers in place', () => {
115
- expect(b.clone().isub(a).neg().cmp(r)).toBe(0)
116
- })
117
-
118
- it('should subtract with carry', () => {
119
- let a = new BigNumber('12345', 16)
120
- let b = new BigNumber('1000000000000', 16)
121
- expect(a.isub(b).toString(16)).toBe('-fffffffedcbb')
122
-
123
- a = new BigNumber('12345', 16)
124
- b = new BigNumber('1000000000000', 16)
125
- expect(b.isub(a).toString(16)).toBe('fffffffedcbb')
126
- })
127
- })
128
-
129
- describe('.isubn()', () => {
130
- it('should subtract negative number', () => {
131
- const r = new BigNumber(
132
- '7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b', 16)
133
- expect(r.isubn(-1).toString(16)).toBe(
134
- '7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681c')
135
- })
136
-
137
- it('should work for positive numbers', () => {
138
- const a = new BigNumber(-100)
139
- expect(a.negative).toBe(1)
140
-
141
- a.isubn(200)
142
- expect(a.negative).toBe(1)
143
- expect(a.toString()).toBe('-300')
144
- })
145
-
146
- it('should not allow a sign change', () => {
147
- const a = new BigNumber(-100)
148
- expect(a.negative).toBe(1)
149
-
150
- a.isubn(-200)
151
- expect(a.negative).toBe(0)
152
- expect(a.toString()).toBe('100')
153
- })
154
-
155
- it('should change sign on small numbers at 0', () => {
156
- const a = new BigNumber(0).subn(2)
157
- expect(a.toString()).toBe('-2')
158
- })
159
-
160
- it('should change sign on small numbers at 1', () => {
161
- const a = new BigNumber(1).subn(2)
162
- expect(a.toString()).toBe('-1')
163
- })
164
-
165
- it('should throw error with num eq 0x4000000', () => {
166
- expect(() => new BigNumber(0).isubn(0x4000000)).toThrow('Assertion failed')
167
- })
168
- })
169
-
170
- function testMethod (name, mul): void {
171
- describe(name, () => {
172
- it('should multiply numbers of different signs', () => {
173
- const offsets = [
174
- 1, // smallMulTo
175
- 250, // comb10MulTo
176
- 1000, // bigMulTo
177
- 15000 // jumboMulTo
178
- ]
179
-
180
- for (let i = 0; i < offsets.length; ++i) {
181
- const x = new BigNumber(1).ishln(offsets[i])
182
-
183
- expect(mul(x, x).isNeg()).toBe(false)
184
- expect(mul(x, x.neg()).isNeg()).toBe(true)
185
- expect(mul(x.neg(), x).isNeg()).toBe(true)
186
- expect(mul(x.neg(), x.neg()).isNeg()).toBe(false)
187
- }
188
- })
189
-
190
- it('should multiply with carry', () => {
191
- const n = new BigNumber(0x1001)
192
- let r = n
193
-
194
- for (let i = 0; i < 4; i++) {
195
- r = mul(r, n)
196
- }
197
-
198
- expect(r.toString(16)).toBe('100500a00a005001')
199
- })
200
-
201
- it('should correctly multiply big numbers', () => {
202
- const n = new BigNumber(
203
- '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
204
- 16
205
- )
206
- expect(
207
- mul(n, n).toString(16)
208
- ).toBe(
209
- '39e58a8055b6fb264b75ec8c646509784204ac15a8c24e05babc9729ab9' +
210
- 'b055c3a9458e4ce3289560a38e08ba8175a9446ce14e608245ab3a9' +
211
- '978a8bd8acaa40'
212
- )
213
- expect(
214
- mul(mul(n, n), n).toString(16)
215
- ).toBe(
216
- '1b888e01a06e974017a28a5b4da436169761c9730b7aeedf75fc60f687b' +
217
- '46e0cf2cb11667f795d5569482640fe5f628939467a01a612b02350' +
218
- '0d0161e9730279a7561043af6197798e41b7432458463e64fa81158' +
219
- '907322dc330562697d0d600'
220
- )
221
- })
222
-
223
- it('should multiply neg number on 0', () => {
224
- expect(
225
- mul(new BigNumber('-100000000000'), new BigNumber('3').div(new BigNumber('4')))
226
- .toString(16)
227
- ).toBe('0')
228
- })
229
-
230
- it('should regress mul big numbers', () => {
231
- const qs = fixtures.dhGroups.p17.qs
232
- const q = new BigNumber(fixtures.dhGroups.p17.q, 16)
233
- expect(mul(q, q).toString(16)).toBe(qs)
234
- })
235
- })
236
- }
237
-
238
- testMethod('.mul()', function (x, y) {
239
- return BigNumber.prototype.mul.apply(x, [y])
240
- })
241
-
242
- describe('.imul()', () => {
243
- it('should multiply numbers in-place', () => {
244
- let a = new BigNumber('abcdef01234567890abcd', 16)
245
- let b = new BigNumber('deadbeefa551edebabba8', 16)
246
- let c = a.mul(b)
247
-
248
- expect(a.imul(b).toString(16)).toBe(c.toString(16))
249
-
250
- a = new BigNumber('abcdef01234567890abcd214a25123f512361e6d236', 16)
251
- b = new BigNumber('deadbeefa551edebabba8121234fd21bac0341324dd', 16)
252
- c = a.mul(b)
253
-
254
- expect(a.imul(b).toString(16)).toBe(c.toString(16))
255
- })
256
-
257
- it('should multiply by 0', () => {
258
- const a = new BigNumber('abcdef01234567890abcd', 16)
259
- const b = new BigNumber('0', 16)
260
- const c = a.mul(b)
261
-
262
- expect(a.imul(b).toString(16)).toBe(c.toString(16))
263
- })
264
-
265
- it('should regress mul big numbers in-place', () => {
266
- const qs = fixtures.dhGroups.p17.qs
267
- const q = new BigNumber(fixtures.dhGroups.p17.q, 16)
268
- expect(q.isqr().toString(16)).toBe(qs)
269
- })
270
- })
271
-
272
- describe('.muln()', () => {
273
- it('should multiply number by small number', () => {
274
- const a = new BigNumber('abcdef01234567890abcd', 16)
275
- const b = new BigNumber('dead', 16)
276
- const c = a.mul(b)
277
-
278
- expect(a.muln(0xdead).toString(16)).toBe(c.toString(16))
279
- })
280
-
281
- it('should throw error with num eq 0x4000000', () => {
282
- expect(() => new BigNumber(0).imuln(0x4000000)).toThrow(/^Assertion failed$/)
283
- })
284
-
285
- it('should negate number if number is negative', () => {
286
- const a = new BigNumber('dead', 16)
287
- expect(a.clone().imuln(-1).toString(16)).toBe(a.clone().neg().toString(16))
288
- expect(a.clone().muln(-1).toString(16)).toBe(a.clone().neg().toString(16))
289
-
290
- const b = new BigNumber('dead', 16)
291
- expect(b.clone().imuln(-42).toString(16)).toBe(b.clone().neg().muln(42).toString(16))
292
- expect(b.clone().muln(-42).toString(16)).toBe(b.clone().neg().muln(42).toString(16))
293
- })
294
- })
295
-
296
- describe('.pow()', () => {
297
- it('should raise number to the power', () => {
298
- const a = new BigNumber('ab', 16)
299
- const b = new BigNumber('13', 10)
300
- const c = a.pow(b)
301
-
302
- expect(c.toString(16)).toBe('15963da06977df51909c9ba5b')
303
- })
304
- })
305
-
306
- describe('.div()', () => {
307
- it('should divide small numbers (<=26 bits)', () => {
308
- expect(new BigNumber('256').div(new BigNumber(10)).toString(10)).toEqual('25')
309
- expect(new BigNumber('-256').div(new BigNumber(10)).toString(10)).toEqual('-25')
310
- expect(new BigNumber('256').div(new BigNumber(-10)).toString(10)).toEqual('-25')
311
- expect(new BigNumber('-256').div(new BigNumber(-10)).toString(10)).toEqual('25')
312
-
313
- expect(new BigNumber('10').div(new BigNumber(256)).toString(10)).toEqual('0')
314
- expect(new BigNumber('-10').div(new BigNumber(256)).toString(10)).toEqual('0')
315
- expect(new BigNumber('10').div(new BigNumber(-256)).toString(10)).toEqual('0')
316
- expect(new BigNumber('-10').div(new BigNumber(-256)).toString(10)).toEqual('0')
317
- })
318
-
319
- it('should divide large numbers (>53 bits)', () => {
320
- expect(new BigNumber('1222222225255589').div(new BigNumber('611111124969028')).toString(10)).toEqual('1')
321
- expect(new BigNumber('-1222222225255589').div(new BigNumber('611111124969028')).toString(10)).toEqual('-1')
322
- expect(new BigNumber('1222222225255589').div(new BigNumber('-611111124969028')).toString(10)).toEqual('-1')
323
- expect(new BigNumber('-1222222225255589').div(new BigNumber('-611111124969028')).toString(10)).toEqual('1')
324
-
325
- expect(new BigNumber('611111124969028').div(new BigNumber('1222222225255589')).toString(10)).toEqual('0')
326
- expect(new BigNumber('-611111124969028').div(new BigNumber('1222222225255589')).toString(10)).toEqual('0')
327
- expect(new BigNumber('611111124969028').div(new BigNumber('-1222222225255589')).toString(10)).toEqual('0')
328
- expect(new BigNumber('-611111124969028').div(new BigNumber('-1222222225255589')).toString(10)).toEqual('0')
329
- })
330
-
331
- it('should divide numbers', () => {
332
- expect(new BigNumber('69527932928').div(new BigNumber('16974594')).toString(16)).toEqual('fff')
333
- expect(new BigNumber('-69527932928').div(new BigNumber('16974594')).toString(16)).toEqual('-fff')
334
-
335
- const b = new BigNumber('39e58a8055b6fb264b75ec8c646509784204ac15a8c24e05babc9729ab9b055c3a9458e4ce3289560a38e08ba8175a9446ce14e608245ab3a9978a8bd8acaa40', 16)
336
- const n = new BigNumber('79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798', 16)
337
- expect(b.div(n).toString(16)).toEqual(n.toString(16))
338
-
339
- expect(new BigNumber('1').div(new BigNumber('-5')).toString(10)).toEqual('0')
340
- })
341
-
342
- it('should not fail on regression after moving to _wordDiv', function () {
343
- // Regression after moving to word div
344
- let p = new BigNumber(
345
- 'fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f',
346
- 16)
347
- let a = new BigNumber(
348
- '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
349
- 16)
350
- const as = a.sqr()
351
- expect(
352
- as.div(p).toString(16)).toEqual(
353
- '39e58a8055b6fb264b75ec8c646509784204ac15a8c24e05babc9729e58090b9')
354
-
355
- p = new BigNumber(
356
- 'ffffffff00000001000000000000000000000000ffffffffffffffffffffffff',
357
- 16)
358
- a = new BigNumber(
359
- 'fffffffe00000003fffffffd0000000200000001fffffffe00000002ffffffff' +
360
- 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff',
361
- 16)
362
- expect(
363
- a.div(p).toString(16)).toEqual(
364
- 'ffffffff00000002000000000000000000000001000000000000000000000001')
365
- })
366
- })
367
-
368
- describe('.idivn()', () => {
369
- it('should divide numbers in-place', () => {
370
- expect(new BigNumber('10', 16).idivn(3).toString(16)).toEqual('5')
371
- expect(new BigNumber('10', 16).idivn(-3).toString(16)).toEqual('-5')
372
- expect(new BigNumber('12', 16).idivn(3).toString(16)).toEqual('6')
373
- expect(new BigNumber('10000000000000000').idivn(3).toString(10)).toEqual('3333333333333333')
374
- expect(new BigNumber('100000000000000000000000000000').idivn(3).toString(10)).toEqual('33333333333333333333333333333')
375
-
376
- const t = new BigNumber(3)
377
- expect(new BigNumber('12345678901234567890123456', 16).idivn(3).toString(16)).toEqual(new BigNumber('12345678901234567890123456', 16).div(t).toString(16))
378
- })
379
- })
380
-
381
- describe('.divRound()', () => {
382
- it('should divide numbers with rounding', () => {
383
- expect(new BigNumber(9).divRound(new BigNumber(20)).toString(10)).toEqual('0')
384
- expect(new BigNumber(10).divRound(new BigNumber(20)).toString(10)).toEqual('1')
385
- expect(new BigNumber(150).divRound(new BigNumber(20)).toString(10)).toEqual('8')
386
- expect(new BigNumber(149).divRound(new BigNumber(20)).toString(10)).toEqual('7')
387
- expect(new BigNumber(149).divRound(new BigNumber(17)).toString(10)).toEqual('9')
388
- expect(new BigNumber(144).divRound(new BigNumber(17)).toString(10)).toEqual('8')
389
- expect(new BigNumber(-144).divRound(new BigNumber(17)).toString(10)).toEqual('-8')
390
- })
391
-
392
- it('should return 1 on exact division', () => {
393
- expect(new BigNumber(144).divRound(new BigNumber(144)).toString(10)).toEqual('1')
394
- })
395
- })
396
-
397
- describe('.mod()', () => {
398
- it('should modulo small numbers (<=26 bits)', () => {
399
- expect(new BigNumber('256').mod(new BigNumber(10)).toString(10)).toEqual('6')
400
- expect(new BigNumber('-256').mod(new BigNumber(10)).toString(10)).toEqual('-6')
401
- expect(new BigNumber('256').mod(new BigNumber(-10)).toString(10)).toEqual('6')
402
- expect(new BigNumber('-256').mod(new BigNumber(-10)).toString(10)).toEqual('-6')
403
-
404
- expect(new BigNumber('10').mod(new BigNumber(256)).toString(10)).toEqual('10')
405
- expect(new BigNumber('-10').mod(new BigNumber(256)).toString(10)).toEqual('-10')
406
- expect(new BigNumber('10').mod(new BigNumber(-256)).toString(10)).toEqual('10')
407
- expect(new BigNumber('-10').mod(new BigNumber(-256)).toString(10)).toEqual('-10')
408
- })
409
-
410
- it('should modulo large numbers (>53 bits)', () => {
411
- expect(new BigNumber('1222222225255589').mod(new BigNumber('611111124969028')).toString(10)).toEqual('611111100286561')
412
- expect(new BigNumber('-1222222225255589').mod(new BigNumber('611111124969028')).toString(10)).toEqual('-611111100286561')
413
- expect(new BigNumber('1222222225255589').mod(new BigNumber('-611111124969028')).toString(10)).toEqual('611111100286561')
414
- expect(new BigNumber('-1222222225255589').mod(new BigNumber('-611111124969028')).toString(10)).toEqual('-611111100286561')
415
-
416
- expect(new BigNumber('611111124969028').mod(new BigNumber('1222222225255589')).toString(10)).toEqual('611111124969028')
417
- expect(new BigNumber('-611111124969028').mod(new BigNumber('1222222225255589')).toString(10)).toEqual('-611111124969028')
418
- expect(new BigNumber('611111124969028').mod(new BigNumber('-1222222225255589')).toString(10)).toEqual('611111124969028')
419
- expect(new BigNumber('-611111124969028').mod(new BigNumber('-1222222225255589')).toString(10)).toEqual('-611111124969028')
420
- })
421
-
422
- it('should mod numbers', () => {
423
- expect(new BigNumber('10').mod(new BigNumber(256)).toString(16)).toEqual('a')
424
- expect(new BigNumber('69527932928').mod(new BigNumber('16974594')).toString(16)).toEqual('102f302')
425
-
426
- expect(new BigNumber(178).div(new BigNumber(10)).toNumber()).toEqual(17)
427
- expect(new BigNumber(178).mod(new BigNumber(10)).toNumber()).toEqual(8)
428
- expect(new BigNumber(178).umod(new BigNumber(10)).toNumber()).toEqual(8)
429
-
430
- expect(new BigNumber(-178).div(new BigNumber(10)).toNumber()).toEqual(-17)
431
- expect(new BigNumber(-178).mod(new BigNumber(10)).toNumber()).toEqual(-8)
432
- expect(new BigNumber(-178).umod(new BigNumber(10)).toNumber()).toEqual(2)
433
-
434
- expect(new BigNumber(178).div(new BigNumber(-10)).toNumber()).toEqual(-17)
435
- expect(new BigNumber(178).mod(new BigNumber(-10)).toNumber()).toEqual(8)
436
- expect(new BigNumber(178).umod(new BigNumber(-10)).toNumber()).toEqual(8)
437
-
438
- expect(new BigNumber(-178).div(new BigNumber(-10)).toNumber()).toEqual(17)
439
- expect(new BigNumber(-178).mod(new BigNumber(-10)).toNumber()).toEqual(-8)
440
- expect(new BigNumber(-178).umod(new BigNumber(-10)).toNumber()).toEqual(2)
441
-
442
- expect(new BigNumber(-4).div(new BigNumber(-3)).toNumber()).toEqual(1)
443
- expect(new BigNumber(-4).mod(new BigNumber(-3)).toNumber()).toEqual(-1)
444
-
445
- expect(new BigNumber(-4).mod(new BigNumber(3)).toNumber()).toEqual(-1)
446
- expect(new BigNumber(-4).umod(new BigNumber(-3)).toNumber()).toEqual(2)
447
-
448
- const p = new BigNumber(
449
- 'ffffffff00000001000000000000000000000000ffffffffffffffffffffffff',
450
- 16)
451
- const a = new BigNumber(
452
- 'fffffffe00000003fffffffd0000000200000001fffffffe00000002ffffffff' +
453
- 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff',
454
- 16)
455
- expect(a.mod(p).toString(16)).toEqual('0')
456
- })
457
-
458
- it('should properly carry the sign inside division', () => {
459
- const a = new BigNumber('945304eb96065b2a98b57a48a06ae28d285a71b5', 'hex')
460
- const b = new BigNumber(
461
- 'fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe',
462
- 'hex')
463
-
464
- expect(a.mul(b).mod(a).cmpn(0)).toEqual(0)
465
- })
466
- })
467
-
468
- describe('.modrn()', () => {
469
- it('should act like .mod() on small numbers', () => {
470
- expect(new BigNumber('10', 16).modrn(256).toString(16)).toEqual('10')
471
- expect(new BigNumber('10', 16).modrn(-256).toString(16)).toEqual('-10')
472
- expect(new BigNumber('100', 16).modrn(256).toString(16)).toEqual('0')
473
- expect(new BigNumber('1001', 16).modrn(256).toString(16)).toEqual('1')
474
- expect(new BigNumber('100000000001', 16).modrn(256).toString(16)).toEqual('1')
475
- expect(new BigNumber('100000000001', 16).modrn(257).toString(16)).toEqual(
476
- new BigNumber('100000000001', 16).mod(new BigNumber(257)).toString(16))
477
- expect(new BigNumber('123456789012', 16).modrn(3).toString(16)).toEqual(
478
- new BigNumber('123456789012', 16).mod(new BigNumber(3)).toString(16))
479
- })
480
- })
481
-
482
- describe('.abs()', () => {
483
- it('should return absolute value', () => {
484
- expect(new BigNumber(0x1001).abs().toString()).toEqual('4097')
485
- expect(new BigNumber(-0x1001).abs().toString()).toEqual('4097')
486
- expect(new BigNumber('ffffffff', 16).abs().toString()).toEqual('4294967295')
487
- })
488
- })
489
-
490
- describe('.invm()', () => {
491
- it('should invert relatively-prime numbers', () => {
492
- const p = new BigNumber(257)
493
- let a = new BigNumber(3)
494
- let b = a.invm(p)
495
- expect(a.mul(b).mod(p).toString(16)).toEqual('1')
496
-
497
- const p192 = new BigNumber(
498
- 'fffffffffffffffffffffffffffffffeffffffffffffffff',
499
- 16)
500
- a = new BigNumber('deadbeef', 16)
501
- b = a.invm(p192)
502
- expect(a.mul(b).mod(p192).toString(16)).toEqual('1')
503
-
504
- const phi = new BigNumber('872d9b030ba368706b68932cf07a0e0c', 16)
505
- const e = new BigNumber(65537)
506
- const d = e.invm(phi)
507
- expect(e.mul(d).mod(phi).toString(16)).toEqual('1')
508
-
509
- a = new BigNumber('5')
510
- b = new BigNumber('6')
511
- const r = a.invm(b)
512
- expect(r.mul(a).mod(b).toString(16)).toEqual('1')
513
- })
514
- })
515
-
516
- describe('.gcd()', () => {
517
- it('should return GCD', () => {
518
- expect(new BigNumber(3).gcd(new BigNumber(2)).toString(10)).toEqual('1')
519
- expect(new BigNumber(18).gcd(new BigNumber(12)).toString(10)).toEqual('6')
520
- expect(new BigNumber(-18).gcd(new BigNumber(12)).toString(10)).toEqual('6')
521
- expect(new BigNumber(-18).gcd(new BigNumber(-12)).toString(10)).toEqual('6')
522
- expect(new BigNumber(-18).gcd(new BigNumber(0)).toString(10)).toEqual('18')
523
- expect(new BigNumber(0).gcd(new BigNumber(-18)).toString(10)).toEqual('18')
524
- expect(new BigNumber(2).gcd(new BigNumber(0)).toString(10)).toEqual('2')
525
- expect(new BigNumber(0).gcd(new BigNumber(3)).toString(10)).toEqual('3')
526
- expect(new BigNumber(0).gcd(new BigNumber(0)).toString(10)).toEqual('0')
527
- })
528
- })
529
-
530
- describe('.egcd()', () => {
531
- it('should return EGCD', () => {
532
- expect(new BigNumber(3).egcd(new BigNumber(2)).gcd.toString(10)).toEqual('1')
533
- expect(new BigNumber(18).egcd(new BigNumber(12)).gcd.toString(10)).toEqual('6')
534
- expect(new BigNumber(-18).egcd(new BigNumber(12)).gcd.toString(10)).toEqual('6')
535
- expect(new BigNumber(0).egcd(new BigNumber(12)).gcd.toString(10)).toEqual('12')
536
- })
537
- it('should not allow 0 input', () => {
538
- expect(() => {
539
- new BigNumber(1).egcd(0 as unknown as BigNumber)
540
- }).toThrow(/^p must not be negative$/)
541
- })
542
- it('should not allow negative input', () => {
543
- expect(() => {
544
- new BigNumber(1).egcd(-1 as unknown as BigNumber)
545
- }).toThrow(/^p must not be negative$/)
546
- })
547
- })
548
-
549
- describe('BN.max(a, b)', () => {
550
- it('should return maximum', () => {
551
- expect(BigNumber.max(new BigNumber(3), new BigNumber(2)).toString(16)).toEqual('3')
552
- expect(BigNumber.max(new BigNumber(2), new BigNumber(3)).toString(16)).toEqual('3')
553
- expect(BigNumber.max(new BigNumber(2), new BigNumber(2)).toString(16)).toEqual('2')
554
- expect(BigNumber.max(new BigNumber(2), new BigNumber(-2)).toString(16)).toEqual('2')
555
- })
556
- })
557
-
558
- describe('BN.min(a, b)', () => {
559
- it('should return minimum', () => {
560
- expect(BigNumber.min(new BigNumber(3), new BigNumber(2)).toString(16)).toEqual('2')
561
- expect(BigNumber.min(new BigNumber(2), new BigNumber(3)).toString(16)).toEqual('2')
562
- expect(BigNumber.min(new BigNumber(2), new BigNumber(2)).toString(16)).toEqual('2')
563
- expect(BigNumber.min(new BigNumber(2), new BigNumber(-2)).toString(16)).toEqual('-2')
564
- })
565
- })
566
-
567
- describe('BN.ineg', () => {
568
- it('shouldn\'t change sign for zero', () => {
569
- expect(new BigNumber(0).ineg().toString(10)).toEqual('0')
570
- })
571
- })
572
- })