[erlang-bugs] Maps equality failure / Maps merge failure
Ulf Wiger
ulf@REDACTED
Wed Mar 25 16:17:04 CET 2015
> On 25 Mar 2015, at 00:16, Kostis Sagonas <kostis@REDACTED> wrote:
>
> The above may seem a bit weird at first but is not at all strange given that lists:sort/1 does not sort according to the (total) term order:
>
> Eshell V6.3.1 (abort with ^G)
> 1> lists:sort([0, 0.0]).
> [0,0.0]
> 2> lists:sort([0.0, 0]).
> [0.0,0]
But this is according to the documented comparison semantics, surely.
From the Reference Manual:
"When comparing an integer to a float, the term with the lesser precision will be converted into the other term's type, unless the operator is one of =:= or =/=.”
It’s unfortunate though, and I ran into this issue when writing QuickCheck properties for the ‘sext’ encode/decode.
prop_sort() ->
?FORALL({T1,T2}, {term_(), term_()},
begin
{X1,X2} = {sext:encode(T1), sext:encode(T2)},
comp(X1,X2) == comp_i(T1,T2)
end).
…where comp_i/2 takes care of the case where X1 == X2, X1 =/= X2.
That is, the intuitive property could not be used, given that this also had to be satisfied:
prop_encode() ->
?FORALL(T, term_(),
sext:decode(sext:encode(T)) == T).
BR,
Ulf W
Ulf Wiger, Co-founder & Developer Advocate, Feuerlabs Inc.
http://feuerlabs.com
More information about the erlang-bugs
mailing list