const EnumerableSet = artifacts.require('$EnumerableSet'); const { mapValues } = require('../../helpers/map-values'); const { shouldBehaveLikeSet } = require('./EnumerableSet.behavior'); const getMethods = (ms) => { return mapValues(ms, m => (self, ...args) => self.methods[m](0, ...args)); }; contract('EnumerableSet', function (accounts) { beforeEach(async function () { this.set = await EnumerableSet.new(); }); // Bytes32Set describe('EnumerableBytes32Set', function () { shouldBehaveLikeSet( [ '0xdeadbeef', '0x0123456789', '0x42424242' ].map(e => e.padEnd(66, '0')), getMethods({ add: '$add(uint256,bytes32)', remove: '$remove(uint256,bytes32)', contains: '$contains(uint256,bytes32)', length: '$length_EnumerableSet_Bytes32Set(uint256)', at: '$at_EnumerableSet_Bytes32Set(uint256,uint256)', values: '$values_EnumerableSet_Bytes32Set(uint256)', }), { addReturn: 'return$add_EnumerableSet_Bytes32Set_bytes32', removeReturn: 'return$remove_EnumerableSet_Bytes32Set_bytes32', }, ); }); // AddressSet describe('EnumerableAddressSet', function () { shouldBehaveLikeSet( accounts, getMethods({ add: '$add(uint256,address)', remove: '$remove(uint256,address)', contains: '$contains(uint256,address)', length: '$length_EnumerableSet_AddressSet(uint256)', at: '$at_EnumerableSet_AddressSet(uint256,uint256)', values: '$values_EnumerableSet_AddressSet(uint256)', }), { addReturn: 'return$add_EnumerableSet_AddressSet_address', removeReturn: 'return$remove_EnumerableSet_AddressSet_address', }, ); }); // UintSet describe('EnumerableUintSet', function () { shouldBehaveLikeSet( [ 1234, 5678, 9101112 ].map(e => web3.utils.toBN(e)), getMethods({ add: '$add(uint256,uint256)', remove: '$remove(uint256,uint256)', contains: '$contains(uint256,uint256)', length: '$length_EnumerableSet_UintSet(uint256)', at: '$at_EnumerableSet_UintSet(uint256,uint256)', values: '$values_EnumerableSet_UintSet(uint256)', }), { addReturn: 'return$add_EnumerableSet_UintSet_uint256', removeReturn: 'return$remove_EnumerableSet_UintSet_uint256', }, ); }); });