<!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);