package Bencher::Scenario::Accessors::Get;

our $AUTHORITY = 'cpan:PERLANCAR'; # AUTHORITY
our $DATE = '2021-08-03'; # DATE
our $DIST = 'Bencher-Scenarios-Accessors'; # DIST
our $VERSION = '0.150'; # VERSION

use 5.010001;
use strict;
use warnings;

use Bencher::ScenarioUtil::Accessors;

my $classes = \%Bencher::ScenarioUtil::Accessors::classes;

our $scenario = {
    summary => 'Benchmark attribute read/get',
    modules => {
        # include the generator modules here so we can show their versions in
        # sample benchmark results produced by PWP:Bencher::Scenario
        (map { $_=>0 } grep {defined} map { $classes->{$_}{generator} }
             keys %$classes),
    },
    participants => [
        (map {
            my $spec = $classes->{$_};
            my $supports_setters = $spec->{supports_setters} // 1;
            +{
                name => $spec->{generator} || $spec->{name},
                module => $_,
                code_template => $supports_setters ?
                    "state \$o = do { my \$o = ${_}->new; \$o->".($spec->{setter_name} // "attr1")."(42); \$o }; \$o->attr1" :
                    "state \$o = do { my \$o = ${_}->new(attr1 => 42); \$o }; \$o->attr1",
            };
        } grep { !$classes->{$_}{immutable} } keys %$classes),

        # also compare with raw hash & array access
        {
            name => 'raw hash access',
            module => 'Perl::Examples::Accessors::Hash',
            code_template => "state \$o = do { my \$o = Perl::Examples::Accessors::Hash->new; \$o->attr1(42); \$o }; \$o->{attr1}",
        },
        {
            name => 'raw array access',
            module => 'Perl::Examples::Accessors::Array',
            code_template => "state \$o = do { my \$o = Perl::Examples::Accessors::Array->new; \$o->attr1(42); \$o }; \$o->[0]",
        },
    ],
    result => 42,
};

1;
# ABSTRACT: Benchmark attribute read/get

__END__

=pod

=encoding UTF-8

=head1 NAME

Bencher::Scenario::Accessors::Get - Benchmark attribute read/get

=head1 VERSION

This document describes version 0.150 of Bencher::Scenario::Accessors::Get (from Perl distribution Bencher-Scenarios-Accessors), released on 2021-08-03.

=head1 SYNOPSIS

To run benchmark with default option:

 % bencher -m Accessors::Get

To run module startup overhead benchmark:

 % bencher --module-startup -m Accessors::Get

For more options (dump scenario, list/include/exclude/add participants, list/include/exclude/add datasets, etc), see L<bencher> or run C<bencher --help>.

=head1 DESCRIPTION

Packaging a benchmark script as a Bencher scenario makes it convenient to include/exclude/add participants/datasets (either via CLI or Perl code), send the result to a central repository, among others . See L<Bencher> and L<bencher> (CLI) for more details.

=head1 BENCHMARKED MODULES

Version numbers shown below are the versions used when running the sample benchmark.

L<Class::Accessor> 0.51

L<Class::Accessor::Array> 0.032

L<Class::Accessor::PackedString> 0.001

L<Class::Accessor::PackedString::Set> 0.001

L<Class::InsideOut> 1.14

L<Class::Struct> 0.66

L<Class::Tiny> 1.008

L<Class::XSAccessor> 1.19

L<Class::XSAccessor::Array> 1.19

L<Mo> 0.40

L<Mojo::Base>

L<Mojo::Base::XS> 0.07

L<Moo> 2.004004

L<Moops> 0.038

L<Moos> 0.30

L<Moose> 2.2015

L<Mouse> v2.5.10

L<Object::Pad> 0.46

L<Object::Simple> 3.19

L<Object::Tiny> 1.09

L<Object::Tiny::RW> 1.07

L<Object::Tiny::RW::XS> 0.04

L<Object::Tiny::XS> 1.01

L<Perl::Examples::Accessors::Array> 0.132

L<Perl::Examples::Accessors::ClassAccessor> 0.132

L<Perl::Examples::Accessors::ClassAccessorArray> 0.132

L<Perl::Examples::Accessors::ClassAccessorPackedString> 0.132

L<Perl::Examples::Accessors::ClassAccessorPackedStringSet> 0.132

L<Perl::Examples::Accessors::ClassInsideOut> 0.132

L<Perl::Examples::Accessors::ClassStruct> 0.132

L<Perl::Examples::Accessors::ClassTiny> 0.132

L<Perl::Examples::Accessors::ClassXSAccessor> 0.132

L<Perl::Examples::Accessors::ClassXSAccessorArray> 0.132

L<Perl::Examples::Accessors::Hash> 0.132

L<Perl::Examples::Accessors::Mo> 0.132

L<Perl::Examples::Accessors::MojoBase> 0.132

L<Perl::Examples::Accessors::MojoBaseXS> 0.132

L<Perl::Examples::Accessors::Moo> 0.132

L<Perl::Examples::Accessors::Moops> 0.132

L<Perl::Examples::Accessors::Moos> 0.132

L<Perl::Examples::Accessors::Moose> 0.132

L<Perl::Examples::Accessors::Mouse> 0.132

L<Perl::Examples::Accessors::ObjectPad> 0.132

L<Perl::Examples::Accessors::ObjectSimple> 0.132

L<Perl::Examples::Accessors::ObjectTiny> 0.132

L<Perl::Examples::Accessors::ObjectTinyRW> 0.132

L<Perl::Examples::Accessors::ObjectTinyRWXS> 0.132

L<Perl::Examples::Accessors::ObjectTinyXS> 0.132

L<Perl::Examples::Accessors::SimpleAccessor> 0.132

L<Simple::Accessor> 1.13

=head1 BENCHMARK PARTICIPANTS

=over

=item * Class::Accessor::PackedString (perl_code)

Code template:

 state $o = do { my $o = Perl::Examples::Accessors::ClassAccessorPackedString->new; $o->attr1(42); $o }; $o->attr1



=item * Class::Accessor::Array (perl_code)

Code template:

 state $o = do { my $o = Perl::Examples::Accessors::ClassAccessorArray->new; $o->attr1(42); $o }; $o->attr1



=item * Mojo::Base (perl_code)

Code template:

 state $o = do { my $o = Perl::Examples::Accessors::MojoBase->new; $o->attr1(42); $o }; $o->attr1



=item * Object::Tiny (perl_code)

Code template:

 state $o = do { my $o = Perl::Examples::Accessors::ObjectTiny->new(attr1 => 42); $o }; $o->attr1



=item * Simple::Accessor (perl_code)

Code template:

 state $o = do { my $o = Perl::Examples::Accessors::SimpleAccessor->new; $o->attr1(42); $o }; $o->attr1



=item * Object::Tiny::RW (perl_code)

Code template:

 state $o = do { my $o = Perl::Examples::Accessors::ObjectTinyRW->new; $o->attr1(42); $o }; $o->attr1



=item * Moose (perl_code)

Code template:

 state $o = do { my $o = Perl::Examples::Accessors::Moose->new; $o->attr1(42); $o }; $o->attr1



=item * Moos (perl_code)

Code template:

 state $o = do { my $o = Perl::Examples::Accessors::Moos->new; $o->attr1(42); $o }; $o->attr1



=item * Object::Pad (perl_code)

Code template:

 state $o = do { my $o = Perl::Examples::Accessors::ObjectPad->new; $o->set_attr1(42); $o }; $o->attr1



=item * Object::Tiny::XS (perl_code)

Code template:

 state $o = do { my $o = Perl::Examples::Accessors::ObjectTinyXS->new(attr1 => 42); $o }; $o->attr1



=item * Mouse (perl_code)

Code template:

 state $o = do { my $o = Perl::Examples::Accessors::Mouse->new; $o->attr1(42); $o }; $o->attr1



=item * Mo (perl_code)

Code template:

 state $o = do { my $o = Perl::Examples::Accessors::Mo->new; $o->attr1(42); $o }; $o->attr1



=item * Object::Simple (perl_code)

Code template:

 state $o = do { my $o = Perl::Examples::Accessors::ObjectSimple->new; $o->attr1(42); $o }; $o->attr1



=item * Moops (perl_code)

Code template:

 state $o = do { my $o = Perl::Examples::Accessors::Moops->new; $o->attr1(42); $o }; $o->attr1



=item * Class::Struct (perl_code)

Code template:

 state $o = do { my $o = Perl::Examples::Accessors::ClassStruct->new; $o->attr1(42); $o }; $o->attr1



=item * Class::XSAccessor (perl_code)

Code template:

 state $o = do { my $o = Perl::Examples::Accessors::ClassXSAccessor->new; $o->attr1(42); $o }; $o->attr1



=item * Object::Tiny::RW::XS (perl_code)

Code template:

 state $o = do { my $o = Perl::Examples::Accessors::ObjectTinyRWXS->new; $o->attr1(42); $o }; $o->attr1



=item * no generator (array-based) (perl_code)

Code template:

 state $o = do { my $o = Perl::Examples::Accessors::Array->new; $o->attr1(42); $o }; $o->attr1



=item * Moo (perl_code)

Code template:

 state $o = do { my $o = Perl::Examples::Accessors::Moo->new; $o->attr1(42); $o }; $o->attr1



=item * Class::InsideOut (perl_code)

Code template:

 state $o = do { my $o = Perl::Examples::Accessors::ClassInsideOut->new; $o->attr1(42); $o }; $o->attr1



=item * Mojo::Base::XS (perl_code)

Code template:

 state $o = do { my $o = Perl::Examples::Accessors::MojoBaseXS->new; $o->attr1(42); $o }; $o->attr1



=item * Class::Accessor (perl_code)

Code template:

 state $o = do { my $o = Perl::Examples::Accessors::ClassAccessor->new; $o->attr1(42); $o }; $o->attr1



=item * Class::Tiny (perl_code)

Code template:

 state $o = do { my $o = Perl::Examples::Accessors::ClassTiny->new; $o->attr1(42); $o }; $o->attr1



=item * no generator (hash-based) (perl_code)

Code template:

 state $o = do { my $o = Perl::Examples::Accessors::Hash->new; $o->attr1(42); $o }; $o->attr1



=item * Class::Accessor::PackedString::Set (perl_code)

Code template:

 state $o = do { my $o = Perl::Examples::Accessors::ClassAccessorPackedStringSet->new; $o->attr1(42); $o }; $o->attr1



=item * Class::XSAccessor::Array (perl_code)

Code template:

 state $o = do { my $o = Perl::Examples::Accessors::ClassXSAccessorArray->new; $o->attr1(42); $o }; $o->attr1



=item * raw hash access (perl_code)

Code template:

 state $o = do { my $o = Perl::Examples::Accessors::Hash->new; $o->attr1(42); $o }; $o->{attr1}



=item * raw array access (perl_code)

Code template:

 state $o = do { my $o = Perl::Examples::Accessors::Array->new; $o->attr1(42); $o }; $o->[0]



=back

=head1 BENCHMARK SAMPLE RESULTS

=head2 Sample benchmark #1

Run on: perl: I<< v5.34.0 >>, CPU: I<< Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz (4 cores) >>, OS: I<< GNU/Linux LinuxMint version 19 >>, OS kernel: I<< Linux version 5.3.0-68-generic >>.

Benchmark command (default options):

 % bencher -m Accessors::Get

Result formatted as table:

 #table1#
 +------------------------------------+------------+-----------+-----------------------+-----------------------+---------+---------+
 | participant                        |  rate (/s) | time (ns) | pct_faster_vs_slowest | pct_slower_vs_fastest |  errors | samples |
 +------------------------------------+------------+-----------+-----------------------+-----------------------+---------+---------+
 | Class::Accessor::PackedString::Set |    2000000 |       600 |                 0.00% |            -10483.94% | 1.6e-08 |      21 |
 | Class::Accessor::Array             |    2200000 |       460 |                23.99% |             -8475.01% | 2.3e-09 |      20 |
 | Object::Pad                        |    2000000 |       400 |                37.22% |             -7667.54% | 5.2e-09 |      20 |
 | Class::Accessor::PackedString      |    2000000 |       400 |                38.66% |             -7588.70% | 1.7e-08 |      20 |
 | Class::Accessor                    |    3000000 |       400 |                44.98% |             -7262.48% | 2.1e-08 |      20 |
 | Class::InsideOut                   |    3000000 |       400 |                61.32% |             -6536.79% | 6.9e-09 |      21 |
 | Mo                                 |    3000000 |       300 |                80.30% |             -5859.41% | 1.3e-08 |      20 |
 | Mojo::Base                         |    4000000 |       200 |               137.49% |             -4472.46% | 1.2e-08 |      20 |
 | Simple::Accessor                   |    4000000 |       200 |               139.63% |             -4433.24% | 5.7e-09 |      20 |
 | Class::Tiny                        |    5000000 |       200 |               166.06% |             -4002.89% | 1.2e-08 |      21 |
 | no generator (hash-based)          |    5000000 |       200 |               203.33% |             -3523.27% | 3.6e-09 |      21 |
 | no generator (array-based)         |    6000000 |       200 |               231.72% |             -3230.31% | 4.1e-09 |      20 |
 | Class::Struct                      |    6000000 |       170 |               242.10% |             -3135.35% |   1e-09 |      20 |
 | Object::Simple                     |    6000000 |       200 |               264.60% |             -2948.05% | 3.7e-09 |      20 |
 | Object::Tiny::RW                   |    7000000 |       100 |               322.42% |             -2558.21% | 3.6e-09 |      20 |
 | Moose                              |    8000000 |       100 |               327.94% |             -2526.49% | 4.3e-09 |      20 |
 | Object::Tiny::XS                   |    8000000 |       100 |               335.23% |             -2485.84% | 1.7e-09 |      20 |
 | Mojo::Base::XS                     |    9000000 |       100 |               391.55% |             -2212.50% | 5.9e-09 |      28 |
 | Moops                              |    9000000 |       100 |               403.91% |             -2160.65% | 7.9e-09 |      20 |
 | Moos                               |   10000000 |       100 |               475.19% |             -1905.31% | 6.7e-09 |      35 |
 | raw hash access                    |   10000000 |        90 |               501.10% |             -1827.49% | 2.2e-09 |      22 |
 | Object::Tiny                       |   11000000 |        94 |               505.39% |             -1815.25% | 8.7e-10 |      20 |
 | Mouse                              |   12000000 |        81 |               600.65% |             -1582.04% | 4.8e-10 |      20 |
 | Moo                                |   16000000 |        63 |               807.87% |             -1243.77% |   3e-10 |      20 |
 | Object::Tiny::RW::XS               |   20000000 |        60 |               848.65% |             -1194.60% | 1.3e-09 |      20 |
 | Class::XSAccessor                  |   20000000 |        40 |              1277.21% |              -853.98% | 1.9e-09 |      22 |
 | Class::XSAccessor::Array           |   40000000 |        20 |              2411.56% |              -513.45% | 1.5e-09 |      20 |
 | raw array access                   | -200000000 |        -5 |            -10483.94% |                 0.00% | 2.2e-10 |      20 |
 +------------------------------------+------------+-----------+-----------------------+-----------------------+---------+---------+


The above result formatted in L<Benchmark.pm|Benchmark> style:

                                              Rate  Class::Accessor::PackedString::Set  Class::Accessor::Array  Object::Pad  Class::Accessor::PackedString  Class::Accessor  Class::InsideOut      Mo  Mojo::Base  Simple::Accessor  Class::Tiny  no generator (hash-based)  no generator (array-based)  Object::Simple  Class::Struct  Object::Tiny::RW   Moose  Object::Tiny::XS  Mojo::Base::XS   Moops    Moos  Object::Tiny  raw hash access   Mouse     Moo  Object::Tiny::RW::XS  Class::XSAccessor  Class::XSAccessor::Array  raw array access 
  Class::Accessor::PackedString::Set     2000000/s                                  --                    -23%         -33%                           -33%             -33%              -33%    -50%        -66%              -66%         -66%                       -66%                        -66%            -66%           -71%              -83%    -83%              -83%            -83%    -83%    -83%          -84%             -85%    -86%    -89%                  -90%               -93%                      -96%             -100% 
  Class::Accessor::Array                 2200000/s                                 30%                      --         -13%                           -13%             -13%              -13%    -34%        -56%              -56%         -56%                       -56%                        -56%            -56%           -63%              -78%    -78%              -78%            -78%    -78%    -78%          -79%             -80%    -82%    -86%                  -86%               -91%                      -95%             -101% 
  Object::Pad                            2000000/s                                 50%                     14%           --                             0%               0%                0%    -25%        -50%              -50%         -50%                       -50%                        -50%            -50%           -57%              -75%    -75%              -75%            -75%    -75%    -75%          -76%             -77%    -79%    -84%                  -85%               -90%                      -95%             -101% 
  Class::Accessor::PackedString          2000000/s                                 50%                     14%           0%                             --               0%                0%    -25%        -50%              -50%         -50%                       -50%                        -50%            -50%           -57%              -75%    -75%              -75%            -75%    -75%    -75%          -76%             -77%    -79%    -84%                  -85%               -90%                      -95%             -101% 
  Class::Accessor                        3000000/s                                 50%                     14%           0%                             0%               --                0%    -25%        -50%              -50%         -50%                       -50%                        -50%            -50%           -57%              -75%    -75%              -75%            -75%    -75%    -75%          -76%             -77%    -79%    -84%                  -85%               -90%                      -95%             -101% 
  Class::InsideOut                       3000000/s                                 50%                     14%           0%                             0%               0%                --    -25%        -50%              -50%         -50%                       -50%                        -50%            -50%           -57%              -75%    -75%              -75%            -75%    -75%    -75%          -76%             -77%    -79%    -84%                  -85%               -90%                      -95%             -101% 
  Mo                                     3000000/s                                100%                     53%          33%                            33%              33%               33%      --        -33%              -33%         -33%                       -33%                        -33%            -33%           -43%              -66%    -66%              -66%            -66%    -66%    -66%          -68%             -70%    -73%    -79%                  -80%               -86%                      -93%             -101% 
  Mojo::Base                             4000000/s                                200%                    129%         100%                           100%             100%              100%     50%          --                0%           0%                         0%                          0%              0%           -15%              -50%    -50%              -50%            -50%    -50%    -50%          -53%             -55%    -59%    -68%                  -70%               -80%                      -90%             -102% 
  Simple::Accessor                       4000000/s                                200%                    129%         100%                           100%             100%              100%     50%          0%                --           0%                         0%                          0%              0%           -15%              -50%    -50%              -50%            -50%    -50%    -50%          -53%             -55%    -59%    -68%                  -70%               -80%                      -90%             -102% 
  Class::Tiny                            5000000/s                                200%                    129%         100%                           100%             100%              100%     50%          0%                0%           --                         0%                          0%              0%           -15%              -50%    -50%              -50%            -50%    -50%    -50%          -53%             -55%    -59%    -68%                  -70%               -80%                      -90%             -102% 
  no generator (hash-based)              5000000/s                                200%                    129%         100%                           100%             100%              100%     50%          0%                0%           0%                         --                          0%              0%           -15%              -50%    -50%              -50%            -50%    -50%    -50%          -53%             -55%    -59%    -68%                  -70%               -80%                      -90%             -102% 
  no generator (array-based)             6000000/s                                200%                    129%         100%                           100%             100%              100%     50%          0%                0%           0%                         0%                          --              0%           -15%              -50%    -50%              -50%            -50%    -50%    -50%          -53%             -55%    -59%    -68%                  -70%               -80%                      -90%             -102% 
  Object::Simple                         6000000/s                                200%                    129%         100%                           100%             100%              100%     50%          0%                0%           0%                         0%                          0%              --           -15%              -50%    -50%              -50%            -50%    -50%    -50%          -53%             -55%    -59%    -68%                  -70%               -80%                      -90%             -102% 
  Class::Struct                          6000000/s                                252%                    170%         135%                           135%             135%              135%     76%         17%               17%          17%                        17%                         17%             17%             --              -41%    -41%              -41%            -41%    -41%    -41%          -44%             -47%    -52%    -62%                  -64%               -76%                      -88%             -102% 
  Object::Tiny::RW                       7000000/s                                500%                    359%         300%                           300%             300%              300%    200%        100%              100%         100%                       100%                        100%            100%            70%                --      0%                0%              0%      0%      0%           -6%              -9%    -18%    -37%                  -40%               -60%                      -80%             -105% 
  Moose                                  8000000/s                                500%                    359%         300%                           300%             300%              300%    200%        100%              100%         100%                       100%                        100%            100%            70%                0%      --                0%              0%      0%      0%           -6%              -9%    -18%    -37%                  -40%               -60%                      -80%             -105% 
  Object::Tiny::XS                       8000000/s                                500%                    359%         300%                           300%             300%              300%    200%        100%              100%         100%                       100%                        100%            100%            70%                0%      0%                --              0%      0%      0%           -6%              -9%    -18%    -37%                  -40%               -60%                      -80%             -105% 
  Mojo::Base::XS                         9000000/s                                500%                    359%         300%                           300%             300%              300%    200%        100%              100%         100%                       100%                        100%            100%            70%                0%      0%                0%              --      0%      0%           -6%              -9%    -18%    -37%                  -40%               -60%                      -80%             -105% 
  Moops                                  9000000/s                                500%                    359%         300%                           300%             300%              300%    200%        100%              100%         100%                       100%                        100%            100%            70%                0%      0%                0%              0%      --      0%           -6%              -9%    -18%    -37%                  -40%               -60%                      -80%             -105% 
  Moos                                  10000000/s                                500%                    359%         300%                           300%             300%              300%    200%        100%              100%         100%                       100%                        100%            100%            70%                0%      0%                0%              0%      0%      --           -6%              -9%    -18%    -37%                  -40%               -60%                      -80%             -105% 
  Object::Tiny                          11000000/s                                538%                    389%         325%                           325%             325%              325%    219%        112%              112%         112%                       112%                        112%            112%            80%                6%      6%                6%              6%      6%      6%            --              -4%    -13%    -32%                  -36%               -57%                      -78%             -105% 
  raw hash access                       10000000/s                                566%                    411%         344%                           344%             344%              344%    233%        122%              122%         122%                       122%                        122%            122%            88%               11%     11%               11%             11%     11%     11%            4%               --     -9%    -30%                  -33%               -55%                      -77%             -105% 
  Mouse                                 12000000/s                                640%                    467%         393%                           393%             393%              393%    270%        146%              146%         146%                       146%                        146%            146%           109%               23%     23%               23%             23%     23%     23%           16%              11%      --    -22%                  -25%               -50%                      -75%             -106% 
  Moo                                   16000000/s                                852%                    630%         534%                           534%             534%              534%    376%        217%              217%         217%                       217%                        217%            217%           169%               58%     58%               58%             58%     58%     58%           49%              42%     28%      --                   -4%               -36%                      -68%             -107% 
  Object::Tiny::RW::XS                  20000000/s                                900%                    666%         566%                           566%             566%              566%    400%        233%              233%         233%                       233%                        233%            233%           183%               66%     66%               66%             66%     66%     66%           56%              50%     35%      5%                    --               -33%                      -66%             -108% 
  Class::XSAccessor                     20000000/s                               1400%                   1050%         900%                           900%             900%              900%    650%        400%              400%         400%                       400%                        400%            400%           325%              150%    150%              150%            150%    150%    150%          135%             125%    102%     57%                   50%                 --                      -50%             -112% 
  Class::XSAccessor::Array              40000000/s                               2900%                   2200%        1900%                          1900%            1900%             1900%   1400%        900%              900%         900%                       900%                        900%            900%           750%              400%    400%              400%            400%    400%    400%          370%             350%    305%    215%                  200%               100%                        --             -125% 
  raw array access                    -200000000/s                             -12100%                  -9300%       -8100%                         -8100%           -8100%            -8100%  -6100%      -4100%            -4100%       -4100%                     -4100%                      -4100%          -4100%         -3500%            -2100%  -2100%            -2100%          -2100%  -2100%  -2100%        -1980%           -1900%  -1720%  -1360%                -1300%              -900%                     -500%                -- 
 
 Legends:
   Class::Accessor: participant=Class::Accessor
   Class::Accessor::Array: participant=Class::Accessor::Array
   Class::Accessor::PackedString: participant=Class::Accessor::PackedString
   Class::Accessor::PackedString::Set: participant=Class::Accessor::PackedString::Set
   Class::InsideOut: participant=Class::InsideOut
   Class::Struct: participant=Class::Struct
   Class::Tiny: participant=Class::Tiny
   Class::XSAccessor: participant=Class::XSAccessor
   Class::XSAccessor::Array: participant=Class::XSAccessor::Array
   Mo: participant=Mo
   Mojo::Base: participant=Mojo::Base
   Mojo::Base::XS: participant=Mojo::Base::XS
   Moo: participant=Moo
   Moops: participant=Moops
   Moos: participant=Moos
   Moose: participant=Moose
   Mouse: participant=Mouse
   Object::Pad: participant=Object::Pad
   Object::Simple: participant=Object::Simple
   Object::Tiny: participant=Object::Tiny
   Object::Tiny::RW: participant=Object::Tiny::RW
   Object::Tiny::RW::XS: participant=Object::Tiny::RW::XS
   Object::Tiny::XS: participant=Object::Tiny::XS
   Simple::Accessor: participant=Simple::Accessor
   no generator (array-based): participant=no generator (array-based)
   no generator (hash-based): participant=no generator (hash-based)
   raw array access: participant=raw array access
   raw hash access: participant=raw hash access

The above result presented as chart:

=begin html

<img src="data:image/png;base64, " />

=end html


To display as an interactive HTML table on a browser, you can add option C<--format html+datatables>.

=head1 HOMEPAGE

Please visit the project's homepage at L<https://metacpan.org/release/Bencher-Scenarios-Accessors>.

=head1 SOURCE

Source repository is at L<https://github.com/perlancar/perl-Bencher-Scenarios-Accessors>.

=head1 BUGS

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

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 SEE ALSO

=head1 AUTHOR

perlancar <perlancar@cpan.org>

=head1 COPYRIGHT AND LICENSE

This software is copyright (c) 2021, 2017, 2016 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
