EnumerableMap.test.js 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  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. contract('EnumerableMap', function (accounts) {
  14. const [accountA, accountB, accountC] = accounts;
  15. const keyA = new BN('7891');
  16. const keyB = new BN('451');
  17. const keyC = new BN('9592328');
  18. const bytesA = '0xdeadbeef'.padEnd(66, '0');
  19. const bytesB = '0x0123456789'.padEnd(66, '0');
  20. const bytesC = '0x42424242'.padEnd(66, '0');
  21. beforeEach(async function () {
  22. this.map = await EnumerableMap.new();
  23. });
  24. // AddressToUintMap
  25. describe('AddressToUintMap', function () {
  26. shouldBehaveLikeMap(
  27. [accountA, accountB, accountC],
  28. [keyA, keyB, keyC],
  29. new BN('0'),
  30. getMethods({
  31. set: '$set(uint256,address,uint256)',
  32. get: '$get(uint256,address)',
  33. getWithMessage: '$get(uint256,address,string)',
  34. tryGet: '$tryGet(uint256,address)',
  35. remove: '$remove(uint256,address)',
  36. length: '$length_EnumerableMap_AddressToUintMap(uint256)',
  37. at: '$at_EnumerableMap_AddressToUintMap(uint256,uint256)',
  38. contains: '$contains(uint256,address)',
  39. keys: '$keys_EnumerableMap_AddressToUintMap(uint256)',
  40. }),
  41. {
  42. setReturn: 'return$set_EnumerableMap_AddressToUintMap_address_uint256',
  43. removeReturn: 'return$remove_EnumerableMap_AddressToUintMap_address',
  44. },
  45. );
  46. });
  47. // UintToAddressMap
  48. describe('UintToAddressMap', function () {
  49. shouldBehaveLikeMap(
  50. [keyA, keyB, keyC],
  51. [accountA, accountB, accountC],
  52. constants.ZERO_ADDRESS,
  53. getMethods({
  54. set: '$set(uint256,uint256,address)',
  55. get: '$get_EnumerableMap_UintToAddressMap(uint256,uint256)',
  56. getWithMessage: '$get_EnumerableMap_UintToAddressMap(uint256,uint256,string)',
  57. tryGet: '$tryGet_EnumerableMap_UintToAddressMap(uint256,uint256)',
  58. remove: '$remove_EnumerableMap_UintToAddressMap(uint256,uint256)',
  59. length: '$length_EnumerableMap_UintToAddressMap(uint256)',
  60. at: '$at_EnumerableMap_UintToAddressMap(uint256,uint256)',
  61. contains: '$contains_EnumerableMap_UintToAddressMap(uint256,uint256)',
  62. keys: '$keys_EnumerableMap_UintToAddressMap(uint256)',
  63. }),
  64. {
  65. setReturn: 'return$set_EnumerableMap_UintToAddressMap_uint256_address',
  66. removeReturn: 'return$remove_EnumerableMap_UintToAddressMap_uint256',
  67. },
  68. );
  69. });
  70. // Bytes32ToBytes32Map
  71. describe('Bytes32ToBytes32Map', function () {
  72. shouldBehaveLikeMap(
  73. [keyA, keyB, keyC].map(k => '0x' + k.toString(16).padEnd(64, '0')),
  74. [bytesA, bytesB, bytesC],
  75. constants.ZERO_BYTES32,
  76. getMethods({
  77. set: '$set(uint256,bytes32,bytes32)',
  78. get: '$get_EnumerableMap_Bytes32ToBytes32Map(uint256,bytes32)',
  79. getWithMessage: '$get_EnumerableMap_Bytes32ToBytes32Map(uint256,bytes32,string)',
  80. tryGet: '$tryGet_EnumerableMap_Bytes32ToBytes32Map(uint256,bytes32)',
  81. remove: '$remove_EnumerableMap_Bytes32ToBytes32Map(uint256,bytes32)',
  82. length: '$length_EnumerableMap_Bytes32ToBytes32Map(uint256)',
  83. at: '$at_EnumerableMap_Bytes32ToBytes32Map(uint256,uint256)',
  84. contains: '$contains_EnumerableMap_Bytes32ToBytes32Map(uint256,bytes32)',
  85. keys: '$keys_EnumerableMap_Bytes32ToBytes32Map(uint256)',
  86. }),
  87. {
  88. setReturn: 'return$set_EnumerableMap_Bytes32ToBytes32Map_bytes32_bytes32',
  89. removeReturn: 'return$remove_EnumerableMap_Bytes32ToBytes32Map_bytes32',
  90. },
  91. );
  92. });
  93. // UintToUintMap
  94. describe('UintToUintMap', function () {
  95. shouldBehaveLikeMap(
  96. [keyA, keyB, keyC],
  97. [keyA, keyB, keyC].map(k => k.add(new BN('1332'))),
  98. new BN('0'),
  99. getMethods({
  100. set: '$set(uint256,uint256,uint256)',
  101. get: '$get_EnumerableMap_UintToUintMap(uint256,uint256)',
  102. getWithMessage: '$get_EnumerableMap_UintToUintMap(uint256,uint256,string)',
  103. tryGet: '$tryGet_EnumerableMap_UintToUintMap(uint256,uint256)',
  104. remove: '$remove_EnumerableMap_UintToUintMap(uint256,uint256)',
  105. length: '$length_EnumerableMap_UintToUintMap(uint256)',
  106. at: '$at_EnumerableMap_UintToUintMap(uint256,uint256)',
  107. contains: '$contains_EnumerableMap_UintToUintMap(uint256,uint256)',
  108. keys: '$keys_EnumerableMap_UintToUintMap(uint256)',
  109. }),
  110. {
  111. setReturn: 'return$set_EnumerableMap_UintToUintMap_uint256_uint256',
  112. removeReturn: 'return$remove_EnumerableMap_UintToUintMap_uint256',
  113. },
  114. );
  115. });
  116. // Bytes32ToUintMap
  117. describe('Bytes32ToUintMap', function () {
  118. shouldBehaveLikeMap(
  119. [bytesA, bytesB, bytesC],
  120. [keyA, keyB, keyC],
  121. new BN('0'),
  122. getMethods({
  123. set: '$set(uint256,bytes32,uint256)',
  124. get: '$get_EnumerableMap_Bytes32ToUintMap(uint256,bytes32)',
  125. getWithMessage: '$get_EnumerableMap_Bytes32ToUintMap(uint256,bytes32,string)',
  126. tryGet: '$tryGet_EnumerableMap_Bytes32ToUintMap(uint256,bytes32)',
  127. remove: '$remove_EnumerableMap_Bytes32ToUintMap(uint256,bytes32)',
  128. length: '$length_EnumerableMap_Bytes32ToUintMap(uint256)',
  129. at: '$at_EnumerableMap_Bytes32ToUintMap(uint256,uint256)',
  130. contains: '$contains_EnumerableMap_Bytes32ToUintMap(uint256,bytes32)',
  131. keys: '$keys_EnumerableMap_Bytes32ToUintMap(uint256)',
  132. }),
  133. {
  134. setReturn: 'return$set_EnumerableMap_Bytes32ToUintMap_bytes32_uint256',
  135. removeReturn: 'return$remove_EnumerableMap_Bytes32ToUintMap_bytes32',
  136. },
  137. );
  138. });
  139. });