aboutsummaryrefslogtreecommitdiff
path: root/src/mutator.cc
diff options
context:
space:
mode:
authorVitaly Buka <vitalybuka@google.com>2017-03-16 11:50:40 -0700
committerVitaly Buka <vitalybuka@gmail.com>2017-03-16 15:38:33 -0700
commitb2c4fb59135711122b800376d8dc46af2fc9d060 (patch)
tree987f0a5feda6bd714142c5f83a8ff73bd417326a /src/mutator.cc
parent242a20ff50b898a55697f43756711470696d9cef (diff)
downloadlibprotobuf-mutator-b2c4fb59135711122b800376d8dc46af2fc9d060.tar.gz
Mutate message when we create new one.
Diffstat (limited to 'src/mutator.cc')
-rw-r--r--src/mutator.cc10
1 files changed, 8 insertions, 2 deletions
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 @@ class FieldMutator {
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);