<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.8.0/jasmine.min.css">
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.8.0/jasmine.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.8.0/jasmine-html.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.8.0/boot.min.js"></script>
<script src="subject.js"></script>
<script src="spec.js"></script>
</head>
<body></body>
</html>
describe('fizzbuzz', function() {
it('outputs Fizz for multiples of 3', function() {
expect(fizzbuzz(3, 3)).toEqual(['Fizz']);
expect(fizzbuzz(33, 33)).toEqual(['Fizz']);
expect(fizzbuzz(66, 66)).toEqual(['Fizz']);
});
it('outputs Buzz for multiples of 5', function() {
expect(fizzbuzz(5, 5)).toEqual(['Buzz']);
expect(fizzbuzz(25, 25)).toEqual(['Buzz']);
expect(fizzbuzz(50, 50)).toEqual(['Buzz']);
});
it('outputs FizzBuzz for multiples of both 3 and 5', function() {
expect(fizzbuzz(15, 15)).toEqual(['FizzBuzz']);
expect(fizzbuzz(30, 30)).toEqual(['FizzBuzz']);
expect(fizzbuzz(90, 90)).toEqual(['FizzBuzz']);
});
it('outputs the number otherwise', function() {
expect(fizzbuzz(1, 1)).toEqual([1]);
expect(fizzbuzz(26, 26)).toEqual([26]);
expect(fizzbuzz(71, 71)).toEqual([71]);
});
it('outputs a range correctly', function() {
expect(fizzbuzz(1, 15)).toEqual([
1, 2, 'Fizz', 4, 'Buzz', 'Fizz', 7, 8, 'Fizz', 'Buzz', 11, 'Fizz', 13, 14, 'FizzBuzz'
]);
});
});
(function(window) {
function resolve(number) {
if (number % 15 === 0) {
return 'FizzBuzz';
} else if (number % 3 === 0) {
return 'Fizz';
} else if (number % 5 === 0) {
return 'Buzz';
}
return number;
}
function fizzbuzz(from=1, to=100) {
const result = [];
for(let i=from; i<=to; i++) {
result.push(resolve(i));
}
return result;
}
window.fizzbuzz = fizzbuzz;
})(window);