Add quick check test for order and handle variants.

This commit is contained in:
Erik Stenman
2019-05-31 14:42:00 +02:00
parent cb8e2b07a4
commit 58daf1bb5c
3 changed files with 39 additions and 2 deletions
+17 -2
View File
@@ -201,7 +201,7 @@ format_kvs(List) ->
%% Total order of FATE terms.
%% Integers < Booleans < Address < Channel < Contract < Name < Oracle
%% < Hash < Signature < Bits < String < Tuple < Map < List
%% < Hash < Signature < Bits < String < Tuple < Map < List < Variant
-spec ordinal(fate_type()) -> integer().
ordinal(T) when ?IS_FATE_INTEGER(T) -> 0;
ordinal(T) when ?IS_FATE_BOOLEAN(T) -> 1;
@@ -216,7 +216,8 @@ ordinal(T) when ?IS_FATE_BITS(T) -> 9;
ordinal(T) when ?IS_FATE_STRING(T) -> 10;
ordinal(T) when ?IS_FATE_TUPLE(T) -> 11;
ordinal(T) when ?IS_FATE_MAP(T) -> 12;
ordinal(T) when ?IS_FATE_LIST(T) -> 13.
ordinal(T) when ?IS_FATE_LIST(T) -> 13;
ordinal(T) when ?IS_FATE_VARIANT(T) -> 14.
-spec lt(fate_type(), fate_type()) -> boolean().
@@ -274,6 +275,20 @@ lt(13, ?FATE_LIST_VALUE([A|RA]), ?FATE_LIST_VALUE([B|RB])) ->
if O1 == O2 -> lt(RA, RB);
true -> O1 < O2
end;
lt(14, ?FATE_VARIANT(AritiesA, TagA, TA),
?FATE_VARIANT(AritiesB, TagB, TB)) ->
if length(AritiesA) < length(AritiesB) -> true;
length(AritiesB) > length(AritiesA) -> false;
true ->
if AritiesA < AritiesB -> true;
AritiesB < AritiesA -> false;
true ->
if TagA < TagB -> true;
TagB < TagA -> false;
true -> lt(make_tuple(TA), make_tuple(TB))
end
end
end;
lt(_, A, B) -> A < B.
tuple_elements_lt(N,_A,_B, N) ->