#!/usr/bin/env perl

use 5.010;
use strict;
use warnings;

use Benchmark::Dumb qw(cmpthese timethese);
#use Benchmark qw(timethese);
use Perinci::Sub::Normalize qw(normalize_function_metadata);

my $meta_noargs = {
    v => 1.1,
    summary => 'Some summary',
    description => <<'_',

Some description. Some description. Some description. Some description. Some
description. Some description. Some description. Some description. Some
description.

_
    args => {},
};

my $meta_1arg = {
    v => 1.1,
    summary => 'Some summary',
    description => <<'_',

Some description. Some description. Some description. Some description. Some
description. Some description. Some description. Some description. Some
description.

_
    args => {
        arg1 => {
            summary => 'Some summary',
            schema => 'str*',
            req => 1,
            pos => 0,
        },
    },
};

my $meta_typical = {
    v => 1.1,
    summary => 'Some summary',
    description => <<'_',

Some description. Some description. Some description. Some description. Some
description. Some description. Some description. Some description. Some
description.

_
    args => {
        arg1 => {
            summary => 'Some summary',
            schema => 'str*',
            req => 1,
            pos => 0,
        },
        arg2 => {
            summary => 'Some summary',
            schema => ['array*' => of => 'str*', min_len=>1],
            req => 1,
            pos => 1,
            greedy => 1,
        },
        arg3 => {
            summary => 'Some summary',
            schema => ['int*', min=>1, max=>100],
            req => 1,
        },
        arg4 => {
            summary => 'Some summary',
            schema => [bool => is=>1],
            cmdline_aliases => {f=>{is_flag=>1}},
        },
        arg5 => {
            summary => 'Some summary',
            schema => 'hash*',
        },
    },
};

timethese(0, {
    'minimal: {v=>1.1}' => sub { normalize_function_metadata({v=>1.1}) },
    'noargs'            => sub { normalize_function_metadata($meta_noargs) },
    '1arg'              => sub { normalize_function_metadata($meta_1arg) },
    'typical'           => sub { normalize_function_metadata($meta_typical) },
});
