EnumerableMap.test.js 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. const { BN, constants } = require('@openzeppelin/test-helpers');
  2. const { mapValues } = require('../../helpers/map-values');
  3. const EnumerableMap = artifacts.require('$EnumerableMap');
  4. const { shouldBehaveLikeMap } = require('./EnumerableMap.behavior');
  5. const getMethods = ms => {
  6. return mapValues(
  7. ms,
  8. m =>
  9. (self, ...args) =>
  10. self.methods[m](0, ...args),
  11. );
  12. };
  13. // Get the name of the library. In the transpiled code it will be EnumerableMapUpgradeable.
  14. const library = EnumerableMap._json.contractName.replace(/^\$/, '');
  15. contract('EnumerableMap', function (accounts) {
  16. const [accountA, accountB, accountC] = accounts;
  17. const keyA = new BN('7891');
  18. const keyB = new BN('451');
  19. const keyC = new BN('9592328');
  20. const bytesA = '0xdeadbeef'.padEnd(66, '0');
  21. const bytesB = '0x0123456789'.padEnd(66, '0');
  22. const bytesC = '0x42424242'.padEnd(66, '0');
  23. beforeEach(async function () {
  24. this.map = await EnumerableMap.new();
  25. });
  26. // AddressToUintMap
  27. describe('AddressToUintMap', function () {
  28. shouldBehaveLikeMap(
  29. [accountA, accountB, accountC],
  30. [keyA, keyB, keyC],
  31. new BN('0'),
  32. getMethods({
  33. set: '$set(uint256,address,uint256)',
  34. get: '$get(uint256,address)',
  35. getWithMessage: '$get(uint256,address,string)',
  36. tryGet: '$tryGet(uint256,address)',
  37. remove: '$remove(uint256,address)',
  38. length: `$length_${library}_AddressToUintMap(uint256)`,
  39. at: `$at_${library}_AddressToUintMap(uint256,uint256)`,
  40. contains: '$contains(uint256,address)',
  41. keys: `$keys_${library}_AddressToUintMap(uint256)`,
  42. }),
  43. {
  44. setReturn: `return$set_${library}_AddressToUintMap_address_uint256`,
  45. removeReturn: `return$remove_${library}_AddressToUintMap_address`,
  46. },
  47. );
  48. });
  49. // UintToAddressMap
  50. describe('UintToAddressMap', function () {
  51. shouldBehaveLikeMap(
  52. [keyA, keyB, keyC],
  53. [accountA, accountB, accountC],
  54. constants.ZERO_ADDRESS,
  55. getMethods({
  56. set: '$set(uint256,uint256,address)',
  57. get: `$get_${library}_UintToAddressMap(uint256,uint256)`,
  58. getWithMessage: `$get_${library}_UintToAddressMap(uint256,uint256,string)`,
  59. tryGet: `$tryGet_${library}_UintToAddressMap(uint256,uint256)`,
  60. remove: `$remove_${library}_UintToAddressMap(uint256,uint256)`,
  61. length: `$length_${library}_UintToAddressMap(uint256)`,
  62. at: `$at_${library}_UintToAddressMap(uint256,uint256)`,
  63. contains: `$contains_${library}_UintToAddressMap(uint256,uint256)`,
  64. keys: `$keys_${library}_UintToAddressMap(uint256)`,
  65. }),
  66. {
  67. setReturn: `return$set_${library}_UintToAddressMap_uint256_address`,
  68. removeReturn: `return$remove_${library}_UintToAddressMap_uint256`,
  69. },
  70. );
  71. });
  72. // Bytes32ToBytes32Map
  73. describe('Bytes32ToBytes32Map', function () {
  74. shouldBehaveLikeMap(
  75. [keyA, keyB, keyC].map(k => '0x' + k.toString(16).padEnd(64, '0')),
  76. [bytesA, bytesB, bytesC],
  77. constants.ZERO_BYTES32,
  78. getMethods({
  79. set: '$set(uint256,bytes32,bytes32)',
  80. get: `$get_${library}_Bytes32ToBytes32Map(uint256,bytes32)`,
  81. getWithMessage: `$get_${library}_Bytes32ToBytes32Map(uint256,bytes32,string)`,
  82. tryGet: `$tryGet_${library}_Bytes32ToBytes32Map(uint256,bytes32)`,
  83. remove: `$remove_${library}_Bytes32ToBytes32Map(uint256,bytes32)`,
  84. length: `$length_${library}_Bytes32ToBytes32Map(uint256)`,
  85. at: `$at_${library}_Bytes32ToBytes32Map(uint256,uint256)`,
  86. contains: `$contains_${library}_Bytes32ToBytes32Map(uint256,bytes32)`,
  87. keys: `$keys_${library}_Bytes32ToBytes32Map(uint256)`,
  88. }),
  89. {
  90. setReturn: `return$set_${library}_Bytes32ToBytes32Map_bytes32_bytes32`,
  91. removeReturn: `return$remove_${library}_Bytes32ToBytes32Map_bytes32`,
  92. },
  93. );
  94. });
  95. // UintToUintMap
  96. describe('UintToUintMap', function () {
  97. shouldBehaveLikeMap(
  98. [keyA, keyB, keyC],
  99. [keyA, keyB, keyC].map(k => k.add(new BN('1332'))),
  100. new BN('0'),
  101. getMethods({
  102. set: '$set(uint256,uint256,uint256)',
  103. get: `$get_${library}_UintToUintMap(uint256,uint256)`,
  104. getWithMessage: `$get_${library}_UintToUintMap(uint256,uint256,string)`,
  105. tryGet: `$tryGet_${library}_UintToUintMap(uint256,uint256)`,
  106. remove: `$remove_${library}_UintToUintMap(uint256,uint256)`,
  107. length: `$length_${library}_UintToUintMap(uint256)`,
  108. at: `$at_${library}_UintToUintMap(uint256,uint256)`,
  109. contains: `$contains_${library}_UintToUintMap(uint256,uint256)`,
  110. keys: `$keys_${library}_UintToUintMap(uint256)`,
  111. }),
  112. {
  113. setReturn: `return$set_${library}_UintToUintMap_uint256_uint256`,
  114. removeReturn: `return$remove_${library}_UintToUintMap_uint256`,
  115. },
  116. );
  117. });
  118. // Bytes32ToUintMap
  119. describe('Bytes32ToUintMap', function () {
  120. shouldBehaveLikeMap(
  121. [bytesA, bytesB, bytesC],
  122. [keyA, keyB, keyC],
  123. new BN('0'),
  124. getMethods({
  125. set: '$set(uint256,bytes32,uint256)',
  126. get: `$get_${library}_Bytes32ToUintMap(uint256,bytes32)`,
  127. getWithMessage: `$get_${library}_Bytes32ToUintMap(uint256,bytes32,string)`,
  128. tryGet: `$tryGet_${library}_Bytes32ToUintMap(uint256,bytes32)`,
  129. remove: `$remove_${library}_Bytes32ToUintMap(uint256,bytes32)`,
  130. length: `$length_${library}_Bytes32ToUintMap(uint256)`,
  131. at: `$at_${library}_Bytes32ToUintMap(uint256,uint256)`,
  132. contains: `$contains_${library}_Bytes32ToUintMap(uint256,bytes32)`,
  133. keys: `$keys_${library}_Bytes32ToUintMap(uint256)`,
  134. }),
  135. {
  136. setReturn: `return$set_${library}_Bytes32ToUintMap_bytes32_uint256`,
  137. removeReturn: `return$remove_${library}_Bytes32ToUintMap_bytes32`,
  138. },
  139. );
  140. });
  141. });