test-fixed-dtoa.cc 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511
  1. // Copyright 2010 the V8 project authors. All rights reserved.
  2. // Redistribution and use in source and binary forms, with or without
  3. // modification, are permitted provided that the following conditions are
  4. // met:
  5. //
  6. // * Redistributions of source code must retain the above copyright
  7. // notice, this list of conditions and the following disclaimer.
  8. // * Redistributions in binary form must reproduce the above
  9. // copyright notice, this list of conditions and the following
  10. // disclaimer in the documentation and/or other materials provided
  11. // with the distribution.
  12. // * Neither the name of Google Inc. nor the names of its
  13. // contributors may be used to endorse or promote products derived
  14. // from this software without specific prior written permission.
  15. //
  16. // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  17. // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  18. // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  19. // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  20. // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  21. // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  22. // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  23. // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  24. // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  25. // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  26. // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  27. #include <stdlib.h>
  28. #include "cctest.h"
  29. #include "fixed-dtoa.h"
  30. #include "gay-fixed.h"
  31. #include "ieee.h"
  32. #include "utils.h"
  33. using namespace double_conversion;
  34. static const int kBufferSize = 500;
  35. TEST(FastFixedVariousDoubles) {
  36. char buffer_container[kBufferSize];
  37. Vector<char> buffer(buffer_container, kBufferSize);
  38. int length;
  39. int point;
  40. CHECK(FastFixedDtoa(1.0, 1, buffer, &length, &point));
  41. CHECK_EQ("1", buffer.start());
  42. CHECK_EQ(1, point);
  43. CHECK(FastFixedDtoa(1.0, 15, buffer, &length, &point));
  44. CHECK_EQ("1", buffer.start());
  45. CHECK_EQ(1, point);
  46. CHECK(FastFixedDtoa(1.0, 0, buffer, &length, &point));
  47. CHECK_EQ("1", buffer.start());
  48. CHECK_EQ(1, point);
  49. CHECK(FastFixedDtoa(0xFFFFFFFF, 5, buffer, &length, &point));
  50. CHECK_EQ("4294967295", buffer.start());
  51. CHECK_EQ(10, point);
  52. CHECK(FastFixedDtoa(4294967296.0, 5, buffer, &length, &point));
  53. CHECK_EQ("4294967296", buffer.start());
  54. CHECK_EQ(10, point);
  55. CHECK(FastFixedDtoa(1e21, 5, buffer, &length, &point));
  56. CHECK_EQ("1", buffer.start());
  57. // CHECK_EQ(22, point);
  58. CHECK_EQ(22, point);
  59. CHECK(FastFixedDtoa(999999999999999868928.00, 2, buffer, &length, &point));
  60. CHECK_EQ("999999999999999868928", buffer.start());
  61. CHECK_EQ(21, point);
  62. CHECK(FastFixedDtoa(6.9999999999999989514240000e+21, 5, buffer,
  63. &length, &point));
  64. CHECK_EQ("6999999999999998951424", buffer.start());
  65. CHECK_EQ(22, point);
  66. CHECK(FastFixedDtoa(1.5, 5, buffer, &length, &point));
  67. CHECK_EQ("15", buffer.start());
  68. CHECK_EQ(1, point);
  69. CHECK(FastFixedDtoa(1.55, 5, buffer, &length, &point));
  70. CHECK_EQ("155", buffer.start());
  71. CHECK_EQ(1, point);
  72. CHECK(FastFixedDtoa(1.55, 1, buffer, &length, &point));
  73. CHECK_EQ("16", buffer.start());
  74. CHECK_EQ(1, point);
  75. CHECK(FastFixedDtoa(1.00000001, 15, buffer, &length, &point));
  76. CHECK_EQ("100000001", buffer.start());
  77. CHECK_EQ(1, point);
  78. CHECK(FastFixedDtoa(0.1, 10, buffer, &length, &point));
  79. CHECK_EQ("1", buffer.start());
  80. CHECK_EQ(0, point);
  81. CHECK(FastFixedDtoa(0.01, 10, buffer, &length, &point));
  82. CHECK_EQ("1", buffer.start());
  83. CHECK_EQ(-1, point);
  84. CHECK(FastFixedDtoa(0.001, 10, buffer, &length, &point));
  85. CHECK_EQ("1", buffer.start());
  86. CHECK_EQ(-2, point);
  87. CHECK(FastFixedDtoa(0.0001, 10, buffer, &length, &point));
  88. CHECK_EQ("1", buffer.start());
  89. CHECK_EQ(-3, point);
  90. CHECK(FastFixedDtoa(0.00001, 10, buffer, &length, &point));
  91. CHECK_EQ("1", buffer.start());
  92. CHECK_EQ(-4, point);
  93. CHECK(FastFixedDtoa(0.000001, 10, buffer, &length, &point));
  94. CHECK_EQ("1", buffer.start());
  95. CHECK_EQ(-5, point);
  96. CHECK(FastFixedDtoa(0.0000001, 10, buffer, &length, &point));
  97. CHECK_EQ("1", buffer.start());
  98. CHECK_EQ(-6, point);
  99. CHECK(FastFixedDtoa(0.00000001, 10, buffer, &length, &point));
  100. CHECK_EQ("1", buffer.start());
  101. CHECK_EQ(-7, point);
  102. CHECK(FastFixedDtoa(0.000000001, 10, buffer, &length, &point));
  103. CHECK_EQ("1", buffer.start());
  104. CHECK_EQ(-8, point);
  105. CHECK(FastFixedDtoa(0.0000000001, 15, buffer, &length, &point));
  106. CHECK_EQ("1", buffer.start());
  107. CHECK_EQ(-9, point);
  108. CHECK(FastFixedDtoa(0.00000000001, 15, buffer, &length, &point));
  109. CHECK_EQ("1", buffer.start());
  110. CHECK_EQ(-10, point);
  111. CHECK(FastFixedDtoa(0.000000000001, 15, buffer, &length, &point));
  112. CHECK_EQ("1", buffer.start());
  113. CHECK_EQ(-11, point);
  114. CHECK(FastFixedDtoa(0.0000000000001, 15, buffer, &length, &point));
  115. CHECK_EQ("1", buffer.start());
  116. CHECK_EQ(-12, point);
  117. CHECK(FastFixedDtoa(0.00000000000001, 15, buffer, &length, &point));
  118. CHECK_EQ("1", buffer.start());
  119. CHECK_EQ(-13, point);
  120. CHECK(FastFixedDtoa(0.000000000000001, 20, buffer, &length, &point));
  121. CHECK_EQ("1", buffer.start());
  122. CHECK_EQ(-14, point);
  123. CHECK(FastFixedDtoa(0.0000000000000001, 20, buffer, &length, &point));
  124. CHECK_EQ("1", buffer.start());
  125. CHECK_EQ(-15, point);
  126. CHECK(FastFixedDtoa(0.00000000000000001, 20, buffer, &length, &point));
  127. CHECK_EQ("1", buffer.start());
  128. CHECK_EQ(-16, point);
  129. CHECK(FastFixedDtoa(0.000000000000000001, 20, buffer, &length, &point));
  130. CHECK_EQ("1", buffer.start());
  131. CHECK_EQ(-17, point);
  132. CHECK(FastFixedDtoa(0.0000000000000000001, 20, buffer, &length, &point));
  133. CHECK_EQ("1", buffer.start());
  134. CHECK_EQ(-18, point);
  135. CHECK(FastFixedDtoa(0.00000000000000000001, 20, buffer, &length, &point));
  136. CHECK_EQ("1", buffer.start());
  137. CHECK_EQ(-19, point);
  138. CHECK(FastFixedDtoa(0.10000000004, 10, buffer, &length, &point));
  139. CHECK_EQ("1", buffer.start());
  140. CHECK_EQ(0, point);
  141. CHECK(FastFixedDtoa(0.01000000004, 10, buffer, &length, &point));
  142. CHECK_EQ("1", buffer.start());
  143. CHECK_EQ(-1, point);
  144. CHECK(FastFixedDtoa(0.00100000004, 10, buffer, &length, &point));
  145. CHECK_EQ("1", buffer.start());
  146. CHECK_EQ(-2, point);
  147. CHECK(FastFixedDtoa(0.00010000004, 10, buffer, &length, &point));
  148. CHECK_EQ("1", buffer.start());
  149. CHECK_EQ(-3, point);
  150. CHECK(FastFixedDtoa(0.00001000004, 10, buffer, &length, &point));
  151. CHECK_EQ("1", buffer.start());
  152. CHECK_EQ(-4, point);
  153. CHECK(FastFixedDtoa(0.00000100004, 10, buffer, &length, &point));
  154. CHECK_EQ("1", buffer.start());
  155. CHECK_EQ(-5, point);
  156. CHECK(FastFixedDtoa(0.00000010004, 10, buffer, &length, &point));
  157. CHECK_EQ("1", buffer.start());
  158. CHECK_EQ(-6, point);
  159. CHECK(FastFixedDtoa(0.00000001004, 10, buffer, &length, &point));
  160. CHECK_EQ("1", buffer.start());
  161. CHECK_EQ(-7, point);
  162. CHECK(FastFixedDtoa(0.00000000104, 10, buffer, &length, &point));
  163. CHECK_EQ("1", buffer.start());
  164. CHECK_EQ(-8, point);
  165. CHECK(FastFixedDtoa(0.0000000001000004, 15, buffer, &length, &point));
  166. CHECK_EQ("1", buffer.start());
  167. CHECK_EQ(-9, point);
  168. CHECK(FastFixedDtoa(0.0000000000100004, 15, buffer, &length, &point));
  169. CHECK_EQ("1", buffer.start());
  170. CHECK_EQ(-10, point);
  171. CHECK(FastFixedDtoa(0.0000000000010004, 15, buffer, &length, &point));
  172. CHECK_EQ("1", buffer.start());
  173. CHECK_EQ(-11, point);
  174. CHECK(FastFixedDtoa(0.0000000000001004, 15, buffer, &length, &point));
  175. CHECK_EQ("1", buffer.start());
  176. CHECK_EQ(-12, point);
  177. CHECK(FastFixedDtoa(0.0000000000000104, 15, buffer, &length, &point));
  178. CHECK_EQ("1", buffer.start());
  179. CHECK_EQ(-13, point);
  180. CHECK(FastFixedDtoa(0.000000000000001000004, 20, buffer, &length, &point));
  181. CHECK_EQ("1", buffer.start());
  182. CHECK_EQ(-14, point);
  183. CHECK(FastFixedDtoa(0.000000000000000100004, 20, buffer, &length, &point));
  184. CHECK_EQ("1", buffer.start());
  185. CHECK_EQ(-15, point);
  186. CHECK(FastFixedDtoa(0.000000000000000010004, 20, buffer, &length, &point));
  187. CHECK_EQ("1", buffer.start());
  188. CHECK_EQ(-16, point);
  189. CHECK(FastFixedDtoa(0.000000000000000001004, 20, buffer, &length, &point));
  190. CHECK_EQ("1", buffer.start());
  191. CHECK_EQ(-17, point);
  192. CHECK(FastFixedDtoa(0.000000000000000000104, 20, buffer, &length, &point));
  193. CHECK_EQ("1", buffer.start());
  194. CHECK_EQ(-18, point);
  195. CHECK(FastFixedDtoa(0.000000000000000000014, 20, buffer, &length, &point));
  196. CHECK_EQ("1", buffer.start());
  197. CHECK_EQ(-19, point);
  198. CHECK(FastFixedDtoa(0.10000000006, 10, buffer, &length, &point));
  199. CHECK_EQ("1000000001", buffer.start());
  200. CHECK_EQ(0, point);
  201. CHECK(FastFixedDtoa(0.01000000006, 10, buffer, &length, &point));
  202. CHECK_EQ("100000001", buffer.start());
  203. CHECK_EQ(-1, point);
  204. CHECK(FastFixedDtoa(0.00100000006, 10, buffer, &length, &point));
  205. CHECK_EQ("10000001", buffer.start());
  206. CHECK_EQ(-2, point);
  207. CHECK(FastFixedDtoa(0.00010000006, 10, buffer, &length, &point));
  208. CHECK_EQ("1000001", buffer.start());
  209. CHECK_EQ(-3, point);
  210. CHECK(FastFixedDtoa(0.00001000006, 10, buffer, &length, &point));
  211. CHECK_EQ("100001", buffer.start());
  212. CHECK_EQ(-4, point);
  213. CHECK(FastFixedDtoa(0.00000100006, 10, buffer, &length, &point));
  214. CHECK_EQ("10001", buffer.start());
  215. CHECK_EQ(-5, point);
  216. CHECK(FastFixedDtoa(0.00000010006, 10, buffer, &length, &point));
  217. CHECK_EQ("1001", buffer.start());
  218. CHECK_EQ(-6, point);
  219. CHECK(FastFixedDtoa(0.00000001006, 10, buffer, &length, &point));
  220. CHECK_EQ("101", buffer.start());
  221. CHECK_EQ(-7, point);
  222. CHECK(FastFixedDtoa(0.00000000106, 10, buffer, &length, &point));
  223. CHECK_EQ("11", buffer.start());
  224. CHECK_EQ(-8, point);
  225. CHECK(FastFixedDtoa(0.0000000001000006, 15, buffer, &length, &point));
  226. CHECK_EQ("100001", buffer.start());
  227. CHECK_EQ(-9, point);
  228. CHECK(FastFixedDtoa(0.0000000000100006, 15, buffer, &length, &point));
  229. CHECK_EQ("10001", buffer.start());
  230. CHECK_EQ(-10, point);
  231. CHECK(FastFixedDtoa(0.0000000000010006, 15, buffer, &length, &point));
  232. CHECK_EQ("1001", buffer.start());
  233. CHECK_EQ(-11, point);
  234. CHECK(FastFixedDtoa(0.0000000000001006, 15, buffer, &length, &point));
  235. CHECK_EQ("101", buffer.start());
  236. CHECK_EQ(-12, point);
  237. CHECK(FastFixedDtoa(0.0000000000000106, 15, buffer, &length, &point));
  238. CHECK_EQ("11", buffer.start());
  239. CHECK_EQ(-13, point);
  240. CHECK(FastFixedDtoa(0.000000000000001000006, 20, buffer, &length, &point));
  241. CHECK_EQ("100001", buffer.start());
  242. CHECK_EQ(-14, point);
  243. CHECK(FastFixedDtoa(0.000000000000000100006, 20, buffer, &length, &point));
  244. CHECK_EQ("10001", buffer.start());
  245. CHECK_EQ(-15, point);
  246. CHECK(FastFixedDtoa(0.000000000000000010006, 20, buffer, &length, &point));
  247. CHECK_EQ("1001", buffer.start());
  248. CHECK_EQ(-16, point);
  249. CHECK(FastFixedDtoa(0.000000000000000001006, 20, buffer, &length, &point));
  250. CHECK_EQ("101", buffer.start());
  251. CHECK_EQ(-17, point);
  252. CHECK(FastFixedDtoa(0.000000000000000000106, 20, buffer, &length, &point));
  253. CHECK_EQ("11", buffer.start());
  254. CHECK_EQ(-18, point);
  255. CHECK(FastFixedDtoa(0.000000000000000000016, 20, buffer, &length, &point));
  256. CHECK_EQ("2", buffer.start());
  257. CHECK_EQ(-19, point);
  258. CHECK(FastFixedDtoa(0.6, 0, buffer, &length, &point));
  259. CHECK_EQ("1", buffer.start());
  260. CHECK_EQ(1, point);
  261. CHECK(FastFixedDtoa(0.96, 1, buffer, &length, &point));
  262. CHECK_EQ("1", buffer.start());
  263. CHECK_EQ(1, point);
  264. CHECK(FastFixedDtoa(0.996, 2, buffer, &length, &point));
  265. CHECK_EQ("1", buffer.start());
  266. CHECK_EQ(1, point);
  267. CHECK(FastFixedDtoa(0.9996, 3, buffer, &length, &point));
  268. CHECK_EQ("1", buffer.start());
  269. CHECK_EQ(1, point);
  270. CHECK(FastFixedDtoa(0.99996, 4, buffer, &length, &point));
  271. CHECK_EQ("1", buffer.start());
  272. CHECK_EQ(1, point);
  273. CHECK(FastFixedDtoa(0.999996, 5, buffer, &length, &point));
  274. CHECK_EQ("1", buffer.start());
  275. CHECK_EQ(1, point);
  276. CHECK(FastFixedDtoa(0.9999996, 6, buffer, &length, &point));
  277. CHECK_EQ("1", buffer.start());
  278. CHECK_EQ(1, point);
  279. CHECK(FastFixedDtoa(0.99999996, 7, buffer, &length, &point));
  280. CHECK_EQ("1", buffer.start());
  281. CHECK_EQ(1, point);
  282. CHECK(FastFixedDtoa(0.999999996, 8, buffer, &length, &point));
  283. CHECK_EQ("1", buffer.start());
  284. CHECK_EQ(1, point);
  285. CHECK(FastFixedDtoa(0.9999999996, 9, buffer, &length, &point));
  286. CHECK_EQ("1", buffer.start());
  287. CHECK_EQ(1, point);
  288. CHECK(FastFixedDtoa(0.99999999996, 10, buffer, &length, &point));
  289. CHECK_EQ("1", buffer.start());
  290. CHECK_EQ(1, point);
  291. CHECK(FastFixedDtoa(0.999999999996, 11, buffer, &length, &point));
  292. CHECK_EQ("1", buffer.start());
  293. CHECK_EQ(1, point);
  294. CHECK(FastFixedDtoa(0.9999999999996, 12, buffer, &length, &point));
  295. CHECK_EQ("1", buffer.start());
  296. CHECK_EQ(1, point);
  297. CHECK(FastFixedDtoa(0.99999999999996, 13, buffer, &length, &point));
  298. CHECK_EQ("1", buffer.start());
  299. CHECK_EQ(1, point);
  300. CHECK(FastFixedDtoa(0.999999999999996, 14, buffer, &length, &point));
  301. CHECK_EQ("1", buffer.start());
  302. CHECK_EQ(1, point);
  303. CHECK(FastFixedDtoa(0.9999999999999996, 15, buffer, &length, &point));
  304. CHECK_EQ("1", buffer.start());
  305. CHECK_EQ(1, point);
  306. CHECK(FastFixedDtoa(0.00999999999999996, 16, buffer, &length, &point));
  307. CHECK_EQ("1", buffer.start());
  308. CHECK_EQ(-1, point);
  309. CHECK(FastFixedDtoa(0.000999999999999996, 17, buffer, &length, &point));
  310. CHECK_EQ("1", buffer.start());
  311. CHECK_EQ(-2, point);
  312. CHECK(FastFixedDtoa(0.0000999999999999996, 18, buffer, &length, &point));
  313. CHECK_EQ("1", buffer.start());
  314. CHECK_EQ(-3, point);
  315. CHECK(FastFixedDtoa(0.00000999999999999996, 19, buffer, &length, &point));
  316. CHECK_EQ("1", buffer.start());
  317. CHECK_EQ(-4, point);
  318. CHECK(FastFixedDtoa(0.000000999999999999996, 20, buffer, &length, &point));
  319. CHECK_EQ("1", buffer.start());
  320. CHECK_EQ(-5, point);
  321. CHECK(FastFixedDtoa(323423.234234, 10, buffer, &length, &point));
  322. CHECK_EQ("323423234234", buffer.start());
  323. CHECK_EQ(6, point);
  324. CHECK(FastFixedDtoa(12345678.901234, 4, buffer, &length, &point));
  325. CHECK_EQ("123456789012", buffer.start());
  326. CHECK_EQ(8, point);
  327. CHECK(FastFixedDtoa(98765.432109, 5, buffer, &length, &point));
  328. CHECK_EQ("9876543211", buffer.start());
  329. CHECK_EQ(5, point);
  330. CHECK(FastFixedDtoa(42, 20, buffer, &length, &point));
  331. CHECK_EQ("42", buffer.start());
  332. CHECK_EQ(2, point);
  333. CHECK(FastFixedDtoa(0.5, 0, buffer, &length, &point));
  334. CHECK_EQ("1", buffer.start());
  335. CHECK_EQ(1, point);
  336. CHECK(FastFixedDtoa(1e-23, 10, buffer, &length, &point));
  337. CHECK_EQ("", buffer.start());
  338. CHECK_EQ(-10, point);
  339. CHECK(FastFixedDtoa(1e-123, 2, buffer, &length, &point));
  340. CHECK_EQ("", buffer.start());
  341. CHECK_EQ(-2, point);
  342. CHECK(FastFixedDtoa(1e-123, 0, buffer, &length, &point));
  343. CHECK_EQ("", buffer.start());
  344. CHECK_EQ(0, point);
  345. CHECK(FastFixedDtoa(1e-23, 20, buffer, &length, &point));
  346. CHECK_EQ("", buffer.start());
  347. CHECK_EQ(-20, point);
  348. CHECK(FastFixedDtoa(1e-21, 20, buffer, &length, &point));
  349. CHECK_EQ("", buffer.start());
  350. CHECK_EQ(-20, point);
  351. CHECK(FastFixedDtoa(1e-22, 20, buffer, &length, &point));
  352. CHECK_EQ("", buffer.start());
  353. CHECK_EQ(-20, point);
  354. CHECK(FastFixedDtoa(6e-21, 20, buffer, &length, &point));
  355. CHECK_EQ("1", buffer.start());
  356. CHECK_EQ(-19, point);
  357. CHECK(FastFixedDtoa(9.1193616301674545152000000e+19, 0,
  358. buffer, &length, &point));
  359. CHECK_EQ("91193616301674545152", buffer.start());
  360. CHECK_EQ(20, point);
  361. CHECK(FastFixedDtoa(4.8184662102767651659096515e-04, 19,
  362. buffer, &length, &point));
  363. CHECK_EQ("4818466210276765", buffer.start());
  364. CHECK_EQ(-3, point);
  365. CHECK(FastFixedDtoa(1.9023164229540652612705182e-23, 8,
  366. buffer, &length, &point));
  367. CHECK_EQ("", buffer.start());
  368. CHECK_EQ(-8, point);
  369. CHECK(FastFixedDtoa(1000000000000000128.0, 0,
  370. buffer, &length, &point));
  371. CHECK_EQ("1000000000000000128", buffer.start());
  372. CHECK_EQ(19, point);
  373. }
  374. TEST(FastFixedDtoaGayFixed) {
  375. char buffer_container[kBufferSize];
  376. Vector<char> buffer(buffer_container, kBufferSize);
  377. bool status;
  378. int length;
  379. int point;
  380. Vector<const PrecomputedFixed> precomputed =
  381. PrecomputedFixedRepresentations();
  382. for (int i = 0; i < precomputed.length(); ++i) {
  383. const PrecomputedFixed current_test = precomputed[i];
  384. double v = current_test.v;
  385. int number_digits = current_test.number_digits;
  386. status = FastFixedDtoa(v, number_digits,
  387. buffer, &length, &point);
  388. CHECK(status);
  389. CHECK_EQ(current_test.decimal_point, point);
  390. CHECK(number_digits >= length - point);
  391. CHECK_EQ(current_test.representation, buffer.start());
  392. }
  393. }