Skip to content

Instantly share code, notes, and snippets.

@ahamez
Created February 17, 2017 13:49
Show Gist options
  • Select an option

  • Save ahamez/7400785cc21e74d944987a1352a734e0 to your computer and use it in GitHub Desktop.

Select an option

Save ahamez/7400785cc21e74d944987a1352a734e0 to your computer and use it in GitHub Desktop.
Benchmarks different struct creations
defmodule Struct do
defstruct [:a, :b, :c, :d, :e, :f, :g, :h]
end
defmodule CreateStruct do
def create1() do
struct(Struct, create1_fields())
end
def create3() do
struct!(Struct, create1_fields())
end
defp create1_fields() do
create1_h([])
end
defp create1_h(fields), do: create1_g([{:h, 0} | fields])
defp create1_g(fields), do: create1_f([{:g, 0} | fields])
defp create1_f(fields), do: create1_e([{:f, 0} | fields])
defp create1_e(fields), do: create1_d([{:e, 0} | fields])
defp create1_d(fields), do: create1_c([{:d, 0} | fields])
defp create1_c(fields), do: create1_b([{:c, 0} | fields])
defp create1_b(fields), do: create1_a([{:b, 0} | fields])
defp create1_a(fields), do: [{:a, 0} | fields]
def create2() do
%Struct{}
|> struct([{:a, 0}])
|> struct([{:b, 0}])
|> struct([{:c, 0}])
|> struct([{:d, 0}])
|> struct([{:e, 0}])
|> struct([{:f, 0}])
|> struct([{:g, 0}])
|> struct([{:h, 0}])
end
def create4() do
%Struct{}
|> struct!([{:a, 0}])
|> struct!([{:b, 0}])
|> struct!([{:c, 0}])
|> struct!([{:d, 0}])
|> struct!([{:e, 0}])
|> struct!([{:f, 0}])
|> struct!([{:g, 0}])
|> struct!([{:h, 0}])
end
end
# IO.puts "#{inspect CreateStruct.create1()}"
# IO.puts "#{inspect CreateStruct.create2()}"
IO.puts "#{inspect struct(Struct, [{:a, 1}, {:a, 42}])}"
Benchee.run(%{
"create1" => fn -> Enum.each(1..100000, fn _ -> CreateStruct.create1() end) end,
"create2" => fn -> Enum.each(1..100000, fn _ -> CreateStruct.create2() end) end,
"create3" => fn -> Enum.each(1..100000, fn _ -> CreateStruct.create3() end) end,
"create4" => fn -> Enum.each(1..100000, fn _ -> CreateStruct.create4() end) end,
},
formatters: [
&Benchee.Formatters.HTML.output/1,
&Benchee.Formatters.Console.output/1
],
html: [file: "benches/decode_output.html"],
time: 3
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment