1 package net.sf.openrocket.util;
3 import static java.lang.Math.PI;
4 import static org.junit.Assert.assertEquals;
6 import java.util.Random;
10 public class TextUtilTest {
13 public void testHexString() {
14 assertEquals("", TextUtil.hexString(new byte[0]));
15 assertEquals("00", TextUtil.hexString(new byte[] { 0x00 }));
16 assertEquals("ff", TextUtil.hexString(new byte[] { (byte) 0xff }));
18 for (int i = 0; i <= 0xff; i++) {
19 assertEquals(String.format("%02x", i), TextUtil.hexString(new byte[] { (byte) i }));
22 assertEquals("0f1e2d3c4b5a6978", TextUtil.hexString(new byte[] {
23 0x0f, 0x1e, 0x2d, 0x3c, 0x4b, 0x5a, 0x69, 0x78
26 Random rnd = new Random();
27 for (int count = 0; count < 10; count++) {
28 int n = rnd.nextInt(100);
29 byte[] bytes = new byte[n];
31 StringBuilder sb = new StringBuilder();
32 for (byte b : bytes) {
33 sb.append(String.format("%02x", b & 0xFF));
35 assertEquals(sb.toString(), TextUtil.hexString(bytes));
40 public void specialCaseTest() {
41 assertEquals("NaN", TextUtil.doubleToString(Double.NaN));
42 assertEquals("Inf", TextUtil.doubleToString(Double.POSITIVE_INFINITY));
43 assertEquals("-Inf", TextUtil.doubleToString(Double.NEGATIVE_INFINITY));
44 assertEquals("0", TextUtil.doubleToString(0.0));
45 assertEquals("0", TextUtil.doubleToString(MathUtil.EPSILON / 3));
46 assertEquals("0", TextUtil.doubleToString(-MathUtil.EPSILON / 3));
50 public void longTest() {
52 assertEquals("3.1416e-5", TextUtil.doubleToString(PI * 1e-5));
53 assertEquals("3.1416e-4", TextUtil.doubleToString(PI * 1e-4));
54 assertEquals("0.0031416", TextUtil.doubleToString(PI * 1e-3));
55 assertEquals("0.031416", TextUtil.doubleToString(PI * 1e-2));
56 assertEquals("0.31416", TextUtil.doubleToString(PI * 1e-1));
57 assertEquals("3.1416", TextUtil.doubleToString(PI));
58 assertEquals("31.416", TextUtil.doubleToString(PI * 1e1));
59 assertEquals("314.16", TextUtil.doubleToString(PI * 1e2));
60 assertEquals("3141.6", TextUtil.doubleToString(PI * 1e3));
61 assertEquals("31416", TextUtil.doubleToString(PI * 1e4));
62 assertEquals("314159", TextUtil.doubleToString(PI * 1e5));
63 assertEquals("3141593", TextUtil.doubleToString(PI * 1e6));
64 assertEquals("31415927", TextUtil.doubleToString(PI * 1e7));
65 assertEquals("3.1416e8", TextUtil.doubleToString(PI * 1e8));
66 assertEquals("3.1416e9", TextUtil.doubleToString(PI * 1e9));
67 assertEquals("3.1416e10", TextUtil.doubleToString(PI * 1e10));
69 assertEquals("-3.1416e-5", TextUtil.doubleToString(-PI * 1e-5));
70 assertEquals("-3.1416e-4", TextUtil.doubleToString(-PI * 1e-4));
71 assertEquals("-0.0031416", TextUtil.doubleToString(-PI * 1e-3));
72 assertEquals("-0.031416", TextUtil.doubleToString(-PI * 1e-2));
73 assertEquals("-0.31416", TextUtil.doubleToString(-PI * 1e-1));
74 assertEquals("-3.1416", TextUtil.doubleToString(-PI));
75 assertEquals("-31.416", TextUtil.doubleToString(-PI * 1e1));
76 assertEquals("-314.16", TextUtil.doubleToString(-PI * 1e2));
77 assertEquals("-3141.6", TextUtil.doubleToString(-PI * 1e3));
78 assertEquals("-31416", TextUtil.doubleToString(-PI * 1e4));
79 assertEquals("-314159", TextUtil.doubleToString(-PI * 1e5));
80 assertEquals("-3141593", TextUtil.doubleToString(-PI * 1e6));
81 assertEquals("-31415927", TextUtil.doubleToString(-PI * 1e7));
82 assertEquals("-3.1416e8", TextUtil.doubleToString(-PI * 1e8));
83 assertEquals("-3.1416e9", TextUtil.doubleToString(-PI * 1e9));
84 assertEquals("-3.1416e10", TextUtil.doubleToString(-PI * 1e10));
89 public void shortTest() {
91 assertEquals("3.1e-5", TextUtil.doubleToString(p * 1e-5));
92 assertEquals("3.1e-4", TextUtil.doubleToString(p * 1e-4));
93 assertEquals("0.0031", TextUtil.doubleToString(p * 1e-3));
94 assertEquals("0.031", TextUtil.doubleToString(p * 1e-2));
95 assertEquals("0.31", TextUtil.doubleToString(p * 1e-1));
96 assertEquals("3.1", TextUtil.doubleToString(p));
97 assertEquals("31", TextUtil.doubleToString(p * 1e1));
98 assertEquals("310", TextUtil.doubleToString(p * 1e2));
99 assertEquals("3100", TextUtil.doubleToString(p * 1e3));
100 assertEquals("31000", TextUtil.doubleToString(p * 1e4));
101 assertEquals("3.1e5", TextUtil.doubleToString(p * 1e5));
102 assertEquals("3.1e6", TextUtil.doubleToString(p * 1e6));
103 assertEquals("3.1e7", TextUtil.doubleToString(p * 1e7));
104 assertEquals("3.1e8", TextUtil.doubleToString(p * 1e8));
105 assertEquals("3.1e9", TextUtil.doubleToString(p * 1e9));
106 assertEquals("3.1e10", TextUtil.doubleToString(p * 1e10));
108 assertEquals("-3.1e-5", TextUtil.doubleToString(-p * 1e-5));
109 assertEquals("-3.1e-4", TextUtil.doubleToString(-p * 1e-4));
110 assertEquals("-0.0031", TextUtil.doubleToString(-p * 1e-3));
111 assertEquals("-0.031", TextUtil.doubleToString(-p * 1e-2));
112 assertEquals("-0.31", TextUtil.doubleToString(-p * 1e-1));
113 assertEquals("-3.1", TextUtil.doubleToString(-p));
114 assertEquals("-31", TextUtil.doubleToString(-p * 1e1));
115 assertEquals("-310", TextUtil.doubleToString(-p * 1e2));
116 assertEquals("-3100", TextUtil.doubleToString(-p * 1e3));
117 assertEquals("-31000", TextUtil.doubleToString(-p * 1e4));
118 assertEquals("-3.1e5", TextUtil.doubleToString(-p * 1e5));
119 assertEquals("-3.1e6", TextUtil.doubleToString(-p * 1e6));
120 assertEquals("-3.1e7", TextUtil.doubleToString(-p * 1e7));
121 assertEquals("-3.1e8", TextUtil.doubleToString(-p * 1e8));
122 assertEquals("-3.1e9", TextUtil.doubleToString(-p * 1e9));
123 assertEquals("-3.1e10", TextUtil.doubleToString(-p * 1e10));
126 assertEquals("3e-5", TextUtil.doubleToString(p * 1e-5));
127 assertEquals("3e-4", TextUtil.doubleToString(p * 1e-4));
128 assertEquals("3e-3", TextUtil.doubleToString(p * 1e-3));
129 assertEquals("0.03", TextUtil.doubleToString(p * 1e-2));
130 assertEquals("0.3", TextUtil.doubleToString(p * 1e-1));
131 assertEquals("3", TextUtil.doubleToString(p));
132 assertEquals("30", TextUtil.doubleToString(p * 1e1));
133 assertEquals("300", TextUtil.doubleToString(p * 1e2));
134 assertEquals("3e3", TextUtil.doubleToString(p * 1e3));
135 assertEquals("3e4", TextUtil.doubleToString(p * 1e4));
136 assertEquals("3e5", TextUtil.doubleToString(p * 1e5));
137 assertEquals("3e6", TextUtil.doubleToString(p * 1e6));
138 assertEquals("3e7", TextUtil.doubleToString(p * 1e7));
139 assertEquals("3e8", TextUtil.doubleToString(p * 1e8));
140 assertEquals("3e9", TextUtil.doubleToString(p * 1e9));
141 assertEquals("3e10", TextUtil.doubleToString(p * 1e10));
143 assertEquals("-3e-5", TextUtil.doubleToString(-p * 1e-5));
144 assertEquals("-3e-4", TextUtil.doubleToString(-p * 1e-4));
145 assertEquals("-3e-3", TextUtil.doubleToString(-p * 1e-3));
146 assertEquals("-0.03", TextUtil.doubleToString(-p * 1e-2));
147 assertEquals("-0.3", TextUtil.doubleToString(-p * 1e-1));
148 assertEquals("-3", TextUtil.doubleToString(-p));
149 assertEquals("-30", TextUtil.doubleToString(-p * 1e1));
150 assertEquals("-300", TextUtil.doubleToString(-p * 1e2));
151 assertEquals("-3e3", TextUtil.doubleToString(-p * 1e3));
152 assertEquals("-3e4", TextUtil.doubleToString(-p * 1e4));
153 assertEquals("-3e5", TextUtil.doubleToString(-p * 1e5));
154 assertEquals("-3e6", TextUtil.doubleToString(-p * 1e6));
155 assertEquals("-3e7", TextUtil.doubleToString(-p * 1e7));
156 assertEquals("-3e8", TextUtil.doubleToString(-p * 1e8));
157 assertEquals("-3e9", TextUtil.doubleToString(-p * 1e9));
158 assertEquals("-3e10", TextUtil.doubleToString(-p * 1e10));
163 public void roundingTest() {
165 assertEquals("1.001", TextUtil.doubleToString(1.00096));
169 * Not testing with 1.00015 because it might be changed during number formatting
170 * calculations. Its rounding is basically arbitrary anyway.
173 assertEquals("1.0002e-5", TextUtil.doubleToString(1.0001500001e-5));
174 assertEquals("1.0001e-5", TextUtil.doubleToString(1.0001499999e-5));
175 assertEquals("1.0002e-4", TextUtil.doubleToString(1.0001500001e-4));
176 assertEquals("1.0001e-4", TextUtil.doubleToString(1.0001499999e-4));
177 assertEquals("0.0010002", TextUtil.doubleToString(1.0001500001e-3));
178 assertEquals("0.0010001", TextUtil.doubleToString(1.0001499999e-3));
179 assertEquals("0.010002", TextUtil.doubleToString(1.0001500001e-2));
180 assertEquals("0.010001", TextUtil.doubleToString(1.0001499999e-2));
181 assertEquals("0.10002", TextUtil.doubleToString(1.0001500001e-1));
182 assertEquals("0.10001", TextUtil.doubleToString(1.0001499999e-1));
183 assertEquals("1.0002", TextUtil.doubleToString(1.0001500001));
184 assertEquals("1.0001", TextUtil.doubleToString(1.0001499999));
185 assertEquals("10.002", TextUtil.doubleToString(1.0001500001e1));
186 assertEquals("10.001", TextUtil.doubleToString(1.0001499999e1));
187 assertEquals("100.02", TextUtil.doubleToString(1.0001500001e2));
188 assertEquals("100.01", TextUtil.doubleToString(1.0001499999e2));
189 assertEquals("1000.2", TextUtil.doubleToString(1.0001500001e3));
190 assertEquals("1000.1", TextUtil.doubleToString(1.0001499999e3));
191 assertEquals("10002", TextUtil.doubleToString(1.0001500001e4));
192 assertEquals("10001", TextUtil.doubleToString(1.0001499999e4));
193 assertEquals("100012", TextUtil.doubleToString(1.00011500001e5));
194 assertEquals("100011", TextUtil.doubleToString(1.00011499999e5));
195 assertEquals("1000112", TextUtil.doubleToString(1.000111500001e6));
196 assertEquals("1000111", TextUtil.doubleToString(1.000111499999e6));
197 assertEquals("10001112", TextUtil.doubleToString(1.0001111500001e7));
198 assertEquals("10001111", TextUtil.doubleToString(1.0001111499999e7));
199 assertEquals("1.0002e8", TextUtil.doubleToString(1.0001500001e8));
200 assertEquals("1.0001e8", TextUtil.doubleToString(1.0001499999e8));
201 assertEquals("1.0002e9", TextUtil.doubleToString(1.0001500001e9));
202 assertEquals("1.0001e9", TextUtil.doubleToString(1.0001499999e9));
203 assertEquals("1.0002e10", TextUtil.doubleToString(1.0001500001e10));
204 assertEquals("1.0001e10", TextUtil.doubleToString(1.0001499999e10));
207 assertEquals("-1.0002e-5", TextUtil.doubleToString(-1.0001500001e-5));
208 assertEquals("-1.0001e-5", TextUtil.doubleToString(-1.0001499999e-5));
209 assertEquals("-1.0002e-4", TextUtil.doubleToString(-1.0001500001e-4));
210 assertEquals("-1.0001e-4", TextUtil.doubleToString(-1.0001499999e-4));
211 assertEquals("-0.0010002", TextUtil.doubleToString(-1.0001500001e-3));
212 assertEquals("-0.0010001", TextUtil.doubleToString(-1.0001499999e-3));
213 assertEquals("-0.010002", TextUtil.doubleToString(-1.0001500001e-2));
214 assertEquals("-0.010001", TextUtil.doubleToString(-1.0001499999e-2));
215 assertEquals("-0.10002", TextUtil.doubleToString(-1.0001500001e-1));
216 assertEquals("-0.10001", TextUtil.doubleToString(-1.0001499999e-1));
217 assertEquals("-1.0002", TextUtil.doubleToString(-1.0001500001));
218 assertEquals("-1.0001", TextUtil.doubleToString(-1.0001499999));
219 assertEquals("-10.002", TextUtil.doubleToString(-1.0001500001e1));
220 assertEquals("-10.001", TextUtil.doubleToString(-1.0001499999e1));
221 assertEquals("-100.02", TextUtil.doubleToString(-1.0001500001e2));
222 assertEquals("-100.01", TextUtil.doubleToString(-1.0001499999e2));
223 assertEquals("-1000.2", TextUtil.doubleToString(-1.0001500001e3));
224 assertEquals("-1000.1", TextUtil.doubleToString(-1.0001499999e3));
225 assertEquals("-10002", TextUtil.doubleToString(-1.0001500001e4));
226 assertEquals("-10001", TextUtil.doubleToString(-1.0001499999e4));
227 assertEquals("-100012", TextUtil.doubleToString(-1.00011500001e5));
228 assertEquals("-100011", TextUtil.doubleToString(-1.00011499999e5));
229 assertEquals("-1000112", TextUtil.doubleToString(-1.000111500001e6));
230 assertEquals("-1000111", TextUtil.doubleToString(-1.000111499999e6));
231 assertEquals("-10001112", TextUtil.doubleToString(-1.0001111500001e7));
232 assertEquals("-10001111", TextUtil.doubleToString(-1.0001111499999e7));
233 assertEquals("-1.0002e8", TextUtil.doubleToString(-1.0001500001e8));
234 assertEquals("-1.0001e8", TextUtil.doubleToString(-1.0001499999e8));
235 assertEquals("-1.0002e9", TextUtil.doubleToString(-1.0001500001e9));
236 assertEquals("-1.0001e9", TextUtil.doubleToString(-1.0001499999e9));
237 assertEquals("-1.0002e10", TextUtil.doubleToString(-1.0001500001e10));
238 assertEquals("-1.0001e10", TextUtil.doubleToString(-1.0001499999e10));
244 public void randomTest() {
245 for (int i = 0; i < 10000; i++) {
246 double orig = Math.random();
248 double expected = Math.rint(orig * 100000) / 100000.0;
252 String s = TextUtil.doubleToString(orig);
253 result = Double.parseDouble(s);
254 assertEquals(expected, result, 0.00000001);