bn.js 4.11.6 → 4.11.7

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/test/red-test.js DELETED
@@ -1,263 +0,0 @@
1
- /* global describe, it */
2
-
3
- var assert = require('assert');
4
- var BN = require('../').BN;
5
-
6
- describe('BN.js/Reduction context', function () {
7
- function testMethod (name, fn) {
8
- describe(name + ' method', function () {
9
- it('should support add, iadd, sub, isub operations', function () {
10
- var p = new BN(257);
11
- var m = fn(p);
12
- var a = new BN(123).toRed(m);
13
- var b = new BN(231).toRed(m);
14
-
15
- assert.equal(a.redAdd(b).fromRed().toString(10), '97');
16
- assert.equal(a.redSub(b).fromRed().toString(10), '149');
17
- assert.equal(b.redSub(a).fromRed().toString(10), '108');
18
-
19
- assert.equal(a.clone().redIAdd(b).fromRed().toString(10), '97');
20
- assert.equal(a.clone().redISub(b).fromRed().toString(10), '149');
21
- assert.equal(b.clone().redISub(a).fromRed().toString(10), '108');
22
- });
23
-
24
- it('should support pow and mul operations', function () {
25
- var p192 = new BN(
26
- 'fffffffffffffffffffffffffffffffeffffffffffffffff',
27
- 16);
28
- var m = fn(p192);
29
- var a = new BN(123);
30
- var b = new BN(231);
31
- var c = a.toRed(m).redMul(b.toRed(m)).fromRed();
32
- assert(c.cmp(a.mul(b).mod(p192)) === 0);
33
-
34
- assert.equal(a.toRed(m).redPow(new BN(3)).fromRed()
35
- .cmp(a.sqr().mul(a)), 0);
36
- assert.equal(a.toRed(m).redPow(new BN(4)).fromRed()
37
- .cmp(a.sqr().sqr()), 0);
38
- assert.equal(a.toRed(m).redPow(new BN(8)).fromRed()
39
- .cmp(a.sqr().sqr().sqr()), 0);
40
- assert.equal(a.toRed(m).redPow(new BN(9)).fromRed()
41
- .cmp(a.sqr().sqr().sqr().mul(a)), 0);
42
- assert.equal(a.toRed(m).redPow(new BN(17)).fromRed()
43
- .cmp(a.sqr().sqr().sqr().sqr().mul(a)), 0);
44
- assert.equal(
45
- a.toRed(m).redPow(new BN('deadbeefabbadead', 16)).fromRed()
46
- .toString(16),
47
- '3aa0e7e304e320b68ef61592bcb00341866d6fa66e11a4d6');
48
- });
49
-
50
- it('should sqrtm numbers', function () {
51
- var p = new BN(263);
52
- var m = fn(p);
53
- var q = new BN(11).toRed(m);
54
-
55
- var qr = q.redSqrt();
56
- assert.equal(qr.redSqr().cmp(q), 0);
57
-
58
- qr = q.redSqrt();
59
- assert.equal(qr.redSqr().cmp(q), 0);
60
-
61
- p = new BN(
62
- 'fffffffffffffffffffffffffffffffeffffffffffffffff',
63
- 16);
64
- m = fn(p);
65
-
66
- q = new BN(13).toRed(m);
67
- qr = q.redSqrt(true, p);
68
- assert.equal(qr.redSqr().cmp(q), 0);
69
-
70
- qr = q.redSqrt(false, p);
71
- assert.equal(qr.redSqr().cmp(q), 0);
72
-
73
- // Tonelli-shanks
74
- p = new BN(13);
75
- m = fn(p);
76
- q = new BN(10).toRed(m);
77
- assert.equal(q.redSqrt().fromRed().toString(10), '7');
78
- });
79
-
80
- it('should invm numbers', function () {
81
- var p = new BN(257);
82
- var m = fn(p);
83
- var a = new BN(3).toRed(m);
84
- var b = a.redInvm();
85
- assert.equal(a.redMul(b).fromRed().toString(16), '1');
86
- });
87
-
88
- it('should invm numbers (regression)', function () {
89
- var p = new BN(
90
- 'ffffffff00000001000000000000000000000000ffffffffffffffffffffffff',
91
- 16);
92
- var a = new BN(
93
- 'e1d969b8192fbac73ea5b7921896d6a2263d4d4077bb8e5055361d1f7f8163f3',
94
- 16);
95
-
96
- var m = fn(p);
97
- a = a.toRed(m);
98
-
99
- assert.equal(a.redInvm().fromRed().negative, 0);
100
- });
101
-
102
- it('should imul numbers', function () {
103
- var p = new BN(
104
- 'fffffffffffffffffffffffffffffffeffffffffffffffff',
105
- 16);
106
- var m = fn(p);
107
-
108
- var a = new BN('deadbeefabbadead', 16);
109
- var b = new BN('abbadeadbeefdead', 16);
110
- var c = a.mul(b).mod(p);
111
-
112
- assert.equal(a.toRed(m).redIMul(b.toRed(m)).fromRed().toString(16),
113
- c.toString(16));
114
- });
115
-
116
- it('should pow(base, 0) == 1', function () {
117
- var base = new BN(256).toRed(BN.red('k256'));
118
- var exponent = new BN(0);
119
- var result = base.redPow(exponent);
120
- assert.equal(result.toString(), '1');
121
- });
122
-
123
- it('should shl numbers', function () {
124
- var base = new BN(256).toRed(BN.red('k256'));
125
- var result = base.redShl(1);
126
- assert.equal(result.toString(), '512');
127
- });
128
-
129
- it('should reduce when converting to red', function () {
130
- var p = new BN(257);
131
- var m = fn(p);
132
- var a = new BN(5).toRed(m);
133
-
134
- assert.doesNotThrow(function () {
135
- var b = a.redISub(new BN(512).toRed(m));
136
- b.redISub(new BN(512).toRed(m));
137
- });
138
- });
139
-
140
- it('redNeg and zero value', function () {
141
- var a = new BN(0).toRed(BN.red('k256')).redNeg();
142
- assert.equal(a.isZero(), true);
143
- });
144
-
145
- it('should not allow modulus <= 1', function () {
146
- assert.throws(function () {
147
- BN.red(new BN(0));
148
- }, /^Error: modulus must be greater than 1$/);
149
-
150
- assert.throws(function () {
151
- BN.red(new BN(1));
152
- }, /^Error: modulus must be greater than 1$/);
153
-
154
- assert.doesNotThrow(function () {
155
- BN.red(new BN(2));
156
- });
157
- });
158
- });
159
- }
160
-
161
- testMethod('Plain', BN.red);
162
- testMethod('Montgomery', BN.mont);
163
-
164
- describe('Pseudo-Mersenne Primes', function () {
165
- it('should reduce numbers mod k256', function () {
166
- var p = BN._prime('k256');
167
-
168
- assert.equal(p.ireduce(new BN(0xdead)).toString(16), 'dead');
169
- assert.equal(p.ireduce(new BN('deadbeef', 16)).toString(16), 'deadbeef');
170
-
171
- var num = new BN('fedcba9876543210fedcba9876543210dead' +
172
- 'fedcba9876543210fedcba9876543210dead',
173
- 16);
174
- var exp = num.mod(p.p).toString(16);
175
- assert.equal(p.ireduce(num).toString(16), exp);
176
-
177
- var regr = new BN('f7e46df64c1815962bf7bc9c56128798' +
178
- '3f4fcef9cb1979573163b477eab93959' +
179
- '335dfb29ef07a4d835d22aa3b6797760' +
180
- '70a8b8f59ba73d56d01a79af9',
181
- 16);
182
- exp = regr.mod(p.p).toString(16);
183
-
184
- assert.equal(p.ireduce(regr).toString(16), exp);
185
- });
186
-
187
- it('should not fail to invm number mod k256', function () {
188
- var regr2 = new BN(
189
- '6c150c4aa9a8cf1934485d40674d4a7cd494675537bda36d49405c5d2c6f496f', 16);
190
- regr2 = regr2.toRed(BN.red('k256'));
191
- assert.equal(regr2.redInvm().redMul(regr2).fromRed().cmpn(1), 0);
192
- });
193
-
194
- it('should correctly square the number', function () {
195
- var p = BN._prime('k256').p;
196
- var red = BN.red('k256');
197
-
198
- var n = new BN('9cd8cb48c3281596139f147c1364a3ed' +
199
- 'e88d3f310fdb0eb98c924e599ca1b3c9',
200
- 16);
201
- var expected = n.sqr().mod(p);
202
- var actual = n.toRed(red).redSqr().fromRed();
203
-
204
- assert.equal(actual.toString(16), expected.toString(16));
205
- });
206
-
207
- it('redISqr should return right result', function () {
208
- var n = new BN('30f28939', 16);
209
- var actual = n.toRed(BN.red('k256')).redISqr().fromRed();
210
- assert.equal(actual.toString(16), '95bd93d19520eb1');
211
- });
212
- });
213
-
214
- it('should avoid 4.1.0 regresion', function () {
215
- function bits2int (obits, q) {
216
- var bits = new BN(obits);
217
- var shift = (obits.length << 3) - q.bitLength();
218
- if (shift > 0) {
219
- bits.ishrn(shift);
220
- }
221
- return bits;
222
- }
223
- var t = new Buffer('aff1651e4cd6036d57aa8b2a05ccf1a9d5a40166340ecbbdc55' +
224
- 'be10b568aa0aa3d05ce9a2fcec9df8ed018e29683c6051cb83e' +
225
- '46ce31ba4edb045356a8d0d80b', 'hex');
226
- var g = new BN('5c7ff6b06f8f143fe8288433493e4769c4d988ace5be25a0e24809670' +
227
- '716c613d7b0cee6932f8faa7c44d2cb24523da53fbe4f6ec3595892d1' +
228
- 'aa58c4328a06c46a15662e7eaa703a1decf8bbb2d05dbe2eb956c142a' +
229
- '338661d10461c0d135472085057f3494309ffa73c611f78b32adbb574' +
230
- '0c361c9f35be90997db2014e2ef5aa61782f52abeb8bd6432c4dd097b' +
231
- 'c5423b285dafb60dc364e8161f4a2a35aca3a10b1c4d203cc76a470a3' +
232
- '3afdcbdd92959859abd8b56e1725252d78eac66e71ba9ae3f1dd24871' +
233
- '99874393cd4d832186800654760e1e34c09e4d155179f9ec0dc4473f9' +
234
- '96bdce6eed1cabed8b6f116f7ad9cf505df0f998e34ab27514b0ffe7',
235
- 16);
236
- var p = new BN('9db6fb5951b66bb6fe1e140f1d2ce5502374161fd6538df1648218642' +
237
- 'f0b5c48c8f7a41aadfa187324b87674fa1822b00f1ecf8136943d7c55' +
238
- '757264e5a1a44ffe012e9936e00c1d3e9310b01c7d179805d3058b2a9' +
239
- 'f4bb6f9716bfe6117c6b5b3cc4d9be341104ad4a80ad6c94e005f4b99' +
240
- '3e14f091eb51743bf33050c38de235567e1b34c3d6a5c0ceaa1a0f368' +
241
- '213c3d19843d0b4b09dcb9fc72d39c8de41f1bf14d4bb4563ca283716' +
242
- '21cad3324b6a2d392145bebfac748805236f5ca2fe92b871cd8f9c36d' +
243
- '3292b5509ca8caa77a2adfc7bfd77dda6f71125a7456fea153e433256' +
244
- 'a2261c6a06ed3693797e7995fad5aabbcfbe3eda2741e375404ae25b',
245
- 16);
246
- var q = new BN('f2c3119374ce76c9356990b465374a17f23f9ed35089bd969f61c6dde' +
247
- '9998c1f', 16);
248
- var k = bits2int(t, q);
249
- var expectedR = '89ec4bb1400eccff8e7d9aa515cd1de7803f2daff09693ee7fd1353e' +
250
- '90a68307';
251
- var r = g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q);
252
- assert.equal(r.toString(16), expectedR);
253
- });
254
-
255
- it('K256.split for 512 bits number should return equal numbers', function () {
256
- var red = BN.red('k256');
257
- var input = new BN(1).iushln(512).subn(1);
258
- assert.equal(input.bitLength(), 512);
259
- var output = new BN(0);
260
- red.prime.split(input, output);
261
- assert.equal(input.cmp(output), 0);
262
- });
263
- });
@@ -1,345 +0,0 @@
1
- /* global describe, it */
2
-
3
- var assert = require('assert');
4
- var BN = require('../').BN;
5
-
6
- describe('BN.js/Utils', function () {
7
- describe('.toString()', function () {
8
- describe('binary padding', function () {
9
- it('should have a length of 256', function () {
10
- var a = new BN(0);
11
-
12
- assert.equal(a.toString(2, 256).length, 256);
13
- });
14
- });
15
- describe('hex padding', function () {
16
- it('should have length of 8 from leading 15', function () {
17
- var a = new BN('ffb9602', 16);
18
-
19
- assert.equal(a.toString('hex', 2).length, 8);
20
- });
21
-
22
- it('should have length of 8 from leading zero', function () {
23
- var a = new BN('fb9604', 16);
24
-
25
- assert.equal(a.toString('hex', 8).length, 8);
26
- });
27
-
28
- it('should have length of 8 from leading zeros', function () {
29
- var a = new BN(0);
30
-
31
- assert.equal(a.toString('hex', 8).length, 8);
32
- });
33
-
34
- it('should have length of 64 from leading 15', function () {
35
- var a = new BN(
36
- 'ffb96ff654e61130ba8422f0debca77a0ea74ae5ea8bca9b54ab64aabf01003',
37
- 16);
38
-
39
- assert.equal(a.toString('hex', 2).length, 64);
40
- });
41
-
42
- it('should have length of 64 from leading zero', function () {
43
- var a = new BN(
44
- 'fb96ff654e61130ba8422f0debca77a0ea74ae5ea8bca9b54ab64aabf01003',
45
- 16);
46
-
47
- assert.equal(a.toString('hex', 64).length, 64);
48
- });
49
- });
50
- });
51
-
52
- describe('.isNeg()', function () {
53
- it('should return true for negative numbers', function () {
54
- assert.equal(new BN(-1).isNeg(), true);
55
- assert.equal(new BN(1).isNeg(), false);
56
- assert.equal(new BN(0).isNeg(), false);
57
- assert.equal(new BN('-0', 10).isNeg(), false);
58
- });
59
- });
60
-
61
- describe('.isOdd()', function () {
62
- it('should return true for odd numbers', function () {
63
- assert.equal(new BN(0).isOdd(), false);
64
- assert.equal(new BN(1).isOdd(), true);
65
- assert.equal(new BN(2).isOdd(), false);
66
- assert.equal(new BN('-0', 10).isOdd(), false);
67
- assert.equal(new BN('-1', 10).isOdd(), true);
68
- assert.equal(new BN('-2', 10).isOdd(), false);
69
- });
70
- });
71
-
72
- describe('.isEven()', function () {
73
- it('should return true for even numbers', function () {
74
- assert.equal(new BN(0).isEven(), true);
75
- assert.equal(new BN(1).isEven(), false);
76
- assert.equal(new BN(2).isEven(), true);
77
- assert.equal(new BN('-0', 10).isEven(), true);
78
- assert.equal(new BN('-1', 10).isEven(), false);
79
- assert.equal(new BN('-2', 10).isEven(), true);
80
- });
81
- });
82
-
83
- describe('.isZero()', function () {
84
- it('should return true for zero', function () {
85
- assert.equal(new BN(0).isZero(), true);
86
- assert.equal(new BN(1).isZero(), false);
87
- assert.equal(new BN(0xffffffff).isZero(), false);
88
- });
89
- });
90
-
91
- describe('.bitLength()', function () {
92
- it('should return proper bitLength', function () {
93
- assert.equal(new BN(0).bitLength(), 0);
94
- assert.equal(new BN(0x1).bitLength(), 1);
95
- assert.equal(new BN(0x2).bitLength(), 2);
96
- assert.equal(new BN(0x3).bitLength(), 2);
97
- assert.equal(new BN(0x4).bitLength(), 3);
98
- assert.equal(new BN(0x8).bitLength(), 4);
99
- assert.equal(new BN(0x10).bitLength(), 5);
100
- assert.equal(new BN(0x100).bitLength(), 9);
101
- assert.equal(new BN(0x123456).bitLength(), 21);
102
- assert.equal(new BN('123456789', 16).bitLength(), 33);
103
- assert.equal(new BN('8023456789', 16).bitLength(), 40);
104
- });
105
- });
106
-
107
- describe('.byteLength()', function () {
108
- it('should return proper byteLength', function () {
109
- assert.equal(new BN(0).byteLength(), 0);
110
- assert.equal(new BN(0x1).byteLength(), 1);
111
- assert.equal(new BN(0x2).byteLength(), 1);
112
- assert.equal(new BN(0x3).byteLength(), 1);
113
- assert.equal(new BN(0x4).byteLength(), 1);
114
- assert.equal(new BN(0x8).byteLength(), 1);
115
- assert.equal(new BN(0x10).byteLength(), 1);
116
- assert.equal(new BN(0x100).byteLength(), 2);
117
- assert.equal(new BN(0x123456).byteLength(), 3);
118
- assert.equal(new BN('123456789', 16).byteLength(), 5);
119
- assert.equal(new BN('8023456789', 16).byteLength(), 5);
120
- });
121
- });
122
-
123
- describe('.toArray()', function () {
124
- it('should return [ 0 ] for `0`', function () {
125
- var n = new BN(0);
126
- assert.deepEqual(n.toArray('be'), [ 0 ]);
127
- assert.deepEqual(n.toArray('le'), [ 0 ]);
128
- });
129
-
130
- it('should zero pad to desired lengths', function () {
131
- var n = new BN(0x123456);
132
- assert.deepEqual(n.toArray('be', 5), [ 0x00, 0x00, 0x12, 0x34, 0x56 ]);
133
- assert.deepEqual(n.toArray('le', 5), [ 0x56, 0x34, 0x12, 0x00, 0x00 ]);
134
- });
135
-
136
- it('should throw when naturally larger than desired length', function () {
137
- var n = new BN(0x123456);
138
- assert.throws(function () {
139
- n.toArray('be', 2);
140
- }, /^Error: byte array longer than desired length$/);
141
- });
142
- });
143
-
144
- describe('.toBuffer', function () {
145
- it('should return proper Buffer', function () {
146
- var n = new BN(0x123456);
147
- assert.deepEqual(n.toBuffer('be', 5).toString('hex'), '0000123456');
148
- assert.deepEqual(n.toBuffer('le', 5).toString('hex'), '5634120000');
149
- });
150
- });
151
-
152
- describe('.toNumber()', function () {
153
- it('should return proper Number if below the limit', function () {
154
- assert.deepEqual(new BN(0x123456).toNumber(), 0x123456);
155
- assert.deepEqual(new BN(0x3ffffff).toNumber(), 0x3ffffff);
156
- assert.deepEqual(new BN(0x4000000).toNumber(), 0x4000000);
157
- assert.deepEqual(new BN(0x10000000000000).toNumber(), 0x10000000000000);
158
- assert.deepEqual(new BN(0x10040004004000).toNumber(), 0x10040004004000);
159
- assert.deepEqual(new BN(-0x123456).toNumber(), -0x123456);
160
- assert.deepEqual(new BN(-0x3ffffff).toNumber(), -0x3ffffff);
161
- assert.deepEqual(new BN(-0x4000000).toNumber(), -0x4000000);
162
- assert.deepEqual(new BN(-0x10000000000000).toNumber(), -0x10000000000000);
163
- assert.deepEqual(new BN(-0x10040004004000).toNumber(), -0x10040004004000);
164
- });
165
-
166
- it('should throw when number exceeds 53 bits', function () {
167
- var n = new BN(1).iushln(54);
168
- assert.throws(function () {
169
- n.toNumber();
170
- }, /^Error: Number can only safely store up to 53 bits$/);
171
- });
172
- });
173
-
174
- describe('.zeroBits()', function () {
175
- it('should return proper zeroBits', function () {
176
- assert.equal(new BN(0).zeroBits(), 0);
177
- assert.equal(new BN(0x1).zeroBits(), 0);
178
- assert.equal(new BN(0x2).zeroBits(), 1);
179
- assert.equal(new BN(0x3).zeroBits(), 0);
180
- assert.equal(new BN(0x4).zeroBits(), 2);
181
- assert.equal(new BN(0x8).zeroBits(), 3);
182
- assert.equal(new BN(0x10).zeroBits(), 4);
183
- assert.equal(new BN(0x100).zeroBits(), 8);
184
- assert.equal(new BN(0x1000000).zeroBits(), 24);
185
- assert.equal(new BN(0x123456).zeroBits(), 1);
186
- });
187
- });
188
-
189
- describe('.toJSON', function () {
190
- it('should return hex string', function () {
191
- assert.equal(new BN(0x123).toJSON(), '123');
192
- });
193
- });
194
-
195
- describe('.cmpn', function () {
196
- it('should return -1, 0, 1 correctly', function () {
197
- assert.equal(new BN(42).cmpn(42), 0);
198
- assert.equal(new BN(42).cmpn(43), -1);
199
- assert.equal(new BN(42).cmpn(41), 1);
200
- assert.equal(new BN(0x3fffffe).cmpn(0x3fffffe), 0);
201
- assert.equal(new BN(0x3fffffe).cmpn(0x3ffffff), -1);
202
- assert.equal(new BN(0x3fffffe).cmpn(0x3fffffd), 1);
203
- assert.throws(function () {
204
- new BN(0x3fffffe).cmpn(0x4000000);
205
- }, /^Error: Number is too big$/);
206
- assert.equal(new BN(42).cmpn(-42), 1);
207
- assert.equal(new BN(-42).cmpn(42), -1);
208
- assert.equal(new BN(-42).cmpn(-42), 0);
209
- assert.equal(1 / new BN(-42).cmpn(-42), Infinity);
210
- });
211
- });
212
-
213
- describe('.cmp', function () {
214
- it('should return -1, 0, 1 correctly', function () {
215
- assert.equal(new BN(42).cmp(new BN(42)), 0);
216
- assert.equal(new BN(42).cmp(new BN(43)), -1);
217
- assert.equal(new BN(42).cmp(new BN(41)), 1);
218
- assert.equal(new BN(0x3fffffe).cmp(new BN(0x3fffffe)), 0);
219
- assert.equal(new BN(0x3fffffe).cmp(new BN(0x3ffffff)), -1);
220
- assert.equal(new BN(0x3fffffe).cmp(new BN(0x3fffffd)), 1);
221
- assert.equal(new BN(0x3fffffe).cmp(new BN(0x4000000)), -1);
222
- assert.equal(new BN(42).cmp(new BN(-42)), 1);
223
- assert.equal(new BN(-42).cmp(new BN(42)), -1);
224
- assert.equal(new BN(-42).cmp(new BN(-42)), 0);
225
- assert.equal(1 / new BN(-42).cmp(new BN(-42)), Infinity);
226
- });
227
- });
228
-
229
- describe('comparison shorthands', function () {
230
- it('.gtn greater than', function () {
231
- assert.equal(new BN(3).gtn(2), true);
232
- assert.equal(new BN(3).gtn(3), false);
233
- assert.equal(new BN(3).gtn(4), false);
234
- });
235
- it('.gt greater than', function () {
236
- assert.equal(new BN(3).gt(new BN(2)), true);
237
- assert.equal(new BN(3).gt(new BN(3)), false);
238
- assert.equal(new BN(3).gt(new BN(4)), false);
239
- });
240
- it('.gten greater than or equal', function () {
241
- assert.equal(new BN(3).gten(3), true);
242
- assert.equal(new BN(3).gten(2), true);
243
- assert.equal(new BN(3).gten(4), false);
244
- });
245
- it('.gte greater than or equal', function () {
246
- assert.equal(new BN(3).gte(new BN(3)), true);
247
- assert.equal(new BN(3).gte(new BN(2)), true);
248
- assert.equal(new BN(3).gte(new BN(4)), false);
249
- });
250
- it('.ltn less than', function () {
251
- assert.equal(new BN(2).ltn(3), true);
252
- assert.equal(new BN(2).ltn(2), false);
253
- assert.equal(new BN(2).ltn(1), false);
254
- });
255
- it('.lt less than', function () {
256
- assert.equal(new BN(2).lt(new BN(3)), true);
257
- assert.equal(new BN(2).lt(new BN(2)), false);
258
- assert.equal(new BN(2).lt(new BN(1)), false);
259
- });
260
- it('.lten less than or equal', function () {
261
- assert.equal(new BN(3).lten(3), true);
262
- assert.equal(new BN(3).lten(2), false);
263
- assert.equal(new BN(3).lten(4), true);
264
- });
265
- it('.lte less than or equal', function () {
266
- assert.equal(new BN(3).lte(new BN(3)), true);
267
- assert.equal(new BN(3).lte(new BN(2)), false);
268
- assert.equal(new BN(3).lte(new BN(4)), true);
269
- });
270
- it('.eqn equal', function () {
271
- assert.equal(new BN(3).eqn(3), true);
272
- assert.equal(new BN(3).eqn(2), false);
273
- assert.equal(new BN(3).eqn(4), false);
274
- });
275
- it('.eq equal', function () {
276
- assert.equal(new BN(3).eq(new BN(3)), true);
277
- assert.equal(new BN(3).eq(new BN(2)), false);
278
- assert.equal(new BN(3).eq(new BN(4)), false);
279
- });
280
- });
281
-
282
- describe('.fromTwos', function () {
283
- it('should convert from two\'s complement to negative number', function () {
284
- assert.equal(new BN('00000000', 16).fromTwos(32).toNumber(), 0);
285
- assert.equal(new BN('00000001', 16).fromTwos(32).toNumber(), 1);
286
- assert.equal(new BN('7fffffff', 16).fromTwos(32).toNumber(), 2147483647);
287
- assert.equal(new BN('80000000', 16).fromTwos(32).toNumber(), -2147483648);
288
- assert.equal(new BN('f0000000', 16).fromTwos(32).toNumber(), -268435456);
289
- assert.equal(new BN('f1234567', 16).fromTwos(32).toNumber(), -249346713);
290
- assert.equal(new BN('ffffffff', 16).fromTwos(32).toNumber(), -1);
291
- assert.equal(new BN('fffffffe', 16).fromTwos(32).toNumber(), -2);
292
- assert.equal(new BN('fffffffffffffffffffffffffffffffe', 16)
293
- .fromTwos(128).toNumber(), -2);
294
- assert.equal(new BN('ffffffffffffffffffffffffffffffff' +
295
- 'fffffffffffffffffffffffffffffffe', 16).fromTwos(256).toNumber(), -2);
296
- assert.equal(new BN('ffffffffffffffffffffffffffffffff' +
297
- 'ffffffffffffffffffffffffffffffff', 16).fromTwos(256).toNumber(), -1);
298
- assert.equal(new BN('7fffffffffffffffffffffffffffffff' +
299
- 'ffffffffffffffffffffffffffffffff', 16).fromTwos(256).toString(10),
300
- new BN('5789604461865809771178549250434395392663499' +
301
- '2332820282019728792003956564819967', 10).toString(10));
302
- assert.equal(new BN('80000000000000000000000000000000' +
303
- '00000000000000000000000000000000', 16).fromTwos(256).toString(10),
304
- new BN('-578960446186580977117854925043439539266349' +
305
- '92332820282019728792003956564819968', 10).toString(10));
306
- });
307
- });
308
-
309
- describe('.toTwos', function () {
310
- it('should convert from negative number to two\'s complement', function () {
311
- assert.equal(new BN(0).toTwos(32).toString(16), '0');
312
- assert.equal(new BN(1).toTwos(32).toString(16), '1');
313
- assert.equal(new BN(2147483647).toTwos(32).toString(16), '7fffffff');
314
- assert.equal(new BN('-2147483648', 10).toTwos(32).toString(16), '80000000');
315
- assert.equal(new BN('-268435456', 10).toTwos(32).toString(16), 'f0000000');
316
- assert.equal(new BN('-249346713', 10).toTwos(32).toString(16), 'f1234567');
317
- assert.equal(new BN('-1', 10).toTwos(32).toString(16), 'ffffffff');
318
- assert.equal(new BN('-2', 10).toTwos(32).toString(16), 'fffffffe');
319
- assert.equal(new BN('-2', 10).toTwos(128).toString(16),
320
- 'fffffffffffffffffffffffffffffffe');
321
- assert.equal(new BN('-2', 10).toTwos(256).toString(16),
322
- 'fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe');
323
- assert.equal(new BN('-1', 10).toTwos(256).toString(16),
324
- 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff');
325
- assert.equal(new BN('5789604461865809771178549250434395392663' +
326
- '4992332820282019728792003956564819967', 10).toTwos(256).toString(16),
327
- '7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff');
328
- assert.equal(new BN('-578960446186580977117854925043439539266' +
329
- '34992332820282019728792003956564819968', 10).toTwos(256).toString(16),
330
- '8000000000000000000000000000000000000000000000000000000000000000');
331
- });
332
- });
333
-
334
- describe('.isBN', function () {
335
- it('should return true for BN', function () {
336
- assert.equal(BN.isBN(new BN()), true);
337
- });
338
-
339
- it('should return false for everything else', function () {
340
- assert.equal(BN.isBN(1), false);
341
- assert.equal(BN.isBN([]), false);
342
- assert.equal(BN.isBN({}), false);
343
- });
344
- });
345
- });