Expand mem_release testcase to cover submessage merge (#615)

This also covers the fairly rarely used behavior of protobuf C++
library regarding oneof merges: if an oneof submessage occurs
multiple times in a message, their contents are merged together.
This behavior was also previously broken in nanopb.
diff --git a/tests/mem_release/mem_release.c b/tests/mem_release/mem_release.c
index 69d5f03..64b3172 100644
--- a/tests/mem_release/mem_release.c
+++ b/tests/mem_release/mem_release.c
@@ -133,13 +133,16 @@
             }
         }
 
-        /* Encode second with SubMessage, invoking 'merge' behaviour */
+        /* Encode second with SubMessage, replacing the oneof item */
         {
             OneofMessage msg = OneofMessage_init_zero;
+            char *teststr = "1";
             msg.which_msgs = OneofMessage_msg2_tag;
 
             msg.first = 999;
             msg.msgs.msg2.dynamic_str = "ABCD";
+            msg.msgs.msg2.dynamic_str_arr_count = 1;
+            msg.msgs.msg2.dynamic_str_arr = &teststr;
             msg.last = 888;
 
             if (!pb_encode(&stream, OneofMessage_fields, &msg))
@@ -148,6 +151,25 @@
                 return false;
             }
         }
+
+        /* Encode second SubMessage, invoking submessage merge behavior */
+        {
+            OneofMessage msg = OneofMessage_init_zero;
+            char *teststr = "2";
+            msg.which_msgs = OneofMessage_msg2_tag;
+
+            msg.first = 99;
+            msg.msgs.msg2.dynamic_str = "EFGH";
+            msg.msgs.msg2.dynamic_str_arr_count = 1;
+            msg.msgs.msg2.dynamic_str_arr = &teststr;
+            msg.last = 88;
+
+            if (!pb_encode(&stream, OneofMessage_fields, &msg))
+            {
+                fprintf(stderr, "Encode failed: %s\n", PB_GET_ERROR(&stream));
+                return false;
+            }
+        }
         msgsize = stream.bytes_written;
     }
 
@@ -160,13 +182,16 @@
             return false;
         }
 
-        TEST(msg.first == 999);
+        TEST(msg.first == 99);
         TEST(msg.which_msgs == OneofMessage_msg2_tag);
         TEST(msg.msgs.msg2.dynamic_str);
-        TEST(strcmp(msg.msgs.msg2.dynamic_str, "ABCD") == 0);
-        TEST(msg.msgs.msg2.dynamic_str_arr == NULL);
+        TEST(strcmp(msg.msgs.msg2.dynamic_str, "EFGH") == 0);
+        TEST(msg.msgs.msg2.dynamic_str_arr != NULL);
+        TEST(msg.msgs.msg2.dynamic_str_arr_count == 2);
+        TEST(strcmp(msg.msgs.msg2.dynamic_str_arr[0], "1") == 0);
+        TEST(strcmp(msg.msgs.msg2.dynamic_str_arr[1], "2") == 0);
         TEST(msg.msgs.msg2.dynamic_submsg == NULL);
-        TEST(msg.last == 888);
+        TEST(msg.last == 88);
 
         pb_release(OneofMessage_fields, &msg);
         TEST(get_alloc_count() == 0);