@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,157 +0,0 @@
1
- import BigNumber from '../../../dist/cjs/src/primitives/BigNumber'
2
- import { toArray, encode } from '../../../dist/cjs/src/primitives/utils'
3
-
4
- describe('BigNumber/Serializers', () => {
5
- describe('#fromJSON', () => {
6
- it('should make Bn from a string', () => {
7
- expect(BigNumber.fromJSON('5').toString()).toEqual('5')
8
- })
9
- })
10
-
11
- describe('#toJSON', () => {
12
- it('should make string from a Bn', () => {
13
- expect(new BigNumber(5).toJSON()).toEqual('5')
14
- expect(BigNumber.fromJSON('5').toJSON()).toEqual('5')
15
- })
16
- })
17
-
18
- describe('#fromString', () => {
19
- it('should make Bn from a string', () => {
20
- expect(BigNumber.fromString('5').toString()).toEqual('5')
21
- })
22
- })
23
-
24
- describe('#toString', () => {
25
- it('should make a string', () => {
26
- expect(new BigNumber(5).toString()).toEqual('5')
27
- })
28
- })
29
-
30
- describe('#fromHex', () => {
31
- it('should create bn from known hex', () => {
32
- const bn = BigNumber.fromHex('0100', 'little')
33
- expect(bn.toString()).toEqual('1')
34
- })
35
- })
36
-
37
- describe('#toHex', () => {
38
- it('should create a hex string of 4 byte buffer', () => {
39
- const bn = new BigNumber(1)
40
- expect(bn.toHex(4)).toEqual('00000001')
41
- })
42
- })
43
-
44
- describe('#toBits', () => {
45
- it('should convert these known Bns to bits', () => {
46
- expect(BigNumber.fromHex('00').toBits()).toEqual(0x00000000)
47
- expect(BigNumber.fromHex('01').toBits()).toEqual(0x01000001)
48
- expect(BigNumber.fromHex('0101').toBits()).toEqual(0x02000101)
49
- expect(BigNumber.fromHex('010101').toBits()).toEqual(0x03010101)
50
- expect(BigNumber.fromHex('01010101').toBits()).toEqual(0x04010101)
51
- expect(BigNumber.fromHex('0101010101').toBits()).toEqual(0x05010101)
52
- expect(BigNumber.fromHex('010101010101').toBits()).toEqual(0x06010101)
53
- expect(BigNumber.fromNumber(-1).toBits()).toEqual(0x01800001)
54
- })
55
- })
56
-
57
- describe('#fromBits', () => {
58
- it('should convert these known bits to Bns', () => {
59
- expect(BigNumber.fromBits(0x01003456).toHex()).toEqual('')
60
- expect(BigNumber.fromBits(0x02003456).toHex()).toEqual('34')
61
- expect(BigNumber.fromBits(0x03003456).toHex()).toEqual('3456')
62
- expect(BigNumber.fromBits(0x04003456).toHex()).toEqual('345600')
63
- expect(BigNumber.fromBits(0x05003456).toHex()).toEqual('34560000')
64
- expect(BigNumber.fromBits(0x05f03456).ltn(0)).toEqual(true) // sign bit set
65
- expect(() => BigNumber.fromBits(0x05f03456, true)).toThrow('negative bit set')
66
- expect(BigNumber.fromBits(0x04923456).ltn(0)).toEqual(true)
67
- })
68
- })
69
-
70
- describe('#toSm', () => {
71
- it('should convert to Sm', () => {
72
- let num: number[]
73
- num = new BigNumber().toSm()
74
- expect(encode(num, 'hex')).toEqual('')
75
- num = new BigNumber(5).toSm()
76
- expect(encode(num, 'hex')).toEqual('05')
77
- num = new BigNumber(-5).toSm()
78
- expect(encode(num, 'hex')).toEqual('85')
79
- num = new BigNumber(128).toSm()
80
- expect(encode(num, 'hex')).toEqual('0080')
81
- num = new BigNumber(-128).toSm()
82
- expect(encode(num, 'hex')).toEqual('8080')
83
- num = new BigNumber(127).toSm()
84
- expect(encode(num, 'hex')).toEqual('7f')
85
- num = new BigNumber(-127).toSm()
86
- expect(encode(num, 'hex')).toEqual('ff')
87
- num = new BigNumber(128).toSm('little')
88
- expect(encode(num, 'hex')).toEqual('8000')
89
- num = new BigNumber(-128).toSm('little')
90
- expect(encode(num, 'hex')).toEqual('8080')
91
- })
92
- })
93
-
94
- describe('#fromSm', () => {
95
- it('should convert from Sm', () => {
96
- let buf
97
- buf = [0]
98
- expect(BigNumber.fromSm(buf).cmpn(0)).toEqual(0)
99
- buf = toArray('05', 'hex')
100
- expect(BigNumber.fromSm(buf).cmpn(5)).toEqual(0)
101
- buf = toArray('85', 'hex')
102
- expect(BigNumber.fromSm(buf).cmpn(-5)).toEqual(0)
103
- buf = toArray('0080', 'hex')
104
- expect(BigNumber.fromSm(buf).cmpn(128)).toEqual(0)
105
- buf = toArray('8080', 'hex')
106
- expect(BigNumber.fromSm(buf).cmpn(-128)).toEqual(0)
107
- buf = toArray('8000', 'hex')
108
- expect(BigNumber.fromSm(buf, 'little').cmpn(128)).toEqual(0)
109
- buf = toArray('8080', 'hex')
110
- expect(BigNumber.fromSm(buf, 'little').cmpn(-128)).toEqual(0)
111
- buf = toArray('0080', 'hex') // negative zero
112
- expect(BigNumber.fromSm(buf, 'little').cmpn(0)).toEqual(0)
113
- })
114
- })
115
-
116
- describe('#toScriptNumBuffer', () => {
117
- it('should output a little endian Sm number', () => {
118
- const bn = new BigNumber(-23434234)
119
- expect(bn.toScriptNum()).toEqual(bn.toSm('little'))
120
- })
121
- })
122
-
123
- describe('#fromScriptNum', () => {
124
- it('should parse this normal number', () => {
125
- expect(BigNumber.fromScriptNum(toArray('01', 'hex')).toNumber()).toEqual(1)
126
- expect(BigNumber.fromScriptNum(toArray('0080', 'hex')).toNumber()).toEqual(0)
127
- expect(BigNumber.fromScriptNum(toArray('0180', 'hex')).toNumber()).toEqual(-1)
128
- })
129
-
130
- it('should throw an error for a number over 4 bytes', () => {
131
- expect(() => BigNumber.fromScriptNum(toArray('8100000000', 'hex'))).toThrow('script number overflow')
132
- })
133
-
134
- it('should throw an error for number that is not a minimal size representation', () => {
135
- expect(() => BigNumber.fromScriptNum(toArray('80000000', 'hex'), true)).toThrow('non-minimally encoded script number')
136
- expect(() => BigNumber.fromScriptNum(toArray('800000', 'hex'), true)).toThrow('non-minimally encoded script number')
137
- expect(() => BigNumber.fromScriptNum(toArray('00', 'hex'), true)).toThrow('non-minimally encoded script number')
138
- expect(BigNumber.fromScriptNum(toArray('8000', 'hex'), true).toString()).toEqual('128')
139
- expect(BigNumber.fromScriptNum(toArray('0081', 'hex'), true).toString()).toEqual('-256')
140
- expect(BigNumber.fromScriptNum(toArray('', 'hex'), true).toString()).toEqual('0')
141
- expect(BigNumber.fromScriptNum(toArray('01', 'hex'), true).toString()).toEqual('1')
142
- expect(BigNumber.fromScriptNum(toArray('00000000', 'hex')).toString()).toEqual('0')
143
- })
144
- })
145
-
146
- describe('#fromNumber', () => {
147
- it('should convert from a number', () => {
148
- expect(BigNumber.fromNumber(5).toNumber()).toEqual(5)
149
- })
150
- })
151
-
152
- describe('#toNumber', () => {
153
- it('it should convert to a number', () => {
154
- expect(new BigNumber(5).toNumber()).toEqual(5)
155
- })
156
- })
157
- })
@@ -1,347 +0,0 @@
1
- /* eslint-env jest */
2
- import BigNumber from '../../../dist/cjs/src/primitives/BigNumber'
3
-
4
- describe('BN.js/Utils', () => {
5
- describe('.toString()', () => {
6
- describe('hex no padding', () => {
7
- it('should have same length as input', () => {
8
- let hex = '1'
9
- for (let i = 1; i <= 128; i++) {
10
- const n = new BigNumber(hex, 16)
11
- expect(n.toString(16).length).toEqual(i)
12
- hex = hex + '0'
13
- }
14
- })
15
- })
16
- describe('binary padding', () => {
17
- it('should have a length of 256', () => {
18
- const a = new BigNumber(0)
19
-
20
- expect(a.toString(2, 256).length).toEqual(256)
21
- })
22
- })
23
- describe('hex padding', () => {
24
- it('should have length of 8 from leading 15', () => {
25
- const a = new BigNumber('ffb9602', 16)
26
-
27
- expect(a.toString('hex', 2).length).toEqual(8)
28
- })
29
-
30
- it('should have length of 8 from leading zero', () => {
31
- const a = new BigNumber('fb9604', 16)
32
-
33
- expect(a.toString('hex', 8).length).toEqual(8)
34
- })
35
-
36
- it('should have length of 8 from leading zeros', () => {
37
- const a = new BigNumber(0)
38
-
39
- expect(a.toString('hex', 8).length).toEqual(8)
40
- })
41
-
42
- it('should have length of 64 from leading 15', () => {
43
- const a = new BigNumber(
44
- 'ffb96ff654e61130ba8422f0debca77a0ea74ae5ea8bca9b54ab64aabf01003',
45
- 16)
46
-
47
- expect(a.toString('hex', 2).length).toEqual(64)
48
- })
49
-
50
- it('should have length of 64 from leading zero', () => {
51
- const a = new BigNumber(
52
- 'fb96ff654e61130ba8422f0debca77a0ea74ae5ea8bca9b54ab64aabf01003',
53
- 16)
54
-
55
- expect(a.toString('hex', 64).length).toEqual(64)
56
- })
57
- })
58
- })
59
-
60
- describe('.isNeg()', () => {
61
- it('should return true for negative numbers', () => {
62
- expect(new BigNumber(-1).isNeg()).toEqual(true)
63
- expect(new BigNumber(1).isNeg()).toEqual(false)
64
- expect(new BigNumber(0).isNeg()).toEqual(false)
65
- expect(new BigNumber('-0', 10).isNeg()).toEqual(false)
66
- })
67
- })
68
-
69
- describe('.isOdd()', () => {
70
- it('should return true for odd numbers', () => {
71
- expect(new BigNumber(0).isOdd()).toEqual(false)
72
- expect(new BigNumber(1).isOdd()).toEqual(true)
73
- expect(new BigNumber(2).isOdd()).toEqual(false)
74
- expect(new BigNumber('-0', 10).isOdd()).toEqual(false)
75
- expect(new BigNumber('-1', 10).isOdd()).toEqual(true)
76
- expect(new BigNumber('-2', 10).isOdd()).toEqual(false)
77
- })
78
- })
79
-
80
- describe('.isEven()', () => {
81
- it('should return true for even numbers', () => {
82
- expect(new BigNumber(0).isEven()).toEqual(true)
83
- expect(new BigNumber(1).isEven()).toEqual(false)
84
- expect(new BigNumber(2).isEven()).toEqual(true)
85
- expect(new BigNumber('-0', 10).isEven()).toEqual(true)
86
- expect(new BigNumber('-1', 10).isEven()).toEqual(false)
87
- expect(new BigNumber('-2', 10).isEven()).toEqual(true)
88
- })
89
- })
90
-
91
- describe('.isZero()', () => {
92
- it('should return true for zero', () => {
93
- expect(new BigNumber(0).isZero()).toEqual(true)
94
- expect(new BigNumber(1).isZero()).toEqual(false)
95
- expect(new BigNumber(0xffffffff).isZero()).toEqual(false)
96
- })
97
- })
98
-
99
- describe('.bitLength()', () => {
100
- it('should return proper bitLength', () => {
101
- expect(new BigNumber(0).bitLength()).toEqual(0)
102
- expect(new BigNumber(0x1).bitLength()).toEqual(1)
103
- expect(new BigNumber(0x2).bitLength()).toEqual(2)
104
- expect(new BigNumber(0x3).bitLength()).toEqual(2)
105
- expect(new BigNumber(0x4).bitLength()).toEqual(3)
106
- expect(new BigNumber(0x8).bitLength()).toEqual(4)
107
- expect(new BigNumber(0x10).bitLength()).toEqual(5)
108
- expect(new BigNumber(0x100).bitLength()).toEqual(9)
109
- expect(new BigNumber(0x123456).bitLength()).toEqual(21)
110
- expect(new BigNumber('123456789', 16).bitLength()).toEqual(33)
111
- expect(new BigNumber('8023456789', 16).bitLength()).toEqual(40)
112
- })
113
- })
114
-
115
- describe('.byteLength()', () => {
116
- it('should return proper byteLength', () => {
117
- expect(new BigNumber(0).byteLength()).toEqual(0)
118
- expect(new BigNumber(0x1).byteLength()).toEqual(1)
119
- expect(new BigNumber(0x2).byteLength()).toEqual(1)
120
- expect(new BigNumber(0x3).byteLength()).toEqual(1)
121
- expect(new BigNumber(0x4).byteLength()).toEqual(1)
122
- expect(new BigNumber(0x8).byteLength()).toEqual(1)
123
- expect(new BigNumber(0x10).byteLength()).toEqual(1)
124
- expect(new BigNumber(0x100).byteLength()).toEqual(2)
125
- expect(new BigNumber(0x123456).byteLength()).toEqual(3)
126
- expect(new BigNumber('123456789', 16).byteLength()).toEqual(5)
127
- expect(new BigNumber('8023456789', 16).byteLength()).toEqual(5)
128
- })
129
- })
130
-
131
- describe('.toArray()', () => {
132
- it('should return [ 0 ] for `0`', () => {
133
- const n = new BigNumber(0)
134
- expect(n.toArray('be')).toEqual([0])
135
- expect(n.toArray('le')).toEqual([0])
136
- })
137
-
138
- it('should zero pad to desired lengths', () => {
139
- const n = new BigNumber(0x123456)
140
- expect(n.toArray('be', 5)).toEqual([0x00, 0x00, 0x12, 0x34, 0x56])
141
- expect(n.toArray('le', 5)).toEqual([0x56, 0x34, 0x12, 0x00, 0x00])
142
- })
143
-
144
- it('should throw when naturally larger than desired length', () => {
145
- const n = new BigNumber(0x123456)
146
- expect(() => {
147
- n.toArray('be', 2)
148
- }).toThrow(new Error('byte array longer than desired length'))
149
- })
150
- })
151
-
152
- describe('.toNumber()', () => {
153
- it('should return proper Number if below the limit', () => {
154
- expect(new BigNumber(0x123456).toNumber()).toEqual(0x123456)
155
- expect(new BigNumber(0x3ffffff).toNumber()).toEqual(0x3ffffff)
156
- expect(new BigNumber(0x4000000).toNumber()).toEqual(0x4000000)
157
- expect(new BigNumber(0x10000000000000).toNumber()).toEqual(0x10000000000000)
158
- expect(new BigNumber(0x10040004004000).toNumber()).toEqual(0x10040004004000)
159
- expect(new BigNumber(-0x123456).toNumber()).toEqual(-0x123456)
160
- expect(new BigNumber(-0x3ffffff).toNumber()).toEqual(-0x3ffffff)
161
- expect(new BigNumber(-0x4000000).toNumber()).toEqual(-0x4000000)
162
- expect(new BigNumber(-0x10000000000000).toNumber()).toEqual(-0x10000000000000)
163
- expect(new BigNumber(-0x10040004004000).toNumber()).toEqual(-0x10040004004000)
164
- })
165
-
166
- it('should throw when number exceeds 53 bits', () => {
167
- const n = new BigNumber(1).iushln(54)
168
- expect(() => {
169
- n.toNumber()
170
- }).toThrow(new Error('Number can only safely store up to 53 bits'))
171
- })
172
- })
173
-
174
- describe('.zeroBits()', () => {
175
- it('should return proper zeroBits', () => {
176
- expect(new BigNumber(0).zeroBits()).toEqual(0)
177
- expect(new BigNumber(0x1).zeroBits()).toEqual(0)
178
- expect(new BigNumber(0x2).zeroBits()).toEqual(1)
179
- expect(new BigNumber(0x3).zeroBits()).toEqual(0)
180
- expect(new BigNumber(0x4).zeroBits()).toEqual(2)
181
- expect(new BigNumber(0x8).zeroBits()).toEqual(3)
182
- expect(new BigNumber(0x10).zeroBits()).toEqual(4)
183
- expect(new BigNumber(0x100).zeroBits()).toEqual(8)
184
- expect(new BigNumber(0x1000000).zeroBits()).toEqual(24)
185
- expect(new BigNumber(0x123456).zeroBits()).toEqual(1)
186
- })
187
- })
188
-
189
- describe('.toJSON', () => {
190
- it('should return hex string', () => {
191
- expect(new BigNumber(0x123).toJSON()).toEqual('123')
192
- })
193
- })
194
-
195
- describe('.cmpn', () => {
196
- it('should return -1, 0, 1 correctly', () => {
197
- expect(new BigNumber(42).cmpn(42)).toEqual(0)
198
- expect(new BigNumber(42).cmpn(43)).toEqual(-1)
199
- expect(new BigNumber(42).cmpn(41)).toEqual(1)
200
- expect(new BigNumber(0x3fffffe).cmpn(0x3fffffe)).toEqual(0)
201
- expect(new BigNumber(0x3fffffe).cmpn(0x3ffffff)).toEqual(-1)
202
- expect(new BigNumber(0x3fffffe).cmpn(0x3fffffd)).toEqual(1)
203
- expect(() => {
204
- new BigNumber(0x3fffffe).cmpn(0x4000000)
205
- }).toThrow(new Error('Number is too big'))
206
- expect(new BigNumber(42).cmpn(-42)).toEqual(1)
207
- expect(new BigNumber(-42).cmpn(42)).toEqual(-1)
208
- expect(new BigNumber(-42).cmpn(-42)).toEqual(0)
209
- expect(1 / new BigNumber(-42).cmpn(-42)).toEqual(Infinity)
210
- })
211
- })
212
-
213
- describe('.cmp', () => {
214
- it('should return -1, 0, 1 correctly', () => {
215
- expect(new BigNumber(42).cmp(new BigNumber(42))).toEqual(0)
216
- expect(new BigNumber(42).cmp(new BigNumber(43))).toEqual(-1)
217
- expect(new BigNumber(42).cmp(new BigNumber(41))).toEqual(1)
218
- expect(new BigNumber(0x3fffffe).cmp(new BigNumber(0x3fffffe))).toEqual(0)
219
- expect(new BigNumber(0x3fffffe).cmp(new BigNumber(0x3ffffff))).toEqual(-1)
220
- expect(new BigNumber(0x3fffffe).cmp(new BigNumber(0x3fffffd))).toEqual(1)
221
- expect(new BigNumber(0x3fffffe).cmp(new BigNumber(0x4000000))).toEqual(-1)
222
- expect(new BigNumber(42).cmp(new BigNumber(-42))).toEqual(1)
223
- expect(new BigNumber(-42).cmp(new BigNumber(42))).toEqual(-1)
224
- expect(new BigNumber(-42).cmp(new BigNumber(-42))).toEqual(0)
225
- expect(1 / new BigNumber(-42).cmp(new BigNumber(-42))).toEqual(Infinity)
226
- })
227
- })
228
-
229
- describe('comparison shorthands', () => {
230
- it('.gtn greater than', () => {
231
- expect(new BigNumber(3).gtn(2)).toEqual(true)
232
- expect(new BigNumber(3).gtn(3)).toEqual(false)
233
- expect(new BigNumber(3).gtn(4)).toEqual(false)
234
- })
235
- it('.gt greater than', () => {
236
- expect(new BigNumber(3).gt(new BigNumber(2))).toEqual(true)
237
- expect(new BigNumber(3).gt(new BigNumber(3))).toEqual(false)
238
- expect(new BigNumber(3).gt(new BigNumber(4))).toEqual(false)
239
- })
240
- it('.gten greater than or equal', () => {
241
- expect(new BigNumber(3).gten(3)).toEqual(true)
242
- expect(new BigNumber(3).gten(2)).toEqual(true)
243
- expect(new BigNumber(3).gten(4)).toEqual(false)
244
- })
245
- it('.gte greater than or equal', () => {
246
- expect(new BigNumber(3).gte(new BigNumber(3))).toEqual(true)
247
- expect(new BigNumber(3).gte(new BigNumber(2))).toEqual(true)
248
- expect(new BigNumber(3).gte(new BigNumber(4))).toEqual(false)
249
- })
250
- it('.ltn less than', () => {
251
- expect(new BigNumber(2).ltn(3)).toEqual(true)
252
- expect(new BigNumber(2).ltn(2)).toEqual(false)
253
- expect(new BigNumber(2).ltn(1)).toEqual(false)
254
- })
255
- it('.lt less than', () => {
256
- expect(new BigNumber(2).lt(new BigNumber(3))).toEqual(true)
257
- expect(new BigNumber(2).lt(new BigNumber(2))).toEqual(false)
258
- expect(new BigNumber(2).lt(new BigNumber(1))).toEqual(false)
259
- })
260
- it('.lten less than or equal', () => {
261
- expect(new BigNumber(3).lten(3)).toEqual(true)
262
- expect(new BigNumber(3).lten(2)).toEqual(false)
263
- expect(new BigNumber(3).lten(4)).toEqual(true)
264
- })
265
- it('.lte less than or equal', () => {
266
- expect(new BigNumber(3).lte(new BigNumber(3))).toEqual(true)
267
- expect(new BigNumber(3).lte(new BigNumber(2))).toEqual(false)
268
- expect(new BigNumber(3).lte(new BigNumber(4))).toEqual(true)
269
- })
270
- it('.eqn equal', () => {
271
- expect(new BigNumber(3).eqn(3)).toEqual(true)
272
- expect(new BigNumber(3).eqn(2)).toEqual(false)
273
- expect(new BigNumber(3).eqn(4)).toEqual(false)
274
- })
275
- it('.eq equal', () => {
276
- expect(new BigNumber(3).eq(new BigNumber(3))).toEqual(true)
277
- expect(new BigNumber(3).eq(new BigNumber(2))).toEqual(false)
278
- expect(new BigNumber(3).eq(new BigNumber(4))).toEqual(false)
279
- })
280
- })
281
-
282
- describe('.fromTwos', () => {
283
- it('should convert from two\'s complement to negative number', () => {
284
- expect(new BigNumber('00000000', 16).fromTwos(32).toNumber()).toEqual(0)
285
- expect(new BigNumber('00000001', 16).fromTwos(32).toNumber()).toEqual(1)
286
- expect(new BigNumber('7fffffff', 16).fromTwos(32).toNumber()).toEqual(2147483647)
287
- expect(new BigNumber('80000000', 16).fromTwos(32).toNumber()).toEqual(-2147483648)
288
- expect(new BigNumber('f0000000', 16).fromTwos(32).toNumber()).toEqual(-268435456)
289
- expect(new BigNumber('f1234567', 16).fromTwos(32).toNumber()).toEqual(-249346713)
290
- expect(new BigNumber('ffffffff', 16).fromTwos(32).toNumber()).toEqual(-1)
291
- expect(new BigNumber('fffffffe', 16).fromTwos(32).toNumber()).toEqual(-2)
292
- expect(new BigNumber('fffffffffffffffffffffffffffffffe', 16)
293
- .fromTwos(128).toNumber()).toEqual(-2)
294
- expect(new BigNumber('ffffffffffffffffffffffffffffffff' +
295
- 'fffffffffffffffffffffffffffffffe', 16).fromTwos(256).toNumber()).toEqual(-2)
296
- expect(new BigNumber('ffffffffffffffffffffffffffffffff' +
297
- 'ffffffffffffffffffffffffffffffff', 16).fromTwos(256).toNumber()).toEqual(-1)
298
- expect(
299
- new BigNumber('7fffffffffffffffffffffffffffffff' +
300
- 'ffffffffffffffffffffffffffffffff', 16).fromTwos(256).toString(10)).toEqual(new BigNumber('5789604461865809771178549250434395392663499' +
301
- '2332820282019728792003956564819967', 10).toString(10))
302
- expect(
303
- new BigNumber('80000000000000000000000000000000' +
304
- '00000000000000000000000000000000', 16).fromTwos(256).toString(10)).toEqual(new BigNumber('-578960446186580977117854925043439539266349' +
305
- '92332820282019728792003956564819968', 10).toString(10))
306
- })
307
- })
308
-
309
- describe('.toTwos', () => {
310
- it('should convert from negative number to two\'s complement', () => {
311
- expect(new BigNumber(0).toTwos(32).toString(16)).toEqual('0')
312
- expect(new BigNumber(1).toTwos(32).toString(16)).toEqual('1')
313
- expect(new BigNumber(2147483647).toTwos(32).toString(16)).toEqual('7fffffff')
314
- expect(new BigNumber('-2147483648', 10).toTwos(32).toString(16)).toEqual('80000000')
315
- expect(new BigNumber('-268435456', 10).toTwos(32).toString(16)).toEqual('f0000000')
316
- expect(new BigNumber('-249346713', 10).toTwos(32).toString(16)).toEqual('f1234567')
317
- expect(new BigNumber('-1', 10).toTwos(32).toString(16)).toEqual('ffffffff')
318
- expect(new BigNumber('-2', 10).toTwos(32).toString(16)).toEqual('fffffffe')
319
- expect(new BigNumber('-2', 10).toTwos(128).toString(16)).toEqual(
320
- 'fffffffffffffffffffffffffffffffe')
321
- expect(new BigNumber('-2', 10).toTwos(256).toString(16)).toEqual(
322
- 'fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe')
323
- expect(new BigNumber('-1', 10).toTwos(256).toString(16)).toEqual(
324
- 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff')
325
- expect(
326
- new BigNumber('5789604461865809771178549250434395392663' +
327
- '4992332820282019728792003956564819967', 10).toTwos(256).toString(16)).toEqual(
328
- '7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff')
329
- expect(
330
- new BigNumber('-578960446186580977117854925043439539266' +
331
- '34992332820282019728792003956564819968', 10).toTwos(256).toString(16)).toEqual(
332
- '8000000000000000000000000000000000000000000000000000000000000000')
333
- })
334
- })
335
-
336
- describe('.isBN', () => {
337
- it('should return true for BN', () => {
338
- expect(BigNumber.isBN(new BigNumber())).toEqual(true)
339
- })
340
-
341
- it('should return false for everything else', () => {
342
- expect(BigNumber.isBN(1)).toEqual(false)
343
- expect(BigNumber.isBN([])).toEqual(false)
344
- expect(BigNumber.isBN({})).toEqual(false)
345
- })
346
- })
347
- })