aboutsummaryrefslogtreecommitdiffstats
path: root/lib/stdlib/test/stdlib_bench_SUITE_data/generic_fsm.erl
diff options
context:
space:
mode:
authorRaimo Niskanen <[email protected]>2018-01-16 15:40:50 +0100
committerRaimo Niskanen <[email protected]>2018-01-16 16:34:44 +0100
commit0f051cfe47532e8a008fec47e25715eeb8479a0c (patch)
treede82f7b21b33f91f43d024cdac620ae88c1f3968 /lib/stdlib/test/stdlib_bench_SUITE_data/generic_fsm.erl
parent9de9c8f4e16dc22125617cf69e95a5ab9efbad9b (diff)
downloadotp-0f051cfe47532e8a008fec47e25715eeb8479a0c.tar.gz
otp-0f051cfe47532e8a008fec47e25715eeb8479a0c.tar.bz2
otp-0f051cfe47532e8a008fec47e25715eeb8479a0c.zip
Introduce gen_statem vs gen_fsm benchmark
Conflicts: lib/stdlib/test/stdlib_bench_SUITE.erl
Diffstat (limited to 'lib/stdlib/test/stdlib_bench_SUITE_data/generic_fsm.erl')
-rw-r--r--lib/stdlib/test/stdlib_bench_SUITE_data/generic_fsm.erl59
1 files changed, 59 insertions, 0 deletions
diff --git a/lib/stdlib/test/stdlib_bench_SUITE_data/generic_fsm.erl b/lib/stdlib/test/stdlib_bench_SUITE_data/generic_fsm.erl
new file mode 100644
index 0000000000..50f7df7a2a
--- /dev/null
+++ b/lib/stdlib/test/stdlib_bench_SUITE_data/generic_fsm.erl
@@ -0,0 +1,59 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2017-2018. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+%%
+-module(generic_fsm).
+
+-export([start/1, reply/2, transit/2, stop/1]).
+
+-export([init/1, terminate/3]).
+-export([state1/3, state2/3]).
+
+-behaivour(gen_fsm).
+
+
+%% API
+
+start(Data) ->
+ {ok, Pid} = gen_fsm:start(?MODULE, Data, []),
+ Pid.
+
+stop(P) ->
+ ok = gen_fsm:stop(P).
+
+reply(S, M) ->
+ gen_fsm:sync_send_event(S, {reply, M}, infinity).
+
+transit(S, M) ->
+ gen_fsm:sync_send_event(S, {transit, M}, infinity).
+
+%% Implementation
+
+init(Data) ->
+ {ok, state1, Data}.
+
+terminate(_Reason, _State, _Data) ->
+ ok.
+
+state1({reply, M}, _From, Data) ->
+ {reply, M, ?FUNCTION_NAME, Data};
+state1({transit, M}, _From, Data) ->
+ {reply, M, state2, Data}.
+
+state2({transit, M}, _From, Data) ->
+ {reply, M, state1, Data}.