Fuzz test aeb_fate_encoding
This commit is contained in:
parent
302c1c211d
commit
6f59ef7a7c
@ -21,5 +21,6 @@
|
|||||||
quickcheck_test_() ->
|
quickcheck_test_() ->
|
||||||
{setup, fun() -> eqc:start() end,
|
{setup, fun() -> eqc:start() end,
|
||||||
[ ?EQC_EUNIT(aefate_eqc, prop_roundtrip, 500),
|
[ ?EQC_EUNIT(aefate_eqc, prop_roundtrip, 500),
|
||||||
?EQC_EUNIT(aefate_eqc, prop_format_scan, 2000)
|
?EQC_EUNIT(aefate_eqc, prop_format_scan, 2000),
|
||||||
|
?EQC_EUNIT(aefate_eqc, prop_fuzz, 2000)
|
||||||
]}.
|
]}.
|
||||||
|
@ -49,6 +49,19 @@ prop_serializes() ->
|
|||||||
{size, size(Binary) < 500000}]))))
|
{size, size(Binary) < 500000}]))))
|
||||||
end)).
|
end)).
|
||||||
|
|
||||||
|
prop_fuzz() ->
|
||||||
|
in_parallel(
|
||||||
|
?FORALL(Binary, ?LET(FateData, fate_data(), aeb_fate_encoding:serialize(FateData)),
|
||||||
|
?FORALL(InjectedBin, injection(Binary),
|
||||||
|
try Org = aeb_fate_encoding:deserialize(InjectedBin),
|
||||||
|
NewBin = aeb_fate_coding:serialize(Org),
|
||||||
|
NewOrg = aeb_fate_coding:deserialize(NewBin),
|
||||||
|
?WHENFAIL(eqc:format("Deserialize ~p gives\n~p\nSerializes to ~p\n", [InjectedBin, Org, NewOrg]),
|
||||||
|
equals(NewBin, InjectedBin))
|
||||||
|
catch _:_ ->
|
||||||
|
true
|
||||||
|
end))).
|
||||||
|
|
||||||
fate_data() ->
|
fate_data() ->
|
||||||
?SIZED(Size, ?LET(Data, fate_data(Size, [map]), eqc_symbolic:eval(Data))).
|
?SIZED(Size, ?LET(Data, fate_data(Size, [map]), eqc_symbolic:eval(Data))).
|
||||||
|
|
||||||
@ -120,3 +133,11 @@ non_quote_string() ->
|
|||||||
|
|
||||||
char() ->
|
char() ->
|
||||||
choose(1, 255).
|
choose(1, 255).
|
||||||
|
|
||||||
|
injection(Binary) ->
|
||||||
|
?LET({N, Inj}, {choose(0, byte_size(Binary) - 1), choose(0,255)},
|
||||||
|
begin
|
||||||
|
M = N * 8,
|
||||||
|
<<X:M, _:8, Z/binary>> = Binary,
|
||||||
|
<<X:M, Inj:8, Z/binary>>
|
||||||
|
end).
|
||||||
|
Loading…
x
Reference in New Issue
Block a user