Advent of PBT 2021 - Day 17

dubzzz

Nicolas DUBIEN

Posted on December 17, 2021

Advent of PBT 2021 - Day 17

Advent of PBT 2021 — Learn how to use property based testing and fast-check through examples

Our algorithm today is: isHumbleNumber.
It comes with the following documentation and prototype:

/**
 * Check if a number is an Humber number.
 *
 * Humble numbers are positive integers which have
 * no prime factors > 7.
 *
 * Source: https://rosettacode.org/wiki/Humble_numbers
 *
 * @param n - The number to be checked,
 *            superior or equal to zero and up to 2**31 -1
 */
declare function isHumbleNumber(n: number): boolean;
Enter fullscreen mode Exit fullscreen mode

We already wrote some examples based tests for it:

it("should consider any prime number <=7 as humble", () => {
  expect(isHumbleNumber(2)).toBe(true);
  expect(isHumbleNumber(3)).toBe(true);
  expect(isHumbleNumber(5)).toBe(true);
  expect(isHumbleNumber(7)).toBe(true);
});

it("should consider any number <=7 as humble", () => {
  expect(isHumbleNumber(0)).toBe(true);
  expect(isHumbleNumber(1)).toBe(true);
  expect(isHumbleNumber(4)).toBe(true);
  expect(isHumbleNumber(6)).toBe(true);
});

it("should consider any compositite of 2, 3, 5 or 7 as humble", () => {
  expect(isHumbleNumber(2 * 2 * 2 * 2 * 2)).toBe(true);
  expect(isHumbleNumber(2 * 2 * 3 * 3 * 5 * 5 * 7 * 7)).toBe(true);
});

it("should consider number with prime factor >7 as non-humble", () => {
  expect(isHumbleNumber(11)).toBe(false);
  expect(isHumbleNumber(2 * 11)).toBe(false);
});
Enter fullscreen mode Exit fullscreen mode

How would you cover it with Property Based Tests?

In order to ease your task we provide you with an already setup CodeSandbox, with examples based tests already written and a possible implementation of the algorithm: https://codesandbox.io/s/advent-of-pbt-day-17-qvdwh?file=/src/index.spec.ts&previewwindow=tests

You wanna see the solution? Here is the set of properties I came with to cover today's algorithm: https://dev.to/dubzzz/advent-of-pbt-2021-day-17-solution-3gfe


Back to "Advent of PBT 2021" to see topics covered during the other days and their solutions.

More about this serie on @ndubien or with the hashtag #AdventOfPBT.

💖 💪 🙅 🚩
dubzzz
Nicolas DUBIEN

Posted on December 17, 2021

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related

Advent of PBT 2021 - Day 24
challenge Advent of PBT 2021 - Day 24

December 24, 2021

Advent of PBT 2021 - Day 24 - Solution
challenge Advent of PBT 2021 - Day 24 - Solution

December 24, 2021

Advent of PBT 2021 - Day 23
challenge Advent of PBT 2021 - Day 23

December 23, 2021

Advent of PBT 2021 - Day 23 - Solution
challenge Advent of PBT 2021 - Day 23 - Solution

December 23, 2021

Advent of PBT 2021 - Day 22
challenge Advent of PBT 2021 - Day 22

December 22, 2021