var Change = require('./change'); describe('Change', function () { it('change for 1 cent', function () { var change = new Change(); var result = change.calculate([1, 5, 10, 25], 1); expect(result).toEqual([1]); }); xit('return a single coin', function () { var change = new Change(); var result = change.calculate([1, 5, 10, 25, 100], 25); expect(result).toEqual([25]); }); xit('multiple coins coin', function () { var change = new Change(); var result = change.calculate([1, 5, 10, 25, 100], 15); expect(result).toEqual([5, 10]); }); xit('test with Lillipution Currency where a greedy algorithm fails', function () { // https://en.wikipedia.org/wiki/Change-making_problem#Greedy_method var change = new Change(); var result = change.calculate([1, 4, 15, 20, 50], 23); expect(result).toEqual([4, 4, 15]); }); xit('test with lower Elbonian Currency where a greedy algorithm fails', function () { // https://en.wikipedia.org/wiki/Change-making_problem#Greedy_method var change = new Change(); var result = change.calculate([1, 5, 10, 21, 25], 63); expect(result).toEqual([21, 21, 21]); }); xit('test large amount of change', function () { var change = new Change(); var result = change.calculate([1, 2, 5, 10, 20, 50, 100], 999); expect(result).toEqual([2, 2, 5, 20, 20, 50, 100, 100, 100, 100, 100, 100, 100, 100, 100]); }); xit('test zero change', function () { var change = new Change(); var result = change.calculate([1, 5, 10, 21, 25], 0); expect(result).toEqual([]); }); xit('test less than the smallest currency represented', function () { var change = new Change(); var message = 'The total 3 cannot be represented in the given currency.'; var test = function () {return change.calculate([5, 10], 3);}; expect(test).toThrowError(Error, message); }); xit('test a large value that the currency cannot represent', function () { var change = new Change(); var message = 'The total 94 cannot be represented in the given currency.'; var test = function () {return change.calculate([5, 10], 94);}; expect(test).toThrowError(Error, message); }); xit('negative change is rejected', function () { var change = new Change(); var message = 'Negative totals are not allowed.'; var test = function () {return change.calculate([1, 2, 5], -5);}; expect(test).toThrowError(Error, message); }); });