home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / makedce.zip / EXAMPLES.ZIP / examples / Alias / caux.c < prev    next >
Text File  |  1994-05-08  |  6KB  |  182 lines

  1. /*
  2.  * COMPONENT_NAME:  MakeDCE/examples/alias/client_aux.c
  3.  *
  4.  * FUNCTIONS: 
  5.  *
  6.  * ORIGINS: 72
  7.  *
  8.  * OBJECT CODE ONLY SOURCE MATERIALS
  9.  *
  10.  */
  11. /*
  12.  * (c) Copyright 1990, 1991 OPEN SOFTWARE FOUNDATION, INC.
  13.  * ALL RIGHTS RESERVED
  14.  */
  15. #include <stdio.h>
  16. #include <math.h>
  17. #include "umacros.h"
  18. #include "list.h"
  19.  
  20. #ifdef IBMOS2
  21. #include <stdlib.h>
  22. #define  random  rand
  23. #endif
  24.  
  25. int client_aux(passno)
  26.     int passno;
  27. {
  28.     int             i, failures = 0, mgr_failures = 0;
  29.     long        *longp1, *longp2, *longp3, aliased_long, output_long;
  30.     long_t          *longtp1, *longtp2, *longtp3, aliased_longt, output_longt;
  31.     long_t          *longap1, *longap2, *longap3, aliased_longa[ARRAY_SIZE],
  32.                     output_longa[ARRAY_SIZE];
  33.     node_t          *list = NULL, *node_p;
  34.     struct_list_t   *struct_list_p, *temp;
  35.     struct_t        *struct_ptr;
  36.  
  37. /*
  38.  * Top-level pointers - pointers can't change but pointees can be aliased.
  39.  * op0 tests the pre-generated routines for pointed-to long that ships with RTL
  40.  * op1 tests the IDL-generated routines for pointed-to long from compiling this
  41.  */
  42.     longp1 = &aliased_long;
  43.     longp2 = &aliased_long;
  44.     longp3 = &aliased_long;
  45.     aliased_long = random();
  46.     output_long = aliased_long * 2 * 3 * 4;
  47.     CALL(op0, (longp1, longp2, longp3), mgr_failures, failures);
  48.     if (aliased_long != output_long)
  49.     {
  50.         FAIL("Top-level pointer aliasing failed in op0\n", failures);
  51.     }
  52.     else
  53.         SUCCESS("op0: completed sucessfully\n", mgr_failures);
  54.  
  55.     longtp1 = &aliased_longt;
  56.     longtp2 = &aliased_longt;
  57.     longtp3 = &aliased_longt;
  58.     aliased_longt = random();
  59.     output_longt = aliased_longt * 2 * 3 * 4;
  60.     CALL(op1, (longtp1, longtp2, longtp3), mgr_failures, failures);
  61.     if (aliased_longt != output_longt)
  62.     {
  63.         FAIL("Top-level pointer aliasing failed in op1\n", failures);
  64.     }
  65.     else
  66.         SUCCESS("op1: completed sucessfully\n", mgr_failures);
  67.  
  68. /*
  69.  * Top-level pointers to aliased conformant objects.
  70.  */
  71.     longap1 = aliased_longa;
  72.     longap2 = aliased_longa;
  73.     longap3 = aliased_longa;
  74.     for (i = 0 ; i < ARRAY_SIZE ; i++)
  75.     {
  76.         aliased_longa[i] = random();
  77.         output_longa[i] = aliased_longa[i] * 2 * 3 * 4;
  78.     }
  79.     CALL(op2, (longap1, longap2, longap3, ARRAY_SIZE), mgr_failures, failures);
  80.     for (i = 0 ; i < ARRAY_SIZE ; i++)
  81.     {
  82.         if (aliased_longa[i] != output_longa[i])
  83.             FAIL_BREAK("Top-level pointer aliasing failed in op2\n", failures);
  84.     }
  85.  
  86.     SUCCESS("op2: completed sucessfully\n", mgr_failures);
  87.  
  88. /*
  89.  * A circular doubly-linked list.
  90.  */
  91.     for (i = NUM_NODES ; i > 0 ; i--)
  92.     {
  93.         /* Insert new entry at head. */
  94.         MALLOC(node_p, node_t);
  95.         node_p->l = i * i;
  96.         node_p->flink = list;
  97.         if (list == NULL)
  98.             node_p->blink = node_p->flink = node_p;
  99.         else
  100.         {
  101.             /* Point forward link of new node at current first node. */
  102.             node_p->flink = list;
  103.             /* Point backward link of new node at current last node. */
  104.             node_p->blink = list->blink;
  105.             /* Point current last node forward link at new node. */
  106.             list->blink->flink = node_p;
  107.             /* Point current first node backward link at new node. */
  108.             list->blink = node_p;
  109.         }
  110.         /* Finally, update listhead to point at new node. */
  111.         list = node_p;
  112.     }
  113.     /* Manager routine reverses the list. */
  114.     CALL(op3, (&list), mgr_failures, failures);
  115.     /* Check accessibility via blinks. */
  116.     if (list == NULL)
  117.     {
  118.         FAIL("Out value of ptr to doubly-linked list NULL in op3\n", failures);
  119.     }
  120.     else
  121.     {
  122.         /* Check accessibility via blinks. */
  123.         i = 0;
  124.         node_p = list->blink;
  125.         do
  126.         {
  127.             i++;
  128.             if (node_p->l != i * i)
  129.                 FAIL_BREAK("Aliasing in doubly-linked list failed in op3\n", failures);
  130.             node_p = node_p->blink;
  131.         } while (node_p != list->blink);
  132.  
  133.         /* Check accessibility via flinks. */
  134.         i = NUM_NODES;
  135.         node_p = list;
  136.         do
  137.         {
  138.             if (node_p->l != i * i)
  139.                 FAIL_BREAK("Aliasing in doubly-linked list failed in op3\n", failures);
  140.             node_p = node_p->flink;
  141.             i--;
  142.         } while (node_p != list);
  143.     }
  144.  
  145.     SUCCESS("op3: completed sucessfully\n", mgr_failures);
  146.  
  147. /*
  148.  * Aliasing with mixed ref and ptr pointers to the same type.
  149.  */
  150.     MALLOC(struct_ptr, struct_t);
  151.     struct_ptr->l = 0;
  152.     struct_list_p = NULL;
  153.     for (i = LIST_SIZE ; i > 0 ; i--)
  154.     {
  155.         MALLOC(temp, struct_list_t);
  156.         temp->next = struct_list_p;
  157.         MALLOC(temp->struct_ref, struct_t);
  158.         temp->struct_ref->l = i * 2;
  159.         temp->struct_ptr = struct_ptr;
  160.         struct_list_p = temp;
  161.     }
  162.     CALL(op4, (struct_list_p), mgr_failures, failures);
  163.     i = 0;
  164.     do
  165.     {
  166.         i++;
  167.         if (struct_list_p->struct_ref->l != i * 2 * 3
  168.             ||  struct_list_p->struct_ptr == NULL
  169.             ||  struct_list_p->struct_ptr->l != LIST_SIZE * -7)
  170.             FAIL_BREAK("ref/ptr aliasing failed in op4\n", failures);
  171.         struct_list_p = struct_list_p->next;
  172.     } while (struct_list_p != NULL);
  173.  
  174.     SUCCESS("op4: completed sucessfully\n", mgr_failures);
  175.  
  176.     if (failures != 0)
  177.         fprintf(stderr, "%d failures.\n", failures);
  178.  
  179.     return failures;
  180. }
  181. 
  182.