Improve sort algorithm for reorder, all test with smae name except for ending...

Improve sort algorithm for reorder, all test with smae name except for ending digit should be run after each other. 
Example of that is ndb_autodiscover[1-3]
parent 487e2506
...@@ -159,37 +159,71 @@ sub collect_test_cases ($) { ...@@ -159,37 +159,71 @@ sub collect_test_cases ($) {
{ {
my %sort_criteria; my %sort_criteria;
my $tinfo;
# Make a mapping of test name to a string that represents how that test # Make a mapping of test name to a string that represents how that test
# should be sorted among the other tests. Put the most important criterion # should be sorted among the other tests. Put the most important criterion
# first, then a sub-criterion, then sub-sub-criterion, et c. # first, then a sub-criterion, then sub-sub-criterion, et c.
foreach $tinfo (@$cases) foreach my $tinfo (@$cases)
{ {
my @this_criteria = (); my @criteria = ();
# Look for tests that muct be in run in a defined order
# that is defined by test having the same name except for
# the ending digit
# Put variables into hash
my $test_name= $tinfo->{'name'};
my $depend_on_test_name;
if ( $test_name =~ /^([\D]+)([0-9]{1})$/ )
{
my $base_name= $1;
my $idx= $2;
mtr_verbose("$test_name => $base_name idx=$idx");
if ( $idx > 1 )
{
$idx-= 1;
$base_name= "$base_name$idx";
mtr_verbose("New basename $base_name");
}
foreach my $tinfo2 (@$cases)
{
if ( $tinfo2->{'name'} eq $base_name )
{
mtr_verbose("found dependent test $tinfo2->{'name'}");
$depend_on_test_name=$base_name;
}
}
}
if ( defined $depend_on_test_name )
{
mtr_verbose("Giving $test_name same critera as $depend_on_test_name");
$sort_criteria{$test_name} = $sort_criteria{$depend_on_test_name};
}
else
{
# #
# Append the criteria for sorting, in order of importance. # Append the criteria for sorting, in order of importance.
# #
push(@criteria, "ndb=" . ($tinfo->{'ndb_test'} ? "1" : "0"));
push(@this_criteria, "ndb=" . ($tinfo->{'ndb_test'} ? "1" : "0")); push(@criteria, "restart=" . ($tinfo->{'master_restart'} ? "1" : "0"));
push(@this_criteria, "restart=" . ($tinfo->{'master_restart'} ? "1" : "0")); # Group test with equal options together.
# Group test with similar options together.
# Ending with "~" makes empty sort later than filled # Ending with "~" makes empty sort later than filled
push(@this_criteria, join("!", sort @{$tinfo->{'master_opt'}}) . "~"); push(@criteria, join("!", sort @{$tinfo->{'master_opt'}}) . "~");
# Finally, order by the name $sort_criteria{$test_name} = join(" ", @criteria);
push(@this_criteria, $tinfo->{'name'}); }
$sort_criteria{$tinfo->{"name"}} = join(" ", @this_criteria);
} }
@$cases = sort { $sort_criteria{$a->{"name"}} cmp $sort_criteria{$b->{"name"}}; } @$cases; @$cases = sort {
$sort_criteria{$a->{'name'}} . $a->{'name'} cmp
$sort_criteria{$b->{'name'}} . $b->{'name'}; } @$cases;
if ( $::opt_script_debug ) if ( $::opt_script_debug )
{ {
# For debugging the sort-order # For debugging the sort-order
foreach $tinfo (@$cases) foreach my $tinfo (@$cases)
{ {
print("$sort_criteria{$tinfo->{'name'}} -> \t$tinfo->{'name'}\n"); print("$sort_criteria{$tinfo->{'name'}} -> \t$tinfo->{'name'}\n");
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment