This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch, master, updated. glibc-2.14-151-g16292ed


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  16292eddd77f66002e2104848e75a0fb4d316692 (commit)
       via  cb7e923b71493bde61b408a1e2c88895abac7ced (commit)
       via  cff8293390529d4c43d971d784cf1d2ad9171172 (commit)
      from  9be9bfcc9de543ac0ac335692cbbf8a0f46a2ccc (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sources.redhat.com/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=16292eddd77f66002e2104848e75a0fb4d316692

commit 16292eddd77f66002e2104848e75a0fb4d316692
Author: Ulrich Drepper <drepper@gmail.com>
Date:   Thu Aug 4 17:47:24 2011 -0400

    Provide better output in string tests
    
    If IMPL is called with a macro for the first parameter the macro does not
    get expanded before the string is stored in the impl_t data structure.

diff --git a/ChangeLog b/ChangeLog
index 9a0c04c..f8212a6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2011-08-04  Ulrich Drepper  <drepper@gmail.com>
 
+	* string/test-string.h (IMPL): Use __STRING to expand name and then
+	stringify it.
+
 	* string/test-strcmp.c: Unify most of the WIDE and !WIDE code.  Lots
 	of cleanups.
 
diff --git a/string/test-string.h b/string/test-string.h
index 1aea4c9..e384940 100644
--- a/string/test-string.h
+++ b/string/test-string.h
@@ -1,5 +1,5 @@
 /* Test and measure string and memory functions.
-   Copyright (C) 1999, 2002, 2004, 2008 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2002, 2004, 2008, 2011 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Written by Jakub Jelinek <jakub@redhat.com>, 1999.
 
@@ -18,6 +18,8 @@
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
+#include <sys/cdefs.h>
+
 typedef struct
 {
   const char *name;
@@ -29,7 +31,7 @@ extern impl_t __start_impls[], __stop_impls[];
 #define IMPL(name, test) \
   impl_t tst_ ## name							\
   __attribute__ ((section ("impls"), aligned (sizeof (void *))))	\
-    = { #name, (void (*) (void))name, test };
+       = { __STRING (name), (void (*) (void))name, test };
 
 #ifdef TEST_MAIN
 

http://sources.redhat.com/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=cb7e923b71493bde61b408a1e2c88895abac7ced

commit cb7e923b71493bde61b408a1e2c88895abac7ced
Author: Ulrich Drepper <drepper@gmail.com>
Date:   Thu Aug 4 17:43:30 2011 -0400

    Cleanup wcscmp test addition

diff --git a/ChangeLog b/ChangeLog
index 64e031e..9a0c04c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2011-08-04  Ulrich Drepper  <drepper@gmail.com>
+
+	* string/test-strcmp.c: Unify most of the WIDE and !WIDE code.  Lots
+	of cleanups.
+
 2011-07-22  Liubov Dmitrieva  <liubov.dmitrieva@gmail.com>
 
 	* string/Makefile: Update.
diff --git a/string/test-strcmp.c b/string/test-strcmp.c
index 908dc27..b8d85dc 100644
--- a/string/test-strcmp.c
+++ b/string/test-strcmp.c
@@ -25,48 +25,58 @@
 #ifdef WIDE
 # include <inttypes.h>
 # include <wchar.h>
-#endif
 
-#ifdef WIDE
 # define L(str) L##str
 # define STRCMP wcscmp
 # define STRCPY wcscpy
 # define STRLEN wcslen
+# define MEMCPY wmemcpy
 # define SIMPLE_STRCMP simple_wcscmp
 # define STUPID_STRCMP stupid_wcscmp
-typedef uint32_t unsigned_element_type;
-typedef uint32_t element_type;
-typedef int (*proto_t) (const uint32_t *, const uint32_t *);
+# define CHAR wchar_t
+# define UCHAR uint32_t
+# define CHARBYTES 4
+# define CHARBYTESLOG 2
+# define CHARALIGN __alignof__ (CHAR)
+# define MIDCHAR 0x7fffffff
+# define LARGECHAR 0xfffffffe
 #else
 # define L(str) str
 # define STRCMP strcmp
 # define STRCPY strcpy
 # define STRLEN strlen
+# define MEMCPY memcpy
 # define SIMPLE_STRCMP simple_strcmp
 # define STUPID_STRCMP stupid_strcmp
-typedef unsigned char unsigned_element_type;
-typedef char element_type;
-typedef int (*proto_t) (const char *, const char *);
+# define CHAR char
+# define UCHAR unsigned char
+# define CHARBYTES 1
+# define CHARBYTESLOG 0
+# define CHARALIGN 1
+# define MIDCHAR 0x7f
+# define LARGECHAR 0xfe
 #endif
+typedef int (*proto_t) (const CHAR *, const CHAR *);
 
 int
-SIMPLE_STRCMP (const unsigned_element_type *s1, const unsigned_element_type *s2)
+SIMPLE_STRCMP (const CHAR *s1, const CHAR *s2)
 {
   int ret;
 
-  while ((ret = *s1 - *s2++) == 0 && *s1++);
+  while ((ret = *(UCHAR *) s1 - *(UCHAR *) s2++) == 0 && *s1++);
   return ret;
 }
 
 int
-STUPID_STRCMP (const unsigned_element_type *s1, const unsigned_element_type *s2)
+STUPID_STRCMP (const CHAR *s1, const CHAR *s2)
 {
-  size_t ns1 = STRLEN (s1) + 1, ns2 = STRLEN (s2) + 1;
+  size_t ns1 = STRLEN (s1) + 1;
+  size_t ns2 = STRLEN (s2) + 1;
   size_t n = ns1 < ns2 ? ns1 : ns2;
   int ret = 0;
 
   while (n--)
-    if ((ret = *s1++ - *s2++) != 0)
+    if ((ret = *(UCHAR *) s1++ - *(UCHAR *) s2++) != 0)
       break;
   return ret;
 }
@@ -77,7 +87,7 @@ IMPL (STRCMP, 1)
 
 static int
 check_result (impl_t *impl,
-             const element_type *s1, const element_type *s2,
+	     const CHAR *s1, const CHAR *s2,
 	     int exp_result)
 {
   int result = CALL (impl, s1, s2);
@@ -96,7 +106,7 @@ check_result (impl_t *impl,
 
 static void
 do_one_test (impl_t *impl,
-             const element_type *s1, const element_type *s2,
+	     const CHAR *s1, const CHAR *s2,
 	     int exp_result)
 {
   if (check_result (impl, s1, s2, exp_result) < 0)
@@ -127,46 +137,27 @@ do_test (size_t align1, size_t align2, size_t len, int max_char,
 {
   size_t i;
 
-  element_type *s1, *s2;
+  CHAR *s1, *s2;
 
   if (len == 0)
     return;
 
-#ifndef WIDE
-  align1 &= 7;
-  if (align1 + len + 1 >= page_size)
-    return;
-
-  align2 &= 7;
-  if (align2 + len + 1 >= page_size)
-    return;
-
-  s1 = (char *) (buf1 + align1);
-  s2 = (char *) (buf2 + align2);
-
-#else
   align1 &= 63;
-  if (align1 + len * 4 + 4 >= page_size)
+  if (align1 + (len + 1) * CHARBYTES >= page_size)
     return;
 
   align2 &= 63;
-  if (align2 + len * 4 + 4 >= page_size)
+  if (align2 + (len + 1) * CHARBYTES >= page_size)
     return;
 
   /* Put them close to the end of page.  */
-  i = align1 + 4 * len + 8;
-  s1 = (uint32_t *) (buf1 + ((page_size - i) / 16 * 16) + align1);
-  i = align2 + 4 * len + 8;
-  s2 = (uint32_t *) (buf2 + ((page_size - i) / 16 * 16)  + align2);
-
-#endif
+  i = align1 + CHARBYTES * (len + 2);
+  s1 = (CHAR *) (buf1 + ((page_size - i) / 16 * 16) + align1);
+  i = align2 + CHARBYTES * (len + 2);
+  s2 = (CHAR *) (buf2 + ((page_size - i) / 16 * 16)  + align2);
 
   for (i = 0; i < len; i++)
-#ifndef WIDE
-    s1[i] = s2[i] = 1 + 23 * i % max_char;
-#else
-    s1[i] = s2[i] = 1 + 1023 * i % max_char;
-#endif
+    s1[i] = s2[i] = 1 + (23 << ((CHARBYTES - 1) * 8)) * i % max_char;
 
   s1[len] = s2[len] = 0;
   s1[len + 1] = 23;
@@ -186,128 +177,111 @@ do_test (size_t align1, size_t align2, size_t len, int max_char,
 static void
 do_random_tests (void)
 {
-  size_t i, j, n, align1, align2, pos, len1, len2;
-  int result;
-  int r;
-
-#ifndef WIDE
-  unsigned char *p1 = buf1 + page_size - 512;
-  unsigned char *p2 = buf2 + page_size - 512;
-  for (n = 0; n < ITERATIONS; n++)
-#else
-  for (size_t a = 0; a < 4; a++)
-    for (size_t b = 0; b < 4; b++)
-    {
-      uint32_t *p1 = (uint32_t *) (buf1 + page_size - 512 * 4 - a);
-      uint32_t *p2 = (uint32_t *) (buf2 + page_size - 512 * 4 - b);
-
-    for (n = 0; n < ITERATIONS / 2; n++)
-#endif          
-    {
-      align1 = random () & 31;
-      if (random () & 1)
-	align2 = random () & 31;
-      else
-	align2 = align1 + (random () & 24);
-      pos = random () & 511;
-      j = align1 > align2 ? align1 : align2;
-      if (pos + j >= 511)
-	pos = 510 - j - (random () & 7);
-      len1 = random () & 511;
-      if (pos >= len1 && (random () & 1))
-        len1 = pos + (random () & 7);
-      if (len1 + j >= 512)
-        len1 = 511 - j - (random () & 7);
-      if (pos >= len1)
-	len2 = len1;
-      else
-	len2 = len1 + (len1 != 511 - j ? random () % (511 - j - len1) : 0);
-      j = (pos > len2 ? pos : len2) + align1 + 64;
-      if (j > 512)
-	j = 512;
-      for (i = 0; i < j; ++i)
-	{
-	  p1[i] = random () & 255;
-	  if (i < len1 + align1 && !p1[i])
-	    {
-	      p1[i] = random () & 255;
-	      if (!p1[i])
-		p1[i] = 1 + (random () & 127);
-	    }
-	}
-      for (i = 0; i < j; ++i)
-	{
-	  p2[i] = random () & 255;
-	  if (i < len2 + align2 && !p2[i])
-	    {
-	      p2[i] = random () & 255;
-	      if (!p2[i])
-		p2[i] = 1 + (random () & 127);
-	    }
-	}
-
-      result = 0;
-#ifndef WIDE
-      memcpy (p2 + align2, p1 + align1, pos);
-#else
-      memcpy (p2 + align2, p1 + align1, 4 * pos);
-#endif
-      if (pos < len1)
-	{
-	  if (p2[align2 + pos] == p1[align1 + pos])
-	    {
-	      p2[align2 + pos] = random () & 255;
-	      if (p2[align2 + pos] == p1[align1 + pos])
-		p2[align2 + pos] = p1[align1 + pos] + 3 + (random () & 127);
-	    }
-
-	  if (p1[align1 + pos] < p2[align2 + pos])
-	    result = -1;
-	  else
-	    result = 1;
-	}
-      p1[len1 + align1] = 0;
-      p2[len2 + align2] = 0;
-
-      FOR_EACH_IMPL (impl, 1)
-	{
-	  r = CALL (impl, p1 + align1, p2 + align2);
-	  /* Test whether on 64-bit architectures where ABI requires
-	     callee to promote has the promotion been done.  */
-	  asm ("" : "=g" (r) : "0" (r));
-	  if ((r == 0 && result)
-	      || (r < 0 && result >= 0)
-	      || (r > 0 && result <= 0))
-	    {
-	      error (0, 0, "Iteration %zd - wrong result in function %s (%zd, %zd, %zd, %zd, %zd) %d != %d, p1 %p p2 %p",
-		     n, impl->name, (size_t) (p1 + align1) & 63, (size_t) (p1 + align2) & 63, len1, len2, pos, r, result, p1, p2);
-	      ret = 1;
-	    }
-	}
-    }
-#ifdef WIDE
-  }
-#endif
+  for (size_t a = 0; a < CHARBYTES; a += CHARALIGN)
+    for (size_t b = 0; b < CHARBYTES; b += CHARALIGN)
+      {
+	UCHAR *p1 = (UCHAR *) (buf1 + page_size - 512 * CHARBYTES - a);
+	UCHAR *p2 = (UCHAR *) (buf2 + page_size - 512 * CHARBYTES - b);
+
+	for (size_t n = 0; n < ITERATIONS; n++)
+	  {
+	    size_t align1 = random () & 31;
+	    size_t align2;
+	    if (random () & 1)
+	      align2 = random () & 31;
+	    else
+	      align2 = align1 + (random () & 24);
+	    size_t pos = random () & 511;
+	    size_t j = align1 > align2 ? align1 : align2;
+	    if (pos + j >= 511)
+	      pos = 510 - j - (random () & 7);
+	    size_t len1 = random () & 511;
+	    if (pos >= len1 && (random () & 1))
+	      len1 = pos + (random () & 7);
+	    if (len1 + j >= 512)
+	      len1 = 511 - j - (random () & 7);
+	    size_t len2;
+	    if (pos >= len1)
+	      len2 = len1;
+	    else
+	      len2 = len1 + (len1 != 511 - j ? random () % (511 - j - len1) : 0);
+	    j = (pos > len2 ? pos : len2) + align1 + 64;
+	    if (j > 512)
+	      j = 512;
+	    for (size_t i = 0; i < j; ++i)
+	      {
+		p1[i] = random () & 255;
+		if (i < len1 + align1 && !p1[i])
+		  {
+		    p1[i] = random () & 255;
+		    if (!p1[i])
+		      p1[i] = 1 + (random () & 127);
+		  }
+	      }
+	    for (size_t i = 0; i < j; ++i)
+	      {
+		p2[i] = random () & 255;
+		if (i < len2 + align2 && !p2[i])
+		  {
+		    p2[i] = random () & 255;
+		    if (!p2[i])
+		      p2[i] = 1 + (random () & 127);
+		  }
+	      }
+
+	    int result = 0;
+	    MEMCPY ((CHAR *) (p2 + align2), (CHAR *) (p1 + align1), pos);
+	    if (pos < len1)
+	      {
+		if (p2[align2 + pos] == p1[align1 + pos])
+		  {
+		    p2[align2 + pos] = random () & 255;
+		    if (p2[align2 + pos] == p1[align1 + pos])
+		      p2[align2 + pos] = p1[align1 + pos] + 3 + (random () & 127);
+		  }
+
+		if (p1[align1 + pos] < p2[align2 + pos])
+		  result = -1;
+		else
+		  result = 1;
+	      }
+	    p1[len1 + align1] = 0;
+	    p2[len2 + align2] = 0;
+
+	    FOR_EACH_IMPL (impl, 1)
+	      {
+		int r = CALL (impl, (CHAR *) (p1 + align1), (CHAR *) (p2 + align2));
+		/* Test whether on 64-bit architectures where ABI requires
+		   callee to promote has the promotion been done.  */
+		asm ("" : "=g" (r) : "0" (r));
+		if ((r == 0 && result)
+		    || (r < 0 && result >= 0)
+		    || (r > 0 && result <= 0))
+		  {
+		    error (0, 0, "Iteration %zd - wrong result in function %s (%zd, %zd, %zd, %zd, %zd) %d != %d, p1 %p p2 %p",
+			   n, impl->name, (size_t) (p1 + align1) & 63, (size_t) (p1 + align2) & 63, len1, len2, pos, r, result, p1, p2);
+		    ret = 1;
+		  }
+	      }
+	  }
+      }
 }
 
 static void
 check (void)
 {
-  const element_type *s1 = (element_type *) (buf1 + 0xb2c);
-  const element_type *s2 = (element_type *) (buf1 + 0xfd8);
+  CHAR *s1 = (CHAR *) (buf1 + 0xb2c);
+  CHAR *s2 = (CHAR *) (buf1 + 0xfd8);
 
-  size_t i1, i2, l1, l2;
-  int exp_result;
+  STRCPY(s1, L("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrs"));
+  STRCPY(s2, L("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijkLMNOPQRSTUV"));
 
-  STRCPY(s1, L"abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrs");
-  STRCPY(s2, L"abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijkLMNOPQRSTUV");
-
-  l1 = STRLEN (s1);
-  l2 = STRLEN (s2);
-  for (i1 = 0; i1 < l1; i1++)
-    for (i2 = 0; i2 < l2; i2++)
+  size_t l1 = STRLEN (s1);
+  size_t l2 = STRLEN (s2);
+  for (size_t i1 = 0; i1 < l1; i1++)
+    for (size_t i2 = 0; i2 < l2; i2++)
       {
-	exp_result = SIMPLE_STRCMP (s1 + i1, s2 + i2);
+	int exp_result = SIMPLE_STRCMP (s1 + i1, s2 + i2);
 	FOR_EACH_IMPL (impl, 0)
 	  check_result (impl, s1 + i1, s2 + i2, exp_result);
       }
@@ -327,65 +301,34 @@ test_main (void)
     printf ("\t%s", impl->name);
   putchar ('\n');
 
-#ifndef WIDE
-  for (i = 1; i < 16; ++i)
-    {
-      do_test (i, i, i, 127, 0);
-      do_test (i, i, i, 127, 1);
-      do_test (i, i, i, 127, -1);
-    }
-
-  for (i = 1; i < 10; ++i)
-    {
-      do_test (0, 0, 2 << i, 127, 0);
-      do_test (0, 0, 2 << i, 254, 0);
-      do_test (0, 0, 2 << i, 127, 1);
-      do_test (0, 0, 2 << i, 254, 1);
-      do_test (0, 0, 2 << i, 127, -1);
-      do_test (0, 0, 2 << i, 254, -1);
-    }
-
-  for (i = 1; i < 8; ++i)
-    {
-      do_test (i, 2 * i, 8 << i, 127, 0);
-      do_test (2 * i, i, 8 << i, 254, 0);
-      do_test (i, 2 * i, 8 << i, 127, 1);
-      do_test (2 * i, i, 8 << i, 254, 1);
-      do_test (i, 2 * i, 8 << i, 127, -1);
-      do_test (2 * i, i, 8 << i, 254, -1);
-    }
-
-#else
   for (i = 1; i < 32; ++i)
     {
-      do_test (i, i, i, 127, 0);
-      do_test (i, i, i, 127, 1);
-      do_test (i, i, i, 127, -1);
+      do_test (CHARBYTES * i, CHARBYTES * i, i, MIDCHAR, 0);
+      do_test (CHARBYTES * i, CHARBYTES * i, i, MIDCHAR, 1);
+      do_test (CHARBYTES * i, CHARBYTES * i, i, MIDCHAR, -1);
     }
 
-  for (i = 1; i < 12; ++i)
+  for (i = 1; i < 10 + CHARBYTESLOG; ++i)
     {
-      do_test (0, 0, 2 << i, 127, 0);
-      do_test (0, 0, 2 << i, 10000, 0);
-      do_test (0, 0, 2 << i, 127, 1);
-      do_test (0, 0, 2 << i, 10000, 1);
-      do_test (0, 0, 2 << i, 127, -1);
-      do_test (0, 0, 2 << i, 10000, -1);
-      do_test (0, 4 * i, 2 << i, 127, 1);
-      do_test (4 * i, 4 * i + 4, 2 << i, 10000, 1);
+      do_test (0, 0, 2 << i, MIDCHAR, 0);
+      do_test (0, 0, 2 << i, LARGECHAR, 0);
+      do_test (0, 0, 2 << i, MIDCHAR, 1);
+      do_test (0, 0, 2 << i, LARGECHAR, 1);
+      do_test (0, 0, 2 << i, MIDCHAR, -1);
+      do_test (0, 0, 2 << i, LARGECHAR, -1);
+      do_test (0, CHARBYTES * i, 2 << i, MIDCHAR, 1);
+      do_test (CHARBYTES * i, CHARBYTES * (i + 1), 2 << i, LARGECHAR, 1);
     }
 
-  for (i = 1; i < 9; ++i)
+  for (i = 1; i < 8; ++i)
     {
-      do_test (i, 2 * i, 8 << i, 10000, 0);
-      do_test (8 * i, 4 * i, 8 << i, 20000, 0);
-      do_test (i, 2 * i, 8 << i, 30000, 1);
-      do_test (2 * i, i, 8 << i, 10000, 1);
-      do_test (4 * i, 4 * i + 4, 8 << i, 20000, -1);
-      do_test (2 * i, i, 8 << i, 30000, -1);
-      do_test (4 * i + 4, 4 * i, 8 << i, 10000, 1);
+      do_test (CHARBYTES * i, 2 * CHARBYTES * i, 8 << i, MIDCHAR, 0);
+      do_test (2 * CHARBYTES * i, CHARBYTES * i, 8 << i, LARGECHAR, 0);
+      do_test (CHARBYTES * i, 2 * CHARBYTES * i, 8 << i, MIDCHAR, 1);
+      do_test (2 * CHARBYTES * i, CHARBYTES * i, 8 << i, LARGECHAR, 1);
+      do_test (CHARBYTES * i, 2 * CHARBYTES * i, 8 << i, MIDCHAR, -1);
+      do_test (2 * CHARBYTES * i, CHARBYTES * i, 8 << i, LARGECHAR, -1);
     }
-#endif
 
   do_random_tests ();
   return ret;

http://sources.redhat.com/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=cff8293390529d4c43d971d784cf1d2ad9171172

commit cff8293390529d4c43d971d784cf1d2ad9171172
Author: Liubov Dmitrieva <liubov.dmitrieva@gmail.com>
Date:   Thu Aug 4 16:04:15 2011 -0400

    New comprehensive test for wcscmp

diff --git a/ChangeLog b/ChangeLog
index 76aef93..64e031e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2011-07-22  Liubov Dmitrieva  <liubov.dmitrieva@gmail.com>
+
+	* string/Makefile: Update.
+	(strop-tests): Append strncat.
+	* string/test-wcscmp.c: New file.
+	New comprehensive test for wcscmp.
+	* string/test-strcmp.c: Update.
+	(WIDE): New define.
+
 2011-07-22  Andreas Schwab  <schwab@redhat.com>
 
 	* resolv/res_init.c (__res_vinit): Properly tokenize nameserver
diff --git a/string/Makefile b/string/Makefile
index f76758f..459b2a7 100644
--- a/string/Makefile
+++ b/string/Makefile
@@ -46,7 +46,7 @@ routines	:= strcat strchr strcmp strcoll strcpy strcspn		\
 # for -fbounded-pointer compiles.  Glibc uses memchr for explicit checks.
 o-objects.ob	:= memcpy.o memset.o memchr.o
 
-strop-tests	:= memchr memcmp memcpy memmove mempcpy memset memccpy	\
+strop-tests	:=  wcscmp memchr memcmp memcpy memmove mempcpy memset memccpy	\
 		   stpcpy stpncpy strcat strchr strcmp strcpy strcspn	\
 		   strlen strncmp strncpy strpbrk strrchr strspn memmem	\
 		   strstr strcasestr strnlen strcasecmp strncasecmp	\
diff --git a/string/test-strcmp.c b/string/test-strcmp.c
index 769e982..908dc27 100644
--- a/string/test-strcmp.c
+++ b/string/test-strcmp.c
@@ -1,7 +1,8 @@
-/* Test and measure strcmp functions.
-   Copyright (C) 1999, 2002, 2003, 2005 Free Software Foundation, Inc.
+/* Test and measure STRCMP functions.
+   Copyright (C) 1999, 2002, 2003, 2005, 2011 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Written by Jakub Jelinek <jakub@redhat.com>, 1999.
+   Added wcscmp support by Liubov Dmitrieva <liubov.dmitrieva@gmail.com>, 2011.
 
    The GNU C Library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
@@ -21,39 +22,63 @@
 #define TEST_MAIN
 #include "test-string.h"
 
+#ifdef WIDE
+# include <inttypes.h>
+# include <wchar.h>
+#endif
+
+#ifdef WIDE
+# define L(str) L##str
+# define STRCMP wcscmp
+# define STRCPY wcscpy
+# define STRLEN wcslen
+# define SIMPLE_STRCMP simple_wcscmp
+# define STUPID_STRCMP stupid_wcscmp
+typedef uint32_t unsigned_element_type;
+typedef uint32_t element_type;
+typedef int (*proto_t) (const uint32_t *, const uint32_t *);
+#else
+# define L(str) str
+# define STRCMP strcmp
+# define STRCPY strcpy
+# define STRLEN strlen
+# define SIMPLE_STRCMP simple_strcmp
+# define STUPID_STRCMP stupid_strcmp
+typedef unsigned char unsigned_element_type;
+typedef char element_type;
 typedef int (*proto_t) (const char *, const char *);
-int simple_strcmp (const char *, const char *);
-int stupid_strcmp (const char *, const char *);
-
-IMPL (stupid_strcmp, 0)
-IMPL (simple_strcmp, 0)
-IMPL (strcmp, 1)
+#endif
 
 int
-simple_strcmp (const char *s1, const char *s2)
+SIMPLE_STRCMP (const unsigned_element_type *s1, const unsigned_element_type *s2)
 {
   int ret;
 
-  while ((ret = *(unsigned char *) s1 - *(unsigned char *) s2++) == 0
-	 && *s1++);
+  while ((ret = *s1 - *s2++) == 0 && *s1++);
   return ret;
 }
 
 int
-stupid_strcmp (const char *s1, const char *s2)
+STUPID_STRCMP (const unsigned_element_type *s1, const unsigned_element_type *s2)
 {
-  size_t ns1 = strlen (s1) + 1, ns2 = strlen (s2) + 1;
+  size_t ns1 = STRLEN (s1) + 1, ns2 = STRLEN (s2) + 1;
   size_t n = ns1 < ns2 ? ns1 : ns2;
   int ret = 0;
 
   while (n--)
-    if ((ret = *(unsigned char *) s1++ - *(unsigned char *) s2++) != 0)
+    if ((ret = *s1++ - *s2++) != 0)
       break;
   return ret;
 }
 
-static void
-do_one_test (impl_t *impl, const char *s1, const char *s2, int exp_result)
+IMPL (STUPID_STRCMP, 1)
+IMPL (SIMPLE_STRCMP, 1)
+IMPL (STRCMP, 1)
+
+static int
+check_result (impl_t *impl,
+             const element_type *s1, const element_type *s2,
+	     int exp_result)
 {
   int result = CALL (impl, s1, s2);
   if ((exp_result == 0 && result != 0)
@@ -63,9 +88,20 @@ do_one_test (impl_t *impl, const char *s1, const char *s2, int exp_result)
       error (0, 0, "Wrong result in function %s %d %d", impl->name,
 	     result, exp_result);
       ret = 1;
-      return;
+      return -1;
     }
 
+  return 0;
+}
+
+static void
+do_one_test (impl_t *impl,
+             const element_type *s1, const element_type *s2,
+	     int exp_result)
+{
+  if (check_result (impl, s1, s2, exp_result) < 0)
+    return;
+
   if (HP_TIMING_AVAIL)
     {
       hp_timing_t start __attribute ((unused));
@@ -90,11 +126,13 @@ do_test (size_t align1, size_t align2, size_t len, int max_char,
 	 int exp_result)
 {
   size_t i;
-  char *s1, *s2;
+
+  element_type *s1, *s2;
 
   if (len == 0)
     return;
 
+#ifndef WIDE
   align1 &= 7;
   if (align1 + len + 1 >= page_size)
     return;
@@ -106,8 +144,29 @@ do_test (size_t align1, size_t align2, size_t len, int max_char,
   s1 = (char *) (buf1 + align1);
   s2 = (char *) (buf2 + align2);
 
+#else
+  align1 &= 63;
+  if (align1 + len * 4 + 4 >= page_size)
+    return;
+
+  align2 &= 63;
+  if (align2 + len * 4 + 4 >= page_size)
+    return;
+
+  /* Put them close to the end of page.  */
+  i = align1 + 4 * len + 8;
+  s1 = (uint32_t *) (buf1 + ((page_size - i) / 16 * 16) + align1);
+  i = align2 + 4 * len + 8;
+  s2 = (uint32_t *) (buf2 + ((page_size - i) / 16 * 16)  + align2);
+
+#endif
+
   for (i = 0; i < len; i++)
+#ifndef WIDE
     s1[i] = s2[i] = 1 + 23 * i % max_char;
+#else
+    s1[i] = s2[i] = 1 + 1023 * i % max_char;
+#endif
 
   s1[len] = s2[len] = 0;
   s1[len + 1] = 23;
@@ -129,11 +188,21 @@ do_random_tests (void)
 {
   size_t i, j, n, align1, align2, pos, len1, len2;
   int result;
-  long r;
+  int r;
+
+#ifndef WIDE
   unsigned char *p1 = buf1 + page_size - 512;
   unsigned char *p2 = buf2 + page_size - 512;
-
   for (n = 0; n < ITERATIONS; n++)
+#else
+  for (size_t a = 0; a < 4; a++)
+    for (size_t b = 0; b < 4; b++)
+    {
+      uint32_t *p1 = (uint32_t *) (buf1 + page_size - 512 * 4 - a);
+      uint32_t *p2 = (uint32_t *) (buf2 + page_size - 512 * 4 - b);
+
+    for (n = 0; n < ITERATIONS / 2; n++)
+#endif          
     {
       align1 = random () & 31;
       if (random () & 1)
@@ -178,7 +247,11 @@ do_random_tests (void)
 	}
 
       result = 0;
+#ifndef WIDE
       memcpy (p2 + align2, p1 + align1, pos);
+#else
+      memcpy (p2 + align2, p1 + align1, 4 * pos);
+#endif
       if (pos < len1)
 	{
 	  if (p2[align2 + pos] == p1[align1 + pos])
@@ -198,7 +271,7 @@ do_random_tests (void)
 
       FOR_EACH_IMPL (impl, 1)
 	{
-	  r = CALL (impl, (char *) (p1 + align1), (char *) (p2 + align2));
+	  r = CALL (impl, p1 + align1, p2 + align2);
 	  /* Test whether on 64-bit architectures where ABI requires
 	     callee to promote has the promotion been done.  */
 	  asm ("" : "=g" (r) : "0" (r));
@@ -206,26 +279,55 @@ do_random_tests (void)
 	      || (r < 0 && result >= 0)
 	      || (r > 0 && result <= 0))
 	    {
-	      error (0, 0, "Iteration %zd - wrong result in function %s (%zd, %zd, %zd, %zd, %zd) %ld != %d, p1 %p p2 %p",
-		     n, impl->name, align1, align2, len1, len2, pos, r, result, p1, p2);
+	      error (0, 0, "Iteration %zd - wrong result in function %s (%zd, %zd, %zd, %zd, %zd) %d != %d, p1 %p p2 %p",
+		     n, impl->name, (size_t) (p1 + align1) & 63, (size_t) (p1 + align2) & 63, len1, len2, pos, r, result, p1, p2);
 	      ret = 1;
 	    }
 	}
     }
+#ifdef WIDE
+  }
+#endif
 }
 
+static void
+check (void)
+{
+  const element_type *s1 = (element_type *) (buf1 + 0xb2c);
+  const element_type *s2 = (element_type *) (buf1 + 0xfd8);
+
+  size_t i1, i2, l1, l2;
+  int exp_result;
+
+  STRCPY(s1, L"abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrs");
+  STRCPY(s2, L"abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijkLMNOPQRSTUV");
+
+  l1 = STRLEN (s1);
+  l2 = STRLEN (s2);
+  for (i1 = 0; i1 < l1; i1++)
+    for (i2 = 0; i2 < l2; i2++)
+      {
+	exp_result = SIMPLE_STRCMP (s1 + i1, s2 + i2);
+	FOR_EACH_IMPL (impl, 0)
+	  check_result (impl, s1 + i1, s2 + i2, exp_result);
+      }
+}
+
+
 int
 test_main (void)
 {
   size_t i;
 
   test_init ();
+  check();
 
   printf ("%23s", "");
   FOR_EACH_IMPL (impl, 0)
     printf ("\t%s", impl->name);
   putchar ('\n');
 
+#ifndef WIDE
   for (i = 1; i < 16; ++i)
     {
       do_test (i, i, i, 127, 0);
@@ -253,6 +355,38 @@ test_main (void)
       do_test (2 * i, i, 8 << i, 254, -1);
     }
 
+#else
+  for (i = 1; i < 32; ++i)
+    {
+      do_test (i, i, i, 127, 0);
+      do_test (i, i, i, 127, 1);
+      do_test (i, i, i, 127, -1);
+    }
+
+  for (i = 1; i < 12; ++i)
+    {
+      do_test (0, 0, 2 << i, 127, 0);
+      do_test (0, 0, 2 << i, 10000, 0);
+      do_test (0, 0, 2 << i, 127, 1);
+      do_test (0, 0, 2 << i, 10000, 1);
+      do_test (0, 0, 2 << i, 127, -1);
+      do_test (0, 0, 2 << i, 10000, -1);
+      do_test (0, 4 * i, 2 << i, 127, 1);
+      do_test (4 * i, 4 * i + 4, 2 << i, 10000, 1);
+    }
+
+  for (i = 1; i < 9; ++i)
+    {
+      do_test (i, 2 * i, 8 << i, 10000, 0);
+      do_test (8 * i, 4 * i, 8 << i, 20000, 0);
+      do_test (i, 2 * i, 8 << i, 30000, 1);
+      do_test (2 * i, i, 8 << i, 10000, 1);
+      do_test (4 * i, 4 * i + 4, 8 << i, 20000, -1);
+      do_test (2 * i, i, 8 << i, 30000, -1);
+      do_test (4 * i + 4, 4 * i, 8 << i, 10000, 1);
+    }
+#endif
+
   do_random_tests ();
   return ret;
 }
diff --git a/string/test-wcscmp.c b/string/test-wcscmp.c
new file mode 100644
index 0000000..ac98e6d
--- /dev/null
+++ b/string/test-wcscmp.c
@@ -0,0 +1,2 @@
+#define WIDE 1
+#include "test-strcmp.c"

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog            |   17 +++
 string/Makefile      |    2 +-
 string/test-strcmp.c |  331 +++++++++++++++++++++++++++++++-------------------
 string/test-string.h |    6 +-
 string/test-wcscmp.c |    2 +
 5 files changed, 228 insertions(+), 130 deletions(-)
 create mode 100644 string/test-wcscmp.c


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]