Skip to content

Instantly share code, notes, and snippets.

@stoft
Last active August 29, 2015 14:10
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save stoft/046a555713c80a41b8ca to your computer and use it in GitHub Desktop.
Save stoft/046a555713c80a41b8ca to your computer and use it in GitHub Desktop.
Exercism exercise "point mutations" performance test.
if System.get_env("EXERCISM_TEST_EXAMPLES") do
Code.load_file("example.exs")
else
Code.load_file("point_mutations.exs")
end
ExUnit.start
defmodule DNATest do
use ExUnit.Case, async: true
@nucleotides %{1 => ?A, 2 => ?C, 3 => ?G, 4 => ?T}
test "hamming distance large length" do
start = :erlang.now
{list1, list2} = gen_hamming_dna([], [], 1_000_000)
finish = :erlang.now
IO.puts :timer.now_diff(finish, start)
start = :erlang.now
IO.puts DNA.hamming_distance(list1, list2)
finish = :erlang.now
IO.puts :timer.now_diff(finish, start)
end
def gen_hamming_dna(list1, list2, 0), do: {list1, list2}
def gen_hamming_dna(list1, list2, length) do
if rem(length, 10) == 0 do
nuc1 = get_nucleotide()
nuc2 = get_nucleotide()
gen_hamming_dna([nuc1|list1], [nuc2|list2], length - 1)
else
nuc = get_nucleotide()
gen_hamming_dna([nuc|list1], [nuc|list2], length - 1)
end
end
def get_nucleotide() do
@nucleotides[:random.uniform(4)]
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment