@0x/contracts-staking: Add _computePoolRewardsSplit() tests to MixinStakingPoolRewards unit tests.

This commit is contained in:
Lawrence Forman 2019-11-04 10:06:01 -05:00
parent 28a2e56003
commit cba72c811d
2 changed files with 80 additions and 0 deletions

View File

@ -116,6 +116,23 @@ contract TestMixinStakingPoolRewards is
return _syncPoolRewards(poolId, reward, membersStake); return _syncPoolRewards(poolId, reward, membersStake);
} }
// Expose `_computePoolRewardsSplit()` for testing.
function computePoolRewardsSplit(
uint32 operatorShare,
uint256 totalReward,
uint256 membersStake
)
external
pure
returns (uint256 operatorReward, uint256 membersReward)
{
return _computePoolRewardsSplit(
operatorShare,
totalReward,
membersStake
);
}
// Access `_delegatedStakeToPoolByOwner` // Access `_delegatedStakeToPoolByOwner`
function delegatedStakeToPoolByOwner(address member, bytes32 poolId) function delegatedStakeToPoolByOwner(address member, bytes32 poolId)
external external

View File

@ -417,5 +417,68 @@ blockchainTests.resets('MixinStakingPoolRewards unit tests', env => {
verifyEventsFromLogs(logs, [], Events.Transfer); verifyEventsFromLogs(logs, [], Events.Transfer);
}); });
}); });
describe('_computePoolRewardsSplit', () => {
it("gives all rewards to operator if members' stake is zero", async () => {
const operatorShare = getRandomPortion(constants.PPM_100_PERCENT);
const totalReward = getRandomInteger(1, 1e18);
const membersStake = constants.ZERO_AMOUNT;
const [operatorReward, membersReward] = await testContract.computePoolRewardsSplit.callAsync(
operatorShare,
totalReward,
membersStake,
);
expect(operatorReward).to.bignumber.eq(totalReward);
expect(membersReward).to.bignumber.eq(0);
});
it("gives all rewards to operator if members' stake is zero and operator share is zero", async () => {
const operatorShare = constants.ZERO_AMOUNT;
const totalReward = getRandomInteger(1, 1e18);
const membersStake = constants.ZERO_AMOUNT;
const [operatorReward, membersReward] = await testContract.computePoolRewardsSplit.callAsync(
operatorShare,
totalReward,
membersStake,
);
expect(operatorReward).to.bignumber.eq(totalReward);
expect(membersReward).to.bignumber.eq(0);
});
it('gives all rewards to operator if operator share is 100%', async () => {
const operatorShare = constants.PPM_100_PERCENT;
const totalReward = getRandomInteger(1, 1e18);
const membersStake = getRandomInteger(1, 1e18);
const [operatorReward, membersReward] = await testContract.computePoolRewardsSplit.callAsync(
operatorShare,
totalReward,
membersStake,
);
expect(operatorReward).to.bignumber.eq(totalReward);
expect(membersReward).to.bignumber.eq(0);
});
it('gives all rewards to members if operator share is 0%', async () => {
const operatorShare = constants.ZERO_AMOUNT;
const totalReward = getRandomInteger(1, 1e18);
const membersStake = getRandomInteger(1, 1e18);
const [operatorReward, membersReward] = await testContract.computePoolRewardsSplit.callAsync(
operatorShare,
totalReward,
membersStake,
);
expect(operatorReward).to.bignumber.eq(0);
expect(membersReward).to.bignumber.eq(totalReward);
});
it('splits rewards between operator and members based on operator share', async () => {
const operatorShare = getRandomPortion(constants.PPM_100_PERCENT);
const totalReward = getRandomInteger(1, 1e18);
const membersStake = getRandomInteger(1, 1e18);
const [operatorReward, membersReward] = await testContract.computePoolRewardsSplit.callAsync(
operatorShare,
totalReward,
membersStake,
);
expect(operatorReward).to.bignumber.eq(toOperatorPortion(operatorShare, totalReward));
expect(membersReward).to.bignumber.eq(toMembersPortion(operatorShare, totalReward));
});
});
}); });
// tslint:disable: max-file-line-count // tslint:disable: max-file-line-count