anchor.diff:                  % ignore two ignored messages, then wait for Timeout ignoring all ignored messages and do a final receive with the expected message
                   receive
                       IgnoredMessage ->
  -                        ct:pal("ignored \"~p\"", [IgnoredMessage]),
  +                        ct:pal("ignored \"~w\"", [IgnoredMessage]),
                           receive
                               IgnoredMessage ->
  -                                ct:pal("ignored \"~p\"", [IgnoredMessage]),
  +                                ct:pal("ignored \"~w\"", [IgnoredMessage]),
                                   ?consume_message(IgnoredMessage, Timeout),
                                   receive
                                       IgnoredMessage ->
  -                                        ct:pal("ignored \"~p\" for the last time", [IgnoredMessage]),
  +                                        ct:pal("ignored \"~w\" for the last time", [IgnoredMessage]),
                                       MsgPattern -> ok
                                   after
                                       0 ->
  
positive.code:                     Any ->
                          ct:pal("Failed: Stacktrace ~p~n",
                                 [erlang:get_stacktrace()]),
                          ?ct_fail("~p evaluated to \"~p\" which is "
                                 "not the expected ~p that evaluates to \"~p\~n"
                                 "(~p)",
                                 [??Actual, Any, ??Expected, ExpectedVal, lists:flatten(Note)])
                  end
          end()).
  
negative.code: %% expect_message_ignore(MsgPattern, IgnoredMessage) ->
  %%     receive
  %%         IgnoredMessage ->
  %%             ct:pal("ignored ~w", [IgnoredMessage]),
  %%             expect_message_ignore(MsgPattern, IgnoredMessage);
  %%         MsgPattern ->
  %%             ok
  