#!perl

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

use App::BenchLevenshteinModules qw(@modules);
use Benchmark::Dumb qw(cmpthese);
use Module::Load;

no strict 'refs';
for my $args (
    ["a","aa"],
    ["foo","bar"],
    ["program","porgram"],
    ["transporter", "transporteur"],
) {
    say "$args->[0],$args->[1]:";
    my $prev_res;
    my $bench_arg = {};
    for my $mod (@modules) {
        load $mod->[0];
        my $res = &{"$mod->[0]::$mod->[1]"}(@$args);
        say "  result with $mod->[0]: $res";
        if (defined($prev_res) && $res != $prev_res) { warn "Different result" }
        $prev_res = $res;
        $bench_arg->{$mod->[0]} = eval "sub { $mod->[0]::$mod->[1]('$args->[0]','$args->[1]') }";
        die if $@;
    }
    cmpthese(0, $bench_arg);
    say "";
}

# ABSTRACT: Benchmark various modules calculating the Levenshtein edit distance
# PODNAME: bench-levenshtein-modules

__END__

=pod

=encoding UTF-8

=head1 NAME

bench-levenshtein-modules - Benchmark various modules calculating the Levenshtein edit distance

=head1 VERSION

This document describes version 0.01 of bench-levenshtein-modules (from Perl distribution App-BenchLevenshteinModules), released on 2015-09-18.

=head1 DESCRIPTION

Sample result:

 a,aa:
   result with PERLANCAR::Text::Levenshtein: 1
   result with Text::Levenshtein: 1
   result with Text::Levenshtein::XS: 1
   result with Text::LevenshteinXS: 1
                                            Rate Text::Levenshtein PERLANCAR::Text::Levenshtein Text::Levenshtein::XS Text::LevenshteinXS
 Text::Levenshtein                 158060+-330/s                --                       -46.8%                -81.1%              -97.8%
 PERLANCAR::Text::Levenshtein      297140+-150/s      87.99+-0.41%                           --                -64.5%              -95.9%
 Text::Levenshtein::XS            836900+-2000/s       429.5+-1.7%                 181.66+-0.7%                    --              -88.5%
 Text::LevenshteinXS          7.2867e+06+-7300/s         4510+-11%                 2352.3+-2.7%           770.6+-2.3%                  --
 
 foo,bar:
   result with PERLANCAR::Text::Levenshtein: 3
   result with Text::Levenshtein: 3
   result with Text::Levenshtein::XS: 3
   result with Text::LevenshteinXS: 3
                                            Rate Text::Levenshtein PERLANCAR::Text::Levenshtein Text::Levenshtein::XS Text::LevenshteinXS
 Text::Levenshtein                   52951+-19/s                --                       -28.2%                -92.2%              -99.1%
 PERLANCAR::Text::Levenshtein       73750+-140/s      39.27+-0.27%                           --                -89.1%              -98.7%
 Text::Levenshtein::XS              676462+-64/s           1177.5%                  817.3+-1.7%                    --              -88.4%
 Text::LevenshteinXS          5.825e+06+-43000/s        10900+-81%                    7798+-60%           761.1+-6.3%                  --
 
 program,porgram:
   result with PERLANCAR::Text::Levenshtein: 2
   result with Text::Levenshtein: 2
   result with Text::Levenshtein::XS: 2
   result with Text::LevenshteinXS: 2
                                            Rate Text::Levenshtein PERLANCAR::Text::Levenshtein Text::Levenshtein::XS Text::LevenshteinXS
 Text::Levenshtein                   11987+-13/s                --                       -36.0%                -97.3%              -99.6%
 PERLANCAR::Text::Levenshtein   18723.5+-0.048/s      56.19+-0.18%                           --                -95.8%              -99.4%
 Text::Levenshtein::XS             441980+-140/s      3587.1+-4.3%                      2260.6%                    --              -85.3%
 Text::LevenshteinXS          3.001e+06+-22000/s       24940+-190%                  15930+-120%               579+-5%                  --
 
 transporter,transporteur:
   result with PERLANCAR::Text::Levenshtein: 1
   result with Text::Levenshtein: 1
   result with Text::Levenshtein::XS: 1
   result with Text::LevenshteinXS: 1
                                           Rate Text::Levenshtein PERLANCAR::Text::Levenshtein Text::Levenshtein::XS Text::LevenshteinXS
 Text::Levenshtein                4783.4+-4.5/s                --                       -34.1%                -98.4%              -99.7%
 PERLANCAR::Text::Levenshtein       7259+-2.8/s      51.76+-0.15%                           --                -97.6%              -99.5%
 Text::Levenshtein::XS            308560+-630/s         6351+-15%                 4150.7+-8.9%                    --              -80.8%
 Text::LevenshteinXS          1.606e+06+-2100/s        33474+-54%                   22024+-30%           420.5+-1.3%                  --

=head1 HOMEPAGE

Please visit the project's homepage at L<https://metacpan.org/release/App-BenchLevenshteinModules>.

=head1 SOURCE

Source repository is at L<https://github.com/perlancar/perl-App-BenchLevenshteinModules>.

=head1 BUGS

Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=App-BenchLevenshteinModules>

When submitting a bug or request, please include a test-file or a
patch to an existing test-file that illustrates the bug or desired
feature.

=head1 AUTHOR

perlancar <perlancar@cpan.org>

=head1 COPYRIGHT AND LICENSE

This software is copyright (c) 2015 by perlancar@cpan.org.

This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.

=cut
