<div dir="ltr">Hi,<div><br></div><div>I bumped in the problem how clean up after property in PropEr. Let's have simple property where I make ets table:</div><div><br></div><div>prop_ets() -></div><div>    ?FORALL(V, integer(),</div><div>        begin</div><div>            E = ets:new(),</div><div>            true = ets:insert(T, {V, ok}),</div><div>            equals([{V, ok}], ets:lookup(T, V))</div><div>        end</div><div>    ).</div><div><br></div><div>How am I supposed to delete ets table? It is trickier than looks like. The problem is when I want use another ?FORALL inside my property. The conjunction/1 is the same problem. You can`t write</div><div><br></div><div><div>prop_ets() -></div><div>    ?FORALL(V, integer(),</div><div>        begin</div><div>            E = ets:new(),</div><div>            true = ets:insert(T, {V, ok}),</div><div>            Res = conjunction([{lookup, equals([{V, ok}], ets:lookup(T, V))},</div><div>                              {lookup_element, equals(ok, ets:lookup_element(T, V, 2))}]),</div><div>            ets:delete(T),</div><div>            Res</div><div>        end</div><div>    ).</div></div><div><br></div><div>Because Res is test(). In this case, you can make calls to the ets:lookup/2 and the ets:lookup_element/3 before conjunction/1 but it doesn't solve properties like</div><div><br></div><div>?FORALL(L, list(...),</div><div>    begin</div><div>        T = ets:new(),</div><div>        ...</div><div>        ?FORALL(V, oneof(L),</div><div>              ...</div><div>        )</div><div>     end</div><div>)</div><div><br></div><div>The solution would be simple is every test case would be run in a separate process, but it is not! It is very unusual in Erlang word to make such thing. Processes are cheap and I can they are in a defined state each run for free. Why is it all running in the same process?</div><div><br></div><div>Has anybody solved this problem somehouw?</div><div><br></div><div>Hynek Vychodil</div></div>