test_stack: check_list() code refactoring and 'marks' size optimization
authorIvan Maidanski <ivmai@mail.ru>
Thu, 19 Jan 2012 04:35:21 +0000 (08:35 +0400)
committerIvan Maidanski <ivmai@mail.ru>
Thu, 19 Jan 2012 07:43:27 +0000 (11:43 +0400)
* tests/test_stack.c (marks): Set smaller size (according to the
maximum index passed to check_list).
* tests/test_stack.c (check_list): Store p->data to "i" local variable
(in the loop body) replacing multiple occurrences of p->data.

tests/test_stack.c

index 034fb27..31f7748 100644 (file)
@@ -83,7 +83,7 @@ void print_list(void)
     printf("%d\n", p -> data);
 }
 
-static char marks[MAX_NTHREADS * MAX_NTHREADS];
+static char marks[MAX_NTHREADS * (MAX_NTHREADS + 1) / 2 + 1];
 
 void check_list(int n)
 {
@@ -91,16 +91,19 @@ void check_list(int n)
   int i;
 
   for (i = 1; i <= n; ++i) marks[i] = 0;
+
   for (p = (list_element *)AO_REAL_HEAD_PTR(the_list);
        p != 0;
        p = (list_element *)AO_REAL_NEXT_PTR(p -> next))
     {
-      if (p -> data > n || p -> data <= 0)
-        fprintf(stderr, "Found erroneous list element %d\n", p -> data);
-      if (marks[p -> data] != 0)
-        fprintf(stderr, "Found duplicate list element %d\n", p -> data);
-      marks[p -> data] = 1;
+      i = p -> data;
+      if (i > n || i <= 0)
+        fprintf(stderr, "Found erroneous list element %d\n", i);
+      if (marks[i] != 0)
+        fprintf(stderr, "Found duplicate list element %d\n", i);
+      marks[i] = 1;
     }
+
   for (i = 1; i <= n; ++i)
     if (marks[i] != 1)
       fprintf(stderr, "Missing list element %d\n", i);