Add Modulo operation for getting the quotient (#915)
* Add Modulo operation for getting the quotient * Improved modulo tests and implementation. * Removed assertion.
This commit is contained in:
committed by
Francisco Giordano
parent
41e6b2e992
commit
9aa30e1960
@ -54,4 +54,13 @@ library SafeMath {
|
|||||||
|
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dev Divides two numbers and returns the remainder (unsigned integer modulo),
|
||||||
|
* reverts when dividing by zero.
|
||||||
|
*/
|
||||||
|
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
|
||||||
|
require(b != 0);
|
||||||
|
return a % b;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -21,4 +21,8 @@ contract SafeMathMock {
|
|||||||
function add(uint256 _a, uint256 _b) public pure returns (uint256) {
|
function add(uint256 _a, uint256 _b) public pure returns (uint256) {
|
||||||
return SafeMath.add(_a, _b);
|
return SafeMath.add(_a, _b);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function mod(uint256 a, uint256 b) public pure returns (uint256) {
|
||||||
|
return SafeMath.mod(a, b);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
const { assertRevert } = require('../helpers/assertRevert');
|
const { assertRevert } = require('../helpers/assertRevert');
|
||||||
|
|
||||||
const BigNumber = web3.BigNumber;
|
const BigNumber = web3.BigNumber;
|
||||||
const SafeMathMock = artifacts.require('SafeMathMock');
|
const SafeMathMock = artifacts.require('SafeMathMock');
|
||||||
|
|
||||||
@ -88,4 +89,43 @@ contract('SafeMath', () => {
|
|||||||
await assertRevert(this.safeMath.div(a, b));
|
await assertRevert(this.safeMath.div(a, b));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('mod', function () {
|
||||||
|
describe('modulos correctly', async function () {
|
||||||
|
it('when the dividend is smaller than the divisor', async function () {
|
||||||
|
const a = new BigNumber(284);
|
||||||
|
const b = new BigNumber(5678);
|
||||||
|
|
||||||
|
(await this.safeMath.mod(a, b)).should.be.bignumber.equal(a.mod(b));
|
||||||
|
});
|
||||||
|
|
||||||
|
it('when the dividend is equal to the divisor', async function () {
|
||||||
|
const a = new BigNumber(5678);
|
||||||
|
const b = new BigNumber(5678);
|
||||||
|
|
||||||
|
(await this.safeMath.mod(a, b)).should.be.bignumber.equal(a.mod(b));
|
||||||
|
});
|
||||||
|
|
||||||
|
it('when the dividend is larger than the divisor', async function () {
|
||||||
|
const a = new BigNumber(7000);
|
||||||
|
const b = new BigNumber(5678);
|
||||||
|
|
||||||
|
(await this.safeMath.mod(a, b)).should.be.bignumber.equal(a.mod(b));
|
||||||
|
});
|
||||||
|
|
||||||
|
it('when the dividend is a multiple of the divisor', async function () {
|
||||||
|
const a = new BigNumber(17034); // 17034 == 5678 * 3
|
||||||
|
const b = new BigNumber(5678);
|
||||||
|
|
||||||
|
(await this.safeMath.mod(a, b)).should.be.bignumber.equal(a.mod(b));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('reverts with a 0 divisor', async function () {
|
||||||
|
const a = new BigNumber(5678);
|
||||||
|
const b = new BigNumber(0);
|
||||||
|
|
||||||
|
await assertRevert(this.safeMath.mod(a, b));
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user