Add test to check that mutator is actually change messages.
diff --git a/src/protobuf_mutator.proto b/src/protobuf_mutator.proto
index d0f81e2..6be6f95 100644
--- a/src/protobuf_mutator.proto
+++ b/src/protobuf_mutator.proto
@@ -93,7 +93,9 @@
     Msg oneof_msg = 68;
   }
 
-  map<string, uint64> map = 69;
+  // TODO(vitalybuka): Tests maps.
+  // map<string, uint64> map = 69;
+  // map<int32, bytes> map2 = 71;
 
   required group Group = 70 {
     required bool required_bool = 1;
diff --git a/src/protobuf_mutator_test.cc b/src/protobuf_mutator_test.cc
index d23dcdc..e227723 100644
--- a/src/protobuf_mutator_test.cc
+++ b/src/protobuf_mutator_test.cc
@@ -475,14 +475,28 @@
   EXPECT_EQ(1 << 6, sets.size());
 }
 
-TYPED_TEST(ProtobufMutatorTypedTest, SmallBenchmark) {
+TYPED_TEST(ProtobufMutatorTypedTest, FailedMutations) {
   TestProtobufMutator mutator(false);
-  for (int i = 0; i < 100000; ++i) {
-    typename TestFixture::Message message;
+  size_t crossovers = 0;
+  for (int i = 0; i < 10000; ++i) {
+    typename TestFixture::Message messages[2];
+    typename TestFixture::Message tmp;
     for (int j = 0; j < 20; ++j) {
-      mutator.Mutate(&message, 1000);
+      for (auto& m : messages) {
+        tmp.CopyFrom(m);
+        mutator.Mutate(&m, 1000);
+        // Mutate must not produce the same result.
+        EXPECT_FALSE(MessageDifferencer::Equals(m, tmp));
+      }
     }
+
+    tmp.CopyFrom(messages[1]);
+    mutator.CrossOver(messages[0], &tmp);
+    if (MessageDifferencer::Equals(tmp, messages[1])) ++crossovers;
   }
+
+  // CrossOver may fail but very rare.
+  EXPECT_LT(crossovers, 100);
 }
 
 TYPED_TEST(ProtobufMutatorTypedTest, Size) {