#!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.02 of bench-levenshtein-modules (from Perl distribution App-BenchLevenshteinModules), released on 2015-09-22.

=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                 124990+-210/s                --                       -49.9%                -82.7%              -98.0%
 PERLANCAR::Text::Levenshtein      249530+-310/s      99.64+-0.42%                           --                -65.5%              -96.1%
 Text::Levenshtein::XS             722790+-200/s     478.28+-0.98%                189.67+-0.37%                    --              -88.7%
 Text::LevenshteinXS          6.37956e+06+-940/s      5004.1+-8.6%                 2456.7+-3.2%                782.6%                  --
 
 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                 41907+-12/s                --                       -32.6%                -92.6%              -99.2%
 PERLANCAR::Text::Levenshtein      62172+-23/s             48.4%                           --                -89.1%              -98.8%
 Text::Levenshtein::XS           569537+-7.6/s           1259.0%                       816.1%                    --              -88.8%
 Text::LevenshteinXS          5.08e+06+-2100/s          12021.9%                      8070.8%                791.9%                  --
 
 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                    9192+-18/s                --                       -41.9%                -97.6%              -99.6%
 PERLANCAR::Text::Levenshtein     15828.8+-6.4/s       72.2+-0.34%                           --                -95.8%              -99.3%
 Text::Levenshtein::XS             380030+-480/s      4034.4+-9.6%                 2300.9+-3.2%                    --              -84.2%
 Text::LevenshteinXS          2.4072e+06+-1100/s        26088+-53%                     15107.7%         533.42+-0.85%                  --
 
 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               3655.6+-2.8/s                --                       -40.5%                -98.6%              -99.7%
 PERLANCAR::Text::Levenshtein      6141.4+-8/s         68+-0.26%                           --                -97.6%              -99.5%
 Text::Levenshtein::XS           257970+-330/s         6957+-11%                 4100.5+-7.7%                    --              -79.9%
 Text::LevenshteinXS          1.28098e+06+-0/s          34941.4%                   20758+-27%         396.56+-0.64%                  --

=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
