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