#!perl -w

use strict;
use Config; printf "Perl/%vd (%s)\n", $^V, $Config{archname};

use Benchmark qw(:hireswallclock);
use Benchmark::Forking qw(cmpthese);

use Encode (); # pre-load for Interface::Test
use HTTP::Request ();

sub new_he{
    my($use_pp) = @_;
    $ENV{MOUSE_PUREPERL} = $use_pp;

    require HTTP::Engine;

    return HTTP::Engine->new(
        interface       => {
            module => 'Test',
            request_handler => sub {
                my($request) = @_;

                return HTTP::Engine::Response->new(body => "Hello, world!\n");
            },
        },
    );
}

my $req = HTTP::Request->new(GET => 'http://localhost/');

print "load HTTP::Engine, new(), and run()\n";
cmpthese -1 => {
     'XS' => sub {
        my $he  = new_he(0);
        $he->run($req, env => \%ENV);
     },
     'PP' => sub {
        my $he  = new_he(1);
        $he->run($req, env => \%ENV);
     },
};

print "load HTTP::Engine, new(), and run() * 100\n";
cmpthese -1 => {
     'XS' => sub {
        my $he  = new_he(0);
        $he->run($req, env => \%ENV) for 1 .. 100;
     },
     'PP' => sub {
        my $he = new_he(1);
        $he->run($req, env => \%ENV) for 1 .. 100;
     },
};

