Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/hirokidaichi/p5-data-enumerator

data generator
https://github.com/hirokidaichi/p5-data-enumerator

Last synced: 7 days ago
JSON representation

data generator

Awesome Lists containing this project

README

        

NAME
Data::Enumerator - some iterator utilities for perl

SYNOPSIS
use Data::Enumerator qw/pattern generator/;

my $cases = generator(
{ hoge => pattern(qw/a b c/),
fuga => pattern(qw/x y z/),
fixed => 0
}
);

for my $case ( $cases->list ){
print pp($case);
}

# { hoge => 'a',fuga => 'x'}
# { hoge => 'a',fuga => 'y'}
# { hoge => 'a',fuga => 'z'}
# { hoge => 'b',fuga => 'x'}
# { hoge => 'b',fuga => 'y'}
# { hoge => 'b',fuga => 'z'}
# { hoge => 'c',fuga => 'x'}
# { hoge => 'c',fuga => 'y'}
# { hoge => 'c',fuga => 'z'}

DESCRIPTION
Data::Enumerator is utilities for iteration and test data generation
like itertools in python or C# IEnumerable.

This module is marked EXPERIMENTAL. API could be changed without any
notice.

pattern
to create an iterator by a provided list.

my $gen = pattern(qw/a b c/);
# $gen->list => ('a','b','c')

a generator can product another generator

my $gen = pattern(qw/a b c/)->product(pattern(qw/x y/));
# $gen->list
# ["a", "x"],
# ["a", "y"],
# ["b", "x"],
# ["b", "y"],
# ["c", "x"],
# ["c", "y"],

generator
to create all pattern of data structure which contains pattern.

my $users = generator({
sex => pattern(qw/male female/),
age => range(10,90,5),
category => pattern(qw/elf human dwarf gnome lizardman/)
})

this code is a syntax sugar of the following code:

my $user = pattern(qw/male female/)
->product( range(10,90,5) )
->product( pattern(qw/elf human dwarf gnome lizardman/))
->select(sub{
+{ sex => $_[0]->[0],age => $_[0]->[1],category => $_[0]->[2]}
});

so you can enumerate all pattern of users.

$user->each(sub{
my $user = shift;
$ do stuff
});

AUTHOR
Daichi Hiroki

SEE ALSO
LICENSE
This library is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.