[erlang-questions] Cannot make PropEr bitstring(B, U) generator to work
Manolis Papadakis
manopapad@REDACTED
Tue Sep 11 16:40:41 CEST 2012
PropEr first tries to resolve the expression "bitstring(8, 1)" to a
generator, but that fails, because bitstring/2 is not a predefined
generator, and there's no custom generator with that signature declared
inside the module.
PropEr then tries to find a type with that name, but that fails as well:
bitstring/2 is not a predifined type (the way to express the same thing
in the type language is <<_:8,_:_*1>>), and there's no local type with
that signature.
Quick fix: If you're OK with using only unit values of either 8 or 1,
then you can use the predefined generator binary(Base) or
bitstring(Base) respectively. If you need other unit values, you'll have
to write a custom generator.
One might have expected something like the following to work:
-type my_bitstring() :: <<_:16, _:_*3>>.
prop_foo() -> ?FORALL(B, my_bitstring(), true).
But PropEr will currently reject this for unit values other than 1 and
8, because I suck at predicting what features people will want to use,
and thought this was a safe one to skip.
On 09/11/2012 05:06 PM, Motiejus Jakštys wrote:
> Hi,
>
> I cannot get bitstring(B, U) to work. Here is a test case:
>
> ?FORALL(
> B,
> bitstring(8, 1),
> true
> ).
>
> I get this error when trying to execute it:
>
> Error: The typeserver encountered an error:
> {missing_type,demobucket_prop_eunit,{type,bitstring,2}}.
>
> What am I doing wrong?
>
> Tested on PropEr v1.0 and v1.0-62-g80c2c73 (latest master).
>
> Thanks,
> Motiejus Jakštys
>
More information about the erlang-questions
mailing list