anchor.diff:      | {range, {integer, integer()}, {integer, integer()}}
       | {union, [tester_type()]}
       | {record, atom(), atom()}
  +    | nonempty_string
       | integer
       | pos_integer
       | non_neg_integer
  
positive.code:     | {range, {integer, integer()}, {integer, integer()}}
      | {union, [any()]}
      | {record, atom(), atom()}
      | integer
      | pos_integer
      | non_neg_integer
  
negative.code:             NewSize = erlang:max(1, (Size - ListLength) div ListLength),
              [create_value(Type, NewSize, TypeInfo) || _ <- lists:seq(1, ListLength)]
      end;
  create_value(nonempty_string, Size, TypeInfo) ->
      ListLength = erlang:max(1, erlang:min(Size, crypto:rand_uniform(list_length_min(),
                                                                      list_length_max() + 1))),
      Type = {range, {integer, 0}, {integer, 16#10ffff}},
      NewSize = erlang:max(1, (Size - ListLength) div ListLength),
      [create_value(Type, NewSize, TypeInfo) || _ <- lists:seq(1, ListLength)];
  create_value(integer, _Size, _TypeInfo) ->
      crypto:rand_uniform(integer_min(), integer_max() + 1);
  create_value(pos_integer, _Size, _TypeInfo) ->
  