1 /* Test for basic nauty functions (but not nauty itself) */
2
3 #include "nauty.h"
4
5 int
main(int argc,char * argv[])6 main(int argc, char *argv[])
7 {
8 int i,j,bad;
9 setword w,ww;
10 int curfile;
11 FILE *f;
12 set ss[4];
13
14 bad = 0;
15
16 printf("NAUTYVERSION=%s NAUTYVERSIONID=%d HAVE_TLS=%d\n",
17 NAUTYVERSION,NAUTYVERSIONID,HAVE_TLS);
18 printf("MAXN=%d MAXM=%d WORDSIZE=%d NAUTY_INFINITY=%d\n",
19 MAXN,MAXM,WORDSIZE,NAUTY_INFINITY);
20 printf("sizes: short=%d int=%d long=%d double=%d boolean=%d"
21 " pointer=%d setword=%d\n",
22 (int)sizeof(short),(int)sizeof(int),(int)sizeof(long),
23 (int)sizeof(double),(int)sizeof(boolean),
24 (int)sizeof(void*),(int)sizeof(setword));
25 printf("CLZ=%d,%d,%d POPCNT=%d,%d,%d;%d,%d",
26 HAVE_CLZ,HAVE_CLZL,HAVE_CLZLL,
27 HAVE_POPCNT,HAVE_POPCNTL,HAVE_POPCNTLL,HAVE_MMPOP32,HAVE_MMPOP64);
28 printf(" LONG_LONG_COUNTERS=%d COUNTER_FMT=%s\n",
29 LONG_LONG_COUNTERS,COUNTER_FMT);
30
31 printf("Defined: ");
32 #ifdef __STDC__
33 printf(" __STDC__=%d",__STDC__);
34 #endif
35 #ifdef BIGNAUTY
36 printf(" BIGNAUTY(obsolete!)");
37 #endif
38 #ifdef SYS_UNIX
39 printf(" SYS_UNIX");
40 #endif
41 #ifdef SYS_CRAY
42 printf(" SYS_CRAY");
43 #endif
44 #ifdef _MSC_VER
45 printf(" _MSC_VER=%d",_MSC_VER);
46 #endif
47 #ifdef __INTEL_COMPILER
48 printf(" __INTEL_COMPILER");
49 #endif
50 #ifdef SETWORD_SHORT
51 printf(" SETWORD_SHORT");
52 #endif
53 #ifdef SETWORD_INT
54 printf(" SETWORD_INT");
55 #endif
56 #ifdef SETWORD_LONG
57 printf(" SETWORD_LONG");
58 #endif
59 #ifdef SETWORD_LONGLONG
60 printf(" SETWORD_LONGLONG");
61 #endif
62 #if SIZEOF_INT128 > 0
63 printf(" __int128");
64 #endif
65 #if SIZEOF_INT128_T > 0
66 printf(" __int128_t");
67 #endif
68 printf("\n");
69
70 printf("Capabilities: ");
71
72 #if defined(__x86_64__)
73 printf("x86_64");
74 #elif defined(__x86_32__)
75 printf("x86_32");
76 #elif defined(__x86__)
77 printf("x86");
78 #endif
79
80 #if defined(__SSE4_2__)
81 printf(" SSE4_2");
82 #elif defined(__SSE4_1__)
83 printf(" SSE4_1");
84 #elif defined(__SSE3__)
85 printf(" SSE3");
86 #elif defined(__SSE2__)
87 printf(" SSE2");
88 #elif defined(__SSE__)
89 printf(" SSE");
90 #endif
91
92 #if defined(__MMX__)
93 printf(" MMX");
94 #endif
95
96 #if defined(__AVX2__)
97 printf(" AVX2");
98 #elif defined(__AVX__)
99 printf(" AVX");
100 #endif
101
102 #if defined(__BMI2__)
103 printf(" BMI2");
104 #elif defined(__BMI__)
105 printf(" BMI");
106 #endif
107
108 #if defined(__ABM__)
109 printf(" ABM");
110 #endif
111
112 printf("\n");
113
114 #if SIZEOF_LONGLONG > 0
115 if (sizeof(long long) != SIZEOF_LONGLONG)
116 {
117 printf("\nSIZEOF_LONGLONG is wrong (%d, should be %d)\n\n",
118 SIZEOF_LONGLONG,(int)sizeof(long long));
119 ++bad;
120 }
121 printf("sizeof(long long)=%d\n",sizeof(long long));
122 #endif
123
124 if (sizeof(long) != SIZEOF_LONG)
125 {
126 printf("\nSIZEOF_LONG is wrong (%d, should be %d)\n\n",
127 SIZEOF_LONG,(int)sizeof(long));
128 ++bad;
129 }
130
131 if (sizeof(int) != SIZEOF_INT)
132 {
133 printf("\nSIZEOF_INT is wrong (%d, should be %d)\n\n",
134 SIZEOF_INT,(int)sizeof(int));
135 ++bad;
136 }
137
138 if (sizeof(void*) != SIZEOF_POINTER)
139 {
140 printf("\nSIZEOF_POINTER is wrong (%d, should be %d)\n\n",
141 SIZEOF_POINTER,(int)sizeof(void*));
142 ++bad;
143 }
144
145 if (8*sizeof(setword) != WORDSIZE)
146 {
147 printf("\nWORDSIZE is not 8 times sizeof(setword)\n\n");
148 ++bad;
149 }
150
151 for (i = 0; i <= WORDSIZE; ++i)
152 {
153 w = ALLMASK(i);
154 if (POPCOUNT(w) != i)
155 {
156 printf("\n ***** POPCOUNT(ALLMASK) error %d,%d *****\n\n",
157 i,POPCOUNT(w));
158 ++bad;
159 }
160 }
161
162 for (i = 0; i < WORDSIZE; ++i)
163 {
164 w = BITMASK(i);
165 if (POPCOUNT(w) != WORDSIZE-i-1)
166 {
167 printf("\n ***** POPCOUNT(BITMASK) error %d *****\n\n",i);
168 ++bad;
169 }
170 }
171
172 for (i = 0; i <= WORDSIZE; ++i)
173 if (POPCOUNT(ALLMASK(i)) != i)
174 {
175 printf("\n ***** POPCOUNT(ALLMASK(i)) error i=%d *****\n\n",i);
176 ++bad;
177 }
178
179 for (i = 0; i < WORDSIZE; ++i)
180 if (FIRSTBIT(BITT[i]) != i)
181 {
182 printf("\n ***** FIRSTBIT(BITT) error %d,%d *****\n\n",
183 i,FIRSTBIT(BITT[i]));
184 ++bad;
185 }
186
187 if (FIRSTBIT((setword)0) != WORDSIZE)
188 {
189 printf("\n ***** FIRSTBIT(0) error *****\n\n");
190 ++bad;
191 }
192
193 for (i = 0; i < WORDSIZE; ++i)
194 if (POPCOUNT(BITT[i]) != 1)
195 {
196 printf("\n ***** POPCOUNT(BITT) error %d *****\n\n",i);
197 ++bad;
198 }
199
200 for (i = 0; i < WORDSIZE; ++i)
201 {
202 w = 0;
203 for (j = 1; j <= WORDSIZE; ++j)
204 {
205 w |= BITT[(j*97+i)%WORDSIZE];
206 if (POPCOUNT(w) != j)
207 {
208 printf("\n ***** POPCOUNT(w) error %d %d *****\n\n",i,j);
209 ++bad;
210 }
211 }
212 }
213
214 for (i = 0; i < 4*WORDSIZE; ++i)
215 {
216 EMPTYSET(ss,4);
217 ADDELEMENT(ss,i);
218 if (!ISELEMENT(ss,i))
219 {
220 printf("ISELEMENT failed\n");
221 ++bad;
222 break;
223 }
224 }
225
226 if (!bad) printf("No errors found\n\n");
227 else printf("\nXXXXXXX %d errors found XXXXXXX\n\n",bad);
228
229 exit(bad != 0);
230 }
231