Add test cases for ScanCopyUnescapedString
diff --git a/test/unittest/simdtest.cpp b/test/unittest/simdtest.cpp
index a81b4c1..b01b559 100644
--- a/test/unittest/simdtest.cpp
+++ b/test/unittest/simdtest.cpp
@@ -100,13 +100,15 @@
         memcpy(buffer, str, length + 1);
         return true;
     }
-    char buffer[1024 + 5];
+    char buffer[1024 + 5 + 32];
 };
 
 template <unsigned parseFlags, typename StreamType>
 void TestScanCopyUnescapedString() {
     char buffer[1024 + 5 + 32];
+    char backup[1024 + 5 + 32];
 
+    // Test "ABCDABCD...\\"
     for (size_t offset = 0; offset < 32; offset++) {
         for (size_t step = 0; step < 1024; step++) {
             char* json = buffer + offset;
@@ -118,16 +120,41 @@
             *p++ = '\\';
             *p++ = '\"';
             *p++ = '\0';
+            strcpy(backup, json); // insitu parsing will overwrite buffer, so need to backup first
 
             StreamType s(json);
             Reader reader;
             ScanCopyUnescapedStringHandler h;
             reader.Parse<parseFlags>(s, h);
-            EXPECT_TRUE(memcmp(h.buffer, json + 1, step) == 0);
+            EXPECT_TRUE(memcmp(h.buffer, backup + 1, step) == 0);
             EXPECT_EQ('\\', h.buffer[step]);    // escaped
             EXPECT_EQ('\0', h.buffer[step + 1]);
         }
     }
+
+    // Test "\\ABCDABCD..."
+    for (size_t offset = 0; offset < 32; offset++) {
+        for (size_t step = 0; step < 1024; step++) {
+            char* json = buffer + offset;
+            char *p = json;
+            *p++ = '\"';
+            *p++ = '\\';
+            *p++ = '\\';
+            for (size_t i = 0; i < step; i++)
+                *p++ = "ABCD"[i % 4];
+            *p++ = '\"';
+            *p++ = '\0';
+            strcpy(backup, json); // insitu parsing will overwrite buffer, so need to backup first
+
+            StreamType s(json);
+            Reader reader;
+            ScanCopyUnescapedStringHandler h;
+            reader.Parse<parseFlags>(s, h);
+            EXPECT_TRUE(memcmp(h.buffer + 1, backup + 3, step) == 0);
+            EXPECT_EQ('\\', h.buffer[0]);    // escaped
+            EXPECT_EQ('\0', h.buffer[step + 1]);
+        }
+    }
 }
 
 TEST(SIMD, SIMD_SUFFIX(ScanCopyUnescapedString)) {