diff options
Diffstat (limited to 'lib/stdlib/test/escript_SUITE_data/tail_rec')
-rwxr-xr-x | lib/stdlib/test/escript_SUITE_data/tail_rec | 25 |
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). |