-module(call_bm). -export([benchmarks/0]). -export([local_call/1,external_call/1,fun_call/1,apply_fun/1,apply_mfa/1]). -export([foo/0]). benchmarks() -> {400000,[local_call,external_call,fun_call,apply_fun,apply_mfa]}. -define(rep5(X), X, X, X, X, X). -define(rep10(X), ?rep5(X), ?rep5(X)). -define(rep20(X), ?rep10(X), ?rep10(X)). local_call(0) -> ok; local_call(Iter) -> ?rep20(foo()), local_call(Iter-1). external_call(0) -> ok; external_call(Iter) -> ?rep20(?MODULE:foo()), external_call(Iter-1). fun_call(Iter) -> fun_call(Iter, fun() -> ok end). fun_call(0, Fun) -> ok; fun_call(Iter, Fun) -> ?rep20(Fun()), fun_call(Iter-1, Fun). apply_fun(Iter) -> apply_fun(Iter, fun() -> ok end). apply_fun(0, Fun) -> ok; apply_fun(Iter, Fun) -> ?rep20(apply(Fun, [])), apply_fun(Iter-1, Fun). apply_mfa(0) -> ok; apply_mfa(Iter) -> ?rep20(apply(?MODULE, foo, [])), apply_mfa(Iter-1). foo() -> ok.