dnd-exchange-rate
Version:
dungeons and dragons 5e coin conversion calculator
182 lines (161 loc) • 4.33 kB
JavaScript
var assert = require('assert');
var config = require("config");
var ER = require('../src/exchange-rate.js');
describe("Undefined coin", function() {
var zeroCoins = {
cp: 0,
sp: 0,
ep: 0,
gp: 0,
pp: 0
}
it("copper", function() {
assert.deepEqual(ER.optimalExchange({cp: undefined}), zeroCoins);
});
it("silver", function() {
assert.deepEqual(ER.optimalExchange({sp: "notanum"}), zeroCoins);
});
it("electrum", function() {
assert.deepEqual(ER.optimalExchange({ep: NaN}), zeroCoins);
});
it("gold", function() {
assert.deepEqual(ER.optimalExchange({gp: []}), zeroCoins);
});
it("platinum", function() {
assert.deepEqual(ER.optimalExchange({pp: null}), zeroCoins);
});
});
describe("Optimally exchange", function() {
describe("cp", function() {
it("to all coin types", function() {
var results = ER.optimalExchange({cp: 1187});
assert.deepEqual(results, {
cp: 7,
sp: 3,
ep: 1,
gp: 1,
pp: 1
});
});
});
describe("sp", function() {
it("to all coin types", function() {
var results = ER.optimalExchange({sp: 126});
assert.deepEqual(results, {
cp: 0,
sp: 1,
ep: 1,
gp: 2,
pp: 1
});
});
});
describe("ep", function() {
it("to all coin types", function() {
var results = ER.optimalExchange({ep: 107});
assert.deepEqual(results, {
cp: 0,
sp: 0,
ep: 1,
gp: 3,
pp: 5
});
});
it("to only cp", function() {
var results = ER.optimalExchange({ep: 3}, ["cp"]);
assert.deepEqual(results, {
cp: 150,
sp: 0,
ep: 0,
gp: 0,
pp: 0
});
});
});
describe("gp", function() {
it("to all coin types", function() {
var results = ER.optimalExchange({gp: 397});
assert.deepEqual(results, {
cp: 0,
sp: 0,
ep: 0,
gp: 7,
pp: 39
});
});
});
describe("pp", function() {
it("to all coin types", function() {
var results = ER.optimalExchange({pp: 621});
assert.deepEqual(results, {
cp: 0,
sp: 0,
ep: 0,
gp: 0,
pp: 621
});
});
it("to only gp", function() {
var results = ER.optimalExchange({pp: 25}, ["gp"]);
assert.deepEqual(results, {
cp: 0,
sp: 0,
ep: 0,
gp: 250,
pp: 0
});
});
});
});
describe("Team split", function() {
it("coins amongst a party of 1", function() {
var results = ER.teamSplit(1, {gp: 10, sp: 2, cp: 7});
assert.equal(results.length, 1);
assert.deepEqual(results[0], {
cp: 7,
sp: 2,
ep: 0,
gp: 0,
pp: 1
});
});
it("coins that do not evenly distribute", function() {
var results = ER.teamSplit(4, {cp: 3});
assert.equal(results.length, 4);
assert.equal(1, results[0].cp);
assert.equal(1, results[1].cp);
assert.equal(1, results[2].cp);
assert.equal(0, results[3].cp, "The last player should not receive any coins");
});
it("coins that evenly and unevenly distribute", function() {
var results = ER.teamSplit(4, {gp: 3, sp: 11, cp: 3});
assert.equal(results.length, 4);
});
it("coins that evenly distribute", function() {
var results = ER.teamSplit(4, {gp: 26});
assert.equal(results.length, 4);
for (var i=0; i<results.length; i++) {
assert.equal(6, results[i].gp);
assert.equal(1, results[i].ep);
}
});
it("where there are not enough coins to distribute to the party", function() {
var results = ER.teamSplit(4, {cp: 2});
assert.equal(results.length, 4); //2 players get 1cp, 2 players get 0 coins
for (var i=0; i<results.length; i++) {
if (results[i].cp > 0) {
assert.equal(1, results[i].cp);
assert.equal(0, results[i].sp);
assert.equal(0, results[i].ep);
assert.equal(0, results[i].gp);
assert.equal(0, results[i].pp);
} else {
assert.equal(0, results[i].cp);
assert.equal(0, results[i].sp);
assert.equal(0, results[i].ep);
assert.equal(0, results[i].gp);
assert.equal(0, results[i].pp);
}
}
});
});