Mutate message when we create new one.
diff --git a/src/field_instance.h b/src/field_instance.h
index 5ad89cb..4abe853 100644
--- a/src/field_instance.h
+++ b/src/field_instance.h
@@ -91,7 +91,10 @@
}
void GetDefault(std::unique_ptr<protobuf::Message>* out) const {
- out->reset();
+ out->reset(reflection()
+ .GetMessageFactory()
+ ->GetPrototype(descriptor_->message_type())
+ ->New());
}
void Load(int32_t* value) const {
diff --git a/src/mutator.cc b/src/mutator.cc
index 55b3ea3..a400fc8 100644
--- a/src/mutator.cc
+++ b/src/mutator.cc
@@ -378,15 +378,21 @@
size_increase_hint_));
}
- void Mutate(std::unique_ptr<Message>*) const {}
+ void Mutate(std::unique_ptr<Message>* message) const {
+ assert(!enforce_changes_);
+ assert(*message);
+ if (GetRandomBool(mutator_->random(), 100)) return;
+ mutator_->Mutate(message->get(), size_increase_hint_);
+ }
private:
template <class T, class F>
void RepeatMutate(T* value, F mutate,
size_t unchanged_one_out_of = 100) const {
if (!enforce_changes_ &&
- GetRandomBool(mutator_->random(), unchanged_one_out_of))
+ GetRandomBool(mutator_->random(), unchanged_one_out_of)) {
return;
+ }
T tmp = *value;
for (int i = 0; i < 10; ++i) {
*value = mutate(*value);