|
@@ -0,0 +1,97 @@ |
|
|
|
|
|
import { Asphodice } from "../dice"; |
|
|
|
|
|
import { expect } from 'chai'; |
|
|
|
|
|
import 'mocha'; |
|
|
|
|
|
|
|
|
|
|
|
let asphodice = new Asphodice; |
|
|
|
|
|
|
|
|
|
|
|
const testCandidates = [ |
|
|
|
|
|
{ dice: [ 6, 6, 6 ], aboveCutOff: true, belowCutOff: false, |
|
|
|
|
|
reroll: false, cancelled: [6,6,6] }, |
|
|
|
|
|
{ dice: [ 2, 2, 2 ], aboveCutOff: false, belowCutOff: true, |
|
|
|
|
|
reroll: false, cacncelled: [2,2,2] }, |
|
|
|
|
|
{ dice: [ 1 ], aboveCutOff: false, belowCutOff: true, |
|
|
|
|
|
reroll: true, cacncelled: [1] }, |
|
|
|
|
|
]; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
describe("allAboveCutOff() says are all above cutoff correctly", function() { |
|
|
|
|
|
const tests = [ |
|
|
|
|
|
{ dice: [ 6, 6, 6 ], expected: true }, |
|
|
|
|
|
{ dice: [ 2, 2, 2 ], expected: false }, |
|
|
|
|
|
{ dice: [ 1 ], expected: false }, |
|
|
|
|
|
{ dice: [ 10 ], expected: true }, |
|
|
|
|
|
{ dice: [ 6, 10, 6, 9 ], expected: true} |
|
|
|
|
|
]; |
|
|
|
|
|
|
|
|
|
|
|
tests.forEach(({dice, expected}) => { |
|
|
|
|
|
it(`correctly determines ${dice} are above cutoff`, function () { |
|
|
|
|
|
const result = asphodice.allAboveCutOff(dice); |
|
|
|
|
|
expect(result).to.equal(expected); |
|
|
|
|
|
}); |
|
|
|
|
|
}); |
|
|
|
|
|
testCandidates.forEach( ({dice, aboveCutOff}) => { |
|
|
|
|
|
it(`allAboveCutOff() says ${dice} → ${aboveCutOff}`, function() { |
|
|
|
|
|
const result = asphodice.allAboveCutOff(dice); |
|
|
|
|
|
expect(result).to.equal(aboveCutOff); |
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
}); |
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
describe("Are all below cutoff?", function() { |
|
|
|
|
|
const tests = [ |
|
|
|
|
|
{ dice: [ 6, 6, 6 ], expected: false }, |
|
|
|
|
|
{ dice: [ 2, 2, 2 ], expected: true }, |
|
|
|
|
|
{ dice: [ 1 ], expected: true }, |
|
|
|
|
|
{ dice: [ 10 ], expected: false }, |
|
|
|
|
|
{ dice: [ 6, 10, 6, 9 ], expected: false }, |
|
|
|
|
|
{ dice: [ 6, 1, 6, 9 ], expected: false } |
|
|
|
|
|
]; |
|
|
|
|
|
|
|
|
|
|
|
tests.forEach(({dice, expected}) => { |
|
|
|
|
|
it(`correctly determines ${dice} are above cutoff`, function () { |
|
|
|
|
|
const result = asphodice.allBelowCutOff(dice); |
|
|
|
|
|
expect(result).to.equal(expected); |
|
|
|
|
|
}); |
|
|
|
|
|
}); |
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
// TODO: single dice behaviour |
|
|
|
|
|
describe("Does it need a re-roll?", function() { |
|
|
|
|
|
const tests = [ |
|
|
|
|
|
{ dice: [ 6, 6, 6 ], expected: false }, |
|
|
|
|
|
{ dice: [ 2, 2, 2 ], expected: false }, |
|
|
|
|
|
{ dice: [ 6, 10, 6, 9 ], expected: false }, |
|
|
|
|
|
{ dice: [ 6, 1, 6, 9 ], expected: true }, |
|
|
|
|
|
{ dice: [ 10, 1, 2], expected: false }, |
|
|
|
|
|
{ dice: [ 10, 10, 1, 1, 1, 6], expected: true }, |
|
|
|
|
|
{ dice: [ 10, 10, 1, 1, 1, 2], expected: false }, |
|
|
|
|
|
]; |
|
|
|
|
|
|
|
|
|
|
|
tests.forEach(({dice, expected}) => { |
|
|
|
|
|
it(`correctly determines ${dice} needs a re-roll`, function () { |
|
|
|
|
|
const result = asphodice.rerollNeeded(dice); |
|
|
|
|
|
expect(result).to.equal(expected); |
|
|
|
|
|
}); |
|
|
|
|
|
}); |
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
describe("cancelRerollDice() filters correctly", function() { |
|
|
|
|
|
const tests = [ |
|
|
|
|
|
{ dice: [ 6, 6, 6 ], out: [6,6,6] }, |
|
|
|
|
|
{ dice: [ 2, 2, 2 ], out: [2,2,2] }, |
|
|
|
|
|
{ dice: [ 6, 10, 6, 9 ], out: [6, 10, 6, 9] }, |
|
|
|
|
|
{ dice: [ 6, 1, 6, 9 ], out: [ 6, 1, 6, 9 ] }, |
|
|
|
|
|
{ dice: [ 10, 1, 2], out: [2] }, |
|
|
|
|
|
{ dice: [ 10, 10, 1, 1, 1, 6], out: [1,6] }, |
|
|
|
|
|
{ dice: [ 10, 10, 1, 1, 1, 2], out: [1,2] }, |
|
|
|
|
|
]; |
|
|
|
|
|
|
|
|
|
|
|
tests.forEach(({dice, out}) => { |
|
|
|
|
|
it(`correctly filters ${dice} to ${out}`, function () { |
|
|
|
|
|
const result = asphodice.cancelRerollDice(dice); |
|
|
|
|
|
expect(result.sort()).to.deep.equal(out.sort()); |
|
|
|
|
|
}); |
|
|
|
|
|
}); |
|
|
|
|
|
}); |