test1.c 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471
  1. /*
  2. * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
  3. * See the copyright notice in the ACK home directory, in the file "Copyright".
  4. *
  5. */
  6. char rcs_id[] = "$Id$" ;
  7. /* This program can be used to test C-compilers */
  8. int i,j,k,l,m,ect,pct,t,*p1;
  9. int a1[20];
  10. #ifndef NOFLOAT
  11. float a2[20],xf,yf,zf;
  12. double a3[20],xd,yd,zd;
  13. #endif
  14. char alstr[3000] ;
  15. char *alptr = alstr ;
  16. struct tp2
  17. { char c1;
  18. int i,j;
  19. #ifndef NOFLOAT
  20. float aaa;
  21. double bbb;
  22. #endif
  23. } r1,r2,*p3;
  24. struct node
  25. { int val;
  26. struct node *next;
  27. } *head,*tail,*p2;
  28. main()
  29. { ect = 0; pct = 0;
  30. test1();test2();test3();
  31. test4();test5();
  32. test6();test7();test8();
  33. test9();test10();
  34. #ifndef NOFLOAT
  35. test11();
  36. #endif
  37. printf("program test1\n");
  38. printf("%d tests completed. Number of errors = %d\n",pct,ect);
  39. return 0 ;
  40. }
  41. char *alloc(size) {
  42. register char *retval ;
  43. retval=alptr ;
  44. alptr += size ;
  45. if ( alptr-alstr>sizeof alstr ) {
  46. printf("allocation overflow\n") ;
  47. exit(8) ;
  48. }
  49. return(retval) ;
  50. }
  51. int abs(a) int a ; { return ( a<0 ? -a : a) ; }
  52. #ifndef NOFLOAT
  53. double fabs(a) double a ; { return( a<0 ? -a : a) ; }
  54. #endif
  55. e(n)
  56. { ect++; printf("error %d in test %d \n",n,t);
  57. }
  58. inc(n)
  59. { return(++n);}
  60. /***********************************************************************/
  61. test1()
  62. /*arithmetic on constants */
  63. { t = 1; pct++;
  64. if (1+1 != 2) e(1);
  65. if (3333 + 258 != 3591) e(2);
  66. if (3*4 != 12) e(3);
  67. if (111*111 != 12321) e(4);
  68. if (50 / 5 != 10) e(5);
  69. if (7498 / 75 != 99) e(6);
  70. if (456 - 345 != 111) e(7);
  71. if (1+(-2) != -1) e(8);
  72. if (-3 * -4 != 12) e(9);
  73. if (-2 / 2 != -1) e(10);
  74. if (-5 / 1 != -5 ) e(11);
  75. if (-4 - -5 != 1) e(12);
  76. if ( 03 + 02 != 05) e(13);
  77. if ( 03456 + 88 != 03606 ) e(14);
  78. if ( 0100 * 23 != 02700 ) e(15);
  79. if ( 045 / 020 != 2) e(16);
  80. if (0472 - 0377 != 073 ) e(17);
  81. if ('a' + 3 != 100) e(18);
  82. if ('a' + 'c' != 'b' + 'b') e(19);
  83. if ( 'z' * 'z' != 14884 ) e(20);
  84. if ( -'z' / 01 != -'z' ) e(21);
  85. if ( 077777 >> 3 != 07777 ) e(22);
  86. if ( 077777 >> 15 ) e(23);
  87. if ( 234 << 6 != 234 << 6 ) e(24);
  88. if ( 0124 & 07765 != 0124 ) e(25);
  89. if ( 34 & 31 != 2 ) e(26);
  90. if ( ( -4 | 3 ) != -1 ) e(27);
  91. if ( ( 5 | 013 | 020 ) != 31 ) e(28);
  92. if ( ( -7 ^ 3 ) != -6 ) e(29);
  93. if ( ( 07373 ^ 4632 ) != 016343 ) e(30);
  94. if ( (1+2+3)*(2+3+4)*(3+5+5) / 2 != ((3*((5+3+2)*10)+51)*6)/6 ) e(31);
  95. if ( (1000*2+5*7+13)/ 8 != 2*2*2*2*4*4 ) e(32);
  96. if ((1*2*3*4*5*6*7 / 5040 !=
  97. 5040 / 7 / 6 / 5 / 4 / 3 / 2 / 1 )) e(33);
  98. if ( -(-(-(-(-(-(1)))))) != 1 ) e(34);
  99. if (- 1 != -((((((((((1)))))))))) ) e(35);
  100. if ( -1-1-1-1-1-1 != -6-3+3 ) e(36);
  101. if ( -4 * -5 != 20 ) e(37);
  102. if ( 2<1 ) e(38);
  103. if ( 2<= 1 ) e(39);
  104. if ( 2==3 ) e(40);
  105. if ( 2 != 2 ) e(41);
  106. if ( 2 >= 3) e(42);
  107. if ( 2 > 3 ) e(43);
  108. if (2 + 0 != 2 ) e(44);
  109. if (2 - 0 != 2 ) e(45);
  110. if (2 * 0 != 0 ) e(46);
  111. if ( 0 / 1 != 0 ) e(47);
  112. if ( -0 != 0 ) e(48);
  113. if ( 0 * 0 != 0 ) e(49);
  114. if ( 32767 > 32767 ) e(50);
  115. if ( 0456 < 0400 ) e(51);
  116. if ( 0456 != ( 0400 | 050 | 06 ) ) e(52);
  117. if ( 2*2<<2*2/4 != 010 ) e(53);
  118. if ( 0 || 0 ) e(54);
  119. if ( 1 && 0 ) e(55);
  120. if ( ( 123 ? 123 * 4 :345) != 492 ) e(56);
  121. if ( ( 0 ? 345 : 280) != 280 ) e(57);
  122. if ( ( (2*2/2<<2)|(2/2) ) != 9 ) e(58);
  123. if ( !( 111 || 23 && 0 ) ) e(59);
  124. if ( !1 ) e(60);
  125. if ( !0 == 0 ) e(61);
  126. if ( !!!!!!!!0 ) e(62);
  127. }
  128. /***********************************************************************/
  129. test2()
  130. /*arithmetic on global integer variables*/
  131. { t = 2; pct++;
  132. i = 1; j = 2; k = 3; l = 4; m = 10;
  133. if ( i+j != k ) e(1);
  134. if ( i+k != l ) e(2);
  135. if ( j-k != -i ) e(3);
  136. if ( j*(j + k) != m ) e(4);
  137. if ( -m != -(k+k+l) ) e(5);
  138. if ( i / i != 1 ) e(6);
  139. if ( m*m / m != m ) e(7);
  140. if ( 10 * m != 100 ) e(8);
  141. if ( m * (-10) != -100 ) e(9);
  142. if ( j / k != 0 ) e(10);
  143. if ( 100 / k != 33 ) e(11);
  144. if ( i+j*k+l+m / j + 50 / k != 32 ) e(12);
  145. if ( j*k*m / 6 != 10 ) e(13);
  146. if ( (k>4) || (k>=4) || (k==4) ) e(14);
  147. if ( (m<j) || (m<=j) || (m==j) ) e(15);
  148. if ( i+j-k ) e(16);
  149. if ( j<i ) e(17);
  150. if ( j != j ) e(18);
  151. if ( i > j ) e(19);
  152. if ( (i > j ? k : k*j ) != 6 ) e(20);
  153. if ( (i < j ? k : k*j ) != 3 ) e(21);
  154. if ( j<<i != l ) e(22);
  155. if ( j>> i != i ) e(25);
  156. if ( i++ != 1 ) e(26);
  157. if ( --i != 1 ) e(27);
  158. if ( i-- != 1 ) e(28);
  159. if ( ( i+j ) && ( i<0 ) || (m-10) && (064) ) e(29);
  160. if ( ( i+j ) && !(i>=0) || (m-10) && !( 0 ) ) e(30);
  161. }
  162. /***********************************************************************/
  163. test3()
  164. /*arithmetic on local integer variables*/
  165. { int a,b,c,d,f;
  166. t = 3; pct++;
  167. a = 1; b = 2; c = 3; d = 4; f = 10;
  168. if ( a+b != c ) e(1);
  169. if ( a+c != d ) e(2);
  170. if ( b-c != -a ) e(3);
  171. if ( b*(b + c) != f ) e(4);
  172. if ( -f != -(c+c+d) ) e(5);
  173. if ( a / a != 1 ) e(6);
  174. if ( f*f / f != f ) e(7);
  175. if ( 10 * f != 100 ) e(8);
  176. if ( f * (-10) != -100 ) e(9);
  177. if ( b / c != 0 ) e(10);
  178. if ( 100 / c != 33 ) e(11);
  179. if ( a+b*c+d+f / b + 50 / c != 32 ) e(12);
  180. if ( b*c*f / 6 != 10 ) e(13);
  181. if ( (c>4) || (c>=4) || (c==4) ) e(14);
  182. if ( (f<b) || (f<=b) || (f==b) ) e(15);
  183. if ( c != a+b ) e(16);
  184. if ( b<a ) e(17);
  185. if ( b != b ) e(18);
  186. if ( a > b ) e(19);
  187. if ( (a > b ? c : c*b ) != 6 ) e(20);
  188. if ( (a < b ? c : c*b ) != 3 ) e(21);
  189. if ( b<<a != d ) e(22);
  190. if ( b>> a != a ) e(25);
  191. if ( a++ != 1 ) e(26);
  192. if ( --a != 1 ) e(27);
  193. if ( a-- != 1 ) e(28);
  194. if ( ( a+b ) && ( a<0 ) || (f-10) && (064) ) e(29);
  195. if ( ( a+b ) && !(a>=0) || (f-10) && !( 0 ) ) e(30);
  196. }
  197. /***********************************************************************/
  198. test4()
  199. /* global arrays */
  200. {
  201. #ifndef NOFLOAT
  202. float epsf;
  203. double epsd;
  204. #endif
  205. t=4; pct++;
  206. #ifndef NOFLOAT
  207. epsf = 1e-7; epsd = 1e-14;
  208. #endif
  209. for ( i=0; i<20 ; i++ ) a1[i] = i*i;
  210. if ( a1[9] != 81 || a1[17] != 289 || a1[0] != 0 ) e(1);
  211. if ( a1[1] + a1[2] + a1[3] != 14 ) e(2);
  212. if ( ! a1[15] ) e(3);
  213. if ( a1[8] / a1[4] != 4 ) e(4);
  214. #ifndef NOFLOAT
  215. for ( i=0; i<20; i++ ) a2[i] = 10.0e-1 + i/54.324e-1;
  216. if ( fabs(a2[4]*a2[4]-a2[4]*(10.0e-1 + 4/54.324e-1 ) ) > epsf ) e(5);
  217. if ( fabs(a2[8]/a2[8]*a2[9]/a2[9]-a2[10]+a2[10]-1.0 ) > epsf ) e(6);
  218. if ( fabs(a2[5]-a2[4]-1/54.324e-1 ) > epsf ) e(7);
  219. for ( i=0; i<20; i++ ) a3[i]= 10.0e-1 + i/54.324e-1;
  220. if ( fabs(a3[4]*a3[4]-a3[4]*(1.0e0+4/54.324e-1 )) > epsd ) e(8);
  221. if ( fabs( a3[8]*a3[9]/a3[8]/a3[9]-a3[10]+a3[10]-1000e-3) > epsd ) e(9);
  222. if ( fabs(a3[8]+a3[6]-2*a3[7]) > epsd ) e(10);
  223. #endif
  224. }
  225. /****************************************************************/
  226. test5()
  227. /* local arrays */
  228. { int b1[20];
  229. #ifndef NOFLOAT
  230. float epsf, b2[20]; double b3[20],epsd;
  231. epsf = 1e-7; epsd = 1e-14;
  232. #endif
  233. t = 5; pct++;
  234. for ( i=0; i<20 ; i++ ) b1[i] = i*i;
  235. if ( b1[9]-b1[8] != 17 ) e(1);
  236. if ( b1[3] + b1[4] != b1[5] ) e(2);
  237. if ( b1[1] != 1||b1[3] != 9 || b1[5] != 25 || b1[7] != 49 ) e(3);
  238. if ( b1[12] / b1[6] != 4 ) e(4);
  239. #ifndef NOFLOAT
  240. for ( i=0; i<20; i += 1) b2[i] = 10.0e-1+i/54.324e-1;
  241. if (fabs(b2[4]*b2[4]-b2[4]*(10.0e-1+4/54.324e-1)) > epsf ) e(5);
  242. if (fabs(b2[8]/b2[8]*b2[9]/b2[9]-b2[10]+b2[10]-1.0) > epsf ) e(6);
  243. if ( fabs(b2[5]-b2[4]-1/5.4324 ) > epsf ) e(7);
  244. for ( i=0; i<20 ; i += 1 ) b3[i] = 10.0e-1+i/54.324e-1;
  245. if (fabs(b3[4]*b3[4]-b3[4]*(10.0e-1+4/54.324e-1)) > epsd ) e(8);
  246. if (fabs(b3[8]*b3[9]/b3[8]/b3[9]+b3[10]-b3[10]-1.0) > epsd ) e(9);
  247. if (fabs(b3[10]+b3[18]-2*b3[14]) > epsd ) e(10);
  248. #endif
  249. }
  250. /****************************************************************/
  251. test6()
  252. /* mixed local and global */
  253. { int li,b1[20];
  254. #ifndef NOFLOAT
  255. double b3[10],xxd,epsd;
  256. #endif
  257. t = 6; pct++;
  258. #ifndef NOFLOAT
  259. epsd = 1e-14;
  260. #endif
  261. li = 6; i = li ;
  262. if ( i != 6 ) e(1);
  263. i = 6; li = i;
  264. if ( i != li ) e(2);
  265. if ( i % li ) e(3);
  266. i=li=i=li=i=li=i=i=i=li=j;
  267. if ( i != li || i != j ) e(4);
  268. for ( i=li=0; i<20 ; i=li ) { b1[li]= (li+1)*(i+1) ; li++; }
  269. if ( b1[9] != a1[10] ) e(5);
  270. if ( b1[7]/a1[4] != a1[2] ) e(6);
  271. li = i = 121;
  272. if ( b1[10] != i && a1[11]!= li ) e(7);
  273. #ifndef NOFLOAT
  274. for ( li=0 ; li<10; li++ ) b3[li]= 1.0e0 + li/54.324e-1;
  275. if ( fabs(b3[9]-a3[9]) > epsd ) e(8);
  276. if ( fabs(8/54.324e-1 - b3[9]+a3[1] ) > epsd ) e(9);
  277. #endif
  278. }
  279. /***************************************************************/
  280. test7()
  281. /*global records */
  282. { t=7; pct++;
  283. r1.c1= 'x';r1.i=40;r1.j=50;
  284. #ifndef NOFLOAT
  285. r1.aaa=3.0;r1.bbb=4.0;
  286. #endif
  287. r2.c1=r1.c1;
  288. r2.i= 50;
  289. r2.j=40;
  290. #ifndef NOFLOAT
  291. r2.aaa=4.0;r2.bbb=5.0;
  292. #endif
  293. if (r1.c1 != 'x' || r1.i != 40 ) e(1);
  294. #ifndef NOFLOAT
  295. if ( r1.aaa != 3.0 ) e(1);
  296. #endif
  297. i = 25;j=75;
  298. if (r1.i != 40 || r2.i != 50 ) e(2);
  299. if ( r2.j != 40 || r1.j != 50 ) e(3);
  300. if ( (r1.c1 + r2.c1)/2 != 'x' ) e(4);
  301. #ifndef NOFLOAT
  302. if ( r1.aaa*r1.aaa+r2.aaa*r2.aaa != r2.bbb*r2.bbb) e(5);
  303. #endif
  304. r1.i = 34; if ( i!=25 ) e(6);
  305. }
  306. /****************************************************************/
  307. test8()
  308. /*local records */
  309. { struct tp2 s1,s2;
  310. t=8; pct++;
  311. s1.c1= 'x';s1.i=40;s1.j=50;
  312. #ifndef NOFLOAT
  313. s1.aaa=3.0;s1.bbb=4.0;
  314. #endif
  315. s2.c1=s1.c1;
  316. s2.i= 50;
  317. s2.j=40;
  318. #ifndef NOFLOAT
  319. s2.aaa=4.0;s2.bbb=5.0;
  320. #endif
  321. if (s1.c1 != 'x' || s1.i != 40 ) e(1);
  322. #ifndef NOFLOAT
  323. if ( s1.aaa != 3.0 ) e(1);
  324. #endif
  325. i = 25;j=75;
  326. if (s1.i != 40 || s2.i != 50 ) e(2);
  327. if ( s2.j != 40 || s1.j != 50 ) e(3);
  328. if ( (s1.c1 + s2.c1)/2 != 'x' ) e(4);
  329. #ifndef NOFLOAT
  330. if ( s1.aaa*s1.aaa+s2.aaa*s2.aaa != s2.bbb*s2.bbb) e(5);
  331. #endif
  332. s1.i = 34; if ( i!=25 ) e(6);
  333. }
  334. /***********************************************************************/
  335. test9()
  336. /*global pointers */
  337. { t=9; pct++;
  338. p1=alloc( sizeof *p1 );
  339. p2=alloc( sizeof *p2);
  340. p3=alloc(sizeof *p3);
  341. *p1 = 1066;
  342. if ( *p1 != 1066 ) e(1);
  343. p3->i = 1215;
  344. if ( p3->i != 1215 ) e(2);
  345. p2->val = 1566;
  346. if ( p2->val != 1566 || p2->next ) e(3);
  347. if ( a1 != &a1[0] ) e(4);
  348. p1 = a1;
  349. if ( ++p1 != &a1[1] ) e(5);
  350. head = 0;
  351. for (i=0;i<=100;i += 1)
  352. { tail = alloc(sizeof *p2);
  353. tail->val = 100+i;tail->next = head;
  354. head = tail;
  355. }
  356. if ( tail->val != 200 || tail->next->val != 199 ) e(6);
  357. if ( tail->next->next->next->next->next->val != 195) e(7);
  358. tail->next->next->next->next->next->val = 1;
  359. if ( tail->next->next->next->next->next->val != 1) e(8);
  360. i = 27;
  361. if ( *&i != 27 ) e(9);
  362. if ( &*&*&*&i != &i ) e(10);
  363. p1 = &i;i++;
  364. if ( p1 != &i ) e(11);
  365. }
  366. /*****************************************************************/
  367. test10()
  368. /*local pointers */
  369. { struct tp2 *pp3;
  370. struct node *pp2,*ingang,*uitgang;
  371. int *pp1;
  372. int b1[20];
  373. t=10; pct++;
  374. pp1=alloc( sizeof *pp1 );
  375. pp2=alloc( sizeof *p2);
  376. pp3=alloc(sizeof *pp3);
  377. *pp1 = 1066;
  378. if ( *pp1 != 1066 ) e(1);
  379. pp3->i = 1215;
  380. if ( pp3->i != 1215 ) e(2);
  381. pp2->val = 1566;
  382. if ( pp2->val != 1566 || p2->next ) e(3);
  383. if ( b1 != &b1[0] ) e(4);
  384. pp1 = b1;
  385. if ( ++pp1 != &b1[1] ) e(5);
  386. ingang = 0;
  387. for (i=0;i<=100;i += 1)
  388. { uitgang = alloc(sizeof *pp2);
  389. uitgang->val = 100+i;uitgang->next = ingang;
  390. ingang = uitgang;
  391. }
  392. if ( uitgang->val != 200 || uitgang->next->val != 199 ) e(6);
  393. if ( uitgang->next->next->next->next->next->val != 195 ) e(7);
  394. uitgang->next->next->next->next->next->val = 1;
  395. if ( uitgang->next->next->next->next->next->val != 1) e(8);
  396. }
  397. /***************************************************************/
  398. #ifndef NOFLOAT
  399. test11()
  400. /* real arithmetic */
  401. {
  402. double epsd; float epsf;
  403. t = 11; pct++; epsf = 1e-7; epsd = 1e-16;
  404. xf = 1.50 ; yf = 3.00 ; zf = 0.10;
  405. xd = 1.50 ; yd = 3.00 ; zd = 0.10;
  406. if ( fabs(1.0 + 1.0 - 2.0 ) > epsd ) e(1);
  407. if ( fabs( 1e10-1e10 ) > epsd ) e(2);
  408. if ( fabs( 1.0e+5*1.0e+5-100e+8 ) > epsd ) e(3);
  409. if ( fabs( 10.0/3.0*3.0/10.0-100e-2 ) > epsd ) e(4);
  410. if ( 0.0e0 != 0 ) e(5);
  411. if ( fabs( 32767.0 - 32767 ) > epsd ) e(6);
  412. if ( fabs( 1.0+2+5+3.0e0+7.5e+1+140e-1-100.0 ) > epsd ) e(7);
  413. if ( fabs(-1+(-1)+(-1.0)+(-1.0e0)+(-1.0e-0)+(-1e0)+6 ) > epsd ) e(8);
  414. if ( fabs(5.0*yf*zf-xf) > epsf ) e(9);
  415. if ( fabs(5.0*yd*zd-xd) > epsd ) e(10);
  416. if ( fabs(yd*yd - (2.0*xd)*(2.0*xd) ) > epsd ) e(11);
  417. if ( fabs(yf*yf - (2.0*xf)*(2.0*xf) ) > epsf ) e(12);
  418. if ( fabs( yd*yd+zd*zd+2.0*yd*zd-(yd+zd)*(zd+yd) ) > epsd ) e(13);
  419. if ( fabs( yf*yf+zf*zf+2.0*yf*zf-(yf+zf)*(zf+yf) ) > epsf ) e(14);
  420. xf=1.10;yf=1.20;
  421. if ( yd<xd ) e(15);
  422. if ( yd<=xd ) e(16);
  423. if ( yd==xd ) e(17);
  424. if ( xd>=yd ) e(18);
  425. if ( yd<xd ) e(19);
  426. if ( fabs(yd-xd-1.5) > epsd ) e(20);
  427. }
  428. #endif
  429. /*****************************************************************/