Add Clone test
diff --git a/src/mutator_test.cc b/src/mutator_test.cc
index 63367e8..fe93181 100644
--- a/src/mutator_test.cc
+++ b/src/mutator_test.cc
@@ -491,46 +491,41 @@
   EXPECT_TRUE(Mutate(*m1_, *m2_));
 }
 
-class MutatorFieldTest : public MutatorTest {
- public:
-  template <class Msg>
-  void TestCopyField();
-};
-INSTANTIATE_TEST_SUITE_P(Proto2, MutatorFieldTest,
+INSTANTIATE_TEST_SUITE_P(Proto2, MutatorTest,
                          ValuesIn(GetFieldTestParams<Msg>(
                              {kRequiredFields, kOptionalFields, kRepeatedFields,
                               kRequiredNestedFields, kRequiredInAnyFields,
                               kOptionalNestedFields, kOptionalInAnyFields,
                               kRepeatedNestedFields, kRepeatedInAnyFields,
                               kOptionalInDeepAnyFields})));
-INSTANTIATE_TEST_SUITE_P(Proto3, MutatorFieldTest,
+INSTANTIATE_TEST_SUITE_P(Proto3, MutatorTest,
                          ValuesIn(GetFieldTestParams<Msg3>(
                              {kOptionalFields, kRepeatedFields,
                               kOptionalNestedFields, kOptionalInAnyFields,
                               kRepeatedNestedFields, kRepeatedInAnyFields,
                               kOptionalInDeepAnyFields})));
 
-TEST_P(MutatorFieldTest, Initialized) {
+TEST_P(MutatorTest, Initialized) {
   LoadWithoutLine(m1_.get());
   TestMutator mutator(true);
   mutator.Mutate(m1_.get(), 1000);
   EXPECT_TRUE(m1_->IsInitialized());
 }
 
-TEST_P(MutatorFieldTest, InsertField) {
+TEST_P(MutatorTest, InsertField) {
   LoadWithoutLine(m1_.get());
   LoadWithChangedLine(m2_.get(), 1);
   EXPECT_TRUE(Mutate(*m1_, *m2_));
 }
 
-TEST_P(MutatorFieldTest, ChangeField) {
+TEST_P(MutatorTest, ChangeField) {
   LoadWithChangedLine(m1_.get(), 0);
   LoadWithChangedLine(m2_.get(), 1);
   EXPECT_TRUE(Mutate(*m1_, *m2_, 1000000));
   EXPECT_TRUE(Mutate(*m2_, *m1_, 1000000));
 }
 
-TEST_P(MutatorFieldTest, CrossOver) {
+TEST_P(MutatorTest, CrossOver) {
   LoadWithoutLine(m1_.get());
   LoadMessage(m2_.get());
 
@@ -541,29 +536,37 @@
 }
 
 template <class Msg>
-void MutatorFieldTest::TestCopyField() {
+void RunCrossOver(const protobuf::Message& m1, const protobuf::Message& m2) {
+  Msg from;
+  from.add_repeated_msg()->CopyFrom(m1);
+  from.add_repeated_msg()->CopyFrom(m2);
+  from.mutable_repeated_msg(1)->add_repeated_string("repeated_string");
+
+  Msg to;
+  to.add_repeated_msg()->CopyFrom(m1);
+  to.add_repeated_msg()->CopyFrom(m1);
+  to.mutable_repeated_msg(1)->add_repeated_string("repeated_string");
+  EXPECT_TRUE(CrossOver(from, from, to));
+}
+
+TEST_P(MutatorTest, CopyField) {
   LoadWithChangedLine(m1_.get(), 7);
   LoadWithChangedLine(m2_.get(), 0);
 
-  for (int i = 0; i < 2; ++i, m1_.swap(m2_)) {
-    Msg from;
-    from.add_repeated_msg()->CopyFrom(*m1_);
-    from.add_repeated_msg()->CopyFrom(*m2_);
-    from.mutable_repeated_msg(1)->add_repeated_string("repeated_string");
-
-    Msg to;
-    to.add_repeated_msg()->CopyFrom(*m1_);
-    to.add_repeated_msg()->CopyFrom(*m1_);
-    to.mutable_repeated_msg(1)->add_repeated_string("repeated_string");
-    EXPECT_TRUE(CrossOver(from, from, to));
-  }
+  if (m1_->GetDescriptor() == Msg::descriptor())
+    RunCrossOver<Msg>(*m1_, *m2_);
+  else
+    RunCrossOver<Msg3>(*m1_, *m2_);
 }
 
-TEST_P(MutatorFieldTest, CopyField) {
+TEST_P(MutatorTest, CloneField) {
+  LoadWithChangedLine(m1_.get(), 7);
+  LoadWithoutLine(m2_.get());
+
   if (m1_->GetDescriptor() == Msg::descriptor())
-    TestCopyField<Msg>();
+    RunCrossOver<Msg>(*m1_, *m2_);
   else
-    TestCopyField<Msg3>();
+    RunCrossOver<Msg3>(*m1_, *m2_);
 }
 
 class MutatorSingleFieldTest : public MutatorTest {};