File: token-template-bench.pl

package info (click to toggle)
libsession-token-perl 1.503-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 196 kB
  • sloc: ansic: 166; perl: 90; makefile: 3
file content (45 lines) | stat: -rw-r--r-- 728 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
use strict;

use Benchmark qw(:all);

use String::Random;
use Session::Token;



my $sr = String::Random->new;
$sr->{x} = [ 'A' .. 'F' ];
$sr->{y} = [ 'a' .. 'z' ];
$sr->{z} = [ '0' .. '9' ];



sub token_template {
  my (%m) = @_;

  %m = map { $_ => Session::Token->new(alphabet => $m{$_}, length => 1) }
           keys %m;

  return sub {
    my $v = shift;
    $v =~ s/(.)/exists $m{$1} ? $m{$1}->get : $1/eg;
    return $v;
  };
}

my $st = token_template(
           x => [ 'A' .. 'F' ],
           y => [ 'a' .. 'z' ],
           z => [ '0' .. '9' ],
         );



timethese(500_000, {
  'String::Random' => sub {
    $sr->randpattern('xxyyyzyyzzz');
  },
  'Session::Token' => sub {
    $st->('xxyyyzyyzzz');
  },
});