diff options
| -rw-r--r-- | src/rabbit_trunc_term.erl | 14 | ||||
| -rw-r--r-- | src/rabbit_trunc_term_tests.erl | 5 |
2 files changed, 11 insertions, 8 deletions
diff --git a/src/rabbit_trunc_term.erl b/src/rabbit_trunc_term.erl index 0340ae9121..cd2dfe3b8a 100644 --- a/src/rabbit_trunc_term.erl +++ b/src/rabbit_trunc_term.erl @@ -45,9 +45,13 @@ shrink_term(T) -> shrink_term(T, 10). %% TODO: reconsider depth limit handling shrink_term(T, 0) -> T; shrink_term(T, N) when is_binary(T) andalso size(T) > N -> - L = N - 3, - case size(T) - L of - Sz when Sz >= 1 -> <<Head:L/binary, _/binary>> = T, + Suffix = N - 3, + Len = case is_bitstring(T) of + true -> byte_size(T); + false -> size(T) + end, + case Len - Suffix of + Sz when Sz >= 1 -> <<Head:Suffix/binary, _/binary>> = T, <<Head/binary, <<"...">>/binary>>; _ -> T end; @@ -60,8 +64,8 @@ shrink_term(T, N) when is_list(T) -> {true, true} when N > 3 -> lists:append(lists:sublist(T, resize(N-3)), "..."); {true, false} -> lists:append([shrink_term(E, resize(N-1, Len)) || - E <- lists:sublist(T, resize(N-1))], - ['...']); + E <- lists:sublist(T, resize(N-1))], + ['...']); {false, false} -> [shrink_term(E, resize(N-1, Len)) || E <- T]; _ -> T end; diff --git a/src/rabbit_trunc_term_tests.erl b/src/rabbit_trunc_term_tests.erl index 697acc5d40..6a3a7169d9 100644 --- a/src/rabbit_trunc_term_tests.erl +++ b/src/rabbit_trunc_term_tests.erl @@ -24,9 +24,8 @@ prop_trunc_any_term() -> ?FORALL({GenAny, MaxSz}, {gen_top_level(50), gen_max_len()}, begin - %% TODO: make proper skip this - SzInitial = erts_debug:size(GenAny), try + SzInitial = erts_debug:size(GenAny), Shrunk = rabbit_trunc_term:shrink_term(GenAny, MaxSz), SzShrunk = erts_debug:size(Shrunk), ?WHENFAIL(begin @@ -39,7 +38,7 @@ prop_trunc_any_term() -> io:format("Output: ~p~n", [Shrunk]) end, case size_of_thing(GenAny) > MaxSz of - true -> true = SzShrunk < SzInitial; + true -> SzShrunk < SzInitial; false -> Shrunk =:= GenAny end) catch |
