App-Test-Generator
view release on metacpan or search on metacpan
lib/App/Test/Generator/BenchmarkGenerator.pm view on Meta::CPAN
sort keys %$input;
my $args = join(', ', @pairs);
$call = $has_new ? "\$obj->$function($args)"
: "${module}::$function($args)";
}
return $call;
}
# --------------------------------------------------
# _representative_value
#
# Purpose: Return a Perl literal string that is a plausible representative
# value for a parameter given its schema spec. The choice is
# informed by type, min, max, and enum constraints.
#
# Entry: $spec - hashref with at minimum a 'type' key
#
# Exit: Returns a Perl literal string (e.g. '42', "'hello'", 'undef').
# --------------------------------------------------
sub _representative_value {
my ($spec) = @_;
return 'undef' unless defined $spec;
my $type = lc($spec->{type} // 'string');
if($type eq 'number' || $type eq 'integer' || $type eq 'float') {
my $min = $spec->{min};
my $max = $spec->{max};
my $default = $TYPE_DEFAULTS{$type} // 42;
if(defined $min && looks_like_number($min) && defined $max && looks_like_number($max)) {
return int(($min + $max) / 2);
}
if(defined $min && looks_like_number($min)) {
# pick the type default if it already satisfies >= min, else min+1
return $default > $min ? $default : $min + 1;
}
if(defined $max && looks_like_number($max)) {
# pick the type default if it already satisfies <= max, else max-1
return $default < $max ? $default : $max - 1;
}
return $default;
}
return $TYPE_DEFAULTS{$type} // "'value'";
}
# --------------------------------------------------
# _quote_value
#
# Purpose: Quote a scalar value for use in generated Perl source.
#
# Entry: $v - scalar value (undef, number, or string)
#
# Exit: Returns a Perl literal string.
# --------------------------------------------------
sub _quote_value {
my ($v) = @_;
return 'undef' unless defined $v;
return $v if looks_like_number($v);
(my $escaped = $v) =~ s/'/\\'/g;
return "'$escaped'";
}
=head1 AUTHOR
Nigel Horne
=head1 LICENSE
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
=cut
1;
( run in 1.455 second using v1.01-cache-2.11-cpan-788537b7465 )