tcbarcodes.pas 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784
  1. unit tcbarcodes;
  2. {
  3. This file is part of the Free Pascal run time library.
  4. Copyright (c) 1999-2022 by Michael van Canney and other members of the
  5. Free Pascal development team
  6. Test Bar codes
  7. See the file COPYING.FPC, included in this distribution,
  8. for details about the copyright.
  9. This program is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  12. **********************************************************************}
  13. {$mode objfpc}{$H+}
  14. interface
  15. uses
  16. TypInfo, Classes, SysUtils, fpcunit, testutils, testregistry, fpbarcode;
  17. type
  18. { TTestBarcodes }
  19. TTestBarcodes = class(TTestCase)
  20. private
  21. FText: String;
  22. FType: TBarcodeEncoding;
  23. class procedure AssertEquals(Msg: String; AExpected, AActual: TBarColor);
  24. class procedure AssertEquals(Msg: String; AExpected, AActual: TBarWidth);
  25. class procedure AssertEquals(Msg: String; AExpected, AActual: TBarHeight);
  26. procedure AssertParams(aType: TBarType; AColor: TBarColor; AWidth: TBarWidth; AHeight: TBarheight);
  27. Protected
  28. Procedure SetEncoding(aType: TBarcodeEncoding);
  29. Procedure SetText(aText : String);
  30. Function DoEncode : TBarTypeArray;
  31. Class Procedure AssertEquals(Msg : String; AExpected : Array of Byte; AActual : TBarTypeArray); overload;
  32. Property TheType : TBarcodeEncoding Read FType;
  33. Property TheText : String Read FText;
  34. published
  35. procedure TestEan8;
  36. procedure TestEan13;
  37. procedure TestCode39;
  38. procedure TestCode39Extended;
  39. procedure TestCode128A;
  40. procedure TestCode128B;
  41. procedure TestCode128C;
  42. procedure Testbe2of5industrial;
  43. procedure Testbe2of5interleaved;
  44. procedure Testbe2of5matrix;
  45. procedure TestCode93;
  46. procedure TestCode93Extended;
  47. procedure TestCodeCodabar;
  48. procedure TestCodeMSI;
  49. procedure TestCodePostNet;
  50. Procedure CheckParamsType;
  51. Procedure CheckNumerictypes;
  52. end;
  53. implementation
  54. procedure TTestBarcodes.SetEncoding(aType: TBarcodeEncoding);
  55. begin
  56. FType:=aType;
  57. end;
  58. procedure TTestBarcodes.SetText(aText: String);
  59. begin
  60. FText:=aText;
  61. end;
  62. function TTestBarcodes.DoEncode: TBarTypeArray;
  63. begin
  64. Result:=StringToBarTypeArray(FText,FType);
  65. //Writeln(NewToOld(Result));
  66. end;
  67. class procedure TTestBarcodes.AssertEquals(Msg: String; AExpected: array of Byte; AActual: TBarTypeArray);
  68. Var
  69. I : Integer;
  70. begin
  71. AssertEquals(Msg+': length equal',Length(aExpected),Length(AActual));
  72. for I:=0 to Length(aExpected)-1 do
  73. AssertEquals(Msg+': Element at position ['+intTostr(I)+']',aExpected[i],AActual[i]);
  74. end;
  75. {
  76. The tests have been generated using the barcode unit distributed with lazarus.
  77. The string text in the comment is the string as reproduced with the MakeData function of the TBarCode class.
  78. }
  79. procedure TTestBarcodes.TestEan8;
  80. begin
  81. SetEncoding(beEAN8);
  82. // 0 --> 5052605260526052605050507150715071507150505
  83. SetText('0');
  84. AssertEquals('Test for "0"',[4,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,0,4,0,4,0,6,1,4,0,6,1,4,0,6,1,4,0,6,1,4,0,4,0,4],DoEncode);
  85. // 1 --> 5052605260526052605050507150715061607150505
  86. SetText('1');
  87. AssertEquals('Test for "1"',[4,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,0,4,0,4,0,6,1,4,0,6,1,4,0,5,1,5,0,6,1,4,0,4,0,4],DoEncode);
  88. // 2 --> 5052605260526052605050507150715060617150505
  89. SetText('2');
  90. AssertEquals('Test for "2"',[4,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,0,4,0,4,0,6,1,4,0,6,1,4,0,5,0,5,1,6,1,4,0,4,0,4],DoEncode);
  91. // 3 --> 5052605260526052605050507150715053507150505
  92. SetText('3');
  93. AssertEquals('Test for "3"',[4,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,0,4,0,4,0,6,1,4,0,6,1,4,0,4,3,4,0,6,1,4,0,4,0,4],DoEncode);
  94. // 4 --> 5052605260526052605050507150715050717150505
  95. SetText('4');
  96. AssertEquals('Test for "4"',[4,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,0,4,0,4,0,6,1,4,0,6,1,4,0,4,0,6,1,6,1,4,0,4,0,4],DoEncode);
  97. // 5 --> 5052605260526052605050507150715051707150505
  98. SetText('5');
  99. AssertEquals('Test for "5"',[4,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,0,4,0,4,0,6,1,4,0,6,1,4,0,4,1,6,0,6,1,4,0,4,0,4],DoEncode);
  100. // 6 --> 5052605260526052605050507150715050537150505
  101. SetText('6');
  102. AssertEquals('Test for "6"',[4,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,0,4,0,4,0,6,1,4,0,6,1,4,0,4,0,4,3,6,1,4,0,4,0,4],DoEncode);
  103. // 7 --> 5052605260526052605050507150715052517150505
  104. SetText('7');
  105. AssertEquals('Test for "7"',[4,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,0,4,0,4,0,6,1,4,0,6,1,4,0,4,2,4,1,6,1,4,0,4,0,4],DoEncode);
  106. // 8 --> 5052605260526052605050507150715051527150505
  107. SetText('8');
  108. AssertEquals('Test for "8"',[4,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,0,4,0,4,0,6,1,4,0,6,1,4,0,4,1,4,2,6,1,4,0,4,0,4],DoEncode);
  109. // 9 --> 5052605260526052605050507150715070517150505
  110. SetText('9');
  111. AssertEquals('Test for "9"',[4,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,0,4,0,4,0,6,1,4,0,6,1,4,0,6,0,4,1,6,1,4,0,4,0,4],DoEncode);
  112. // 12345678 --> 5051615151608050526050505170505352515152505
  113. SetText('12345678');
  114. AssertEquals('Test for "12345678"',[4,0,4,1,5,1,4,1,4,1,5,0,7,0,4,0,4,2,5,0,4,0,4,0,4,1,6,0,4,0,4,3,4,2,4,1,4,1,4,2,4,0,4],DoEncode);
  115. end;
  116. procedure TTestBarcodes.TestEan13;
  117. begin
  118. SetEncoding(beEAN13);
  119. // 0 --> 50526052605260526052605260505050715071507150715071507150505
  120. SetText('0');
  121. AssertEquals('Test for "0"',[4,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,0,4,0,4,0,6,1,4,0,6,1,4,0,6,1,4,0,6,1,4,0,6,1,4,0,6,1,4,0,4,0,4],DoEncode);
  122. // 1 --> 50526052605260526052605260505050715071507150715061607150505
  123. SetText('1');
  124. AssertEquals('Test for "1"',[4,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,0,4,0,4,0,6,1,4,0,6,1,4,0,6,1,4,0,6,1,4,0,5,1,5,0,6,1,4,0,4,0,4],DoEncode);
  125. // 2 --> 50526052605260526052605260505050715071507150715060617150505
  126. SetText('2');
  127. AssertEquals('Test for "2"',[4,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,0,4,0,4,0,6,1,4,0,6,1,4,0,6,1,4,0,6,1,4,0,5,0,5,1,6,1,4,0,4,0,4],DoEncode);
  128. // 3 --> 50526052605260526052605260505050715071507150715053507150505
  129. SetText('3');
  130. AssertEquals('Test for "3"',[4,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,0,4,0,4,0,6,1,4,0,6,1,4,0,6,1,4,0,6,1,4,0,4,3,4,0,6,1,4,0,4,0,4],DoEncode);
  131. // 4 --> 50526052605260526052605260505050715071507150715050717150505
  132. SetText('4');
  133. AssertEquals('Test for "4"',[4,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,0,4,0,4,0,6,1,4,0,6,1,4,0,6,1,4,0,6,1,4,0,4,0,6,1,6,1,4,0,4,0,4],DoEncode);
  134. // 5 --> 50526052605260526052605260505050715071507150715051707150505
  135. SetText('5');
  136. AssertEquals('Test for "5"',[4,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,0,4,0,4,0,6,1,4,0,6,1,4,0,6,1,4,0,6,1,4,0,4,1,6,0,6,1,4,0,4,0,4],DoEncode);
  137. // 6 --> 50526052605260526052605260505050715071507150715050537150505
  138. SetText('6');
  139. AssertEquals('Test for "6"',[4,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,0,4,0,4,0,6,1,4,0,6,1,4,0,6,1,4,0,6,1,4,0,4,0,4,3,6,1,4,0,4,0,4],DoEncode);
  140. // 7 --> 50526052605260526052605260505050715071507150715052517150505
  141. SetText('7');
  142. AssertEquals('Test for "7"',[4,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,0,4,0,4,0,6,1,4,0,6,1,4,0,6,1,4,0,6,1,4,0,4,2,4,1,6,1,4,0,4,0,4],DoEncode);
  143. // 8 --> 50526052605260526052605260505050715071507150715051527150505
  144. SetText('8');
  145. AssertEquals('Test for "8"',[4,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,0,4,0,4,0,6,1,4,0,6,1,4,0,6,1,4,0,6,1,4,0,4,1,4,2,6,1,4,0,4,0,4],DoEncode);
  146. // 9 --> 50526052605260526052605260505050715071507150715070517150505
  147. SetText('9');
  148. AssertEquals('Test for "9"',[4,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,0,4,0,4,0,6,1,4,0,6,1,4,0,6,1,4,0,6,1,4,0,6,0,4,1,6,1,4,0,4,0,4],DoEncode);
  149. // 12345678 --> 50526052605260516151516080505050507151705053525151527150505
  150. SetText('12345678');
  151. AssertEquals('Test for "12345678"',[4,0,4,2,5,0,4,2,5,0,4,2,5,0,4,1,5,1,4,1,4,1,5,0,7,0,4,0,4,0,4,0,4,0,6,1,4,1,6,0,4,0,4,3,4,2,4,1,4,1,4,2,6,1,4,0,4,0,4],DoEncode);
  152. // 1234567890123 --> 50515160805170506253505152505050515270517150616060615350505
  153. SetText('1234567890123');
  154. AssertEquals('Test for "1234567890123"',[4,0,4,1,4,1,5,0,7,0,4,1,6,0,4,0,5,2,4,3,4,0,4,1,4,2,4,0,4,0,4,0,4,1,4,2,6,0,4,1,6,1,4,0,5,1,5,0,5,0,5,1,4,3,4,0,4,0,4],DoEncode);
  155. end;
  156. procedure TTestBarcodes.TestCode39;
  157. begin
  158. SetEncoding(be39);
  159. // 0 --> 51506060505051606050515060605
  160. SetText('0');
  161. AssertEquals('Test for "0"',[4,1,4,0,5,0,5,0,4,0,4,0,4,1,5,0,5,0,4,0,4,1,4,0,5,0,5,0,4],DoEncode);
  162. // 1 --> 51506060506051505060515060605
  163. SetText('1');
  164. AssertEquals('Test for "1"',[4,1,4,0,5,0,5,0,4,0,5,0,4,1,4,0,4,0,5,0,4,1,4,0,5,0,5,0,4],DoEncode);
  165. // 2 --> 51506060505061505060515060605
  166. SetText('2');
  167. AssertEquals('Test for "2"',[4,1,4,0,5,0,5,0,4,0,4,0,5,1,4,0,4,0,5,0,4,1,4,0,5,0,5,0,4],DoEncode);
  168. // 3 --> 51506060506061505050515060605
  169. SetText('3');
  170. AssertEquals('Test for "3"',[4,1,4,0,5,0,5,0,4,0,5,0,5,1,4,0,4,0,4,0,4,1,4,0,5,0,5,0,4],DoEncode);
  171. // 4 --> 51506060505051605060515060605
  172. SetText('4');
  173. AssertEquals('Test for "4"',[4,1,4,0,5,0,5,0,4,0,4,0,4,1,5,0,4,0,5,0,4,1,4,0,5,0,5,0,4],DoEncode);
  174. // 5 --> 51506060506051605050515060605
  175. SetText('5');
  176. AssertEquals('Test for "5"',[4,1,4,0,5,0,5,0,4,0,5,0,4,1,5,0,4,0,4,0,4,1,4,0,5,0,5,0,4],DoEncode);
  177. // 6 --> 51506060505061605050515060605
  178. SetText('6');
  179. AssertEquals('Test for "6"',[4,1,4,0,5,0,5,0,4,0,4,0,5,1,5,0,4,0,4,0,4,1,4,0,5,0,5,0,4],DoEncode);
  180. // 7 --> 51506060505051506060515060605
  181. SetText('7');
  182. AssertEquals('Test for "7"',[4,1,4,0,5,0,5,0,4,0,4,0,4,1,4,0,5,0,5,0,4,1,4,0,5,0,5,0,4],DoEncode);
  183. // 8 --> 51506060506051506050515060605
  184. SetText('8');
  185. AssertEquals('Test for "8"',[4,1,4,0,5,0,5,0,4,0,5,0,4,1,4,0,5,0,4,0,4,1,4,0,5,0,5,0,4],DoEncode);
  186. // 9 --> 51506060505061506050515060605
  187. SetText('9');
  188. AssertEquals('Test for "9"',[4,1,4,0,5,0,5,0,4,0,4,0,5,1,4,0,5,0,4,0,4,1,4,0,5,0,5,0,4],DoEncode);
  189. // 12345678 --> 515060605060515050605061505060606150505050516050606051605050506160505050515060606051506050515060605
  190. SetText('12345678');
  191. AssertEquals('Test for "12345678"',[4,1,4,0,5,0,5,0,4,0,5,0,4,1,4,0,4,0,5,0,4,0,5,1,4,0,4,0,5,0,5,0,5,1,4,0,4,0,4,0,4,0,4,1,5,0,4,0,5,0,5,0,4,1,5,0,4,0,4,0,4,0,5,1,5,0,4,0,4,0,4,0,4,1,4,0,5,0,5,0,5,0,4,1,4,0,5,0,4,0,4,1,4,0,5,0,5,0,4],DoEncode);
  192. // 123456789ABCDE --> 515060605060515050605061505060606150505050516050606051605050506160505050515060606051506050506150605060505150605060515060606051505050506150606050615050515060605
  193. SetText('123456789ABCDE');
  194. AssertEquals('Test for "123456789ABCDE"',[4,1,4,0,5,0,5,0,4,0,5,0,4,1,4,0,4,0,5,0,4,0,5,1,4,0,4,0,5,0,5,0,5,1,4,0,4,0,4,0,4,0,4,1,5,0,4,0,5,0,5,0,4,1,5,0,4,0,4,0,4,0,5,1,5,0,4,0,4,0,4,0,4,1,4,0,5,0,5,0,5,0,4,1,4,0,5,0,4,0,4,0,5,1,4,0,5,0,4,0,5,0,4,0,4,1,4,0,5,0,4,0,5,0,4,1,4,0,5,0,5,0,5,0,4,1,4,0,4,0,4,0,4,0,5,1,4,0,5,0,5,0,4,0,5,1,4,0,4,0,4,1,4,0,5,0,5,0,4],DoEncode);
  195. end;
  196. procedure TTestBarcodes.TestCode39Extended;
  197. begin
  198. SetEncoding(be39extended);
  199. // 0 --> 51506060505051606050515060605
  200. SetText('0');
  201. AssertEquals('Test for "0"',[4,1,4,0,5,0,5,0,4,0,4,0,4,1,5,0,5,0,4,0,4,1,4,0,5,0,5,0,4],DoEncode);
  202. // 1 --> 51506060506051505060515060605
  203. SetText('1');
  204. AssertEquals('Test for "1"',[4,1,4,0,5,0,5,0,4,0,5,0,4,1,4,0,4,0,5,0,4,1,4,0,5,0,5,0,4],DoEncode);
  205. // 2 --> 51506060505061505060515060605
  206. SetText('2');
  207. AssertEquals('Test for "2"',[4,1,4,0,5,0,5,0,4,0,4,0,5,1,4,0,4,0,5,0,4,1,4,0,5,0,5,0,4],DoEncode);
  208. // 3 --> 51506060506061505050515060605
  209. SetText('3');
  210. AssertEquals('Test for "3"',[4,1,4,0,5,0,5,0,4,0,5,0,5,1,4,0,4,0,4,0,4,1,4,0,5,0,5,0,4],DoEncode);
  211. // 4 --> 51506060505051605060515060605
  212. SetText('4');
  213. AssertEquals('Test for "4"',[4,1,4,0,5,0,5,0,4,0,4,0,4,1,5,0,4,0,5,0,4,1,4,0,5,0,5,0,4],DoEncode);
  214. // 5 --> 51506060506051605050515060605
  215. SetText('5');
  216. AssertEquals('Test for "5"',[4,1,4,0,5,0,5,0,4,0,5,0,4,1,5,0,4,0,4,0,4,1,4,0,5,0,5,0,4],DoEncode);
  217. // 6 --> 51506060505061605050515060605
  218. SetText('6');
  219. AssertEquals('Test for "6"',[4,1,4,0,5,0,5,0,4,0,4,0,5,1,5,0,4,0,4,0,4,1,4,0,5,0,5,0,4],DoEncode);
  220. // 7 --> 51506060505051506060515060605
  221. SetText('7');
  222. AssertEquals('Test for "7"',[4,1,4,0,5,0,5,0,4,0,4,0,4,1,4,0,5,0,5,0,4,1,4,0,5,0,5,0,4],DoEncode);
  223. // 8 --> 51506060506051506050515060605
  224. SetText('8');
  225. AssertEquals('Test for "8"',[4,1,4,0,5,0,5,0,4,0,5,0,4,1,4,0,5,0,4,0,4,1,4,0,5,0,5,0,4],DoEncode);
  226. // 9 --> 51506060505061506050515060605
  227. SetText('9');
  228. AssertEquals('Test for "9"',[4,1,4,0,5,0,5,0,4,0,4,0,5,1,4,0,5,0,4,0,4,1,4,0,5,0,5,0,4],DoEncode);
  229. // 1234567800 --> 51506060506051505060506150506060615050505051605060605160505050616050505051506060605150605050516060505051606050515060605
  230. SetText('1234567800');
  231. AssertEquals('Test for "1234567800"',[4,1,4,0,5,0,5,0,4,0,5,0,4,1,4,0,4,0,5,0,4,0,5,1,4,0,4,0,5,0,5,0,5,1,4,0,4,0,4,0,4,0,4,1,5,0,4,0,5,0,5,0,4,1,5,0,4,0,4,0,4,0,5,1,5,0,4,0,4,0,4,0,4,1,4,0,5,0,5,0,5,0,4,1,4,0,5,0,4,0,4,0,4,1,5,0,5,0,4,0,4,0,4,1,5,0,5,0,4,0,4,1,4,0,5,0,5,0,4],DoEncode);
  232. // 123456789ABCDEwxyz --> 51506060506051505060506150506060615050505051605060605160505050616050505051506060605150605050615060506050515060506051506060605150505050615060605061505051505151506160505050515051515051506050605150515150615060505051505151505160605050515060605
  233. SetText('123456789ABCDEwxyz');
  234. AssertEquals('Test for "123456789ABCDEwxyz"',[4,1,4,0,5,0,5,0,4,0,5,0,4,1,4,0,4,0,5,0,4,0,5,1,4,0,4,0,5,0,5,0,5,1,4,0,4,0,4,0,4,0,4,1,5,0,4,0,5,0,5,0,4,1,5,0,4,0,4,0,4,0,5,1,5,0,4,0,4,0,4,0,4,1,4,0,5,0,5,0,5,0,4,1,4,0,5,0,4,0,4,0,5,1,4,0,5,0,4,0,5,0,4,0,4,1,4,0,5,0,4,0,5,0,4,1,4,0,5,0,5,0,5,0,4,1,4,0,4,0,4,0,4,0,5,1,4,0,5,0,5,0,4,0,5,1,4,0,4,0,4,1,4,0,4,1,4,1,4,0,5,1,5,0,4,0,4,0,4,0,4,1,4,0,4,1,4,1,4,0,4,1,4,0,5,0,4,0,5,0,4,1,4,0,4,1,4,1,4,0,5,1,4,0,5,0,4,0,4,0,4,1,4,0,4,1,4,1,4,0,4,1,5,0,5,0,4,0,4,0,4,1,4,0,5,0,5,0,4],DoEncode);
  235. end;
  236. Procedure TTestBarcodes.TestCode128A;
  237. begin
  238. SetEncoding(be128A);
  239. // 0 --> 6053515170615170616270506
  240. SetText('0');
  241. AssertEquals('Test for "0"',[5,0,4,3,4,1,4,1,6,0,5,1,4,1,6,0,5,1,5,2,6,0,4,0,5],DoEncode);
  242. // 1 --> 6053515171605171606270506
  243. SetText('1');
  244. AssertEquals('Test for "1"',[5,0,4,3,4,1,4,1,6,1,5,0,4,1,6,1,5,0,5,2,6,0,4,0,5],DoEncode);
  245. // 2 --> 6053516171506171506270506
  246. SetText('2');
  247. AssertEquals('Test for "2"',[5,0,4,3,4,1,5,1,6,1,4,0,5,1,6,1,4,0,5,2,6,0,4,0,5],DoEncode);
  248. // 3 --> 6053516150716150716270506
  249. SetText('3');
  250. AssertEquals('Test for "3"',[5,0,4,3,4,1,5,1,4,0,6,1,5,1,4,0,6,1,5,2,6,0,4,0,5],DoEncode);
  251. // 4 --> 6053516151706151706270506
  252. SetText('4');
  253. AssertEquals('Test for "4"',[5,0,4,3,4,1,5,1,4,1,6,0,5,1,4,1,6,0,5,2,6,0,4,0,5],DoEncode);
  254. // 5 --> 6053516071516071516270506
  255. SetText('5');
  256. AssertEquals('Test for "5"',[5,0,4,3,4,1,5,0,6,1,4,1,5,0,6,1,4,1,5,2,6,0,4,0,5],DoEncode);
  257. // 6 --> 6053516170516170516270506
  258. SetText('6');
  259. AssertEquals('Test for "6"',[5,0,4,3,4,1,5,1,6,0,4,1,5,1,6,0,4,1,5,2,6,0,4,0,5],DoEncode);
  260. // 7 --> 6053517060707060706270506
  261. SetText('7');
  262. AssertEquals('Test for "7"',[5,0,4,3,4,1,6,0,5,0,6,0,6,0,5,0,6,0,5,2,6,0,4,0,5],DoEncode);
  263. // 8 --> 6053517051617051616270506
  264. SetText('8');
  265. AssertEquals('Test for "8"',[5,0,4,3,4,1,6,0,4,1,5,1,6,0,4,1,5,1,5,2,6,0,4,0,5],DoEncode);
  266. // 9 --> 6053517150617150616270506
  267. SetText('9');
  268. AssertEquals('Test for "9"',[5,0,4,3,4,1,6,1,4,0,5,1,6,1,4,0,5,1,5,2,6,0,4,0,5],DoEncode);
  269. // 1234567800 --> 6053515171606171506150716151706071516170517060707051615170615170617050626270506
  270. SetText('1234567800');
  271. AssertEquals('Test for "1234567800"',[5,0,4,3,4,1,4,1,6,1,5,0,5,1,6,1,4,0,5,1,4,0,6,1,5,1,4,1,6,0,5,0,6,1,4,1,5,1,6,0,4,1,6,0,5,0,6,0,6,0,4,1,5,1,4,1,6,0,5,1,4,1,6,0,5,1,6,0,4,0,5,2,5,2,6,0,4,0,5],DoEncode);
  272. // 123456789ABCD --> 6053515171606171506150716151706071516170517060707051617150615052625250625252605062526170516270506
  273. SetText('123456789ABCD');
  274. AssertEquals('Test for "123456789ABCD"',[5,0,4,3,4,1,4,1,6,1,5,0,5,1,6,1,4,0,5,1,4,0,6,1,5,1,4,1,6,0,5,0,6,1,4,1,5,1,6,0,4,1,6,0,5,0,6,0,6,0,4,1,5,1,6,1,4,0,5,1,4,0,4,2,5,2,4,2,4,0,5,2,4,2,4,2,5,0,4,0,5,2,4,2,5,1,6,0,4,1,5,2,6,0,4,0,5],DoEncode);
  275. end;
  276. procedure TTestBarcodes.TestCode128B;
  277. begin
  278. SetEncoding(be128B);
  279. // 0 --> 6051535170615171606270506
  280. SetText('0');
  281. AssertEquals('Test for "0"',[5,0,4,1,4,3,4,1,6,0,5,1,4,1,6,1,5,0,5,2,6,0,4,0,5],DoEncode);
  282. // 1 --> 6051535171606171506270506
  283. SetText('1');
  284. AssertEquals('Test for "1"',[5,0,4,1,4,3,4,1,6,1,5,0,5,1,6,1,4,0,5,2,6,0,4,0,5],DoEncode);
  285. // 2 --> 6051536171506150716270506
  286. SetText('2');
  287. AssertEquals('Test for "2"',[5,0,4,1,4,3,5,1,6,1,4,0,5,1,4,0,6,1,5,2,6,0,4,0,5],DoEncode);
  288. // 3 --> 6051536150716151706270506
  289. SetText('3');
  290. AssertEquals('Test for "3"',[5,0,4,1,4,3,5,1,4,0,6,1,5,1,4,1,6,0,5,2,6,0,4,0,5],DoEncode);
  291. // 4 --> 6051536151706071516270506
  292. SetText('4');
  293. AssertEquals('Test for "4"',[5,0,4,1,4,3,5,1,4,1,6,0,5,0,6,1,4,1,5,2,6,0,4,0,5],DoEncode);
  294. // 5 --> 6051536071516170516270506
  295. SetText('5');
  296. AssertEquals('Test for "5"',[5,0,4,1,4,3,5,0,6,1,4,1,5,1,6,0,4,1,5,2,6,0,4,0,5],DoEncode);
  297. // 6 --> 6051536170517060706270506
  298. SetText('6');
  299. AssertEquals('Test for "6"',[5,0,4,1,4,3,5,1,6,0,4,1,6,0,5,0,6,0,5,2,6,0,4,0,5],DoEncode);
  300. // 7 --> 6051537060707051616270506
  301. SetText('7');
  302. AssertEquals('Test for "7"',[5,0,4,1,4,3,6,0,5,0,6,0,6,0,4,1,5,1,5,2,6,0,4,0,5],DoEncode);
  303. // 8 --> 6051537051617150616270506
  304. SetText('8');
  305. AssertEquals('Test for "8"',[5,0,4,1,4,3,6,0,4,1,5,1,6,1,4,0,5,1,5,2,6,0,4,0,5],DoEncode);
  306. // 9 --> 6051537150617151606270506
  307. SetText('9');
  308. AssertEquals('Test for "9"',[5,0,4,1,4,3,6,1,4,0,5,1,6,1,4,1,5,0,5,2,6,0,4,0,5],DoEncode);
  309. // 1234567800 --> 6051535171606171506150716151706071516170517060707051615170615170617052606270506
  310. SetText('1234567800');
  311. AssertEquals('Test for "1234567800"',[5,0,4,1,4,3,4,1,6,1,5,0,5,1,6,1,4,0,5,1,4,0,6,1,5,1,4,1,6,0,5,0,6,1,4,1,5,1,6,0,4,1,6,0,5,0,6,0,6,0,4,1,5,1,4,1,6,0,5,1,4,1,6,0,5,1,6,0,4,2,5,0,5,2,6,0,4,0,5],DoEncode);
  312. // 123456789ABCD --> 6051535171606171506150716151706071516170517060707051617150615052625250625252605062527060706270506
  313. SetText('123456789ABCD');
  314. AssertEquals('Test for "123456789ABCD"',[5,0,4,1,4,3,4,1,6,1,5,0,5,1,6,1,4,0,5,1,4,0,6,1,5,1,4,1,6,0,5,0,6,1,4,1,5,1,6,0,4,1,6,0,5,0,6,0,6,0,4,1,5,1,6,1,4,0,5,1,4,0,4,2,5,2,4,2,4,0,5,2,4,2,4,2,5,0,4,0,5,2,4,2,6,0,5,0,6,0,5,2,6,0,4,0,5],DoEncode);
  315. end;
  316. Procedure TTestBarcodes.TestCode128C;
  317. begin
  318. SetEncoding(be128C);
  319. // 0 --> 6051716061616161606270506
  320. SetText('0');
  321. AssertEquals('Test for "0"',[5,0,4,1,6,1,5,0,5,1,5,1,5,1,5,1,5,0,5,2,6,0,4,0,5],DoEncode);
  322. // 1 --> 6051716160615151626270506
  323. SetText('1');
  324. AssertEquals('Test for "1"',[5,0,4,1,6,1,5,1,5,0,5,1,4,1,4,1,5,2,5,2,6,0,4,0,5],DoEncode);
  325. // 2 --> 6051716161605152616270506
  326. SetText('2');
  327. AssertEquals('Test for "2"',[5,0,4,1,6,1,5,1,5,1,5,0,4,1,4,2,5,1,5,2,6,0,4,0,5],DoEncode);
  328. // 3 --> 6051715151625251616270506
  329. SetText('3');
  330. AssertEquals('Test for "3"',[5,0,4,1,6,1,4,1,4,1,5,2,4,2,4,1,5,1,5,2,6,0,4,0,5],DoEncode);
  331. // 4 --> 6051715152615161526270506
  332. SetText('4');
  333. AssertEquals('Test for "4"',[5,0,4,1,6,1,4,1,4,2,5,1,4,1,5,1,4,2,5,2,6,0,4,0,5],DoEncode);
  334. // 5 --> 6051715251615162516270506
  335. SetText('5');
  336. AssertEquals('Test for "5"',[5,0,4,1,6,1,4,2,4,1,5,1,4,1,5,2,4,1,5,2,6,0,4,0,5],DoEncode);
  337. // 6 --> 6051715161525261516270506
  338. SetText('6');
  339. AssertEquals('Test for "6"',[5,0,4,1,6,1,4,1,5,1,4,2,4,2,5,1,4,1,5,2,6,0,4,0,5],DoEncode);
  340. // 7 --> 6051715162516151526270506
  341. SetText('7');
  342. AssertEquals('Test for "7"',[5,0,4,1,6,1,4,1,5,2,4,1,5,1,4,1,4,2,5,2,6,0,4,0,5],DoEncode);
  343. // 8 --> 6051715261516152516270506
  344. SetText('8');
  345. AssertEquals('Test for "8"',[5,0,4,1,6,1,4,2,5,1,4,1,5,1,4,2,4,1,5,2,6,0,4,0,5],DoEncode);
  346. // 9 --> 6051716151526251516270506
  347. SetText('9');
  348. AssertEquals('Test for "9"',[5,0,4,1,6,1,5,1,4,1,4,2,5,2,4,1,4,1,5,2,6,0,4,0,5],DoEncode);
  349. // 1234567800 --> 6051715061715250627250606350516061615270606270506
  350. SetText('1234567800');
  351. AssertEquals('Test for "1234567800"',[5,0,4,1,6,1,4,0,5,1,6,1,4,2,4,0,5,2,6,2,4,0,5,0,5,3,4,0,4,1,5,0,5,1,5,1,4,2,6,0,5,0,5,2,6,0,4,0,5],DoEncode);
  352. end;
  353. Procedure TTestBarcodes.Testbe2of5industrial;
  354. begin
  355. SetEncoding(be2of5industrial);
  356. // 00 --> 60605050506060505050606050605060
  357. SetText('00');
  358. AssertEquals('Test for "00"',[5,0,5,0,4,0,4,0,4,0,5,0,5,0,4,0,4,0,4,0,5,0,5,0,4,0,5,0,4,0,5,0],DoEncode);
  359. // 11 --> 60605060505050606050505060605060
  360. SetText('11');
  361. AssertEquals('Test for "11"',[5,0,5,0,4,0,5,0,4,0,4,0,4,0,5,0,5,0,4,0,4,0,4,0,5,0,5,0,4,0,5,0],DoEncode);
  362. // 22 --> 60605050605050605060505060605060
  363. SetText('22');
  364. AssertEquals('Test for "22"',[5,0,5,0,4,0,4,0,5,0,4,0,4,0,5,0,4,0,5,0,4,0,4,0,5,0,5,0,4,0,5,0],DoEncode);
  365. // 33 --> 60605060605050506060505050605060
  366. SetText('33');
  367. AssertEquals('Test for "33"',[5,0,5,0,4,0,5,0,5,0,4,0,4,0,4,0,5,0,5,0,4,0,4,0,4,0,5,0,4,0,5,0],DoEncode);
  368. // 44 --> 60605050506050605050605060605060
  369. SetText('44');
  370. AssertEquals('Test for "44"',[5,0,5,0,4,0,4,0,4,0,5,0,4,0,5,0,4,0,4,0,5,0,4,0,5,0,5,0,4,0,5,0],DoEncode);
  371. // 55 --> 60605060506050506050605050605060
  372. SetText('55');
  373. AssertEquals('Test for "55"',[5,0,5,0,4,0,5,0,4,0,5,0,4,0,4,0,5,0,4,0,5,0,4,0,4,0,5,0,4,0,5,0],DoEncode);
  374. // 66 --> 60605050606050505060605050605060
  375. SetText('66');
  376. AssertEquals('Test for "66"',[5,0,5,0,4,0,4,0,5,0,5,0,4,0,4,0,4,0,5,0,5,0,4,0,4,0,5,0,4,0,5,0],DoEncode);
  377. // 77 --> 60605050505060605050506060605060
  378. SetText('77');
  379. AssertEquals('Test for "77"',[5,0,5,0,4,0,4,0,4,0,4,0,5,0,5,0,4,0,4,0,4,0,5,0,5,0,5,0,4,0,5,0],DoEncode);
  380. // 88 --> 60605060505060506050506050605060
  381. SetText('88');
  382. AssertEquals('Test for "88"',[5,0,5,0,4,0,5,0,4,0,4,0,5,0,4,0,5,0,4,0,4,0,5,0,4,0,5,0,4,0,5,0],DoEncode);
  383. // 99 --> 60605050605060505060506050605060
  384. SetText('99');
  385. AssertEquals('Test for "99"',[5,0,5,0,4,0,4,0,5,0,4,0,5,0,4,0,4,0,5,0,4,0,5,0,4,0,5,0,4,0,5,0],DoEncode);
  386. // 1234567800 --> 6060506050505060506050506060605050505050605060605060505050606050505050506060605050605050506060505050606050605060
  387. SetText('1234567800');
  388. AssertEquals('Test for "1234567800"',[5,0,5,0,4,0,5,0,4,0,4,0,4,0,5,0,4,0,5,0,4,0,4,0,5,0,5,0,5,0,4,0,4,0,4,0,4,0,4,0,5,0,4,0,5,0,5,0,4,0,5,0,4,0,4,0,4,0,5,0,5,0,4,0,4,0,4,0,4,0,4,0,5,0,5,0,5,0,4,0,4,0,5,0,4,0,4,0,4,0,5,0,5,0,4,0,4,0,4,0,5,0,5,0,4,0,5,0,4,0,5,0],DoEncode);
  389. end;
  390. Procedure TTestBarcodes.Testbe2of5interleaved;
  391. begin
  392. SetEncoding(be2of5interleaved);
  393. // 00 --> 50505050616150605
  394. SetText('00');
  395. AssertEquals('Test for "00"',[4,0,4,0,4,0,4,0,5,1,5,1,4,0,5,0,4],DoEncode);
  396. // 11 --> 50506150505061605
  397. SetText('11');
  398. AssertEquals('Test for "11"',[4,0,4,0,5,1,4,0,4,0,4,0,5,1,5,0,4],DoEncode);
  399. // 22 --> 50505061505061605
  400. SetText('22');
  401. AssertEquals('Test for "22"',[4,0,4,0,4,0,5,1,4,0,4,0,5,1,5,0,4],DoEncode);
  402. // 33 --> 50506161505050605
  403. SetText('33');
  404. AssertEquals('Test for "33"',[4,0,4,0,5,1,5,1,4,0,4,0,4,0,5,0,4],DoEncode);
  405. // 44 --> 50505050615061605
  406. SetText('44');
  407. AssertEquals('Test for "44"',[4,0,4,0,4,0,4,0,5,1,4,0,5,1,5,0,4],DoEncode);
  408. // 55 --> 50506150615050605
  409. SetText('55');
  410. AssertEquals('Test for "55"',[4,0,4,0,5,1,4,0,5,1,4,0,4,0,5,0,4],DoEncode);
  411. // 66 --> 50505061615050605
  412. SetText('66');
  413. AssertEquals('Test for "66"',[4,0,4,0,4,0,5,1,5,1,4,0,4,0,5,0,4],DoEncode);
  414. // 77 --> 50505050506161605
  415. SetText('77');
  416. AssertEquals('Test for "77"',[4,0,4,0,4,0,4,0,4,0,5,1,5,1,5,0,4],DoEncode);
  417. // 88 --> 50506150506150605
  418. SetText('88');
  419. AssertEquals('Test for "88"',[4,0,4,0,5,1,4,0,4,0,5,1,4,0,5,0,4],DoEncode);
  420. // 99 --> 50505061506150605
  421. SetText('99');
  422. AssertEquals('Test for "99"',[4,0,4,0,4,0,5,1,4,0,5,1,4,0,5,0,4],DoEncode);
  423. // 1234567800 --> 505060515050616060515051605161505051505061605050616150605
  424. SetText('1234567800');
  425. AssertEquals('Test for "1234567800"',[4,0,4,0,5,0,4,1,4,0,4,0,5,1,5,0,5,0,4,1,4,0,4,1,5,0,4,1,5,1,4,0,4,0,4,1,4,0,4,0,5,1,5,0,4,0,4,0,5,1,5,1,4,0,5,0,4],DoEncode);
  426. end;
  427. Procedure TTestBarcodes.Testbe2of5matrix;
  428. begin
  429. SetEncoding(be2of5matrix);
  430. // 00 --> 70505050615050615070505
  431. SetText('00');
  432. AssertEquals('Test for "00"',[6,0,4,0,4,0,4,0,5,1,4,0,4,0,5,1,4,0,6,0,4,0,4],DoEncode);
  433. // 11 --> 70505060506060506070505
  434. SetText('11');
  435. AssertEquals('Test for "11"',[6,0,4,0,4,0,5,0,4,0,5,0,5,0,4,0,5,0,6,0,4,0,4],DoEncode);
  436. // 22 --> 70505051506051506070505
  437. SetText('22');
  438. AssertEquals('Test for "22"',[6,0,4,0,4,0,4,1,4,0,5,0,4,1,4,0,5,0,6,0,4,0,4],DoEncode);
  439. // 33 --> 70505061505061505070505
  440. SetText('33');
  441. AssertEquals('Test for "33"',[6,0,4,0,4,0,5,1,4,0,4,0,5,1,4,0,4,0,6,0,4,0,4],DoEncode);
  442. // 44 --> 70505050606050606070505
  443. SetText('44');
  444. AssertEquals('Test for "44"',[6,0,4,0,4,0,4,0,5,0,5,0,4,0,5,0,5,0,6,0,4,0,4],DoEncode);
  445. // 55 --> 70505060605060605070505
  446. SetText('55');
  447. AssertEquals('Test for "55"',[6,0,4,0,4,0,5,0,5,0,4,0,5,0,5,0,4,0,6,0,4,0,4],DoEncode);
  448. // 66 --> 70505051605051605070505
  449. SetText('66');
  450. AssertEquals('Test for "66"',[6,0,4,0,4,0,4,1,5,0,4,0,4,1,5,0,4,0,6,0,4,0,4],DoEncode);
  451. // 77 --> 70505050516050516070505
  452. SetText('77');
  453. AssertEquals('Test for "77"',[6,0,4,0,4,0,4,0,4,1,5,0,4,0,4,1,5,0,6,0,4,0,4],DoEncode);
  454. // 88 --> 70505060515060515070505
  455. SetText('88');
  456. AssertEquals('Test for "88"',[6,0,4,0,4,0,5,0,4,1,4,0,5,0,4,1,4,0,6,0,4,0,4],DoEncode);
  457. // 99 --> 70505051515051515070505
  458. SetText('99');
  459. AssertEquals('Test for "99"',[6,0,4,0,4,0,4,1,4,1,4,0,4,1,4,1,4,0,6,0,4,0,4],DoEncode);
  460. // 1234567800 --> 70505060506051506061505050606060605051605050516060515050615050615070505
  461. SetText('1234567800');
  462. AssertEquals('Test for "1234567800"',[6,0,4,0,4,0,5,0,4,0,5,0,4,1,4,0,5,0,5,1,4,0,4,0,4,0,5,0,5,0,5,0,5,0,4,0,4,1,5,0,4,0,4,0,4,1,5,0,5,0,4,1,4,0,4,0,5,1,4,0,4,0,5,1,4,0,6,0,4,0,4],DoEncode);
  463. end;
  464. Procedure TTestBarcodes.TestCode93;
  465. begin
  466. SetEncoding(be93);
  467. // 0 --> 5050805250515250515250515050805
  468. SetText('0');
  469. AssertEquals('Test for "0"',[4,0,4,0,7,0,4,2,4,0,4,1,4,2,4,0,4,1,4,2,4,0,4,1,4,0,4,0,7,0,4],DoEncode);
  470. // 1 --> 5050805051525051525053505050805
  471. SetText('1');
  472. AssertEquals('Test for "1"',[4,0,4,0,7,0,4,0,4,1,4,2,4,0,4,1,4,2,4,0,4,3,4,0,4,0,4,0,7,0,4],DoEncode);
  473. // 2 --> 5050805052515052515152505050805
  474. SetText('2');
  475. AssertEquals('Test for "2"',[4,0,4,0,7,0,4,0,4,2,4,1,4,0,4,2,4,1,4,1,4,2,4,0,4,0,4,0,7,0,4],DoEncode);
  476. // 3 --> 5050805053505053505350505050805
  477. SetText('3');
  478. AssertEquals('Test for "3"',[4,0,4,0,7,0,4,0,4,3,4,0,4,0,4,3,4,0,4,3,4,0,4,0,4,0,4,0,7,0,4],DoEncode);
  479. // 4 --> 5050805150525150526052505050805
  480. SetText('4');
  481. AssertEquals('Test for "4"',[4,0,4,0,7,0,4,1,4,0,4,2,4,1,4,0,4,2,5,0,4,2,4,0,4,0,4,0,7,0,4],DoEncode);
  482. // 5 --> 5050805151515151516250505050805
  483. SetText('5');
  484. AssertEquals('Test for "5"',[4,0,4,0,7,0,4,1,4,1,4,1,4,1,4,1,4,1,5,2,4,0,4,0,4,0,4,0,7,0,4],DoEncode);
  485. // 6 --> 5050805152505152505062505050805
  486. SetText('6');
  487. AssertEquals('Test for "6"',[4,0,4,0,7,0,4,1,4,2,4,0,4,1,4,2,4,0,4,0,5,2,4,0,4,0,4,0,7,0,4],DoEncode);
  488. // 7 --> 5050805050535050535050625050805
  489. SetText('7');
  490. AssertEquals('Test for "7"',[4,0,4,0,7,0,4,0,4,0,4,3,4,0,4,0,4,3,4,0,4,0,5,2,4,0,4,0,7,0,4],DoEncode);
  491. // 8 --> 5050805251505251505150615050805
  492. SetText('8');
  493. AssertEquals('Test for "8"',[4,0,4,0,7,0,4,2,4,1,4,0,4,2,4,1,4,0,4,1,4,0,5,1,4,0,4,0,7,0,4],DoEncode);
  494. // 9 --> 5050805350505350506061505050805
  495. SetText('9');
  496. AssertEquals('Test for "9"',[4,0,4,0,7,0,4,3,4,0,4,0,4,3,4,0,4,0,5,0,5,1,4,0,4,0,4,0,7,0,4],DoEncode);
  497. // 1234567800 --> 5050805051525052515053505150525151515152505050535251505250515250515150527060505050805
  498. SetText('1234567800');
  499. AssertEquals('Test for "1234567800"',[4,0,4,0,7,0,4,0,4,1,4,2,4,0,4,2,4,1,4,0,4,3,4,0,4,1,4,0,4,2,4,1,4,1,4,1,4,1,4,2,4,0,4,0,4,0,4,3,4,2,4,1,4,0,4,2,4,0,4,1,4,2,4,0,4,1,4,1,4,0,4,2,6,0,5,0,4,0,4,0,4,0,7,0,4],DoEncode);
  500. // 123456789ABCD --> 5050805051525052515053505150525151515152505050535251505350506050526051516052506150515060616151505050805
  501. SetText('123456789ABCD');
  502. AssertEquals('Test for "123456789ABCD"',[4,0,4,0,7,0,4,0,4,1,4,2,4,0,4,2,4,1,4,0,4,3,4,0,4,1,4,0,4,2,4,1,4,1,4,1,4,1,4,2,4,0,4,0,4,0,4,3,4,2,4,1,4,0,4,3,4,0,4,0,5,0,4,0,4,2,5,0,4,1,4,1,5,0,4,2,4,0,5,1,4,0,4,1,4,0,5,0,5,1,5,1,4,1,4,0,4,0,4,0,7,0,4],DoEncode);
  503. end;
  504. Procedure TTestBarcodes.TestCode93Extended;
  505. begin
  506. SetEncoding(be93Extended);
  507. // 00 --> 5050805250515250515250515250515050805
  508. SetText('00');
  509. AssertEquals('Test for "00"',[4,0,4,0,7,0,4,2,4,0,4,1,4,2,4,0,4,1,4,2,4,0,4,1,4,2,4,0,4,1,4,0,4,0,7,0,4],DoEncode);
  510. // 11 --> 5050805051525051525053505251505050805
  511. SetText('11');
  512. AssertEquals('Test for "11"',[4,0,4,0,7,0,4,0,4,1,4,2,4,0,4,1,4,2,4,0,4,3,4,0,4,2,4,1,4,0,4,0,4,0,7,0,4],DoEncode);
  513. // 22 --> 5050805052515052515152505060525050805
  514. SetText('22');
  515. AssertEquals('Test for "22"',[4,0,4,0,7,0,4,0,4,2,4,1,4,0,4,2,4,1,4,1,4,2,4,0,4,0,5,0,4,2,4,0,4,0,7,0,4],DoEncode);
  516. // 33 --> 5050805053505053505350505150615050805
  517. SetText('33');
  518. AssertEquals('Test for "33"',[4,0,4,0,7,0,4,0,4,3,4,0,4,0,4,3,4,0,4,3,4,0,4,0,4,1,4,0,5,1,4,0,4,0,7,0,4],DoEncode);
  519. // 44 --> 5050805150525150526052505060615050805
  520. SetText('44');
  521. AssertEquals('Test for "44"',[4,0,4,0,7,0,4,1,4,0,4,2,4,1,4,0,4,2,5,0,4,2,4,0,4,0,5,0,5,1,4,0,4,0,7,0,4],DoEncode);
  522. // 55 --> 5050805151515151516250505060705050805
  523. SetText('55');
  524. AssertEquals('Test for "55"',[4,0,4,0,7,0,4,1,4,1,4,1,4,1,4,1,4,1,5,2,4,0,4,0,4,0,5,0,6,0,4,0,4,0,7,0,4],DoEncode);
  525. // 66 --> 5050805152505152505062505051525050805
  526. SetText('66');
  527. AssertEquals('Test for "66"',[4,0,4,0,7,0,4,1,4,2,4,0,4,1,4,2,4,0,4,0,5,2,4,0,4,0,4,1,4,2,4,0,4,0,7,0,4],DoEncode);
  528. // 77 --> 5050805050535050535050625350505050805
  529. SetText('77');
  530. AssertEquals('Test for "77"',[4,0,4,0,7,0,4,0,4,0,4,3,4,0,4,0,4,3,4,0,4,0,5,2,4,3,4,0,4,0,4,0,4,0,7,0,4],DoEncode);
  531. // 88 --> 5050805251505251505150615061515050805
  532. SetText('88');
  533. AssertEquals('Test for "88"',[4,0,4,0,7,0,4,2,4,1,4,0,4,2,4,1,4,0,4,1,4,0,5,1,4,0,5,1,4,1,4,0,4,0,7,0,4],DoEncode);
  534. // 99 --> 5050805350505350506061505250605050805
  535. SetText('99');
  536. AssertEquals('Test for "99"',[4,0,4,0,7,0,4,3,4,0,4,0,4,3,4,0,4,0,5,0,5,1,4,0,4,2,4,0,5,0,4,0,4,0,7,0,4],DoEncode);
  537. // 1234567800 --> 5050805051525052515053505150525151515152505050535251505250515250515150527060505050805
  538. SetText('1234567800');
  539. AssertEquals('Test for "1234567800"',[4,0,4,0,7,0,4,0,4,1,4,2,4,0,4,2,4,1,4,0,4,3,4,0,4,1,4,0,4,2,4,1,4,1,4,1,4,1,4,2,4,0,4,0,4,0,4,3,4,2,4,1,4,0,4,2,4,0,4,1,4,2,4,0,4,1,4,1,4,0,4,2,6,0,5,0,4,0,4,0,4,0,7,0,4],DoEncode);
  540. // 123456789ABCD --> 5050805051525052515053505150525151515152505050535251505350506050526051516052506150515060616151505050805
  541. SetText('123456789ABCD');
  542. AssertEquals('Test for "123456789ABCD"',[4,0,4,0,7,0,4,0,4,1,4,2,4,0,4,2,4,1,4,0,4,3,4,0,4,1,4,0,4,2,4,1,4,1,4,1,4,1,4,2,4,0,4,0,4,0,4,3,4,2,4,1,4,0,4,3,4,0,4,0,5,0,4,0,4,2,5,0,4,1,4,1,5,0,4,2,4,0,5,1,4,0,4,1,4,0,5,0,5,1,5,1,4,1,4,0,4,0,4,0,7,0,4],DoEncode);
  543. end;
  544. Procedure TTestBarcodes.TestCodeCodabar;
  545. begin
  546. SetEncoding(beCodabar);
  547. // 0 --> 50615150505051605151506
  548. SetText('0');
  549. AssertEquals('Test for "0"',[4,0,5,1,4,1,4,0,4,0,4,0,4,1,5,0,4,1,4,1,4,0,5],DoEncode);
  550. // 1 --> 50615150505061505151506
  551. SetText('1');
  552. AssertEquals('Test for "1"',[4,0,5,1,4,1,4,0,4,0,4,0,5,1,4,0,4,1,4,1,4,0,5],DoEncode);
  553. // 2 --> 50615150505150605151506
  554. SetText('2');
  555. AssertEquals('Test for "2"',[4,0,5,1,4,1,4,0,4,0,4,1,4,0,5,0,4,1,4,1,4,0,5],DoEncode);
  556. // 3 --> 50615150615050505151506
  557. SetText('3');
  558. AssertEquals('Test for "3"',[4,0,5,1,4,1,4,0,5,1,4,0,4,0,4,0,4,1,4,1,4,0,5],DoEncode);
  559. // 4 --> 50615150506051505151506
  560. SetText('4');
  561. AssertEquals('Test for "4"',[4,0,5,1,4,1,4,0,4,0,5,0,4,1,4,0,4,1,4,1,4,0,5],DoEncode);
  562. // 5 --> 50615150605051505151506
  563. SetText('5');
  564. AssertEquals('Test for "5"',[4,0,5,1,4,1,4,0,5,0,4,0,4,1,4,0,4,1,4,1,4,0,5],DoEncode);
  565. // 6 --> 50615150515050605151506
  566. SetText('6');
  567. AssertEquals('Test for "6"',[4,0,5,1,4,1,4,0,4,1,4,0,4,0,5,0,4,1,4,1,4,0,5],DoEncode);
  568. // 7 --> 50615150515060505151506
  569. SetText('7');
  570. AssertEquals('Test for "7"',[4,0,5,1,4,1,4,0,4,1,4,0,5,0,4,0,4,1,4,1,4,0,5],DoEncode);
  571. // 8 --> 50615150516050505151506
  572. SetText('8');
  573. AssertEquals('Test for "8"',[4,0,5,1,4,1,4,0,4,1,5,0,4,0,4,0,4,1,4,1,4,0,5],DoEncode);
  574. // 9 --> 50615150605150505151506
  575. SetText('9');
  576. AssertEquals('Test for "9"',[4,0,5,1,4,1,4,0,5,0,4,1,4,0,4,0,4,1,4,1,4,0,5],DoEncode);
  577. // 1234567800 --> 50615150505061505051506061505050506051506050515051505060515060505160505050505160505051605151506
  578. SetText('1234567800');
  579. AssertEquals('Test for "1234567800"',[4,0,5,1,4,1,4,0,4,0,4,0,5,1,4,0,4,0,4,1,4,0,5,0,5,1,4,0,4,0,4,0,4,0,5,0,4,1,4,0,5,0,4,0,4,1,4,0,4,1,4,0,4,0,5,0,4,1,4,0,5,0,4,0,4,1,5,0,4,0,4,0,4,0,4,0,4,1,5,0,4,0,4,0,4,1,5,0,4,1,4,1,4,0,5],DoEncode);
  580. // 123456789ABCD --> 50615150505061505051506061505050506051506050515051505060515060505160505060515050506151505151506050515160505161505151506
  581. SetText('123456789ABCD');
  582. AssertEquals('Test for "123456789ABCD"',[4,0,5,1,4,1,4,0,4,0,4,0,5,1,4,0,4,0,4,1,4,0,5,0,5,1,4,0,4,0,4,0,4,0,5,0,4,1,4,0,5,0,4,0,4,1,4,0,4,1,4,0,4,0,5,0,4,1,4,0,5,0,4,0,4,1,5,0,4,0,4,0,5,0,4,1,4,0,4,0,4,0,5,1,4,1,4,0,4,1,4,1,4,0,5,0,4,0,4,1,4,1,5,0,4,0,4,1,5,1,4,0,4,1,4,1,4,0,5],DoEncode);
  583. end;
  584. Procedure TTestBarcodes.TestCodeMSI;
  585. begin
  586. SetEncoding(beMSI);
  587. // 0 --> 605151515151516051515
  588. SetText('0');
  589. AssertEquals('Test for "0"',[5,0,4,1,4,1,4,1,4,1,4,1,4,1,5,0,4,1,4,1,4],DoEncode);
  590. // 1 --> 605151516051515160515
  591. SetText('1');
  592. AssertEquals('Test for "1"',[5,0,4,1,4,1,4,1,5,0,4,1,4,1,4,1,5,0,4,1,4],DoEncode);
  593. // 2 --> 605151605151515151515
  594. SetText('2');
  595. AssertEquals('Test for "2"',[5,0,4,1,4,1,5,0,4,1,4,1,4,1,4,1,4,1,4,1,4],DoEncode);
  596. // 3 --> 605151606060515160515
  597. SetText('3');
  598. AssertEquals('Test for "3"',[5,0,4,1,4,1,5,0,5,0,5,0,4,1,4,1,5,0,4,1,4],DoEncode);
  599. // 4 --> 605160515160515151515
  600. SetText('4');
  601. AssertEquals('Test for "4"',[5,0,4,1,5,0,4,1,4,1,5,0,4,1,4,1,4,1,4,1,4],DoEncode);
  602. // 5 --> 605160516051606060515
  603. SetText('5');
  604. AssertEquals('Test for "5"',[5,0,4,1,5,0,4,1,5,0,4,1,5,0,5,0,5,0,4,1,4],DoEncode);
  605. // 6 --> 605160605151606051515
  606. SetText('6');
  607. AssertEquals('Test for "6"',[5,0,4,1,5,0,5,0,4,1,4,1,5,0,5,0,4,1,4,1,4],DoEncode);
  608. // 7 --> 605160606051605160515
  609. SetText('7');
  610. AssertEquals('Test for "7"',[5,0,4,1,5,0,5,0,5,0,4,1,5,0,4,1,5,0,4,1,4],DoEncode);
  611. // 8 --> 606051515151605151515
  612. SetText('8');
  613. AssertEquals('Test for "8"',[5,0,5,0,4,1,4,1,4,1,4,1,5,0,4,1,4,1,4,1,4],DoEncode);
  614. // 9 --> 606051516051516060515
  615. SetText('9');
  616. AssertEquals('Test for "9"',[5,0,5,0,4,1,4,1,5,0,4,1,4,1,5,0,5,0,4,1,4],DoEncode);
  617. // 1234567800 --> 605151516051516051515160605160515151605160516060515160606060515151515151515151515160515151515
  618. SetText('1234567800');
  619. AssertEquals('Test for "1234567800"',[5,0,4,1,4,1,4,1,5,0,4,1,4,1,5,0,4,1,4,1,4,1,5,0,5,0,4,1,5,0,4,1,4,1,4,1,5,0,4,1,5,0,4,1,5,0,5,0,4,1,4,1,5,0,5,0,5,0,5,0,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,5,0,4,1,4,1,4,1,4,1,4],DoEncode);
  620. end;
  621. Procedure TTestBarcodes.TestCodePostNet;
  622. begin
  623. SetEncoding(bePostNet);
  624. // 0 --> 515151A1A1A15
  625. SetText('0');
  626. AssertEquals('Test for "0"',[4,1,4,1,4,1,8,1,8,1,8,1,4],DoEncode);
  627. // 1 --> 51A1A1A151515
  628. SetText('1');
  629. AssertEquals('Test for "1"',[4,1,8,1,8,1,8,1,4,1,4,1,4],DoEncode);
  630. // 2 --> 51A1A151A1515
  631. SetText('2');
  632. AssertEquals('Test for "2"',[4,1,8,1,8,1,4,1,8,1,4,1,4],DoEncode);
  633. // 3 --> 51A1A15151A15
  634. SetText('3');
  635. AssertEquals('Test for "3"',[4,1,8,1,8,1,4,1,4,1,8,1,4],DoEncode);
  636. // 4 --> 51A151A1A1515
  637. SetText('4');
  638. AssertEquals('Test for "4"',[4,1,8,1,4,1,8,1,8,1,4,1,4],DoEncode);
  639. // 5 --> 51A151A151A15
  640. SetText('5');
  641. AssertEquals('Test for "5"',[4,1,8,1,4,1,8,1,4,1,8,1,4],DoEncode);
  642. // 6 --> 51A15151A1A15
  643. SetText('6');
  644. AssertEquals('Test for "6"',[4,1,8,1,4,1,4,1,8,1,8,1,4],DoEncode);
  645. // 7 --> 5151A1A1A1515
  646. SetText('7');
  647. AssertEquals('Test for "7"',[4,1,4,1,8,1,8,1,8,1,4,1,4],DoEncode);
  648. // 8 --> 5151A1A151A15
  649. SetText('8');
  650. AssertEquals('Test for "8"',[4,1,4,1,8,1,8,1,4,1,8,1,4],DoEncode);
  651. // 9 --> 5151A151A1A15
  652. SetText('9');
  653. AssertEquals('Test for "9"',[4,1,4,1,8,1,4,1,8,1,8,1,4],DoEncode);
  654. // 1234567800 --> 51A1A1A15151A1A151A151A1A15151A1A151A1A151A151A151A1A15151A1A151A1A1A15151A1A151A15151A1A1A15151A1A1A15
  655. SetText('1234567800');
  656. AssertEquals('Test for "1234567800"',[4,1,8,1,8,1,8,1,4,1,4,1,8,1,8,1,4,1,8,1,4,1,8,1,8,1,4,1,4,1,8,1,8,1,4,1,8,1,8,1,4,1,8,1,4,1,8,1,4,1,8,1,8,1,4,1,4,1,8,1,8,1,4,1,8,1,8,1,8,1,4,1,4,1,8,1,8,1,4,1,8,1,4,1,4,1,8,1,8,1,8,1,4,1,4,1,8,1,8,1,8,1,4],DoEncode);
  657. end;
  658. {
  659. BarTypes : TBarTypeParams = (
  660. );
  661. }
  662. Class procedure TTestBarcodes.AssertEquals(Msg : String; AExpected,AActual : TBarColor);
  663. begin
  664. AssertEquals(Msg,GetEnumName(TypeInfo(TBarColor),Ord(AExpected)),
  665. GetEnumName(TypeInfo(TBarColor),Ord(AActual)));
  666. end;
  667. Class procedure TTestBarcodes.AssertEquals(Msg : String; AExpected,AActual : TBarWidth);
  668. begin
  669. AssertEquals(Msg,GetEnumName(TypeInfo(TBarWidth),Ord(AExpected)),
  670. GetEnumName(TypeInfo(TBarWidth),Ord(AActual)));
  671. end;
  672. Class procedure TTestBarcodes.AssertEquals(Msg : String; AExpected,AActual : TBarHeight);
  673. begin
  674. AssertEquals(Msg,GetEnumName(TypeInfo(TBarHeight),Ord(AExpected)),
  675. GetEnumName(TypeInfo(TBarHeight),Ord(AActual)));
  676. end;
  677. // AWidth : TBarWidth; AHeight : TBarheight);
  678. // AColor : TBarColor; AWidth : TBarWidth; AHeight : TBarheight
  679. procedure TTestBarcodes.AssertParams(aType : TBarType; AColor : TBarColor; AWidth : TBarWidth; AHeight : TBarheight);
  680. Var
  681. S : String;
  682. P : TBarParams;
  683. begin
  684. S:=Format('Bar type %d: ',[aType]);
  685. P:=BarTypeToBarParams(aType);
  686. AssertEquals(S+'Color',aColor,P.c);
  687. AssertEquals(S+'Width',aWidth,P.w);
  688. AssertEquals(S+'Height',aHeight,P.h);
  689. end;
  690. procedure TTestBarcodes.CheckParamsType;
  691. begin
  692. AssertParams(0, bcWhite, bw100, bhFull);
  693. AssertParams(1, bcWhite, bwWeighted, bhFull);
  694. AssertParams(2, bcWhite, bw150, bhFull);
  695. AssertParams(3, bcWhite, bw200, bhFull);
  696. AssertParams(4, bcBlack, bw100, bhFull);
  697. AssertParams(5, bcBlack, bwWeighted, bhFull);
  698. AssertParams(6, bcBlack, bw150, bhFull);
  699. AssertParams(7, bcBlack, bw200, bhFull);
  700. AssertParams(8, bcBlack, bw100, bhTwoFifth);
  701. AssertParams(9, bcBlack, bwWeighted, bhTwoFifth);
  702. AssertParams(10, bcBlack, bw150, bhTwoFifth);
  703. AssertParams(11, bcBlack, bw200, bhTwoFifth);
  704. end;
  705. procedure TTestBarcodes.CheckNumerictypes;
  706. begin
  707. AssertTrue('Numerical types',NumericalEncodings=[beEAN8,beEAN13,
  708. be2of5industrial,be2of5interleaved, be2of5matrix,
  709. bePostNet,
  710. beMSI,
  711. be128C]);
  712. end;
  713. initialization
  714. RegisterTest(TTestBarcodes);
  715. end.