Skip to content

Commit 1989ccb

Browse files
committed
Deflake FailedMutations test
1 parent f62086c commit 1989ccb

File tree

2 files changed

+10
-4
lines changed

2 files changed

+10
-4
lines changed

src/mutator.cc

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -561,6 +561,7 @@ void Mutator::CrossOver(const Message& message1, Message* message2,
561561
messages.push_back(message2);
562562
ConstMessages sources;
563563
sources.push_back(&message1);
564+
sources.push_back(message2);
564565
int size_increase_hint = static_cast<int>(max_size_hint) -
565566
static_cast<int>(message2->ByteSizeLong());
566567
MutateImpl(sources, messages, true, size_increase_hint);
@@ -591,8 +592,6 @@ bool Mutator::MutateImpl(const ConstMessages& sources, const Messages& messages,
591592
MutationSampler mutation(keep_initialized_, mutations, &random_);
592593
for (Message* message : messages) mutation.Sample(message);
593594

594-
// Don't try same mutation next time.
595-
mutations[static_cast<size_t>(mutation.mutation())] = false;
596595
switch (mutation.mutation()) {
597596
case Mutation::None:
598597
return true;
@@ -610,7 +609,11 @@ bool Mutator::MutateImpl(const ConstMessages& sources, const Messages& messages,
610609
DataSourceSampler source_sampler(mutation.field(), &random_,
611610
size_increase_hint);
612611
for (const Message* source : sources) source_sampler.Sample(*source);
613-
if (source_sampler.IsEmpty()) return true; // CreateField is enough.
612+
if (source_sampler.IsEmpty()) {
613+
if (!IsProto3SimpleField(*mutation.field().descriptor()))
614+
return true; // CreateField is enough for proto2.
615+
break;
616+
}
614617
CopyField()(source_sampler.field(), mutation.field());
615618
return true;
616619
}
@@ -626,6 +629,9 @@ bool Mutator::MutateImpl(const ConstMessages& sources, const Messages& messages,
626629
assert(false && "unexpected mutation");
627630
return false;
628631
}
632+
633+
// Don't try same mutation next time.
634+
mutations[static_cast<size_t>(mutation.mutation())] = false;
629635
}
630636
return false;
631637
}

src/mutator_test.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -601,7 +601,7 @@ TYPED_TEST(MutatorTypedTest, FailedMutations) {
601601
}
602602

603603
// CrossOver may fail but very rare.
604-
EXPECT_LT(crossovers, 10u);
604+
EXPECT_LT(crossovers, 100u);
605605
}
606606

607607
TYPED_TEST(MutatorTypedTest, RegisterPostProcessor) {

0 commit comments

Comments
 (0)