78 lines
1.9 KiB
Elixir
78 lines
1.9 KiB
Elixir
|
defmodule SumOfMultiplesTest do
|
||
|
use ExUnit.Case
|
||
|
|
||
|
test "no multiples within limit" do
|
||
|
assert SumOfMultiples.to(1, [3, 5]) == 0
|
||
|
end
|
||
|
|
||
|
test "one factor has multiples within limit" do
|
||
|
assert SumOfMultiples.to(4, [3, 5]) == 3
|
||
|
end
|
||
|
|
||
|
test "more than one multiple within limit0" do
|
||
|
assert SumOfMultiples.to(7, [3]) == 9
|
||
|
end
|
||
|
|
||
|
test "more than one factor with multiples within limit" do
|
||
|
assert SumOfMultiples.to(10, [3, 5]) == 23
|
||
|
end
|
||
|
|
||
|
test "each multiple is only counted once" do
|
||
|
assert SumOfMultiples.to(100, [3, 5]) == 2318
|
||
|
end
|
||
|
|
||
|
test "a much larger limit" do
|
||
|
assert SumOfMultiples.to(1000, [3, 5]) == 233_168
|
||
|
end
|
||
|
|
||
|
test "three factors" do
|
||
|
multiples = [7, 13, 17]
|
||
|
assert SumOfMultiples.to(20, multiples) == 51
|
||
|
end
|
||
|
|
||
|
test "factors not relatively prime" do
|
||
|
multiples = [4, 6]
|
||
|
assert SumOfMultiples.to(15, multiples) == 30
|
||
|
end
|
||
|
|
||
|
test "some pairs of factors relatively prime and some not" do
|
||
|
multiples = [5, 6, 8]
|
||
|
assert SumOfMultiples.to(150, multiples) == 4419
|
||
|
end
|
||
|
|
||
|
test "one factor is a multiple of another" do
|
||
|
multiples = [5, 25]
|
||
|
assert SumOfMultiples.to(51, multiples) == 275
|
||
|
end
|
||
|
|
||
|
test "much larger factors" do
|
||
|
multiples = [43, 47]
|
||
|
assert SumOfMultiples.to(10000, multiples) == 2_203_160
|
||
|
end
|
||
|
|
||
|
test "all numbers are multiples of 1" do
|
||
|
multiples = [1]
|
||
|
assert SumOfMultiples.to(100, multiples) == 4950
|
||
|
end
|
||
|
|
||
|
test "no factors means an empty sum" do
|
||
|
multiples = []
|
||
|
assert SumOfMultiples.to(10000, multiples) == 0
|
||
|
end
|
||
|
|
||
|
test "the only multiple of 0 is 0" do
|
||
|
multiples = [0]
|
||
|
assert SumOfMultiples.to(1, multiples) == 0
|
||
|
end
|
||
|
|
||
|
test "the factor 0 does not affect the sum of multiples of other factors" do
|
||
|
multiples = [3, 0]
|
||
|
assert SumOfMultiples.to(4, multiples) == 3
|
||
|
end
|
||
|
|
||
|
test "solutions using include-exclude must extend to cardinality greater than 3" do
|
||
|
multiples = [2, 3, 5, 7, 11]
|
||
|
assert SumOfMultiples.to(10000, multiples) == 39_614_537
|
||
|
end
|
||
|
end
|