297297% %% <dt>`{stop_nodes, boolean()}'</dt>
298298% %% <dd> Specifies whether parallel PropEr should stop the nodes after running a property
299299% %% or not. Defaults to true.</dd>
300+ % %% <dt>`{default_atom_generator, atom | existing_atom}'</dt>
301+ % %% <dd> Declares the type of atom generator to use in the {@link proper_types:any/0. `any()'}
302+ % %% to be either {@link proper_types:atom/0. `atom()'} or
303+ % %% {@link proper_types:existing_atom/0. `existing_atom()'}.</dd>
300304% %% </dl>
301305% %%
302306% %% == Spec testing ==
539543 | 'quiet'
540544 | 'verbose'
541545 | pos_integer ()
546+ | {'default_atom_generator' , 'atom' | 'existing_atom' }
542547 | {'constraint_tries' ,pos_integer ()}
543548 | {'false_positive_mfas' ,false_positive_mfas ()}
544549 | {'max_shrinks' ,non_neg_integer ()}
556561 | {'to_file' ,io :device ()}.
557562
558563-type user_opts () :: [user_opt ()] | user_opt ().
559- -record (opts , {output_fun = fun io :format /2 :: output_fun (),
560- long_result = false :: boolean (),
561- numtests = 100 :: pos_integer (),
562- search_steps = 1000 :: pos_integer (),
563- search_strategy = proper_sa :: proper_target :strategy (),
564- start_size = 1 :: proper_gen :size (),
565- seed = os :timestamp () :: proper_gen :seed (),
566- max_size = 42 :: proper_gen :size (),
567- max_shrinks = 500 :: non_neg_integer (),
568- noshrink = false :: boolean (),
569- constraint_tries = 50 :: pos_integer (),
570- expect_fail = false :: boolean (),
571- any_type :: {'type' , proper_types :type ()} | 'undefined' ,
572- spec_timeout = infinity :: timeout (),
573- skip_mfas = [] :: [mfa ()],
574- false_positive_mfas :: false_positive_mfas (),
575- setup_funs = [] :: [setup_fun ()],
576- numworkers = 0 :: non_neg_integer (),
577- property_type = pure :: purity (),
578- strategy_fun = default_strategy_fun () :: strategy_fun (),
579- stop_nodes = true :: boolean (),
580- parent = self () :: pid (),
581- nocolors = false :: boolean ()}).
564+ -record (opts , {output_fun = fun io :format /2 :: output_fun (),
565+ long_result = false :: boolean (),
566+ numtests = 100 :: pos_integer (),
567+ search_steps = 1000 :: pos_integer (),
568+ search_strategy = proper_sa :: proper_target :strategy (),
569+ start_size = 1 :: proper_gen :size (),
570+ seed = os :timestamp () :: proper_gen :seed (),
571+ max_size = 42 :: proper_gen :size (),
572+ max_shrinks = 500 :: non_neg_integer (),
573+ noshrink = false :: boolean (),
574+ constraint_tries = 50 :: pos_integer (),
575+ expect_fail = false :: boolean (),
576+ any_type :: {'type' , proper_types :type ()} | 'undefined' ,
577+ default_atom_generator = atom :: 'atom' | 'existing_atom' ,
578+ spec_timeout = infinity :: timeout (),
579+ skip_mfas = [] :: [mfa ()],
580+ false_positive_mfas :: false_positive_mfas (),
581+ setup_funs = [] :: [setup_fun ()],
582+ numworkers = 0 :: non_neg_integer (),
583+ property_type = pure :: purity (),
584+ strategy_fun = default_strategy_fun () :: strategy_fun (),
585+ stop_nodes = true :: boolean (),
586+ parent = self () :: pid (),
587+ nocolors = false :: boolean ()}).
582588-type opts () :: # opts {}.
583589-record (ctx , {mode = new :: 'new' | 'try_shrunk' | 'try_cexm' ,
584590 bound = [] :: imm_testcase () | counterexample (),
@@ -744,8 +750,10 @@ global_state_init_size_seed(Size, Seed) ->
744750-spec global_state_init (opts ()) -> 'ok' .
745751global_state_init (# opts {start_size = StartSize , constraint_tries = CTries ,
746752 search_strategy = Strategy , search_steps = SearchSteps ,
747- any_type = AnyType , seed = Seed , numworkers = NumWorkers } = Opts ) ->
753+ any_type = AnyType , seed = Seed , numworkers = NumWorkers ,
754+ default_atom_generator = DefaultAtomGen } = Opts ) ->
748755 clean_garbage (),
756+ put ('$default_atom_generator' , DefaultAtomGen ),
749757 put ('$size' , StartSize - 1 ),
750758 put ('$left' , 0 ),
751759 put ('$search_strategy' , Strategy ),
@@ -772,6 +780,8 @@ global_state_reset(#opts{start_size = StartSize} = Opts) ->
772780global_state_erase () ->
773781 proper_typeserver :stop (),
774782 proper_arith :rand_stop (),
783+ erase ('$default_atom_generator' ),
784+ erase ('$existing_atoms' ),
775785 erase ('$any_type' ),
776786 erase ('$constraint_tries' ),
777787 erase ('$left' ),
@@ -1039,6 +1049,8 @@ parse_opt(UserOpt, Opts) ->
10391049 N when is_integer (N ) ->
10401050 ? VALIDATE_OPT (? POS_INTEGER (N ), Opts # opts {numtests = N });
10411051 % % tuple options, sorted on tag
1052+ {default_atom_generator ,G } ->
1053+ ? VALIDATE_OPT (G =:= atom orelse G =:= existing_atom , Opts # opts {default_atom_generator = G });
10421054 {constraint_tries ,N } ->
10431055 ? VALIDATE_OPT (? POS_INTEGER (N ), Opts # opts {constraint_tries = N });
10441056 {false_positive_mfas ,F } ->
0 commit comments