From 6af5e4b82e9d2f025ad388f82495865a195c5218 Mon Sep 17 00:00:00 2001 From: William Carroll Date: Fri, 11 Dec 2020 22:42:55 +0000 Subject: [PATCH] Define Extras module I'll use as the host for utility functions needed to extend the stdlib. --- assessments/semiprimes/server/lib/extras.ex | 18 ++++++++++++++++++ .../semiprimes/server/test/extras_test.exs | 18 ++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 assessments/semiprimes/server/lib/extras.ex create mode 100644 assessments/semiprimes/server/test/extras_test.exs diff --git a/assessments/semiprimes/server/lib/extras.ex b/assessments/semiprimes/server/lib/extras.ex new file mode 100644 index 000000000..4d2a938fc --- /dev/null +++ b/assessments/semiprimes/server/lib/extras.ex @@ -0,0 +1,18 @@ +defmodule Extras do + @doc """ + Return an ascending range starting at `a` and ending at `b` (exclusive). + + ## Examples + + iex> Extras.range(2, 5) + [2, 3, 4] + + """ + def range(a, b) do + if b <= a do + [] + else + [a] ++ range(a + 1, b) + end + end +end diff --git a/assessments/semiprimes/server/test/extras_test.exs b/assessments/semiprimes/server/test/extras_test.exs new file mode 100644 index 000000000..67d0b8875 --- /dev/null +++ b/assessments/semiprimes/server/test/extras_test.exs @@ -0,0 +1,18 @@ +defmodule ExtrasTest do + use ExUnit.Case + doctest Extras + + describe "range" do + test "returns an empty list for descending sequences" do + assert Extras.range(0, -2) == [] + end + + test "returns an empty list for non-ascending sequences" do + assert Extras.range(8, 8) == [] + end + + test "returns an exclusive range" do + assert Extras.range(3, 6) == [3, 4, 5] + end + end +end