about summary refs log tree commit diff
diff options
context:
space:
mode:
authorWilliam Carroll <wpcarro@gmail.com>2020-12-11T22·42+0000
committerWilliam Carroll <wpcarro@gmail.com>2020-12-11T22·42+0000
commit6af5e4b82e9d2f025ad388f82495865a195c5218 (patch)
tree4af5a829b1d969570652889355d5046551177918
parent6ff814a6d31126dbb61ae720c0eb4d0e7058bb00 (diff)
Define Extras module
I'll use as the host for utility functions needed to extend the stdlib.
-rw-r--r--assessments/semiprimes/server/lib/extras.ex18
-rw-r--r--assessments/semiprimes/server/test/extras_test.exs18
2 files changed, 36 insertions, 0 deletions
diff --git a/assessments/semiprimes/server/lib/extras.ex b/assessments/semiprimes/server/lib/extras.ex
new file mode 100644
index 000000000000..4d2a938fcf58
--- /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 000000000000..67d0b8875cae
--- /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