bdiv_u64.inc 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799
  1. type
  2. { TUInt64Bit1Test }
  3. TUInt64Bit1Test = class(TUInt64DivTest)
  4. protected
  5. function GetDivisor: QWord; override;
  6. procedure DoTestIteration(Iteration: Integer); override;
  7. public
  8. function TestTitle: shortstring; override;
  9. end;
  10. { TUInt64Bit1ModTest }
  11. TUInt64Bit1ModTest = class(TUInt64ModTest)
  12. protected
  13. function GetDivisor: QWord; override;
  14. procedure DoTestIteration(Iteration: Integer); override;
  15. public
  16. function TestTitle: shortstring; override;
  17. end;
  18. { TUInt64Bit2Test }
  19. TUInt64Bit2Test = class(TUInt64DivTest)
  20. protected
  21. function GetDivisor: QWord; override;
  22. procedure DoTestIteration(Iteration: Integer); override;
  23. public
  24. function TestTitle: shortstring; override;
  25. end;
  26. { TUInt64Bit2ModTest }
  27. TUInt64Bit2ModTest = class(TUInt64ModTest)
  28. protected
  29. function GetDivisor: QWord; override;
  30. procedure DoTestIteration(Iteration: Integer); override;
  31. public
  32. function TestTitle: shortstring; override;
  33. end;
  34. { TUInt64Bit3Test }
  35. TUInt64Bit3Test = class(TUInt64DivTest)
  36. protected
  37. function GetDivisor: QWord; override;
  38. procedure DoTestIteration(Iteration: Integer); override;
  39. public
  40. function TestTitle: shortstring; override;
  41. end;
  42. { TUInt64Bit3ModTest }
  43. TUInt64Bit3ModTest = class(TUInt64ModTest)
  44. protected
  45. function GetDivisor: QWord; override;
  46. procedure DoTestIteration(Iteration: Integer); override;
  47. public
  48. function TestTitle: shortstring; override;
  49. end;
  50. { TUInt64Bit7Test }
  51. TUInt64Bit7Test = class(TUInt64DivTest)
  52. protected
  53. function GetDivisor: QWord; override;
  54. procedure DoTestIteration(Iteration: Integer); override;
  55. public
  56. function TestTitle: shortstring; override;
  57. end;
  58. { TUInt64Bit7ModTest }
  59. TUInt64Bit7ModTest = class(TUInt64ModTest)
  60. protected
  61. function GetDivisor: QWord; override;
  62. procedure DoTestIteration(Iteration: Integer); override;
  63. public
  64. function TestTitle: shortstring; override;
  65. end;
  66. { TUInt64Bit10Test }
  67. TUInt64Bit10Test = class(TUInt64DivTest)
  68. protected
  69. function GetDivisor: QWord; override;
  70. procedure DoTestIteration(Iteration: Integer); override;
  71. public
  72. function TestTitle: shortstring; override;
  73. end;
  74. { TUInt64Bit10ModTest }
  75. TUInt64Bit10ModTest = class(TUInt64ModTest)
  76. protected
  77. function GetDivisor: QWord; override;
  78. procedure DoTestIteration(Iteration: Integer); override;
  79. public
  80. function TestTitle: shortstring; override;
  81. end;
  82. { TUInt64Bit100Test }
  83. TUInt64Bit100Test = class(TUInt64DivTest)
  84. protected
  85. function GetDivisor: QWord; override;
  86. procedure DoTestIteration(Iteration: Integer); override;
  87. public
  88. function TestTitle: shortstring; override;
  89. end;
  90. { TUInt64Bit100ModTest }
  91. TUInt64Bit100ModTest = class(TUInt64ModTest)
  92. protected
  93. function GetDivisor: QWord; override;
  94. procedure DoTestIteration(Iteration: Integer); override;
  95. public
  96. function TestTitle: shortstring; override;
  97. end;
  98. { TUInt64Bit1000000000Test }
  99. const
  100. FU64_1000000000Input: array[$0..$F] of QWord =
  101. (0, 1, 999999999, 1000000000, 1000000001, 5000000000,
  102. 7999999999999999999, 8000000000000000000, 8000000000000000001,
  103. QWord(15999999999999999999), QWord(16000000000000000000), QWord(16000000000000000001),
  104. $7FFFFFFFFFFFFFFF, QWord($8000000000000000), QWord($8000000000000001), QWord($FFFFFFFFFFFFFFFF));
  105. type
  106. TUInt64Bit1000000000Test = class(TUInt64DivTest)
  107. protected
  108. function GetDivisor: QWord; override;
  109. procedure DoTestIteration(Iteration: Integer); override;
  110. public
  111. function TestTitle: shortstring; override;
  112. end;
  113. TUInt64Bit1000000000ModTest = class(TUInt64ModTest)
  114. protected
  115. function GetDivisor: QWord; override;
  116. procedure DoTestIteration(Iteration: Integer); override;
  117. public
  118. function TestTitle: shortstring; override;
  119. end;
  120. { TUInt64Bit3ModCmpTest }
  121. TUInt64Bit3ModCmpTest = class(TUInt64ModCmpTest)
  122. protected
  123. function GetDivisor: QWord; override;
  124. procedure DoTestIteration(Iteration: Integer); override;
  125. public
  126. function TestTitle: shortstring; override;
  127. end;
  128. { TUInt64Bit10ModCmpTest }
  129. TUInt64Bit10ModCmpTest = class(TUInt64ModCmpTest)
  130. protected
  131. function GetDivisor: QWord; override;
  132. procedure DoTestIteration(Iteration: Integer); override;
  133. public
  134. function TestTitle: shortstring; override;
  135. end;
  136. { TUInt64Bit100ModCmpTest }
  137. TUInt64Bit100ModCmpTest = class(TUInt64ModCmpTest)
  138. protected
  139. function GetDivisor: QWord; override;
  140. procedure DoTestIteration(Iteration: Integer); override;
  141. public
  142. function TestTitle: shortstring; override;
  143. end;
  144. { TUInt64Bit1000000000ModCmpTest }
  145. TUInt64Bit1000000000ModCmpTest = class(TUInt64ModCmpTest)
  146. protected
  147. function GetDivisor: QWord; override;
  148. procedure DoTestIteration(Iteration: Integer); override;
  149. public
  150. function TestTitle: shortstring; override;
  151. end;
  152. { TUInt64Bit1Test }
  153. function TUInt64Bit1Test.TestTitle: shortstring;
  154. begin
  155. Result := 'Unsigned 64-bit division by 1';
  156. end;
  157. function TUInt64Bit1Test.GetDivisor: QWord;
  158. begin
  159. Result := 1;
  160. end;
  161. procedure TUInt64Bit1Test.DoTestIteration(Iteration: Integer);
  162. var
  163. Numerator, Answer: QWord;
  164. Index, X: Integer;
  165. begin
  166. Index := Iteration and $FF;
  167. case Index of
  168. 253:
  169. Numerator := QWord($FFFFFFFFFFFFFFFD);
  170. 254:
  171. Numerator := QWord($FFFFFFFFFFFFFFFE);
  172. 255:
  173. Numerator := QWord($FFFFFFFFFFFFFFFF);
  174. else
  175. Numerator := QWord(Index);
  176. end;
  177. FInputArray[Index] := Numerator;
  178. for X := 0 to INTERNAL_LOOPS - 1 do
  179. Answer := Numerator div 1;
  180. FResultArray[Index] := Answer;
  181. end;
  182. { TUInt64Bit1ModTest }
  183. function TUInt64Bit1ModTest.TestTitle: shortstring;
  184. begin
  185. Result := 'Unsigned 64-bit modulus by 1';
  186. end;
  187. function TUInt64Bit1ModTest.GetDivisor: QWord;
  188. begin
  189. Result := 1;
  190. end;
  191. procedure TUInt64Bit1ModTest.DoTestIteration(Iteration: Integer);
  192. var
  193. Numerator, Answer: QWord;
  194. Index, X: Integer;
  195. begin
  196. Index := Iteration and $FF;
  197. case Index of
  198. 253:
  199. Numerator := QWord($FFFFFFFFFFFFFFFD);
  200. 254:
  201. Numerator := QWord($FFFFFFFFFFFFFFFE);
  202. 255:
  203. Numerator := QWord($FFFFFFFFFFFFFFFF);
  204. else
  205. Numerator := QWord(Index);
  206. end;
  207. FInputArray[Index] := Numerator;
  208. for X := 0 to INTERNAL_LOOPS - 1 do
  209. Answer := Numerator mod 1;
  210. FResultArray[Index] := Answer;
  211. end;
  212. { TUInt64Bit2Test }
  213. function TUInt64Bit2Test.TestTitle: shortstring;
  214. begin
  215. Result := 'Unsigned 64-bit division by 2';
  216. end;
  217. function TUInt64Bit2Test.GetDivisor: QWord;
  218. begin
  219. Result := 2;
  220. end;
  221. procedure TUInt64Bit2Test.DoTestIteration(Iteration: Integer);
  222. var
  223. Numerator, Answer: QWord;
  224. Index, X: Integer;
  225. begin
  226. Index := Iteration and $FF;
  227. case Index of
  228. 253:
  229. Numerator := QWord($FFFFFFFFFFFFFFFD);
  230. 254:
  231. Numerator := QWord($FFFFFFFFFFFFFFFE);
  232. 255:
  233. Numerator := QWord($FFFFFFFFFFFFFFFF);
  234. else
  235. Numerator := QWord(Index);
  236. end;
  237. FInputArray[Index] := Numerator;
  238. for X := 0 to INTERNAL_LOOPS - 1 do
  239. Answer := Numerator div 2;
  240. FResultArray[Index] := Answer;
  241. end;
  242. { TUInt64Bit2ModTest }
  243. function TUInt64Bit2ModTest.TestTitle: shortstring;
  244. begin
  245. Result := 'Unsigned 64-bit modulus by 2';
  246. end;
  247. function TUInt64Bit2ModTest.GetDivisor: QWord;
  248. begin
  249. Result := 2;
  250. end;
  251. procedure TUInt64Bit2ModTest.DoTestIteration(Iteration: Integer);
  252. var
  253. Numerator, Answer: QWord;
  254. Index, X: Integer;
  255. begin
  256. Index := Iteration and $FF;
  257. case Index of
  258. 253:
  259. Numerator := QWord($FFFFFFFFFFFFFFFD);
  260. 254:
  261. Numerator := QWord($FFFFFFFFFFFFFFFE);
  262. 255:
  263. Numerator := QWord($FFFFFFFFFFFFFFFF);
  264. else
  265. Numerator := QWord(Index);
  266. end;
  267. FInputArray[Index] := Numerator;
  268. for X := 0 to INTERNAL_LOOPS - 1 do
  269. Answer := Numerator mod 2;
  270. FResultArray[Index] := Answer;
  271. end;
  272. { TUInt64Bit3Test }
  273. function TUInt64Bit3Test.TestTitle: shortstring;
  274. begin
  275. Result := 'Unsigned 64-bit division by 3';
  276. end;
  277. function TUInt64Bit3Test.GetDivisor: QWord;
  278. begin
  279. Result := 3;
  280. end;
  281. procedure TUInt64Bit3Test.DoTestIteration(Iteration: Integer);
  282. var
  283. Numerator, Answer: QWord;
  284. Index, X: Integer;
  285. begin
  286. Index := Iteration and $FF;
  287. case Index of
  288. 254:
  289. Numerator := QWord($FFFFFFFFFFFFFFFE);
  290. 255:
  291. Numerator := QWord($FFFFFFFFFFFFFFFF);
  292. else
  293. Numerator := QWord(Index);
  294. end;
  295. FInputArray[Index] := Numerator;
  296. for X := 0 to INTERNAL_LOOPS - 1 do
  297. Answer := Numerator div 3;
  298. FResultArray[Index] := Answer;
  299. end;
  300. { TUInt64Bit3ModTest }
  301. function TUInt64Bit3ModTest.TestTitle: shortstring;
  302. begin
  303. Result := 'Unsigned 64-bit modulus by 3';
  304. end;
  305. function TUInt64Bit3ModTest.GetDivisor: QWord;
  306. begin
  307. Result := 3;
  308. end;
  309. procedure TUInt64Bit3ModTest.DoTestIteration(Iteration: Integer);
  310. var
  311. Numerator, Answer: QWord;
  312. Index, X: Integer;
  313. begin
  314. Index := Iteration and $FF;
  315. case Index of
  316. 254:
  317. Numerator := QWord($FFFFFFFFFFFFFFFE);
  318. 255:
  319. Numerator := QWord($FFFFFFFFFFFFFFFF);
  320. else
  321. Numerator := QWord(Index);
  322. end;
  323. FInputArray[Index] := Numerator;
  324. for X := 0 to INTERNAL_LOOPS - 1 do
  325. Answer := Numerator mod 3;
  326. FResultArray[Index] := Answer;
  327. end;
  328. { TUInt64Bit7Test }
  329. function TUInt64Bit7Test.TestTitle: shortstring;
  330. begin
  331. Result := 'Unsigned 64-bit division by 7';
  332. end;
  333. function TUInt64Bit7Test.GetDivisor: QWord;
  334. begin
  335. Result := 7;
  336. end;
  337. procedure TUInt64Bit7Test.DoTestIteration(Iteration: Integer);
  338. var
  339. Numerator, Answer: QWord;
  340. Index, X: Integer;
  341. begin
  342. Index := Iteration and $FF;
  343. case Index of
  344. 253:
  345. Numerator := QWord($FFFFFFFFFFFFFFFD);
  346. 254:
  347. Numerator := QWord($FFFFFFFFFFFFFFFE);
  348. 255:
  349. Numerator := QWord($FFFFFFFFFFFFFFFF);
  350. else
  351. Numerator := QWord(Index);
  352. end;
  353. FInputArray[Index] := Numerator;
  354. for X := 0 to INTERNAL_LOOPS - 1 do
  355. Answer := Numerator div 7;
  356. FResultArray[Index] := Answer;
  357. end;
  358. { TUInt64Bit7ModTest }
  359. function TUInt64Bit7ModTest.TestTitle: shortstring;
  360. begin
  361. Result := 'Unsigned 64-bit modulus by 7';
  362. end;
  363. function TUInt64Bit7ModTest.GetDivisor: QWord;
  364. begin
  365. Result := 7;
  366. end;
  367. procedure TUInt64Bit7ModTest.DoTestIteration(Iteration: Integer);
  368. var
  369. Numerator, Answer: QWord;
  370. Index, X: Integer;
  371. begin
  372. Index := Iteration and $FF;
  373. case Index of
  374. 253:
  375. Numerator := QWord($FFFFFFFFFFFFFFFD);
  376. 254:
  377. Numerator := QWord($FFFFFFFFFFFFFFFE);
  378. 255:
  379. Numerator := QWord($FFFFFFFFFFFFFFFF);
  380. else
  381. Numerator := QWord(Index);
  382. end;
  383. FInputArray[Index] := Numerator;
  384. for X := 0 to INTERNAL_LOOPS - 1 do
  385. Answer := Numerator mod 7;
  386. FResultArray[Index] := Answer;
  387. end;
  388. { TUInt64Bit10Test }
  389. function TUInt64Bit10Test.TestTitle: shortstring;
  390. begin
  391. Result := 'Unsigned 64-bit division by 10';
  392. end;
  393. function TUInt64Bit10Test.GetDivisor: QWord;
  394. begin
  395. Result := 10;
  396. end;
  397. procedure TUInt64Bit10Test.DoTestIteration(Iteration: Integer);
  398. var
  399. Numerator, Answer: QWord;
  400. Index, X: Integer;
  401. begin
  402. Index := Iteration and $FF;
  403. case Index of
  404. 253:
  405. Numerator := QWord($FFFFFFFFFFFFFFF9);
  406. 254:
  407. Numerator := QWord($FFFFFFFFFFFFFFFA);
  408. 255:
  409. Numerator := QWord($FFFFFFFFFFFFFFFF);
  410. else
  411. Numerator := QWord(Index);
  412. end;
  413. FInputArray[Index] := Numerator;
  414. for X := 0 to INTERNAL_LOOPS - 1 do
  415. Answer := Numerator div 10;
  416. FResultArray[Index] := Answer;
  417. end;
  418. { TUInt64Bit10ModTest }
  419. function TUInt64Bit10ModTest.TestTitle: shortstring;
  420. begin
  421. Result := 'Unsigned 64-bit modulus by 10';
  422. end;
  423. function TUInt64Bit10ModTest.GetDivisor: QWord;
  424. begin
  425. Result := 10;
  426. end;
  427. procedure TUInt64Bit10ModTest.DoTestIteration(Iteration: Integer);
  428. var
  429. Numerator, Answer: QWord;
  430. Index, X: Integer;
  431. begin
  432. Index := Iteration and $FF;
  433. case Index of
  434. 252:
  435. Numerator := QWord($FFFFFFFFFFFFFFEF);
  436. 253:
  437. Numerator := QWord($FFFFFFFFFFFFFFF0);
  438. 254:
  439. Numerator := QWord($FFFFFFFFFFFFFFF1);
  440. 255:
  441. Numerator := QWord($FFFFFFFFFFFFFFFF);
  442. else
  443. Numerator := QWord(Index);
  444. end;
  445. FInputArray[Index] := Numerator;
  446. for X := 0 to INTERNAL_LOOPS - 1 do
  447. Answer := Numerator mod 10;
  448. FResultArray[Index] := Answer;
  449. end;
  450. { TUInt64Bit100Test }
  451. function TUInt64Bit100Test.TestTitle: shortstring;
  452. begin
  453. Result := 'Unsigned 64-bit division by 100';
  454. end;
  455. function TUInt64Bit100Test.GetDivisor: QWord;
  456. begin
  457. Result := 100;
  458. end;
  459. procedure TUInt64Bit100Test.DoTestIteration(Iteration: Integer);
  460. var
  461. Numerator, Answer: QWord;
  462. Index, X: Integer;
  463. begin
  464. Index := Iteration and $FF;
  465. case Index of
  466. 252:
  467. Numerator := QWord($FFFFFFFFFFFFFFEF);
  468. 253:
  469. Numerator := QWord($FFFFFFFFFFFFFFF0);
  470. 254:
  471. Numerator := QWord($FFFFFFFFFFFFFFF1);
  472. 255:
  473. Numerator := QWord($FFFFFFFFFFFFFFFF);
  474. else
  475. Numerator := Cardinal(Index);
  476. end;
  477. FInputArray[Index] := Numerator;
  478. for X := 0 to INTERNAL_LOOPS - 1 do
  479. Answer := Numerator div 100;
  480. FResultArray[Index] := Answer;
  481. end;
  482. { TUInt64Bit100ModTest }
  483. function TUInt64Bit100ModTest.TestTitle: shortstring;
  484. begin
  485. Result := 'Unsigned 64-bit modulus by 100';
  486. end;
  487. function TUInt64Bit100ModTest.GetDivisor: QWord;
  488. begin
  489. Result := 100;
  490. end;
  491. procedure TUInt64Bit100ModTest.DoTestIteration(Iteration: Integer);
  492. var
  493. Numerator, Answer: QWord;
  494. Index, X: Integer;
  495. begin
  496. Index := Iteration and $FF;
  497. case Index of
  498. 252:
  499. Numerator := QWord($FFFFFFFFFFFFFFEF);
  500. 253:
  501. Numerator := QWord($FFFFFFFFFFFFFFF0);
  502. 254:
  503. Numerator := QWord($FFFFFFFFFFFFFFF1);
  504. 255:
  505. Numerator := QWord($FFFFFFFFFFFFFFFF);
  506. else
  507. Numerator := Cardinal(Index);
  508. end;
  509. FInputArray[Index] := Numerator;
  510. for X := 0 to INTERNAL_LOOPS - 1 do
  511. Answer := Numerator mod 100;
  512. FResultArray[Index] := Answer;
  513. end;
  514. { TUInt64Bit1000000000Test }
  515. function TUInt64Bit1000000000Test.TestTitle: shortstring;
  516. begin
  517. Result := 'Unsigned 64-bit division by 1,000,000,000';
  518. end;
  519. function TUInt64Bit1000000000Test.GetDivisor: QWord;
  520. begin
  521. Result := 1000000000;
  522. end;
  523. procedure TUInt64Bit1000000000Test.DoTestIteration(Iteration: Integer);
  524. var
  525. Numerator, Answer: QWord;
  526. Index, X: Integer;
  527. begin
  528. Index := Iteration and $FF;
  529. Numerator := FU64_1000000000Input[Index and $F];
  530. FInputArray[Index] := Numerator;
  531. for X := 0 to INTERNAL_LOOPS - 1 do
  532. Answer := Numerator div 1000000000;
  533. FResultArray[Index] := Answer;
  534. end;
  535. { TUInt64Bit1000000000ModTest }
  536. function TUInt64Bit1000000000ModTest.TestTitle: shortstring;
  537. begin
  538. Result := 'Unsigned 64-bit modulus by 1,000,000,000';
  539. end;
  540. function TUInt64Bit1000000000ModTest.GetDivisor: QWord;
  541. begin
  542. Result := 1000000000;
  543. end;
  544. procedure TUInt64Bit1000000000ModTest.DoTestIteration(Iteration: Integer);
  545. var
  546. Numerator, Answer: QWord;
  547. Index, X: Integer;
  548. begin
  549. Index := Iteration and $FF;
  550. Numerator := FU64_1000000000Input[Index and $F];
  551. FInputArray[Index] := Numerator;
  552. for X := 0 to INTERNAL_LOOPS - 1 do
  553. Answer := Numerator mod 1000000000;
  554. FResultArray[Index] := Answer;
  555. end;
  556. { TUInt64Bit3ModCmpTest }
  557. function TUInt64Bit3ModCmpTest.TestTitle: shortstring;
  558. begin
  559. Result := 'Unsigned 64-bit (n mod 3) = 0';
  560. end;
  561. function TUInt64Bit3ModCmpTest.GetDivisor: QWord;
  562. begin
  563. Result := 3;
  564. end;
  565. procedure TUInt64Bit3ModCmpTest.DoTestIteration(Iteration: Integer);
  566. var
  567. Numerator: QWord; Answer: Boolean;
  568. Index, X: Integer;
  569. begin
  570. Index := Iteration and $FF;
  571. case Index of
  572. 254:
  573. Numerator := QWord($FFFFFFFFFFFFFFFE);
  574. 255:
  575. Numerator := QWord($FFFFFFFFFFFFFFFF);
  576. else
  577. Numerator := QWord(Index);
  578. end;
  579. FInputArray[Index] := Numerator;
  580. for X := 0 to INTERNAL_LOOPS - 1 do
  581. Answer := (Numerator mod 3) = 0;
  582. FResultArray[Index] := Answer;
  583. end;
  584. { TUInt64Bit10ModCmpTest }
  585. function TUInt64Bit10ModCmpTest.TestTitle: shortstring;
  586. begin
  587. Result := 'Unsigned 64-bit (n mod 10) = 0';
  588. end;
  589. function TUInt64Bit10ModCmpTest.GetDivisor: QWord;
  590. begin
  591. Result := 10;
  592. end;
  593. procedure TUInt64Bit10ModCmpTest.DoTestIteration(Iteration: Integer);
  594. var
  595. Numerator: QWord; Answer: Boolean;
  596. Index, X: Integer;
  597. begin
  598. Index := Iteration and $FF;
  599. case Index of
  600. 254:
  601. Numerator := QWord($FFFFFFFFFFFFFFFE);
  602. 255:
  603. Numerator := QWord($FFFFFFFFFFFFFFFF);
  604. else
  605. Numerator := QWord(Index);
  606. end;
  607. FInputArray[Index] := Numerator;
  608. for X := 0 to INTERNAL_LOOPS - 1 do
  609. Answer := (Numerator mod 10) = 0;
  610. FResultArray[Index] := Answer;
  611. end;
  612. { TUInt64Bit100ModCmpTest }
  613. function TUInt64Bit100ModCmpTest.TestTitle: shortstring;
  614. begin
  615. Result := 'Unsigned 64-bit (n mod 100) = 0';
  616. end;
  617. function TUInt64Bit100ModCmpTest.GetDivisor: QWord;
  618. begin
  619. Result := 100;
  620. end;
  621. procedure TUInt64Bit100ModCmpTest.DoTestIteration(Iteration: Integer);
  622. var
  623. Numerator: QWord; Answer: Boolean;
  624. Index, X: Integer;
  625. begin
  626. Index := Iteration and $FF;
  627. case Index of
  628. 254:
  629. Numerator := QWord($FFFFFFFFFFFFFFFE);
  630. 255:
  631. Numerator := QWord($FFFFFFFFFFFFFFFF);
  632. else
  633. Numerator := QWord(Index);
  634. end;
  635. FInputArray[Index] := Numerator;
  636. for X := 0 to INTERNAL_LOOPS - 1 do
  637. Answer := (Numerator mod 100) = 0;
  638. FResultArray[Index] := Answer;
  639. end;
  640. { TUInt64Bit1000000000ModCmpTest }
  641. function TUInt64Bit1000000000ModCmpTest.TestTitle: shortstring;
  642. begin
  643. Result := 'Unsigned 64-bit (n mod 1,000,000,000) = 0';
  644. end;
  645. function TUInt64Bit1000000000ModCmpTest.GetDivisor: QWord;
  646. begin
  647. Result := 1000000000;
  648. end;
  649. procedure TUInt64Bit1000000000ModCmpTest.DoTestIteration(Iteration: Integer);
  650. var
  651. Numerator: QWord; Answer: Boolean;
  652. Index, X: Integer;
  653. begin
  654. Index := Iteration and $FF;
  655. Numerator := FU64_1000000000Input[Index and $F];
  656. FInputArray[Index] := Numerator;
  657. for X := 0 to INTERNAL_LOOPS - 1 do
  658. Answer := (Numerator mod 1000000000) = 0;
  659. FResultArray[Index] := Answer;
  660. end;