summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/rabbit_trunc_term.erl14
-rw-r--r--src/rabbit_trunc_term_tests.erl5
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