-
Notifications
You must be signed in to change notification settings - Fork 11.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
3 changed files
with
92 additions
and
52 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,9 @@ | ||
module.exports = function (error) { | ||
assert.isAbove(error.message.search('invalid opcode'), -1, 'Invalid opcode error must be returned'); | ||
export default async promise => { | ||
try { | ||
await promise; | ||
assert.fail('Expected invalid opcode not received'); | ||
} catch (error) { | ||
const invalidOpcodeReceived = error.message.search('invalid opcode') >= 0; | ||
assert(invalidOpcodeReceived, `Expected "invalid opcode", got ${error} instead`); | ||
} | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,60 +1,91 @@ | ||
import assertRevert from '../helpers/assertRevert'; | ||
const assertJump = require('../helpers/assertJump'); | ||
var SafeMathMock = artifacts.require('SafeMathMock'); | ||
import assertJump from '../helpers/assertJump'; | ||
const BigNumber = web3.BigNumber; | ||
const SafeMathMock = artifacts.require('SafeMathMock'); | ||
|
||
contract('SafeMath', function (accounts) { | ||
let safeMath; | ||
require('chai') | ||
.use(require('chai-bignumber')(BigNumber)) | ||
.should(); | ||
|
||
contract('SafeMath', () => { | ||
const MAX_UINT = new BigNumber('115792089237316195423570985008687907853269984665640564039457584007913129639935'); | ||
|
||
before(async function () { | ||
safeMath = await SafeMathMock.new(); | ||
this.safeMath = await SafeMathMock.new(); | ||
}); | ||
|
||
it('multiplies correctly', async function () { | ||
let a = 5678; | ||
let b = 1234; | ||
await safeMath.multiply(a, b); | ||
let result = await safeMath.result(); | ||
assert.equal(result, a * b); | ||
}); | ||
describe('add', function () { | ||
it('adds correctly', async function () { | ||
const a = new BigNumber(5678); | ||
const b = new BigNumber(1234); | ||
|
||
it('adds correctly', async function () { | ||
let a = 5678; | ||
let b = 1234; | ||
await safeMath.add(a, b); | ||
let result = await safeMath.result(); | ||
const result = await this.safeMath.add(a, b); | ||
result.should.be.bignumber.equal(a.plus(b)); | ||
}); | ||
|
||
assert.equal(result, a + b); | ||
it('throws an error on addition overflow', async function () { | ||
const a = MAX_UINT; | ||
const b = new BigNumber(1); | ||
|
||
await assertJump(this.safeMath.add(a, b)); | ||
}); | ||
}); | ||
|
||
it('subtracts correctly', async function () { | ||
let a = 5678; | ||
let b = 1234; | ||
await safeMath.subtract(a, b); | ||
let result = await safeMath.result(); | ||
describe('sub', function () { | ||
it('subtracts correctly', async function () { | ||
const a = new BigNumber(5678); | ||
const b = new BigNumber(1234); | ||
|
||
assert.equal(result, a - b); | ||
}); | ||
const result = await this.safeMath.sub(a, b); | ||
result.should.be.bignumber.equal(a.minus(b)); | ||
}); | ||
|
||
it('should throw an error if subtraction result would be negative', async function () { | ||
let a = 1234; | ||
let b = 5678; | ||
try { | ||
await safeMath.subtract(a, b); | ||
assert.fail('should have thrown before'); | ||
} catch (error) { | ||
assertJump(error); | ||
} | ||
it('throws an error if subtraction result would be negative', async function () { | ||
const a = new BigNumber(1234); | ||
const b = new BigNumber(5678); | ||
|
||
await assertJump(this.safeMath.sub(a, b)); | ||
}); | ||
}); | ||
|
||
it('should throw an error on addition overflow', async function () { | ||
let a = 115792089237316195423570985008687907853269984665640564039457584007913129639935; | ||
let b = 1; | ||
await assertRevert(safeMath.add(a, b)); | ||
describe('mul', function () { | ||
it('multiplies correctly', async function () { | ||
const a = new BigNumber(1234); | ||
const b = new BigNumber(5678); | ||
|
||
const result = await this.safeMath.mul(a, b); | ||
result.should.be.bignumber.equal(a.times(b)); | ||
}); | ||
|
||
it('handles a zero product correctly', async function () { | ||
const a = new BigNumber(0); | ||
const b = new BigNumber(5678); | ||
|
||
const result = await this.safeMath.mul(a, b); | ||
result.should.be.bignumber.equal(a.times(b)); | ||
}); | ||
|
||
it('throws an error on multiplication overflow', async function () { | ||
const a = MAX_UINT; | ||
const b = new BigNumber(2); | ||
|
||
await assertJump(this.safeMath.mul(a, b)); | ||
}); | ||
}); | ||
|
||
it('should throw an error on multiplication overflow', async function () { | ||
let a = 115792089237316195423570985008687907853269984665640564039457584007913129639933; | ||
let b = 2; | ||
await assertRevert(safeMath.multiply(a, b)); | ||
describe('div', function () { | ||
it('divides correctly', async function () { | ||
const a = new BigNumber(5678); | ||
const b = new BigNumber(5678); | ||
|
||
const result = await this.safeMath.div(a, b); | ||
result.should.be.bignumber.equal(a.div(b)); | ||
}); | ||
|
||
it('throws an error on zero division', async function () { | ||
const a = new BigNumber(5678); | ||
const b = new BigNumber(0); | ||
|
||
await assertJump(this.safeMath.div(a, b)); | ||
}); | ||
}); | ||
}); |