constructor-test.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. var assert = require('assert');
  2. var BN = require('../').BN;
  3. var fixtures = require('./fixtures');
  4. describe('BN.js/Constructor', function() {
  5. describe('with Smi input', function() {
  6. it('should accept one limb number', function() {
  7. assert.equal(new BN(12345).toString(16), '3039');
  8. });
  9. it('should accept two-limb number', function() {
  10. assert.equal(new BN(0x4123456).toString(16), '4123456');
  11. });
  12. });
  13. describe('with String input', function() {
  14. it('should accept base-16', function() {
  15. assert.equal(new BN('1A6B765D8CDF', 16).toString(16), '1a6b765d8cdf');
  16. assert.equal(new BN('1A6B765D8CDF', 16).toString(), '29048849665247');
  17. });
  18. it('should accept base-hex', function() {
  19. assert.equal(new BN('FF', 'hex').toString(), '255');
  20. });
  21. it('should accept base-16 with spaces', function() {
  22. var num = 'a89c e5af8724 c0a23e0e 0ff77500';
  23. assert.equal(new BN(num, 16).toString(16), num.replace(/ /g, ''));
  24. });
  25. it('should accept long base-16', function() {
  26. var num = '123456789abcdef123456789abcdef123456789abcdef';
  27. assert.equal(new BN(num, 16).toString(16), num);
  28. });
  29. it('should accept positive base-10', function() {
  30. assert.equal(new BN('10654321').toString(), '10654321');
  31. assert.equal(new BN('29048849665247').toString(16), '1a6b765d8cdf');
  32. });
  33. it('should accept negative base-10', function() {
  34. assert.equal(new BN('-29048849665247').toString(16), '-1a6b765d8cdf');
  35. });
  36. it('should accept long base-10', function() {
  37. var num = '10000000000000000';
  38. assert.equal(new BN(num).toString(10), num);
  39. });
  40. it('should accept base-2', function() {
  41. var base2 = '11111111111111111111111111111111111111111111111111111';
  42. assert.equal(new BN(base2, 2).toString(2), base2);
  43. });
  44. it('should accept base-36', function() {
  45. var base36 = 'zzZzzzZzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz';
  46. assert.equal(new BN(base36, 36).toString(36), base36.toLowerCase());
  47. });
  48. it('should not overflow limbs during base-10', function() {
  49. var num = '65820182292848241686198767302293' +
  50. '20890292528855852623664389292032';
  51. assert(new BN(num).words[0] < 0x4000000);
  52. });
  53. });
  54. describe('with Array input', function() {
  55. it('should import/export big endian', function() {
  56. assert.equal(new BN([ 1, 2, 3 ]).toString(16), '10203');
  57. assert.equal(new BN([ 1, 2, 3, 4 ]).toString(16), '1020304');
  58. assert.equal(new BN([ 1, 2, 3, 4, 5 ]).toString(16), '102030405');
  59. assert.equal(new BN([ 1, 2, 3, 4, 5, 6, 7, 8 ]).toString(16),
  60. '102030405060708');
  61. assert.equal(new BN([ 1, 2, 3, 4 ]).toArray().join(','), '1,2,3,4');
  62. assert.equal(new BN([ 1, 2, 3, 4, 5, 6, 7, 8 ]).toArray().join(','),
  63. '1,2,3,4,5,6,7,8');
  64. });
  65. it('should import little endian', function() {
  66. assert.equal(new BN([ 1, 2, 3 ], 10, 'le').toString(16), '30201');
  67. assert.equal(new BN([ 1, 2, 3, 4 ], 10, 'le').toString(16), '4030201');
  68. assert.equal(new BN([ 1, 2, 3, 4, 5 ], 10, 'le').toString(16),
  69. '504030201');
  70. assert.equal(new BN([ 1, 2, 3, 4, 5, 6, 7, 8 ], 'le').toString(16),
  71. '807060504030201');
  72. });
  73. it('should import big endian with implicit base', function() {
  74. assert.equal(new BN([ 1, 2, 3, 4, 5 ], 'le').toString(16), '504030201');
  75. });
  76. });
  77. describe('with BN input', function() {
  78. it('should clone BN', function() {
  79. var num = new BN(12345);
  80. assert.equal(new BN(num).toString(10), '12345');
  81. });
  82. });
  83. });