Task 003: FizzBuzz Switch Statement - MrKiplin/learn-typescript GitHub Wiki

Task description

If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. Using a switch statement, find all multiples of 3 & 5 within a range of 1000. Return multiples of 3 as Fizz, multiples of 5 as Buzz and multiples of both as FizzBuzz.

Step by step guide

Coming soon......

Completed solution

003-fizzbuzz-switch-statement.ts

export const fizzBuzzSwitchStatement = (value: number) => {
  const isFizz = value % 3 === 0;
  const isBuzz = value % 5 === 0;

  switch (true) {
    case isFizz && isBuzz:
      return "FizzBuzz";
    case isFizz:
      return "Fizz";
    case isBuzz:
      return "Buzz";
    default:
      return value;
  }
};

export const fizzBuzzSwitchStatementLogger = (range: number) =>
  Array(range)
    .fill(0)
    .map((_, index) => fizzBuzzSwitchStatement(index));

003-fizzbuzz-switch-statement.spec.ts

import {
  fizzBuzzSwitchStatement,
  fizzBuzzSwitchStatementLogger,
} from "./002-fizzbuzz-switch-statement";

describe("fizzBuzzSwitchStatement", () => {
  it.each([
    [fizzBuzzSwitchStatement(3), "Fizz"],
    [fizzBuzzSwitchStatement(5), "Buzz"],
    [fizzBuzzSwitchStatement(0), "FizzBuzz"],
    [fizzBuzzSwitchStatement(1), 1],
  ])("Should return %s", (result, expected) => {
    expect(result).toBe(expected);
  });
  it.each`
    result                              | expected
    ${fizzBuzzSwitchStatementLogger(6)} | ${"Fizz"}
    ${fizzBuzzSwitchStatementLogger(6)} | ${"Buzz"}
    ${fizzBuzzSwitchStatementLogger(6)} | ${"FizzBuzz"}
    ${fizzBuzzSwitchStatementLogger(6)} | ${1}
  `("Should return an array containing $expected", ({ result, expected }) => {
    expect(result).toContain(expected);
  });
});