taddcard.pp 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349
  1. { Program to test Code generator secondadd() }
  2. { with cardinal values }
  3. { FUNCTIONAL PRE-REQUISITES: }
  4. { - assignments function correctly. }
  5. { - if statements function correctly. }
  6. { - subroutine calls function correctly. }
  7. {$ifdef tp}
  8. type cardinal = longint;
  9. {$endif}
  10. procedure fail;
  11. begin
  12. WriteLn('Failed!');
  13. halt(1);
  14. end;
  15. procedure CardinalTestAdd;
  16. var
  17. i: cardinal;
  18. j: cardinal;
  19. result : boolean;
  20. begin
  21. Write('Cardinal + Cardinal test...');
  22. result := true;
  23. i:=0;
  24. j:=0;
  25. i := i + 10000;
  26. if i <> 10000 then
  27. result := false;
  28. j := 32767;
  29. i := i + j;
  30. if i <> 42767 then
  31. result := false;
  32. i := i + j + 50000;
  33. if i <> 125534 then
  34. result := false;
  35. i:=0;
  36. j:=10000;
  37. i:= i + j + j + i + j;
  38. if i <> 30000 then
  39. result := false;
  40. if not result then
  41. Fail
  42. else
  43. WriteLn('Success.');
  44. end;
  45. procedure CardinalTestSub;
  46. var
  47. i, j, k : cardinal;
  48. result : boolean;
  49. begin
  50. Write('Cardinal - Cardinal test...');
  51. result := true;
  52. i:=100000;
  53. j:=54;
  54. k:=56;
  55. i:= i - 100;
  56. if i <> 99900 then
  57. result := false;
  58. i := i - j - k - 100;
  59. if i <> 99690 then
  60. result := false;
  61. i:=100;
  62. j:=1000;
  63. k:=100;
  64. i:= j - i - k;
  65. if i <> 800 then
  66. result := false;
  67. if not result then
  68. Fail
  69. else
  70. WriteLn('Success.');
  71. end;
  72. procedure CardinalTestMul;
  73. var
  74. i : cardinal;
  75. j : cardinal;
  76. k: cardinal;
  77. result: boolean;
  78. begin
  79. Write('Cardinal * Cardinal test...');
  80. result := true;
  81. i:=0;
  82. j:=0;
  83. i:=i * 32;
  84. if i <> 0 then
  85. result := false;
  86. i:=10;
  87. i:=i * 16;
  88. if i <> 160 then
  89. result := false;
  90. j:=10000;
  91. i:=10000;
  92. i:=i * j;
  93. if i <> 100000000 then
  94. result := false;
  95. i:=1;
  96. j:=10;
  97. k:=16;
  98. i := i * j * k;
  99. if i <> 160 then
  100. result := false;
  101. i := 1;
  102. j := 10;
  103. k := 16;
  104. i := i * 10 * j * i * j * 16 * k;
  105. if i <> 256000 then
  106. result := false;
  107. i := 100000;
  108. j := 100;
  109. i := i * j;
  110. if i <> 10000000 then
  111. result := false;
  112. if not result then
  113. Fail
  114. else
  115. WriteLn('Success.');
  116. end;
  117. procedure CardinalTestXor;
  118. var
  119. i, j : cardinal;
  120. result : boolean;
  121. begin
  122. Write('Cardinal XOR Cardinal test...');
  123. result := true;
  124. i := 0;
  125. j := 0;
  126. i := i xor $1000001;
  127. if i <> $1000001 then
  128. result := false;
  129. i:=0;
  130. j:=$10000001;
  131. i:=i xor j;
  132. if i <> $10000001 then
  133. result := false;
  134. i := 0;
  135. j := $55555555;
  136. i := i xor j xor $AAAAAAAA;
  137. if i <> $FFFFFFFF then
  138. result := false;
  139. if not result then
  140. Fail
  141. else
  142. WriteLn('Success.');
  143. end;
  144. procedure CardinalTestOr;
  145. var
  146. i,j : Cardinal;
  147. result : boolean;
  148. Begin
  149. Write('Cardinal OR Cardinal test...');
  150. result := true;
  151. i := 0;
  152. j := 0;
  153. i := i or $1000001;
  154. if i <> $1000001 then
  155. result := false;
  156. i:=0;
  157. j:=$10000001;
  158. i:=i or j;
  159. if i <> $10000001 then
  160. result := false;
  161. i := 0;
  162. j := $55555555;
  163. i := i or j or $AAAAAAAA;
  164. if i <> $FFFFFFFF then
  165. result := false;
  166. if not result then
  167. Fail
  168. else
  169. WriteLn('Success.');
  170. end;
  171. procedure CardinalTestAnd;
  172. var
  173. i,j : Cardinal;
  174. result : boolean;
  175. Begin
  176. Write('Cardinal AND Cardinal test...');
  177. result := true;
  178. i := $1000001;
  179. j := 0;
  180. i := i and $1000001;
  181. if i <> $1000001 then
  182. result := false;
  183. i:=0;
  184. j:=$10000001;
  185. i:=i and j;
  186. if i <> 0 then
  187. result := false;
  188. i := $FFFFFFFF;
  189. j := $55555555;
  190. i := i and j;
  191. if i <> $55555555 then
  192. result := false;
  193. i := $FFFFFFFF;
  194. i := i and $AAAAAAAA;
  195. if i <> $AAAAAAAA then
  196. result := false;
  197. i := 0;
  198. j := $55555555;
  199. i := i and j and $AAAAAAAA;
  200. if i <> 0 then
  201. result := false;
  202. if not result then
  203. Fail
  204. else
  205. WriteLn('Success.');
  206. end;
  207. procedure CardinalTestEqual;
  208. var
  209. i,j : Cardinal;
  210. result : boolean;
  211. Begin
  212. Write('Cardinal = Cardinal test...');
  213. result := true;
  214. i := $1000001;
  215. j := 0;
  216. if i = 0 then
  217. result := false;
  218. if i = j then
  219. result := false;
  220. if j = i then
  221. result := false;
  222. if not result then
  223. Fail
  224. else
  225. WriteLn('Success.');
  226. end;
  227. procedure CardinalTestNotEqual;
  228. var
  229. i,j : Cardinal;
  230. result : boolean;
  231. Begin
  232. Write('Cardinal <> Cardinal test...');
  233. result := true;
  234. i := $1000001;
  235. j := $1000001;
  236. if i <> $1000001 then
  237. result := false;
  238. if i <> j then
  239. result := false;
  240. if j <> i then
  241. result := false;
  242. if not result then
  243. Fail
  244. else
  245. WriteLn('Success.');
  246. end;
  247. procedure CardinalTestLE;
  248. var
  249. i, j: cardinal;
  250. result : boolean;
  251. begin
  252. {$ifndef tp}
  253. Write('Cardinal <= Cardinal test...');
  254. result := true;
  255. i := $FFFFFFFF;
  256. j := $FFFFFFFE;
  257. if i <= j then
  258. result := false;
  259. i := $FFFFFFFE;
  260. j := $FFFF;
  261. if i <= j then
  262. result := false;
  263. i := $FFFFFFFF;
  264. if i <= $FFFFFFFE then
  265. result := false;
  266. j := $FFFFFFFF;
  267. if i <= j then
  268. begin
  269. if result then
  270. WriteLn('Success.')
  271. else
  272. Fail;
  273. end
  274. else
  275. Fail;
  276. {$endif}
  277. end;
  278. procedure CardinalTestGE;
  279. var
  280. i, j: cardinal;
  281. result : boolean;
  282. begin
  283. {$ifndef tp}
  284. Write('Cardinal >= Cardinal test...');
  285. result := true;
  286. i := $FFFFFFFE;
  287. j := $FFFFFFFF;
  288. if i >= j then
  289. result := false;
  290. i := $FFFFFFFE;
  291. j := $FFFFFFFF;
  292. if i > j then
  293. result := false;
  294. i := $FFFFFFFE;
  295. if i > $FFFFFFFE then
  296. result := false;
  297. i := $FFFFFFFF;
  298. j := $FFFFFFFF;
  299. if i >= j then
  300. begin
  301. if result then
  302. WriteLn('Success.')
  303. else
  304. Fail;
  305. end
  306. else
  307. Fail;
  308. {$endif}
  309. end;
  310. Begin
  311. { These should be tested first, since if they do not }
  312. { work, they will false all other results. }
  313. CardinalTestEqual;
  314. CardinalTestNotEqual;
  315. CardinalTestAdd;
  316. CardinalTestMul;
  317. CardinalTestOr;
  318. CardinalTestAnd;
  319. CardinalTestXor;
  320. CardinalTestLe;
  321. CardinalTestGe;
  322. CardinalTestSub;
  323. end.