Improve test coverage of strlen function
authorSunil K Pandey <skpgkp2@gmail.com>
Mon, 31 May 2021 18:08:12 +0000 (11:08 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Wed, 2 Jun 2021 12:37:43 +0000 (05:37 -0700)
This patch covers the following conditions:

- Strings start with different alignments and end at the page boundary
  with less than 64 byte length.
- Strings starts with different alignments and cross page boundary with
  fixed length.

Reviewed-by: H.J. Lu <hjl.tools@gmail.com>
string/test-strlen.c

index 6e67d1f..c9a7afb 100644 (file)
@@ -79,7 +79,7 @@ do_test (size_t align, size_t len)
 {
   size_t i;
 
-  align &= 63;
+  align &= (getpagesize () / sizeof (CHAR)) - 1;
   if (align + sizeof (CHAR) * len >= page_size)
     return;
 
@@ -160,6 +160,19 @@ test_main (void)
       do_test (sizeof (CHAR) * i, (size_t)((1 << i) / 1.5));
     }
 
+  /* Test strings near page boundary */
+
+  size_t maxlength = 64 / sizeof (CHAR) - 1;
+  size_t pagesize = getpagesize () / sizeof (CHAR);
+
+  for (i = maxlength ; i > 1; --i)
+    {
+      /* String stays on the same page.  */
+      do_test (pagesize - i, i - 1);
+      /* String crosses page boundary.  */
+      do_test (pagesize - i, maxlength);
+    }
+
   do_random_tests ();
   return ret;
 }