ok(!$re->stats_dup(), "stats dup empty");
$re = new Regexp_Assemble();
is($re->stats_add(), 0, "stats_add empty");
is($re->stats_raw(), 0, "stats_raw empty");
is($re->stats_cooked(), 0, "stats_cooked empty");
is($re->stats_dup(), 0, "stats_dup empty");
is($re->stats_length(), 0, "stats_length empty");
$str = $re->as_string();
is($str, Regexp_Assemble::Always_Fail, "stats str empty");
# tricky!
is($re->stats_length(), 0, "stats len empty");
$re = new Regexp_Assemble();
$re->add('\\Q.+\\E', '\\Q.+\\E', '\\Q.*\\E');
is($re->stats_add(), 2, "stats_add 2");
is($re->stats_raw(), 18, "stats_raw 2");
is($re->stats_cooked(), 8, "stats_cooked 2");
is($re->stats_dup(), 1, "stats_dup 2");
is($re->stats_length(), 0, "stats_length 2");
$str = $re->as_string();
is($str, '\\.[*+]', "stats str 2");
is($re->stats_length(), 6, "stats len 2 <{$str}>");
# CPAN bug #24171
# given a list of strings
$str = ['a b', 'awb', 'a1b', 'bar', "a\nb"];
foreach (array('s', 'w', 'd') as $meta) {
    # given a list of patterns
    $re_list = ["a\\{$meta}b", "a\\@{[uc{$meta}]}b"];
    # produce an assembled pattern
    $r = new Regexp_Assemble();
    $re = $r->add($re_list)->re();
    $r2 = new Regexp_Assemble();