Fixed unhelpful coredump when parsing (invalid) command-line arguments,
[dyninst.git] / igen / tests / TadvancedC.C
1
2 #include <stdio.h>
3 #include <unistd.h>
4 #include <assert.h>
5 #include "classT.thread.CLNT.h"
6
7 extern void serverMainFunc(void *pid);
8
9 int intStructEqual (intStruct one, intStruct two)
10 {
11     return (one.style == two.style);
12 }
13
14 int twoStructEqual (twoStruct one, twoStruct two)
15 {
16     return ((one.style == two.style) &&
17             intStructEqual(one.i,two.i));
18 }
19
20 int metricEqual (metric one, metric two)
21 {
22     return ((one.i == two.i) &&
23             (one.j == two.j));
24 }
25
26 int metricAEqual (metricA one, metricA two)
27 {
28   return ((one.x == two.x) &&
29           (one.y == two.y) &&
30           (one.i == two.i) &&
31           (one.j == two.j));
32 }
33
34 int metricAPEqual (metricA *one, metricA *two)
35 {
36   return ((one->x == two->x) &&
37           (one->y == two->y) &&
38           (one->i == two->i) &&
39           (one->j == two->j));
40 }
41
42 int metricBEqual (metricB one, metricB two)
43 {
44   return ((one.a == two.a) &&
45           (one.b == two.b) &&
46           (one.i == two.i) &&
47           (one.j == two.j));
48 }
49
50 main()
51 {
52     int fd, tid;
53     testTUser *remote;
54     twoStruct two, resTwo, *ts1, *ts2;
55     intStruct one, resOne, *is1, *is2;
56     metric oneM, twoM, *pM, *qM;
57     metricA A1, A2, *pA, *p2A;
58     metricB B1, B2, *pB;
59
60     one.style = 3;
61     two.style = 4;
62     two.i.style = 5;
63     oneM.i = 3;
64     oneM.j = 'c';
65
66     A1.x = 'c'; A1.y = 'f';
67     B1.c = 7; B1.b = 16;
68
69
70     printf("In client2 before thread create\n");
71     // do a thread create???
72     thr_create(0, 0, serverMainFunc, (void *) thr_self(), (unsigned int) 0, 
73         (unsigned int *) &tid);
74
75     printf("In client after thread create\n");
76     remote = new testTUser(tid);
77
78     resOne = remote->echoIntStruct(one);
79     printf("echoIntStruct %s\n",
80            intStructEqual(resOne, one) ? "OK" : "FAILS");
81
82     is1 = remote->echoIntStructP(&resOne);
83     printf("echoIntStructP %s\n",
84            intStructEqual(resOne, *is1) ? "OK" : "FAILS");
85
86     resTwo = remote->echoTwoStruct(two);
87     printf("echoTwoStruct %s\n",
88            twoStructEqual(resTwo, two) ? "OK" : "FAILS");
89
90     ts1 = remote->echoTwoStructP(&two);
91     printf("echoTwoStructP %s\n",
92            twoStructEqual(*ts1, two) ? "OK" : "FAILS");
93
94     pM = remote->testClassPtr(&oneM);
95     printf("testClassPtr %s\n", metricEqual(oneM, *pM) ? "OK" : "FAILS");
96
97     pM = remote->echoMetricPtrPtr(&oneM);
98     printf("echoMetricPtrPtr %s\n", metricEqual(*pM, oneM)
99                                ? "OK" : "FAILS");
100
101     pA = new metricA;
102     pA->x = (char) 0;
103     pA->y = (char) 1;
104     pA->i = 2;
105     pA->j = (unsigned char) 3;
106
107     
108     printf("0=metric(base), 1=metricA(derived), 2=metricB(derived)\n");
109     printf("pM->do_it() = %d  -- should be 0\n", pM->do_it());
110     printf("pA->do_it() = %d  -- should be 1\n", pA->do_it());
111     qM = pA;
112     printf("qM->do_it() = %d  -- should be 1\n\n", qM->do_it());
113
114     qM = remote->testClassPtr(pM);
115     printf("These should be equal (to 0) \n");
116     printf("pM->do_it() = %d\n", pM->do_it());
117     printf("qM->do_it() = %d\n\n", qM->do_it());
118
119     qM = remote->testClassPtr(pA);
120     printf("These should be equal (to 1) \n");
121     printf("pA->do_it() = %d\n", pA->do_it());
122     printf("qM->do_it() = %d\n\n", qM->do_it());
123
124     remote->quit();
125     printf("Bye now\n");
126     delete(remote);
127 }