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