From 3d6ac9df9204f9fd95e2d40cf5da86e9c78d9dfe Mon Sep 17 00:00:00 2001 From: Thomas Arts Date: Mon, 3 Jun 2019 11:08:08 +0200 Subject: [PATCH] Slightly different property --- quickcheck/aefate_eqc.erl | 40 +++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/quickcheck/aefate_eqc.erl b/quickcheck/aefate_eqc.erl index c7aca65..4f3739a 100644 --- a/quickcheck/aefate_eqc.erl +++ b/quickcheck/aefate_eqc.erl @@ -65,24 +65,29 @@ prop_fuzz() -> prop_order() -> - ?FORALL({FateData1, FateData2, FateData3}, {fate_data(), fate_data(), fate_data()}, - case aeb_fate_data:lt(FateData1, FateData2) of - true -> - case aeb_fate_data:lt(FateData2, FateData3) of - true -> - equals(aeb_fate_data:lt(FateData1, FateData3), true); - false -> - equals(aeb_fate_data:lt(FateData2, FateData1), false) - end; - false -> - case aeb_fate_data:lt(FateData1, FateData3) of - true -> - equals(aeb_fate_data:lt(FateData2, FateData3), true); - false -> - equals(aeb_fate_data:elt(FateData2, FateData1), true) - end + ?FORALL(Items, vector(3, fate_data()), + begin + %% Use lt to take minimum + Min = lt_min(Items), + Max = lt_max(Items), + conjunction([ {minimum, is_empty([ {Min, '>', I} || I<-Items, aeb_fate_data:lt(I, Min)])}, + {maximum, is_empty([ {Max, '<', I} || I<-Items, aeb_fate_data:lt(Max, I)])}]) end). +lt_min([X, Y | Rest]) -> + case aeb_fate_data:lt(X, Y) of + true -> lt_min([X | Rest]); + false -> lt_min([Y| Rest]) + end; +lt_min([X]) -> X. + +lt_max([X, Y | Rest]) -> + case aeb_fate_data:lt(X, Y) of + true -> lt_max([Y | Rest]); + false -> lt_max([X| Rest]) + end; +lt_max([X]) -> X. + fate_data() -> ?SIZED(Size, ?LET(Data, fate_data(Size, [map, variant]), eqc_symbolic:eval(Data))). @@ -165,3 +170,6 @@ injection(Binary) -> <> = Binary, <> end). + +is_empty(L) -> + ?WHENFAIL(eqc:format("~p\n", [L]), L == []).