#!/usr/bin/env perl

use 5.010;
use strict;
use warnings;
use FindBin '$Bin';
use lib "$Bin/../lib";

use Benchmark::Dumb qw(cmpthese);
use Devel::Caller::Util qw(callers);

sub f5 { callers(undef, $_[1]) }
sub f4 { f5 }
sub f3 { f4 }
sub f2 { f3 }
sub f1 { f2 }

sub g10 { callers(undef, $_[1]) }
sub g9 { g10 }
sub g8 { g9 }
sub g7 { g8 }
sub g6 { g7 }
sub g5 { g6 }
sub g4 { g5 }
sub g3 { g4 }
sub g2 { g3 }
sub g1 { g2 }

cmpthese(
    0,
    {
        'callers (levels= +0)' => sub { callers },
        'callers (levels= +5)' => sub { f1 },
        'callers (levels=+10)' => sub { g1 },

        'callers (levels= +0, with_args +5)' => sub { callers(undef, 1, 3,4,5) },
        'callers (levels= +5, with_args +5)' => sub { f1(undef, 1, 3,4,5) },
        'callers (levels=+10, with_args +5)' => sub { g1(undef, 1, 3,4,5) },
    },
);
