-module(utTestTrace).

-compile([export_all, nowarn_unused_function, nowarn_unused_vars, nowarn_export_all]).


t1() ->
   Pid = spawn(fun() -> do_t1(1) end),
   send_msg(Pid, 100000).

t2() ->
   Pid = spawn(fun() -> do_t2(1) end),
   send_msg(Pid, 100000).

send_msg(Pid, 0) ->
   io:format("IMY***********send_msg over ~p ~n  ~p ~n", [0, Pid]),
   ok;
send_msg(Pid, N) ->
   Pid ! <<2:(N)>>,
   % timer:sleep(1),
   send_msg(Pid, N - 1).

do_t1(N) ->
   case N == 1 orelse N == 90000 of
      true ->
         erlang:garbage_collect(),
         Result = erlang:process_info(self(), [memory, garbage_collection]),
         io:format("IMY************************* ~p~n  ~w ~n", [N, Result]);
      %io:format("IMY&&&&&&&&&&&&&&&&&&&&&&&&& ~p~n backtrace:~p~n~n", [N, erlang:process_display(self(), backtrace)]);
      _ ->
         ignore
   end,

   try
      receive
         _ ->
            ok
      %% do_t1(N + 1)
      end,
      do_t1(N + 1)
   catch
      _:_ ->
         do_t1(N + 1)
   end.

do_t2(N) ->
   case N == 1 orelse N == 90000 of
      true ->
         erlang:garbage_collect(),
         Result = erlang:process_info(self(), [memory, garbage_collection]),
         io:format("IMY************************* ~p ~n  ~w ~n", [N, Result]),
         io:format("IMY&&&&&&&&&&&&&&&&&&&&&&&&& ~p ~n backtrace:~w~n~n", [N, erlang:process_display(self(), backtrace)]);
      _ ->
         %io:format("IMY************************* ~p ~n", [N]),
         ignore
   end,
   receive
      _ ->
         do_t2(N + 1)
   end.

desult3(N, State) ->
   %io:format("IMy*********************desult3 ~p~n",[N]),
   do_t3(N).

desult4(N, State) ->
   do_t4(N).

t3() ->
   Pid = spawn(fun() -> do_t3(100000) end).

t4() ->
   Pid = spawn(fun() -> do_t4(100000) end).

do_t3(0) ->
   io:format("IMy*********************dfdfdffd33333333");
do_t3(N) ->
   case N == 1 orelse N == 99999 of
      true ->
         erlang:garbage_collect(),
         Result = erlang:process_info(self(), [memory, garbage_collection]),
         io:format("IMY************************* ~p~n  ~w ~n", [N, Result]),
         io:format("IMY&&&&&&&&&&&&&&&&&&&&&&&&& ~p~n backtrace:~p~n~n", [N, erlang:process_display(self(), backtrace)]);
      _ ->
         ignore
   end,

   try recon_test:tt9(2) of
      Ret ->
         desult3(N - 1, Ret)
   catch
      _:_ ->
         desult3(N - 1, error)
   end.
do_t4(0) ->
   io:format("IMy*********************dfdfdffd44444444444");
do_t4(N) ->
   case N == 1 orelse N == 99999 of
      true ->
         erlang:garbage_collect(),
         Result = erlang:process_info(self(), [memory, garbage_collection]),
         io:format("IMY************************* ~p ~n  ~w ~n", [N, Result]),
         io:format("IMY&&&&&&&&&&&&&&&&&&&&&&&&& ~p ~n backtrace:~w~n~n", [N, erlang:process_display(self(), backtrace)]);
      _ ->
         %io:format("IMY************************* ~p ~n", [N]),
         ignore
   end,
   Ret1 = try recon_test:tt9(2) of
             Ret ->
                Ret
          catch
             _:_ ->
                error
          end,
   do_t4(N - 1).

do_t5(0) ->
   io:format("IMy*********************dfdfdffd55555555555555");
do_t5(N) ->
   case N == 1 orelse N == 99999 of
      true ->
         erlang:garbage_collect(),
         Result = erlang:process_info(self(), [memory, garbage_collection]),
         io:format("IMY************************* ~p ~n  ~w ~n", [N, Result]),
         io:format("IMY&&&&&&&&&&&&&&&&&&&&&&&&& ~p ~n backtrace:~w~n~n", [N, erlang:process_display(self(), backtrace)]);
      _ ->
         %io:format("IMY************************* ~p ~n", [N]),
         ignore
   end,
   try recon_test:tt9(2) of
      Ret ->
         do_t5(N - 1)
   catch
      _:_ ->
         error
   end.

do_t6(0) ->
   io:format("IMy*********************dfdfdffd55555555555555");
do_t6(N) ->
   case N == 1 orelse N == 99999 of
      true ->
         erlang:garbage_collect(),
         Result = erlang:process_info(self(), [memory, garbage_collection]),
         io:format("IMY************************* ~p ~n  ~w ~n", [N, Result]);
      %io:format("IMY&&&&&&&&&&&&&&&&&&&&&&&&& ~p ~n backtrace:~w~n~n", [N, erlang:process_display(self(), backtrace)]);
      _ ->
         %io:format("IMY************************* ~p ~n", [N]),
         ignore
   end,
   try recon_test:tt9(2) of
      Ret ->
         do_t6(N - 1)
   catch
      _:_ ->
         error
      %after
      %   ok
   end.

do_t7(0) ->
   io:format("IMy********************11111");
do_t7(N) ->
   io:format("IMy********************22222"),
   try recon_test:tt9(2) of
      _Ret ->
         io:format("IMy********************3333"),
         do_t7(N - 1)
   catch
      throw:ret ->
         io:format("IMy********************4444"),
         do_t7(N - 1);
      _:_ ->
         io:format("IMy********************5555"),
         error
   end.




