aboutsummaryrefslogtreecommitdiffstats
path: root/lib/stdlib/test/escript_SUITE_data/tail_rec
diff options
context:
space:
mode:
Diffstat (limited to 'lib/stdlib/test/escript_SUITE_data/tail_rec')
-rwxr-xr-xlib/stdlib/test/escript_SUITE_data/tail_rec25
1 files changed, 25 insertions, 0 deletions
diff --git a/lib/stdlib/test/escript_SUITE_data/tail_rec b/lib/stdlib/test/escript_SUITE_data/tail_rec
new file mode 100755
index 0000000000..2ef64e1239
--- /dev/null
+++ b/lib/stdlib/test/escript_SUITE_data/tail_rec
@@ -0,0 +1,25 @@
+#!/usr/bin/env escript
+%% -*- erlang -*-
+-mode(interpret).
+
+tail_rec(PrevSize, N) ->
+ {_, Size} = process_info(self(), stack_size),
+ if
+ N =< 0 ->
+ ok;
+ PrevSize =:= undefined ->
+ tail_rec(Size, N - 1);
+ PrevSize =:= Size ->
+ tail_rec(Size, N - 1);
+ true ->
+ io:format("Not tail recursive (~p): Stack size ~p should be ~p\n",
+ [N, Size, PrevSize]),
+ tail_rec(Size, N - 1)
+ end.
+
+main([Repetitions]) ->
+ tail_rec(undefined, list_to_integer(Repetitions)),
+ io:format("ok\n", []);
+main(_) ->
+ io:format("Usage: ~s Repetitions\n", [escript:script_name()]),
+ init:stop(1).