From 04d64dfe9bfcdf64d076a1425d6281a45255adaf Mon Sep 17 00:00:00 2001 From: Thomas Arts Date: Wed, 10 Apr 2019 15:41:59 +0200 Subject: [PATCH] Extend QuickCheck model to use the make_BLA functions to create the fate data --- quickcheck/aefate_eqc.erl | 49 +++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 25 deletions(-) diff --git a/quickcheck/aefate_eqc.erl b/quickcheck/aefate_eqc.erl index 3049c41..7be968e 100644 --- a/quickcheck/aefate_eqc.erl +++ b/quickcheck/aefate_eqc.erl @@ -13,17 +13,16 @@ -compile([export_all, nowarn_export_all]). prop_roundtrip() -> - ?FORALL(FateData, fate_type(), + ?FORALL(FateData, fate_data(), measure(bytes, size(term_to_binary(FateData)), begin Serialized = aeb_fate_encoding:serialize(FateData), ?WHENFAIL(eqc:format("Serialized ~p to ~p~n", [FateData, Serialized]), equals(aeb_fate_encoding:deserialize(Serialized), FateData)) - end - )). + end)). prop_format() -> - ?FORALL(FateData, fate_type(), + ?FORALL(FateData, fate_data(), ?WHENFAIL(eqc:format("Trying to format ~p failed~n",[FateData]), begin String = aeb_fate_data:format(FateData), @@ -31,16 +30,16 @@ prop_format() -> end)). prop_format_scan() -> - ?FORALL(FateData, fate_type(), - ?WHENFAIL(eqc:format("Trying to format ~p failed~n~p~n", [FateData, catch unicode:characters_to_list(aeb_fate_data:format(FateData), utf8) ]), + ?FORALL(FateData, fate_data(), + ?WHENFAIL(eqc:format("Trying to format ~p failed~n", [FateData]), begin String = aeb_fate_data:format(FateData), {ok, _Scanned, _} = aeb_fate_asm_scan:scan(unicode:characters_to_list(String)), true end)). -fate_type() -> - ?SIZED(Size, fate_type(Size, [map])). +fate_data() -> + ?SIZED(Size, ?LET(Data, fate_type(Size, [map]), eqc_symbolic:eval(Data))). fate_type(0, _Options) -> ?LAZY( @@ -70,33 +69,33 @@ fate_type(Size, Options) -> ])). -fate_integer() -> oneof([int(), largeint()]). -fate_bits() -> {bits, oneof([int(), largeint()])}. -fate_boolean() -> elements([true, false]). -fate_nil() -> []. -fate_unit() -> {tuple, {}}. -fate_string() -> ?SUCHTHAT(S, utf8(), string:find(S, "\"") == nomatch). -fate_address() -> {address, non_zero_binary(256 div 8)}. -fate_hash() -> {hash, non_zero_binary(32)}. -fate_signature() -> {signature, non_zero_binary(64)}. -fate_contract() -> {contract, non_zero_binary(256 div 8)}. -fate_oracle() -> {oracle, non_zero_binary(256 div 8)}. -fate_name() -> {name, non_zero_binary(256 div 8)}. -fate_channel() -> {channel, non_zero_binary(256 div 8)}. +fate_integer() -> {call, aeb_fate_data, make_integer, [oneof([int(), largeint()])]}. +fate_bits() -> {call, aeb_fate_data, make_bits, [oneof([int(), largeint()])]}. +fate_boolean() -> {call, aeb_fate_data, make_boolean, [elements([true, false])]}. +fate_nil() -> {call, aeb_fate_data, make_list, [[]]}. +fate_unit() -> {call, aeb_fate_data, make_unit, []}. +fate_string() -> {call, aeb_fate_data, make_string, [?SUCHTHAT(S, utf8(), [ quote || <<34>> <= S ] == [])]}. +fate_address() -> {call, aeb_fate_data, make_address, [non_zero_binary(256 div 8)]}. +fate_hash() -> {call, aeb_fate_data, make_hash, [non_zero_binary(32)]}. +fate_signature() -> {call, aeb_fate_data, make_signature, [non_zero_binary(64)]}. +fate_contract() -> {call, aeb_fate_data, make_contract, [non_zero_binary(256 div 8)]}. +fate_oracle() -> {call, aeb_fate_data, make_oracle, [non_zero_binary(256 div 8)]}. +fate_name() -> {call, aeb_fate_data, make_name, [non_zero_binary(256 div 8)]}. +fate_channel() -> {call, aeb_fate_data, make_channel, [non_zero_binary(256 div 8)]}. %% May shrink to fate_unit fate_tuple(ListGen) -> - {tuple, ?LET(Elements, ListGen, list_to_tuple(Elements))}. + {call, aeb_fate_data, make_tuple, [?LET(Elements, ListGen, list_to_tuple(Elements))]}. fate_variant(TupleGen) -> ?LET({L1, L2, Tuple}, {list(choose(0, 255)), list(choose(0,255)), TupleGen}, - {variant, L1 ++ [size(Tuple)] ++ L2, length(L1), Tuple}). + {call, aeb_fate_data, make_variant, [L1 ++ [size(Tuple)] ++ L2, length(L1), Tuple]}). fate_list(Gen) -> - oneof([fate_nil(), ?SHRINK(list(Gen), [fate_nil()])]). + {call, aeb_fate_data, make_list, [oneof([fate_nil(), ?SHRINK(list(Gen), [fate_nil()])])]}. fate_map(KeyGen, ValGen) -> - map(KeyGen, ValGen). + {call, aeb_fate_data, make_map, [map(KeyGen, ValGen)]}. non_zero_binary(N) ->