Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
att
GitHub Repository: att/ast
Path: blob/master/src/cmd/tests/cdt/tview.c
1810 views
1
/***********************************************************************
2
* *
3
* This software is part of the ast package *
4
* Copyright (c) 1999-2011 AT&T Intellectual Property *
5
* and is licensed under the *
6
* Eclipse Public License, Version 1.0 *
7
* by AT&T Intellectual Property *
8
* *
9
* A copy of the License is available at *
10
* http://www.eclipse.org/org/documents/epl-v10.html *
11
* (with md5 checksum b35adb5213ca9657e911e9befb180842) *
12
* *
13
* Information and Software Systems Research *
14
* AT&T Research *
15
* Florham Park NJ *
16
* *
17
* Glenn Fowler <[email protected]> *
18
* *
19
***********************************************************************/
20
#include "dttest.h"
21
22
Dtdisc_t Disc =
23
{ 0, sizeof(long), -1,
24
newint, NIL(Dtfree_f), compare, hashint,
25
NIL(Dtmemory_f), NIL(Dtevent_f)
26
};
27
28
static int Count, See[10];
29
30
#if __STD_C
31
static int visit(Dt_t* dt, Void_t* obj, Void_t* data)
32
#else
33
static int visit(dt, obj, data)
34
Dt_t* dt;
35
Void_t* obj;
36
Void_t* data;
37
#endif
38
{
39
See[(long)obj] = 1;
40
Count += 1;
41
return 0;
42
}
43
44
tmain()
45
{
46
Dt_t *dt1, *dt2, *dt3;
47
long i, k;
48
49
if(!(dt1 = dtopen(&Disc,Dtoset)) )
50
terror("Opening Dtoset");
51
if(!(dt2 = dtopen(&Disc,Dtoset)) )
52
terror("Opening Dtoset");
53
if(!(dt3 = dtopen(&Disc,Dtoset)) )
54
terror("Opening Dtoset");
55
56
dtinsert(dt1,1L);
57
dtinsert(dt1,3L);
58
dtinsert(dt1,5L);
59
dtinsert(dt1,2L);
60
61
dtinsert(dt2,2L);
62
dtinsert(dt2,4L);
63
dtinsert(dt2,6L);
64
dtinsert(dt2,3L);
65
66
dtinsert(dt3,2L);
67
dtinsert(dt3,7L);
68
dtinsert(dt3,6L);
69
dtinsert(dt3,8L);
70
71
if((long)dtsearch(dt1,4L) != 0)
72
terror("Finding 4 here?");
73
74
dtview(dt1,dt2);
75
if((long)dtsearch(dt1,4L) != 4)
76
terror("Should find 4 here!");
77
78
dtwalk(dt1,visit,NIL(Void_t*));
79
if(Count != 6)
80
terror("Walk wrong length");
81
for(i = 1; i <= 6; ++i)
82
if(!See[i] )
83
terror("Bad walk");
84
85
dtinsert(dt1,2L);
86
87
Count = 0;
88
for(i = (long)dtfirst(dt1); i; i = (long)dtnext(dt1,i))
89
Count++;
90
if(Count != 6)
91
terror("Walk wrong length2");
92
93
Count = 0;
94
for(i = (long)dtlast(dt1); i; i = (long)dtprev(dt1,i))
95
Count++;
96
if(Count != 6)
97
terror("Walk wrong length3");
98
99
/* check union of elements in order across ordered sets */
100
dtview(dt2,dt3);
101
for(k = 1, i = (long)dtfirst(dt1); i; ++k, i = (long)dtnext(dt1,i) )
102
if(i != k)
103
terror("Elements not appearing in order");
104
105
dtinsert(dt3, 10L);
106
if((long)dtatmost(dt1,9L) != 8L)
107
terror("dtatmost failed on an order set");
108
if((long)dtatleast(dt1,9L) != 10L)
109
terror("dtatleast failed on an order set");
110
111
/* dt1: 1 3 5 2
112
dt2: 2 4 6 3
113
dt3: 2 7 6 8 10
114
*/
115
Count = 0;
116
dtmethod(dt1,Dtset);
117
dtmethod(dt2,Dtset);
118
dtmethod(dt3,Dtset);
119
for(i = (long)dtfirst(dt1); i; i = (long)dtnext(dt1,i))
120
Count++;
121
if(Count != 9)
122
terror("Walk wrong length4");
123
124
texit(0);
125
}
126
127