Man page for igen.
[dyninst.git] / igen / tests / client2.C
1 #include <unistd.h>
2 #include <assert.h>
3 #include "test2.CLNT.h"
4
5 String str1 = "A Test String with server words in it";
6 String str2 = "Different String";
7
8 int numbers[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
9 int_Array vect;
10
11 extern void *serverMainFunc(void *);
12
13 main()
14 {
15     int i;
16     int fd;
17     int eid;
18     int tid;
19     int total;
20     intStruct is;
21     testUser *remote;
22
23     // do a thread create???
24     thr_create(0, 0, serverMainFunc, (void *) thr_self(), (unsigned int) 0, 
25         (unsigned int *) &tid);
26
27     remote = new testUser(tid);
28
29     remote->nullNull();
30
31     assert(remote->intNull() == 0);
32
33     remote->nullStruct(is);
34
35     assert(strlen(str1) == remote->intString(str1));
36
37     str2 = remote->stringString(str1);
38     assert(!strcmp(str2, str1));
39
40     assert(remote->add(1, 1) == 2);
41     assert(remote->add(-1, -13) == -14);
42
43     vect.count = sizeof(numbers)/sizeof(int);
44     vect.data = numbers;
45     for (i=0, total = 0; i < vect.count; i++) {
46         total += numbers[i];
47     }
48     assert(remote->sumVector(vect) == total);
49
50     // This causes deadlock now.  I am not sure if it should be fixed though.
51     //   This has to due with the way procedures wait for data.
52     //   hollings 1/18/94
53     // remote->triggerSyncUpcall(42);
54
55     remote->triggerAsyncUpcall(-10);
56
57     for (i=0; i < 10000; i++) {
58         remote->add(1, 0);
59     }
60
61     printf("ThreadPC test1 passed\n");
62 }
63
64 void testUser::syncUpcall(int val)
65 {
66     printf("syncUpcall called with value = %d\n", val);
67 }
68
69 void testUser::asyncUpcall(int val)
70 {
71     printf("asyncUpcall called with value = %d\n", val);
72 }