mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-10-30 10:45:40 +03:00 
			
		
		
		
	2006-06-14 Jakub Jelinek <jakub@redhat.com> [BZ #2766] * misc/insremque.c (insque): Handle prev == NULL. * misc/Makefile (tests): Add tst-insremque. * misc/tst-insremque.c: New test.
		
			
				
	
	
		
			62 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #include <search.h>
 | |
| #include <stdio.h>
 | |
| #include <string.h>
 | |
| 
 | |
| #define CHECK(cond) \
 | |
|   do									\
 | |
|     if (! (cond))							\
 | |
|       {									\
 | |
| 	printf ("Condition " #cond " not true on line %d\n", __LINE__);	\
 | |
| 	ret = 1;							\
 | |
|       }									\
 | |
|   while (0)
 | |
| 
 | |
| static int
 | |
| do_test (void)
 | |
| {
 | |
|   struct qelem elements[4];
 | |
|   int ret = 0;
 | |
| 
 | |
|   /* Linear list.  */
 | |
|   memset (elements, 0xff, sizeof (elements));
 | |
|   insque (&elements[0], NULL);
 | |
|   remque (&elements[0]);
 | |
|   insque (&elements[0], NULL);
 | |
|   insque (&elements[2], &elements[0]);
 | |
|   insque (&elements[1], &elements[0]);
 | |
|   insque (&elements[3], &elements[2]);
 | |
|   remque (&elements[2]);
 | |
|   insque (&elements[2], &elements[0]);
 | |
|   CHECK (elements[0].q_back == NULL);
 | |
|   CHECK (elements[0].q_forw == &elements[2]);
 | |
|   CHECK (elements[1].q_back == &elements[2]);
 | |
|   CHECK (elements[1].q_forw == &elements[3]);
 | |
|   CHECK (elements[2].q_back == &elements[0]);
 | |
|   CHECK (elements[2].q_forw == &elements[1]);
 | |
|   CHECK (elements[3].q_back == &elements[1]);
 | |
|   CHECK (elements[3].q_forw == NULL);
 | |
| 
 | |
|   /* Circular list.  */
 | |
|   memset (elements, 0xff, sizeof (elements));
 | |
|   elements[0].q_back = &elements[0];
 | |
|   elements[0].q_forw = &elements[0];
 | |
|   insque (&elements[2], &elements[0]);
 | |
|   insque (&elements[1], &elements[0]);
 | |
|   insque (&elements[3], &elements[2]);
 | |
|   remque (&elements[2]);
 | |
|   insque (&elements[2], &elements[0]);
 | |
|   CHECK (elements[0].q_back == &elements[3]);
 | |
|   CHECK (elements[0].q_forw == &elements[2]);
 | |
|   CHECK (elements[1].q_back == &elements[2]);
 | |
|   CHECK (elements[1].q_forw == &elements[3]);
 | |
|   CHECK (elements[2].q_back == &elements[0]);
 | |
|   CHECK (elements[2].q_forw == &elements[1]);
 | |
|   CHECK (elements[3].q_back == &elements[1]);
 | |
|   CHECK (elements[3].q_forw == &elements[0]);
 | |
| 
 | |
|   return ret;
 | |
| }
 | |
| 
 | |
| #define TEST_FUNCTION do_test ()
 | |
| #include "../test-skeleton.c"
 |