The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
########################################
# test all methods in basic fashion
# adapted from babel.044.pdups_hand
########################################
use t::lib;
use t::utilBabel;
use pdups_wide;
use Test::More;
use Data::Babel;
use strict;

init();
my $output_idtypes=\@regular_idtypes;;

#  translate, count
my $output_idtypes=\@regular_idtypes;
my $correct=select_ur
  (babel=>$babel,
   input_idtype=>'type_001',input_ids=>'type_001/a_001',filters=>{type_003=>'type_003/a_001'},
   output_idtypes=>$output_idtypes);
my $actual=$babel->$OP
  (input_idtype=>'type_001',input_ids=>'type_001/a_001',filters=>{type_003=>'type_003/a_001'},
   output_idtypes=>$output_idtypes);
cmp_op($actual,$correct,$OP,"$OP one id - selection 1",__FILE__,__LINE__);

my $output_idtypes=\@leaf_idtypes;
my $correct=select_ur
  (babel=>$babel,
   input_idtype=>'type_001',input_ids=>'type_001/a_001',
   filters=>{type_002=>'type_002/a_001',type_003=>'type_003/a_001'},
   output_idtypes=>$output_idtypes);
my $actual=$babel->$OP
  (input_idtype=>'type_001',input_ids=>'type_001/a_001',
   filters=>{type_002=>'type_002/a_001',type_003=>'type_003/a_001'},
   output_idtypes=>$output_idtypes);
cmp_op($actual,$correct,$OP,"$OP one id - selection 2",__FILE__,__LINE__);

my $output_idtypes=\@xyz_idtypes;
my $correct=select_ur
  (babel=>$babel,
   input_idtype=>'type_leaf_001',input_ids=>'type_leaf_001/a_001',
   output_idtypes=>$output_idtypes);
my $actual=$babel->$OP
   (input_idtype=>'type_leaf_001',input_ids=>'type_leaf_001/a_001',
   output_idtypes=>$output_idtypes);
cmp_op($actual,$correct,$OP,"$OP one id - selection 3",__FILE__,__LINE__);

# mutiple ids
my $output_idtypes=\@regular_idtypes;
my @input_ids=map {"type_001/a_$_"} qw(001 002);
my @filter_ids=map {"type_003/a_$_"} qw(001 002);
my $correct=select_ur
  (babel=>$babel,input_idtype=>'type_001',input_ids=>\@input_ids,
   filters=>{type_003=>\@filter_ids},
   output_idtypes=>$output_idtypes);
my $actual=$babel->$OP
  (input_idtype=>'type_001',input_ids=>\@input_ids,filters=>{type_003=>\@filter_ids},
   output_idtypes=>$output_idtypes);
cmp_op($actual,$correct,$OP,"$OP multiple ids",__FILE__,__LINE__);

# validate
my @input_ids=map {("type_001/a_$_","type_000/valid_$_","type_000/invalid_$_")} qw(001 002);
my $correct=select_ur
  (babel=>$babel,input_idtype=>'type_001',input_ids=>\@input_ids,
   filters=>{type_003=>\@filter_ids},validate=>0,
   output_idtypes=>$output_idtypes);
my $actual=$babel->$OP
  (input_idtype=>'type_001',input_ids=>\@input_ids,
   filters=>{type_003=>\@filter_ids},validate=>0,
   output_idtypes=>$output_idtypes);
cmp_op($actual,$correct,$OP,"$OP before validate",__FILE__,__LINE__);

my $correct=select_ur
  (babel=>$babel,input_idtype=>'type_001',input_ids=>\@input_ids,
   filters=>{type_003=>\@filter_ids},validate=>1,
   output_idtypes=>$output_idtypes);
my $actual=$babel->$OP
  (input_idtype=>'type_001',input_ids=>\@input_ids,
   filters=>{type_003=>\@filter_ids},validate=>1,
   output_idtypes=>$output_idtypes);
cmp_op($actual,$correct,$OP,"$OP validate",__FILE__,__LINE__);

# select from each idtype
my $output_idtypes=\@regular_idtypes;
for my $input_idtype (@idtypes) {
  my $input_id="$input_idtype/a_001";
  my $correct=select_ur
    (babel=>$babel,input_idtype=>$input_idtype,input_ids=>$input_id,
     output_idtypes=>$output_idtypes);
  my $actual=$babel->$OP
    (input_idtype=>$input_idtype,input_ids=>$input_id,output_idtypes=>$output_idtypes);
  cmp_op($actual,$correct,$OP,"$input_idtype $OP one id",__FILE__,__LINE__);
}

done_testing();