/src/test/java/com/alibaba/json/bvt/util/RyuDoubleTest.java

https://github.com/alibaba/fastjson · Java · 460 lines · 421 code · 39 blank · 0 comment · 12 complexity · dd27adedc47cfdec6aff5a509a6ef4eb MD5 · raw file

  1. package com.alibaba.json.bvt.util;
  2. import com.alibaba.fastjson.util.RyuDouble;
  3. import junit.framework.TestCase;
  4. import java.util.Random;
  5. public class RyuDoubleTest extends TestCase {
  6. public void test_for_ryu() throws Exception {
  7. Random random = new Random();
  8. for (int i = 0; i < 1000 * 1000 * 10; ++i) {
  9. double value = random.nextDouble();
  10. String str1 = Double.toString(value);
  11. String str2 = RyuDouble.toString(value);
  12. if (!str1.equals(str2)) {
  13. System.out.println(str1 + " -> " + str2);
  14. assertTrue(Double.parseDouble(str1) == Double.parseDouble(str2));
  15. }
  16. }
  17. }
  18. public void test_0() throws Exception {
  19. double[] values = new double[] {
  20. Double.NaN,
  21. Double.NEGATIVE_INFINITY,
  22. Double.POSITIVE_INFINITY,
  23. Double.MIN_VALUE,
  24. Double.MAX_VALUE,
  25. 0,
  26. 0.0d,
  27. -0.0d,
  28. Double.longBitsToDouble(0x8000000000000000L),
  29. Double.NaN,
  30. Long.MAX_VALUE,
  31. Long.MIN_VALUE,
  32. Integer.MAX_VALUE,
  33. Integer.MIN_VALUE,
  34. Double.longBitsToDouble(0x0010000000000000L),
  35. 9999999.999999998d,
  36. 0.0009999999999999998d,
  37. 1.0E7d,
  38. 0.001d,
  39. Double.longBitsToDouble(0x7fefffffffffffffL),
  40. Double.longBitsToDouble(1),
  41. -2.109808898695963E16,
  42. 4.940656E-318d,
  43. 1.18575755E-316d,
  44. 2.989102097996E-312d,
  45. 9.0608011534336E15d,
  46. 4.708356024711512E18,
  47. 9.409340012568248E18,
  48. 1.8531501765868567E21,
  49. -3.347727380279489E33,
  50. 1.9430376160308388E16,
  51. -6.9741824662760956E19,
  52. 4.3816050601147837E18,
  53. 1.797693134862315E308,
  54. 1.79769313486231E308,
  55. 1.7976931348623E308,
  56. 1.797693134862E308,
  57. 1.79769313486E308,
  58. 1.7976931348E308,
  59. 1.797693134E308,
  60. 1.79769313E308,
  61. 1.7976931E308,
  62. 1.797693E308,
  63. 1.79769E308,
  64. 1.7976E308,
  65. 1.797E308,
  66. 1.79E308,
  67. 1.7E308,
  68. 1E308,
  69. 1.797693134862315,
  70. 1.79769313486231,
  71. 1.7976931348623,
  72. 1.797693134862,
  73. 1.79769313486,
  74. 1.7976931348,
  75. 1.797693134,
  76. 1.79769313,
  77. 1.7976931,
  78. 1.797693,
  79. 1.79769,
  80. 1.7976,
  81. 1.797,
  82. 1.79,
  83. 1.7,
  84. 1,
  85. -1.797693134862315,
  86. -1.79769313486231,
  87. -1.7976931348623,
  88. -1.797693134862,
  89. -1.79769313486,
  90. -1.7976931348,
  91. -1.797693134,
  92. -1.79769313,
  93. -1.7976931,
  94. -1.797693,
  95. -1.79769,
  96. -1.7976,
  97. -1.797,
  98. -1.79,
  99. -1.7,
  100. -1,
  101. 0.1,
  102. 0.01,
  103. 0.001,
  104. 0.0001,
  105. 0.00001,
  106. 0.000001,
  107. 0.0000001,
  108. 0.00000001,
  109. 0.000000001,
  110. 0.0000000001,
  111. 0.00000000001,
  112. 0.000000000001,
  113. 0.0000000000001,
  114. 0.00000000000001,
  115. -0.1,
  116. -0.01,
  117. -0.001,
  118. -0.0001,
  119. -0.00001,
  120. -0.000001,
  121. -0.0000001,
  122. -0.00000001,
  123. -0.000000001,
  124. -0.0000000001,
  125. -0.00000000001,
  126. -0.000000000001,
  127. -0.0000000000001,
  128. -0.00000000000001,
  129. 1.1E1,
  130. 1.1E2,
  131. 1.1E3,
  132. 1.1E4,
  133. 1.1E5,
  134. 1.1E6,
  135. 1.1E7,
  136. 1.1E8,
  137. 1.1E9,
  138. 1.1E10,
  139. -1.1E1,
  140. -1.1E2,
  141. -1.1E3,
  142. -1.1E4,
  143. -1.1E5,
  144. -1.1E6,
  145. -1.1E7,
  146. -1.1E8,
  147. -1.1E9,
  148. -1.1E10,
  149. 49E10,
  150. 49E100,
  151. 49E200,
  152. 49E300,
  153. 49E301,
  154. 49E302,
  155. 49E303,
  156. 49E304,
  157. 49E-10,
  158. 49E-100,
  159. 49E-200,
  160. 49E-300,
  161. 49E-301,
  162. 49E-302,
  163. 49E-303,
  164. 49E-304,
  165. };
  166. for (int i = 0; i < values.length; i++) {
  167. double value = values[i];
  168. String str1 = Double.toString(value);
  169. String str2 = RyuDouble.toString(value);
  170. if (!str1.equals(str2)) {
  171. boolean cmp = (Double.parseDouble(str1) == Double.parseDouble(str2));
  172. System.out.println(str1 + " -> " + str2 + " : " + cmp);
  173. assertTrue(cmp);
  174. }
  175. }
  176. }
  177. public void test_1() throws Exception {
  178. double[] values = new double[]{
  179. 0.1,
  180. 0.01,
  181. 0.001,
  182. 0.0001,
  183. 0.00001,
  184. 0.000001,
  185. 0.0000001,
  186. 0.00000001,
  187. 0.000000001,
  188. 0.0000000001,
  189. 0.00000000001,
  190. 0.000000000001,
  191. 0.0000000000001,
  192. 0.00000000000001,
  193. 0.000000000000001,
  194. 0.0000000000000001,
  195. 0.00000000000000001,
  196. 0.000000000000000001,
  197. 0.0000000000000000001,
  198. 0.00000000000000000001,
  199. 0.000000000000000000001,
  200. 0.0000000000000000000001,
  201. 0.00000000000000000000001,
  202. 0.000000000000000000000001,
  203. 0.0000000000000000000000001,
  204. 0.00000000000000000000000001,
  205. 0.000000000000000000000000001,
  206. 0.0000000000000000000000000001,
  207. 0.00000000000000000000000000001,
  208. 0.000000000000000000000000000001,
  209. 0.0000000000000000000000000000001,
  210. 0.00000000000000000000000000000001,
  211. 0.000000000000000000000000000000001,
  212. 0.0000000000000000000000000000000001,
  213. 0.00000000000000000000000000000000001,
  214. 0.000000000000000000000000000000000001,
  215. 0.0000000000000000000000000000000000001,
  216. 0.00000000000000000000000000000000000001,
  217. 0.000000000000000000000000000000000000001,
  218. 0.0000000000000000000000000000000000000001,
  219. 0.00000000000000000000000000000000000000001,
  220. 0.000000000000000000000000000000000000000001,
  221. 0.0000000000000000000000000000000000000000001,
  222. 0.00000000000000000000000000000000000000000001,
  223. 0.000000000000000000000000000000000000000000001,
  224. 0.0000000000000000000000000000000000000000000001,
  225. 0.00000000000000000000000000000000000000000000001,
  226. 0.000000000000000000000000000000000000000000000001,
  227. 0.0000000000000000000000000000000000000000000000001,
  228. 0.00000000000000000000000000000000000000000000000001,
  229. 0.000000000000000000000000000000000000000000000000001,
  230. 0.0000000000000000000000000000000000000000000000000001,
  231. 0.00000000000000000000000000000000000000000000000000001,
  232. 0.000000000000000000000000000000000000000000000000000001,
  233. 0.0000000000000000000000000000000000000000000000000000001,
  234. 0.00000000000000000000000000000000000000000000000000000001,
  235. 0.000000000000000000000000000000000000000000000000000000001,
  236. 0.000000000000000000000000000000000000000000000000000000001,
  237. -0.1,
  238. -0.01,
  239. -0.001,
  240. -0.0001,
  241. -0.00001,
  242. -0.000001,
  243. -0.0000001,
  244. -0.00000001,
  245. -0.000000001,
  246. -0.0000000001,
  247. -0.00000000001,
  248. -0.000000000001,
  249. -0.0000000000001,
  250. -0.00000000000001,
  251. -0.000000000000001,
  252. -0.0000000000000001,
  253. -0.00000000000000001,
  254. -0.000000000000000001,
  255. -0.0000000000000000001,
  256. -0.00000000000000000001,
  257. -0.000000000000000000001,
  258. -0.0000000000000000000001,
  259. -0.00000000000000000000001,
  260. -0.000000000000000000000001,
  261. -0.0000000000000000000000001,
  262. -0.00000000000000000000000001,
  263. -0.000000000000000000000000001,
  264. -0.0000000000000000000000000001,
  265. -0.00000000000000000000000000001,
  266. -0.000000000000000000000000000001,
  267. -0.0000000000000000000000000000001,
  268. -0.00000000000000000000000000000001,
  269. -0.000000000000000000000000000000001,
  270. -0.0000000000000000000000000000000001,
  271. -0.00000000000000000000000000000000001,
  272. -0.000000000000000000000000000000000001,
  273. -0.0000000000000000000000000000000000001,
  274. -0.00000000000000000000000000000000000001,
  275. -0.000000000000000000000000000000000000001,
  276. -0.0000000000000000000000000000000000000001,
  277. -0.00000000000000000000000000000000000000001,
  278. -0.000000000000000000000000000000000000000001,
  279. -0.0000000000000000000000000000000000000000001,
  280. -0.00000000000000000000000000000000000000000001,
  281. -0.000000000000000000000000000000000000000000001,
  282. -0.0000000000000000000000000000000000000000000001,
  283. -0.00000000000000000000000000000000000000000000001,
  284. -0.000000000000000000000000000000000000000000000001,
  285. -0.0000000000000000000000000000000000000000000000001,
  286. -0.00000000000000000000000000000000000000000000000001,
  287. -0.000000000000000000000000000000000000000000000000001,
  288. -0.0000000000000000000000000000000000000000000000000001,
  289. -0.00000000000000000000000000000000000000000000000000001,
  290. -0.000000000000000000000000000000000000000000000000000001,
  291. -0.0000000000000000000000000000000000000000000000000000001,
  292. -0.00000000000000000000000000000000000000000000000000000001,
  293. -0.000000000000000000000000000000000000000000000000000000001,
  294. -0.000000000000000000000000000000000000000000000000000000001,
  295. };
  296. for (int i = 0; i < values.length; i++) {
  297. double value = values[i];
  298. String str1 = Double.toString(value);
  299. String str2 = RyuDouble.toString(value);
  300. if (!str1.equals(str2)) {
  301. boolean cmp = (Double.parseDouble(str1) == Double.parseDouble(str2));
  302. System.out.println(str1 + " -> " + str2 + " : " + cmp);
  303. assertTrue(cmp);
  304. }
  305. }
  306. }
  307. public void test_2() throws Exception {
  308. double[] values = new double[]{
  309. 9.223372036854799E18,
  310. 9.223372036854798E18,
  311. 9.223372036854797E18,
  312. 9.223372036854796E18,
  313. 9.223372036854795E18,
  314. 9.223372036854794E18,
  315. 9.223372036854793E18,
  316. 9.223372036854792E18,
  317. 9.223372036854791E18,
  318. 9.223372036854790E18,
  319. 9.223372036854789E18,
  320. 9.223372036854788E18,
  321. 9.223372036854787E18,
  322. 9.223372036854786E18,
  323. 9.223372036854785E18,
  324. 9.223372036854784E18,
  325. 9.223372036854783E18,
  326. 9.223372036854782E18,
  327. 9.223372036854781E18,
  328. 9.223372036854780E18,
  329. 9.223372036854779E18,
  330. 9.223372036854778E18,
  331. 9.223372036854777E18,
  332. 9.223372036854776E18,
  333. 9.223372036854775E18,
  334. 9.223372036854774E18,
  335. 9.223372036854773E18,
  336. 9.223372036854772E18,
  337. 9.223372036854771E18,
  338. 9.223372036854770E18,
  339. 9.223372036854769E18,
  340. 9.223372036854768E18,
  341. 9.223372036854767E18,
  342. 9.223372036854766E18,
  343. 9.223372036854765E18,
  344. 9.223372036854764E18,
  345. 9.223372036854763E18,
  346. 9.223372036854762E18,
  347. 9.223372036854761E18,
  348. 9.223372036854760E18,
  349. 9.223372036854759E18,
  350. 9.223372036854758E18,
  351. 9.223372036854757E18,
  352. 9.223372036854756E18,
  353. 9.223372036854755E18,
  354. 9.223372036854754E18,
  355. 9.223372036854753E18,
  356. 9.223372036854752E18,
  357. 9.223372036854751E18,
  358. 9.223372036854750E18,
  359. 9.223372036854749E18,
  360. 9.223372036854748E18,
  361. 9.223372036854747E18,
  362. 9.223372036854746E18,
  363. 9.223372036854745E18,
  364. 9.223372036854744E18,
  365. 9.223372036854743E18,
  366. 9.223372036854742E18,
  367. 9.223372036854741E18,
  368. 9.223372036854740E18,
  369. 9.223372036854739E18,
  370. 9.223372036854738E18,
  371. 9.223372036854737E18,
  372. 9.223372036854736E18,
  373. 9.223372036854735E18,
  374. 9.223372036854734E18,
  375. 9.223372036854733E18,
  376. 9.223372036854732E18,
  377. 9.223372036854731E18,
  378. 9.223372036854730E18,
  379. 9.223372036854729E18,
  380. 9.223372036854728E18,
  381. 9.223372036854727E18,
  382. 9.223372036854726E18,
  383. 9.223372036854725E18,
  384. 9.223372036854724E18,
  385. 9.223372036854723E18,
  386. 9.223372036854722E18,
  387. 9.223372036854721E18,
  388. 9.223372036854720E18,
  389. 9.223372036854719E18,
  390. 9.223372036854718E18,
  391. 9.223372036854717E18,
  392. 9.223372036854716E18,
  393. 9.223372036854715E18,
  394. 9.223372036854714E18,
  395. 9.223372036854713E18,
  396. 9.223372036854712E18,
  397. 9.223372036854711E18,
  398. 9.223372036854710E18,
  399. 9.223372036854709E18,
  400. 9.223372036854708E18,
  401. 9.223372036854707E18,
  402. 9.223372036854706E18,
  403. 9.223372036854705E18,
  404. 9.223372036854704E18,
  405. 9.223372036854703E18,
  406. 9.223372036854702E18,
  407. 9.223372036854701E18,
  408. 9.223372036854700E18,
  409. };
  410. for (int i = 0; i < values.length; i++) {
  411. double value = values[i];
  412. String str1 = Double.toString(value);
  413. String str2 = RyuDouble.toString(value);
  414. if (!str1.equals(str2)) {
  415. boolean cmp = (Double.parseDouble(str1) == Double.parseDouble(str2));
  416. System.out.println(str1 + " -> " + str2 + " : " + cmp);
  417. assertTrue(cmp);
  418. }
  419. }
  420. }
  421. }