tw37374.pp 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. program formatfloat_test;
  2. uses
  3. SysUtils//, MyFormatFloat
  4. ;
  5. var
  6. fails: Integer = 0;
  7. testCount: Integer = 0;
  8. procedure Test(AFormat: String; AValue: Double; AResult: String);
  9. var
  10. s: String;
  11. begin
  12. s := FormatFloat(AFormat, AValue);
  13. if s <> AResult then
  14. begin
  15. WriteLn('Format(' + AFormat + ', ', AValue:0:6, ') --> ', s, '; SHOULD BE: ', AResult);
  16. inc(fails);
  17. end;
  18. inc(testCount);
  19. end;
  20. const
  21. VALUES: array[0..4] of Double = (0, 0.00001234, 0.123456, 1.23456, 1123.4567);
  22. var
  23. fmt: String;
  24. begin
  25. DefaultFormatSettings.DecimalSeparator := '.';
  26. DefaultFormatSettings.ThousandSeparator := ',';
  27. fmt := '0.00';
  28. Test(fmt, VALUES[0], '0.00');
  29. Test(fmt, VALUES[1], '0.00');
  30. Test(fmt, VALUES[2], '0.12');
  31. Test(fmt, VALUES[3], '1.23');
  32. Test(fmt, VALUES[4], '1123.46');
  33. Test(fmt, -VALUES[1], '-0.00');
  34. Test(fmt, -VALUES[2], '-0.12');
  35. Test(fmt, -VALUES[3], '-1.23');
  36. Test(fmt, -VALUES[4], '-1123.46');
  37. fmt := '.00';
  38. Test(fmt, VALUES[0], '.00');
  39. Test(fmt, VALUES[1], '.00');
  40. Test(fmt, VALUES[2], '.12');
  41. Test(fmt, VALUES[3], '1.23');
  42. Test(fmt, VALUES[4], '1123.46');
  43. Test(fmt, -VALUES[1], '-.00');
  44. Test(fmt, -VALUES[2], '-.12');
  45. Test(fmt, -VALUES[3], '-1.23');
  46. Test(fmt, -VALUES[4], '-1123.46');
  47. fmt := '0.00000###';
  48. Test(fmt, VALUES[0], '0.00000');
  49. Test(fmt, VALUES[1], '0.00001234');
  50. Test(fmt, VALUES[2], '0.123456');
  51. Test(fmt, VALUES[3], '1.23456');
  52. Test(fmt, VALUES[4], '1123.45670');
  53. Test(fmt, -VALUES[1], '-0.00001234');
  54. Test(fmt, -VALUES[2], '-0.123456');
  55. Test(fmt, -VALUES[3], '-1.23456');
  56. Test(fmt, -VALUES[4], '-1123.45670');
  57. fmt := '000';
  58. Test(fmt, VALUES[0], '000');
  59. Test(fmt, VALUES[1], '000');
  60. Test(fmt, VALUES[2], '000');
  61. Test(fmt, VALUES[3], '001');
  62. Test(fmt, VALUES[4], '1123');
  63. Test(fmt, -VALUES[1], '-000');
  64. Test(fmt, -VALUES[2], '-000');
  65. Test(fmt, -VALUES[3], '-001');
  66. Test(fmt, -VALUES[4], '-1123');
  67. fmt := '0.00E+00';
  68. Test(fmt, VALUES[0], '0.00E+00');
  69. Test(fmt, VALUES[1], '1.23E-05');
  70. Test(fmt, VALUES[2], '1.23E-01');
  71. Test(fmt, VALUES[3], '1.23E+00');
  72. Test(fmt, VALUES[4], '1.12E+03');
  73. Test(fmt, -VALUES[1], '-1.23E-05');
  74. Test(fmt, -VALUES[2], '-1.23E-01');
  75. Test(fmt, -VALUES[3], '-1.23E+00');
  76. Test(fmt, -VALUES[4], '-1.12E+03');
  77. fmt := '0.00E-00';
  78. Test(fmt, VALUES[0], '0.00E00');
  79. Test(fmt, VALUES[1], '1.23E-05');
  80. Test(fmt, VALUES[2], '1.23E-01');
  81. Test(fmt, VALUES[3], '1.23E00');
  82. Test(fmt, VALUES[4], '1.12E03');
  83. Test(fmt, -VALUES[1], '-1.23E-05');
  84. Test(fmt, -VALUES[2], '-1.23E-01');
  85. Test(fmt, -VALUES[3], '-1.23E00');
  86. Test(fmt, -VALUES[4], '-1.12E03');
  87. fmt := '0.00 EUR';
  88. Test(fmt, VALUES[0], '0.00 EUR');
  89. Test(fmt, VALUES[1], '0.00 EUR');
  90. Test(fmt, VALUES[2], '0.12 EUR');
  91. Test(fmt, VALUES[3], '1.23 EUR');
  92. Test(fmt, VALUES[4], '1123.46 EUR');
  93. Test(fmt, -VALUES[1], '-0.00 EUR');
  94. Test(fmt, -VALUES[2], '-0.12 EUR');
  95. Test(fmt, -VALUES[3], '-1.23 EUR');
  96. Test(fmt, -VALUES[4], '-1123.46 EUR');
  97. fmt := '0.00 "EUR"';
  98. Test(fmt, VALUES[0], '0.00 EUR');
  99. Test(fmt, VALUES[1], '0.00 EUR');
  100. Test(fmt, VALUES[2], '0.12 EUR');
  101. Test(fmt, VALUES[3], '1.23 EUR');
  102. Test(fmt, VALUES[4], '1123.46 EUR');
  103. Test(fmt, -VALUES[1], '-0.00 EUR');
  104. Test(fmt, -VALUES[2], '-0.12 EUR');
  105. Test(fmt, -VALUES[3], '-1.23 EUR');
  106. Test(fmt, -VALUES[4], '-1123.46 EUR');
  107. fmt := '0.00"E+00"';
  108. Test(fmt, VALUES[0], '0.00E+00');
  109. Test(fmt, VALUES[1], '0.00E+00');
  110. Test(fmt, VALUES[2], '0.12E+00');
  111. Test(fmt, VALUES[3], '1.23E+00');
  112. Test(fmt, VALUES[4], '1123.46E+00');
  113. Test(fmt, -VALUES[1], '-0.00E+00');
  114. Test(fmt, -VALUES[2], '-0.12E+00');
  115. Test(fmt, -VALUES[3], '-1.23E+00');
  116. Test(fmt, -VALUES[4], '-1123.46E+00');
  117. fmt := '#,##0.0';
  118. Test(fmt, VALUES[0], '0.0');
  119. Test(fmt, VALUES[1], '0.0');
  120. Test(fmt, VALUES[2], '0.1');
  121. Test(fmt, VALUES[3], '1.2');
  122. Test(fmt, VALUES[4], '1,123.5');
  123. Test(fmt, -VALUES[1], '-0.0');
  124. Test(fmt, -VALUES[2], '-0.1');
  125. Test(fmt, -VALUES[3], '-1.2');
  126. Test(fmt, -VALUES[4], '-1,123.5');
  127. fmt := ',0.0';
  128. Test(fmt, VALUES[0], '0.0');
  129. Test(fmt, VALUES[1], '0.0');
  130. Test(fmt, VALUES[2], '0.1');
  131. Test(fmt, VALUES[3], '1.2');
  132. Test(fmt, VALUES[4], '1,123.5');
  133. Test(fmt, -VALUES[1], '-0.0');
  134. Test(fmt, -VALUES[2], '-0.1');
  135. Test(fmt, -VALUES[3], '-1.2');
  136. Test(fmt, -VALUES[4], '-1,123.5');
  137. fmt := '#,##0.00;(#,##0.00);zero';
  138. Test(fmt, VALUES[0], 'zero');
  139. Test(fmt, VALUES[1], '0.00');
  140. Test(fmt, VALUES[2], '0.12');
  141. Test(fmt, VALUES[3], '1.23');
  142. Test(fmt, VALUES[4], '1,123.46');
  143. Test(fmt, -VALUES[1], '(0.00)');
  144. Test(fmt, -VALUES[2], '(0.12)');
  145. Test(fmt, -VALUES[3], '(1.23)');
  146. Test(fmt, -VALUES[4], '(1,123.46)');
  147. fmt := '#,##0.00 EUR;(#,##0.00 EUR);zero';
  148. Test(fmt, VALUES[0], 'zero');
  149. Test(fmt, VALUES[1], '0.00 EUR');
  150. Test(fmt, VALUES[2], '0.12 EUR');
  151. Test(fmt, VALUES[3], '1.23 EUR');
  152. Test(fmt, VALUES[4], '1,123.46 EUR');
  153. Test(fmt, -VALUES[1], '(0.00 EUR)');
  154. Test(fmt, -VALUES[2], '(0.12 EUR)');
  155. Test(fmt, -VALUES[3], '(1.23 EUR)');
  156. Test(fmt, -VALUES[4], '(1,123.46 EUR)');
  157. fmt := 'EUR #,##0.00;(EUR #,##0.00);-';
  158. Test(fmt, VALUES[0], '-');
  159. Test(fmt, VALUES[1], 'EUR 0.00');
  160. Test(fmt, VALUES[2], 'EUR 0.12');
  161. Test(fmt, VALUES[3], 'EUR 1.23');
  162. Test(fmt, VALUES[4], 'EUR 1,123.46');
  163. Test(fmt, -VALUES[1], '(EUR 0.00)');
  164. Test(fmt, -VALUES[2], '(EUR 0.12)');
  165. Test(fmt, -VALUES[3], '(EUR 1.23)');
  166. Test(fmt, -VALUES[4], '(EUR 1,123.46)');
  167. WriteLn(testCount, ' tests executed.');
  168. if fails = 0 then
  169. WriteLn('All tests passed.')
  170. else
  171. halt(1);
  172. end.