primitives.spec.ts 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. import expect from 'expect';
  2. import { createConnection, deploy, aliceKeypair, daveKeypair, } from './index';
  3. import { ContractPromise } from '@polkadot/api-contract';
  4. import { ApiPromise } from '@polkadot/api';
  5. describe('Deploy primitives contract and test', () => {
  6. let conn: ApiPromise;
  7. before(async function () {
  8. conn = await createConnection();
  9. });
  10. after(async function () {
  11. await conn.disconnect();
  12. });
  13. it('primitives', async function () {
  14. this.timeout(100000);
  15. const alice = aliceKeypair();
  16. const dave = daveKeypair();
  17. let deployed_contract = await deploy(conn, alice, 'primitives.contract', BigInt(0));
  18. let contract = new ContractPromise(conn, deployed_contract.abi, deployed_contract.address);
  19. // TEST Basic enums
  20. // in ethereum, an enum is described as an uint8 so can't use the enum
  21. // names programmatically. 0 = add, 1 = sub, 2 = mul, 3 = div, 4 = mod, 5 = pow, 6 = shl, 7 = shr
  22. let res = await contract.query.isMul(alice.address, {}, 2);
  23. expect(res.output?.toJSON()).toEqual(true);
  24. res = await contract.query.returnDiv(alice.address, {});
  25. expect(res.output?.toJSON()).toEqual("div");
  26. // TEST uint and int types, and arithmetic/bitwise ops
  27. res = await contract.query.opI64(alice.address, {}, 0, 1000, 4100);
  28. expect(res.output?.toJSON()).toEqual(5100);
  29. res = await contract.query.opI64(alice.address, {}, 1, 1000, 4100);
  30. expect(res.output?.toJSON()).toEqual(-3100);
  31. res = await contract.query.opI64(alice.address, {}, 2, 1000, 4100);
  32. expect(res.output?.toJSON()).toEqual(4100000);
  33. res = await contract.query.opI64(alice.address, {}, 3, 1000, 10);
  34. expect(res.output?.toJSON()).toEqual(100);
  35. res = await contract.query.opI64(alice.address, {}, 4, 1000, 99);
  36. expect(res.output?.toJSON()).toEqual(10);
  37. res = await contract.query.opI64(alice.address, {}, 6, - 1000, 8);
  38. expect(res.output?.toJSON()).toEqual(-256000);
  39. res = await contract.query.opI64(alice.address, {}, 7, - 1000, 8);
  40. expect(res.output?.toJSON()).toEqual(-4);
  41. res = await contract.query.opU64(alice.address, {}, 0, 1000, 4100);
  42. expect(res.output?.toJSON()).toEqual(5100);
  43. res = await contract.query.opU64(alice.address, {}, 1, 1000, 4100);
  44. expect(res.output?.toString()).toEqual("18446744073709548516"); // (2^64)-18446744073709548516 = 3100
  45. res = await contract.query.opU64(alice.address, {}, 2, 123456789, 123456789);
  46. expect(res.output?.toString()).toEqual("15241578750190521");
  47. res = await contract.query.opU64(alice.address, {}, 3, 123456789, 100);
  48. expect(res.output?.toJSON()).toEqual(1234567);
  49. res = await contract.query.opU64(alice.address, {}, 4, 123456789, 100);
  50. expect(res.output?.toJSON()).toEqual(89);
  51. res = await contract.query.opU64(alice.address, {}, 5, 3, 7);
  52. expect(res.output?.toJSON()).toEqual(2187);
  53. res = await contract.query.opI64(alice.address, {}, 6, 1000, 8);
  54. expect(res.output?.toJSON()).toEqual(256000);
  55. res = await contract.query.opI64(alice.address, {}, 7, 1000, 8);
  56. expect(res.output?.toJSON()).toEqual(3);
  57. // // now for 256 bit operations
  58. res = await contract.query.opI256(alice.address, {}, 0, 1000, 4100);
  59. expect(res.output?.toJSON()).toEqual(5100);
  60. res = await contract.query.opI256(alice.address, {}, 1, 1000, 4100);
  61. expect(res.output?.toJSON()).toEqual(-3100);
  62. res = await contract.query.opI256(alice.address, {}, 2, 1000, 4100);
  63. expect(res.output?.toJSON()).toEqual(4100000);
  64. res = await contract.query.opI256(alice.address, {}, 3, 1000, 10);
  65. expect(res.output?.toJSON()).toEqual(100);
  66. res = await contract.query.opI256(alice.address, {}, 4, 1000, 99);
  67. expect(res.output?.toJSON()).toEqual(10);
  68. res = await contract.query.opI256(alice.address, {}, 6, - 10000000000000, 8);
  69. expect(res.output?.toJSON()).toEqual(-2560000000000000);
  70. res = await contract.query.opI256(alice.address, {}, 7, - 10000000000000, 8);
  71. expect(res.output?.toJSON()).toEqual(-39062500000);
  72. res = await contract.query.opU256(alice.address, {}, 0, 1000, 4100);
  73. expect(res.output?.toJSON()).toEqual(5100);
  74. res = await contract.query.opU256(alice.address, {}, 1, 1000, 4100);
  75. expect(res.output?.toString()).toEqual('115792089237316195423570985008687907853269984665640564039457584007913129636836'); // (2^64)-18446744073709548516 = 3100
  76. res = await contract.query.opU256(alice.address, {}, 2, 123456789, 123456789);
  77. expect(res.output?.toString()).toEqual('15241578750190521');
  78. res = await contract.query.opU256(alice.address, {}, 3, 123456789, 100);
  79. expect(res.output?.toJSON()).toEqual(1234567);
  80. res = await contract.query.opU256(alice.address, {}, 4, 123456789, 100);
  81. expect(res.output?.toJSON()).toEqual(89);
  82. res = await contract.query.opU256(alice.address, {}, 5, 123456789, 9);
  83. expect(res.output?.toString()).toEqual('6662462759719942007440037531362779472290810125440036903063319585255179509');
  84. res = await contract.query.opI256(alice.address, {}, 6, 10000000000000, 8);
  85. expect(res.output?.toJSON()).toEqual(2560000000000000);
  86. res = await contract.query.opI256(alice.address, {}, 7, 10000000000000, 8);
  87. expect(res.output?.toJSON()).toEqual(39062500000);
  88. // TEST bytesN
  89. res = await contract.query.returnU86(alice.address, {},);
  90. expect(res.output?.toJSON()).toEqual('0x414243444546');
  91. // TEST bytes5
  92. res = await contract.query.opU85Shift(alice.address, {}, 6, '0xdeadcafe59', 8);
  93. expect(res.output?.toJSON()).toEqual('0xadcafe5900');
  94. res = await contract.query.opU85Shift(alice.address, {}, 7, '0xdeadcafe59', 8);
  95. expect(res.output?.toJSON()).toEqual('0x00deadcafe');
  96. res = await contract.query.opU85(alice.address, {}, 8, '0xdeadcafe59', '0x0000000006');
  97. expect(res.output?.toJSON()).toEqual('0xdeadcafe5f');
  98. res = await contract.query.opU85(alice.address, {}, 9, '0xdeadcafe59', '0x00000000ff');
  99. expect(res.output?.toJSON()).toEqual('0x0000000059');
  100. res = await contract.query.opU85(alice.address, {}, 10, '0xdeadcafe59', '0x00000000ff');
  101. expect(res.output?.toJSON()).toEqual('0xdeadcafea6');
  102. // TEST bytes14
  103. res = await contract.query.opU814Shift(alice.address, {}, 6, '0xdeadcafe123456789abcdefbeef7', 9);
  104. expect(res.output?.toJSON()).toEqual('0x5b95fc2468acf13579bdf7ddee00');
  105. res = await contract.query.opU814Shift(alice.address, {}, 7, '0xdeadcafe123456789abcdefbeef7', 9);
  106. expect(res.output?.toJSON()).toEqual('0x006f56e57f091a2b3c4d5e6f7df7');
  107. res = await contract.query.opU814(alice.address, {}, 8, '0xdeadcafe123456789abcdefbeef7', '0x0000060000000000000000000000');
  108. expect(res.output?.toJSON()).toEqual('0xdeadcefe123456789abcdefbeef7');
  109. res = await contract.query.opU814(alice.address, {}, 9, '0xdeadcafe123456789abcdefbeef7', '0x000000000000000000ff00000000');
  110. expect(res.output?.toJSON()).toEqual('0x000000000000000000bc00000000');
  111. res = await contract.query.opU814(alice.address, {}, 10, '0xdeadcafe123456789abcdefbeef7', '0xff00000000000000000000000000');
  112. expect(res.output?.toJSON()).toEqual('0x21adcafe123456789abcdefbeef7');
  113. // TEST address type.
  114. const default_account = '5GBWmgdFAMqm8ZgAHGobqDqX6tjLxJhv53ygjNtaaAn3sjeZ';
  115. res = await contract.query.addressPassthrough(alice.address, {}, default_account);
  116. expect(res.output?.toJSON()).toEqual(default_account);
  117. res = await contract.query.addressPassthrough(alice.address, {}, dave.address);
  118. expect(res.output?.toJSON()).toEqual(dave.address);
  119. res = await contract.query.addressPassthrough(alice.address, {}, alice.address);
  120. expect(res.output?.toJSON()).toEqual(alice.address);
  121. });
  122. });