about summary refs log tree commit diff
path: root/assessments/semiprimes/server/test/server_test.exs
diff options
context:
space:
mode:
authorWilliam Carroll <wpcarro@gmail.com>2020-12-12T01·32+0000
committerWilliam Carroll <wpcarro@gmail.com>2020-12-12T01·32+0000
commitee96a818e104cad7c60947a905d0799c4dc13905 (patch)
tree56f3c581874a59904e40a103a4f20be4300d95d6 /assessments/semiprimes/server/test/server_test.exs
parentab732202808e175eb6ae670687280b8f4dbaf1e8 (diff)
Define Server.semiprime
- Clear the boilerplate that `mix` generated
- Consume `Math.factor` to test which inputs are semiprimes
- Cache all inputs that are semiprimes as soon as we discover that they are
- semiprimes

I considered a couple things related to the Cache:
- Could save space by storing all semiprime factors in a tree. This would make
  the lookups more expensive. Also because the tree's depth would never exceed
  two (because all semiprimes only have two factors), the tree would be quite
  broad, and we may not be saving enough space for the trade to be worthwhile. I
  might be wrong about that though.
- We could consider pre-computing all semiprimes when we start the app, but
  without running some tests firsts, I'm not sure whether or not it's worth the
  trouble.
Diffstat (limited to 'assessments/semiprimes/server/test/server_test.exs')
-rw-r--r--assessments/semiprimes/server/test/server_test.exs29
1 files changed, 27 insertions, 2 deletions
diff --git a/assessments/semiprimes/server/test/server_test.exs b/assessments/semiprimes/server/test/server_test.exs
index 4fa9b617bfd9..f327efb33abb 100644
--- a/assessments/semiprimes/server/test/server_test.exs
+++ b/assessments/semiprimes/server/test/server_test.exs
@@ -2,7 +2,32 @@ defmodule ServerTest do
   use ExUnit.Case
   doctest Server
 
-  test "greets the world" do
-    assert Server.hello() == :world
+  describe "semiprime" do
+    test "returns the factors when the number is semiprime" do
+      # Semiprimes below 30
+      [
+        {4, [2, 2]},
+        {6, [2, 3]},
+        {9, [3, 3]},
+        {10, [2, 5]},
+        {14, [2, 7]},
+        {15, [3, 5]},
+        {21, [3, 7]},
+        {22, [2, 11]},
+        {25, [5, 5]},
+        {26, [2, 13]}
+      ]
+      |> Enum.each(fn {input, expected} ->
+        assert Server.semiprime(input) == expected
+      end)
+    end
+
+    test "returns nothing when the number is a composite number" do
+      # Composite numbers below 30
+      [1, 2, 3, 5, 7, 8, 11, 12, 13, 16, 17, 18, 19, 20, 23, 24, 27, 28, 29]
+      |> Enum.each(fn x ->
+        assert Server.semiprime(x) == nil
+      end)
+    end
   end
 end