1 package net.sf.openrocket.util;
3 import static java.lang.Math.PI;
4 import static org.junit.Assert.assertEquals;
6 import java.nio.charset.Charset;
7 import java.util.Random;
11 public class TextUtilTest {
14 public void testConvertStringToBytes() {
16 Charset us_ascii = Charset.forName("US-ASCII");
18 byte[] ZIP_SIGNATURE_CORRECT = "PK".getBytes(us_ascii);
19 byte[] ZIP_SIGNATURE_TEST = TextUtil.convertStringToBytes( "PK", us_ascii);
21 assertEquals( ZIP_SIGNATURE_CORRECT.length, ZIP_SIGNATURE_TEST.length );
22 for( int i =0; i< ZIP_SIGNATURE_CORRECT.length; i++ ) {
23 assertEquals(ZIP_SIGNATURE_CORRECT[i], ZIP_SIGNATURE_TEST[i]);
26 byte[] OPENROCKET_SIGNATURE_CORRECT = "<openrocket".getBytes(us_ascii);
27 byte[] OPENROCKET_SIGNATURE_TEST = TextUtil.convertStringToBytes( "<openrocket", us_ascii);
29 assertEquals( OPENROCKET_SIGNATURE_CORRECT.length, OPENROCKET_SIGNATURE_TEST.length);
30 for( int i =0; i< OPENROCKET_SIGNATURE_CORRECT.length; i++ ) {
31 assertEquals(OPENROCKET_SIGNATURE_CORRECT[i], OPENROCKET_SIGNATURE_TEST[i]);
34 byte[] ROCKSIM_SIGNATURE_CORRECT = "<RockSimDoc".getBytes(us_ascii);
35 byte[] ROCKSIM_SIGNATURE_TEST = TextUtil.convertStringToBytes( "<RockSimDoc", us_ascii);
37 assertEquals( ROCKSIM_SIGNATURE_CORRECT.length, ROCKSIM_SIGNATURE_TEST.length );
38 for( int i =0; i< ROCKSIM_SIGNATURE_CORRECT.length; i++ ) {
39 assertEquals(ROCKSIM_SIGNATURE_CORRECT[i], ROCKSIM_SIGNATURE_TEST[i]);
44 public void testHexString() {
45 assertEquals("", TextUtil.hexString(new byte[0]));
46 assertEquals("00", TextUtil.hexString(new byte[] { 0x00 }));
47 assertEquals("ff", TextUtil.hexString(new byte[] { (byte) 0xff }));
49 for (int i = 0; i <= 0xff; i++) {
50 assertEquals(String.format("%02x", i), TextUtil.hexString(new byte[] { (byte) i }));
53 assertEquals("0f1e2d3c4b5a6978", TextUtil.hexString(new byte[] {
54 0x0f, 0x1e, 0x2d, 0x3c, 0x4b, 0x5a, 0x69, 0x78
57 Random rnd = new Random();
58 for (int count = 0; count < 10; count++) {
59 int n = rnd.nextInt(100);
60 byte[] bytes = new byte[n];
62 StringBuilder sb = new StringBuilder();
63 for (byte b : bytes) {
64 sb.append(String.format("%02x", b & 0xFF));
66 assertEquals(sb.toString(), TextUtil.hexString(bytes));
71 public void specialCaseTest() {
72 assertEquals("NaN", TextUtil.doubleToString(Double.NaN));
73 assertEquals("Inf", TextUtil.doubleToString(Double.POSITIVE_INFINITY));
74 assertEquals("-Inf", TextUtil.doubleToString(Double.NEGATIVE_INFINITY));
75 assertEquals("0", TextUtil.doubleToString(0.0));
76 assertEquals("0", TextUtil.doubleToString(MathUtil.EPSILON / 3));
77 assertEquals("0", TextUtil.doubleToString(-MathUtil.EPSILON / 3));
81 public void longTest() {
83 assertEquals("3.1416e-5", TextUtil.doubleToString(PI * 1e-5));
84 assertEquals("3.1416e-4", TextUtil.doubleToString(PI * 1e-4));
85 assertEquals("0.0031416", TextUtil.doubleToString(PI * 1e-3));
86 assertEquals("0.031416", TextUtil.doubleToString(PI * 1e-2));
87 assertEquals("0.31416", TextUtil.doubleToString(PI * 1e-1));
88 assertEquals("3.1416", TextUtil.doubleToString(PI));
89 assertEquals("31.416", TextUtil.doubleToString(PI * 1e1));
90 assertEquals("314.16", TextUtil.doubleToString(PI * 1e2));
91 assertEquals("3141.6", TextUtil.doubleToString(PI * 1e3));
92 assertEquals("31416", TextUtil.doubleToString(PI * 1e4));
93 assertEquals("314159", TextUtil.doubleToString(PI * 1e5));
94 assertEquals("3141593", TextUtil.doubleToString(PI * 1e6));
95 assertEquals("31415927", TextUtil.doubleToString(PI * 1e7));
96 assertEquals("3.1416e8", TextUtil.doubleToString(PI * 1e8));
97 assertEquals("3.1416e9", TextUtil.doubleToString(PI * 1e9));
98 assertEquals("3.1416e10", TextUtil.doubleToString(PI * 1e10));
100 assertEquals("-3.1416e-5", TextUtil.doubleToString(-PI * 1e-5));
101 assertEquals("-3.1416e-4", TextUtil.doubleToString(-PI * 1e-4));
102 assertEquals("-0.0031416", TextUtil.doubleToString(-PI * 1e-3));
103 assertEquals("-0.031416", TextUtil.doubleToString(-PI * 1e-2));
104 assertEquals("-0.31416", TextUtil.doubleToString(-PI * 1e-1));
105 assertEquals("-3.1416", TextUtil.doubleToString(-PI));
106 assertEquals("-31.416", TextUtil.doubleToString(-PI * 1e1));
107 assertEquals("-314.16", TextUtil.doubleToString(-PI * 1e2));
108 assertEquals("-3141.6", TextUtil.doubleToString(-PI * 1e3));
109 assertEquals("-31416", TextUtil.doubleToString(-PI * 1e4));
110 assertEquals("-314159", TextUtil.doubleToString(-PI * 1e5));
111 assertEquals("-3141593", TextUtil.doubleToString(-PI * 1e6));
112 assertEquals("-31415927", TextUtil.doubleToString(-PI * 1e7));
113 assertEquals("-3.1416e8", TextUtil.doubleToString(-PI * 1e8));
114 assertEquals("-3.1416e9", TextUtil.doubleToString(-PI * 1e9));
115 assertEquals("-3.1416e10", TextUtil.doubleToString(-PI * 1e10));
120 public void shortTest() {
122 assertEquals("3.1e-5", TextUtil.doubleToString(p * 1e-5));
123 assertEquals("3.1e-4", TextUtil.doubleToString(p * 1e-4));
124 assertEquals("0.0031", TextUtil.doubleToString(p * 1e-3));
125 assertEquals("0.031", TextUtil.doubleToString(p * 1e-2));
126 assertEquals("0.31", TextUtil.doubleToString(p * 1e-1));
127 assertEquals("3.1", TextUtil.doubleToString(p));
128 assertEquals("31", TextUtil.doubleToString(p * 1e1));
129 assertEquals("310", TextUtil.doubleToString(p * 1e2));
130 assertEquals("3100", TextUtil.doubleToString(p * 1e3));
131 assertEquals("31000", TextUtil.doubleToString(p * 1e4));
132 assertEquals("3.1e5", TextUtil.doubleToString(p * 1e5));
133 assertEquals("3.1e6", TextUtil.doubleToString(p * 1e6));
134 assertEquals("3.1e7", TextUtil.doubleToString(p * 1e7));
135 assertEquals("3.1e8", TextUtil.doubleToString(p * 1e8));
136 assertEquals("3.1e9", TextUtil.doubleToString(p * 1e9));
137 assertEquals("3.1e10", TextUtil.doubleToString(p * 1e10));
139 assertEquals("-3.1e-5", TextUtil.doubleToString(-p * 1e-5));
140 assertEquals("-3.1e-4", TextUtil.doubleToString(-p * 1e-4));
141 assertEquals("-0.0031", TextUtil.doubleToString(-p * 1e-3));
142 assertEquals("-0.031", TextUtil.doubleToString(-p * 1e-2));
143 assertEquals("-0.31", TextUtil.doubleToString(-p * 1e-1));
144 assertEquals("-3.1", TextUtil.doubleToString(-p));
145 assertEquals("-31", TextUtil.doubleToString(-p * 1e1));
146 assertEquals("-310", TextUtil.doubleToString(-p * 1e2));
147 assertEquals("-3100", TextUtil.doubleToString(-p * 1e3));
148 assertEquals("-31000", TextUtil.doubleToString(-p * 1e4));
149 assertEquals("-3.1e5", TextUtil.doubleToString(-p * 1e5));
150 assertEquals("-3.1e6", TextUtil.doubleToString(-p * 1e6));
151 assertEquals("-3.1e7", TextUtil.doubleToString(-p * 1e7));
152 assertEquals("-3.1e8", TextUtil.doubleToString(-p * 1e8));
153 assertEquals("-3.1e9", TextUtil.doubleToString(-p * 1e9));
154 assertEquals("-3.1e10", TextUtil.doubleToString(-p * 1e10));
157 assertEquals("3e-5", TextUtil.doubleToString(p * 1e-5));
158 assertEquals("3e-4", TextUtil.doubleToString(p * 1e-4));
159 assertEquals("3e-3", TextUtil.doubleToString(p * 1e-3));
160 assertEquals("0.03", TextUtil.doubleToString(p * 1e-2));
161 assertEquals("0.3", TextUtil.doubleToString(p * 1e-1));
162 assertEquals("3", TextUtil.doubleToString(p));
163 assertEquals("30", TextUtil.doubleToString(p * 1e1));
164 assertEquals("300", TextUtil.doubleToString(p * 1e2));
165 assertEquals("3e3", TextUtil.doubleToString(p * 1e3));
166 assertEquals("3e4", TextUtil.doubleToString(p * 1e4));
167 assertEquals("3e5", TextUtil.doubleToString(p * 1e5));
168 assertEquals("3e6", TextUtil.doubleToString(p * 1e6));
169 assertEquals("3e7", TextUtil.doubleToString(p * 1e7));
170 assertEquals("3e8", TextUtil.doubleToString(p * 1e8));
171 assertEquals("3e9", TextUtil.doubleToString(p * 1e9));
172 assertEquals("3e10", TextUtil.doubleToString(p * 1e10));
174 assertEquals("-3e-5", TextUtil.doubleToString(-p * 1e-5));
175 assertEquals("-3e-4", TextUtil.doubleToString(-p * 1e-4));
176 assertEquals("-3e-3", TextUtil.doubleToString(-p * 1e-3));
177 assertEquals("-0.03", TextUtil.doubleToString(-p * 1e-2));
178 assertEquals("-0.3", TextUtil.doubleToString(-p * 1e-1));
179 assertEquals("-3", TextUtil.doubleToString(-p));
180 assertEquals("-30", TextUtil.doubleToString(-p * 1e1));
181 assertEquals("-300", TextUtil.doubleToString(-p * 1e2));
182 assertEquals("-3e3", TextUtil.doubleToString(-p * 1e3));
183 assertEquals("-3e4", TextUtil.doubleToString(-p * 1e4));
184 assertEquals("-3e5", TextUtil.doubleToString(-p * 1e5));
185 assertEquals("-3e6", TextUtil.doubleToString(-p * 1e6));
186 assertEquals("-3e7", TextUtil.doubleToString(-p * 1e7));
187 assertEquals("-3e8", TextUtil.doubleToString(-p * 1e8));
188 assertEquals("-3e9", TextUtil.doubleToString(-p * 1e9));
189 assertEquals("-3e10", TextUtil.doubleToString(-p * 1e10));
194 public void roundingTest() {
196 assertEquals("1.001", TextUtil.doubleToString(1.00096));
200 * Not testing with 1.00015 because it might be changed during number formatting
201 * calculations. Its rounding is basically arbitrary anyway.
204 assertEquals("1.0002e-5", TextUtil.doubleToString(1.0001500001e-5));
205 assertEquals("1.0001e-5", TextUtil.doubleToString(1.0001499999e-5));
206 assertEquals("1.0002e-4", TextUtil.doubleToString(1.0001500001e-4));
207 assertEquals("1.0001e-4", TextUtil.doubleToString(1.0001499999e-4));
208 assertEquals("0.0010002", TextUtil.doubleToString(1.0001500001e-3));
209 assertEquals("0.0010001", TextUtil.doubleToString(1.0001499999e-3));
210 assertEquals("0.010002", TextUtil.doubleToString(1.0001500001e-2));
211 assertEquals("0.010001", TextUtil.doubleToString(1.0001499999e-2));
212 assertEquals("0.10002", TextUtil.doubleToString(1.0001500001e-1));
213 assertEquals("0.10001", TextUtil.doubleToString(1.0001499999e-1));
214 assertEquals("1.0002", TextUtil.doubleToString(1.0001500001));
215 assertEquals("1.0001", TextUtil.doubleToString(1.0001499999));
216 assertEquals("10.002", TextUtil.doubleToString(1.0001500001e1));
217 assertEquals("10.001", TextUtil.doubleToString(1.0001499999e1));
218 assertEquals("100.02", TextUtil.doubleToString(1.0001500001e2));
219 assertEquals("100.01", TextUtil.doubleToString(1.0001499999e2));
220 assertEquals("1000.2", TextUtil.doubleToString(1.0001500001e3));
221 assertEquals("1000.1", TextUtil.doubleToString(1.0001499999e3));
222 assertEquals("10002", TextUtil.doubleToString(1.0001500001e4));
223 assertEquals("10001", TextUtil.doubleToString(1.0001499999e4));
224 assertEquals("100012", TextUtil.doubleToString(1.00011500001e5));
225 assertEquals("100011", TextUtil.doubleToString(1.00011499999e5));
226 assertEquals("1000112", TextUtil.doubleToString(1.000111500001e6));
227 assertEquals("1000111", TextUtil.doubleToString(1.000111499999e6));
228 assertEquals("10001112", TextUtil.doubleToString(1.0001111500001e7));
229 assertEquals("10001111", TextUtil.doubleToString(1.0001111499999e7));
230 assertEquals("1.0002e8", TextUtil.doubleToString(1.0001500001e8));
231 assertEquals("1.0001e8", TextUtil.doubleToString(1.0001499999e8));
232 assertEquals("1.0002e9", TextUtil.doubleToString(1.0001500001e9));
233 assertEquals("1.0001e9", TextUtil.doubleToString(1.0001499999e9));
234 assertEquals("1.0002e10", TextUtil.doubleToString(1.0001500001e10));
235 assertEquals("1.0001e10", TextUtil.doubleToString(1.0001499999e10));
238 assertEquals("-1.0002e-5", TextUtil.doubleToString(-1.0001500001e-5));
239 assertEquals("-1.0001e-5", TextUtil.doubleToString(-1.0001499999e-5));
240 assertEquals("-1.0002e-4", TextUtil.doubleToString(-1.0001500001e-4));
241 assertEquals("-1.0001e-4", TextUtil.doubleToString(-1.0001499999e-4));
242 assertEquals("-0.0010002", TextUtil.doubleToString(-1.0001500001e-3));
243 assertEquals("-0.0010001", TextUtil.doubleToString(-1.0001499999e-3));
244 assertEquals("-0.010002", TextUtil.doubleToString(-1.0001500001e-2));
245 assertEquals("-0.010001", TextUtil.doubleToString(-1.0001499999e-2));
246 assertEquals("-0.10002", TextUtil.doubleToString(-1.0001500001e-1));
247 assertEquals("-0.10001", TextUtil.doubleToString(-1.0001499999e-1));
248 assertEquals("-1.0002", TextUtil.doubleToString(-1.0001500001));
249 assertEquals("-1.0001", TextUtil.doubleToString(-1.0001499999));
250 assertEquals("-10.002", TextUtil.doubleToString(-1.0001500001e1));
251 assertEquals("-10.001", TextUtil.doubleToString(-1.0001499999e1));
252 assertEquals("-100.02", TextUtil.doubleToString(-1.0001500001e2));
253 assertEquals("-100.01", TextUtil.doubleToString(-1.0001499999e2));
254 assertEquals("-1000.2", TextUtil.doubleToString(-1.0001500001e3));
255 assertEquals("-1000.1", TextUtil.doubleToString(-1.0001499999e3));
256 assertEquals("-10002", TextUtil.doubleToString(-1.0001500001e4));
257 assertEquals("-10001", TextUtil.doubleToString(-1.0001499999e4));
258 assertEquals("-100012", TextUtil.doubleToString(-1.00011500001e5));
259 assertEquals("-100011", TextUtil.doubleToString(-1.00011499999e5));
260 assertEquals("-1000112", TextUtil.doubleToString(-1.000111500001e6));
261 assertEquals("-1000111", TextUtil.doubleToString(-1.000111499999e6));
262 assertEquals("-10001112", TextUtil.doubleToString(-1.0001111500001e7));
263 assertEquals("-10001111", TextUtil.doubleToString(-1.0001111499999e7));
264 assertEquals("-1.0002e8", TextUtil.doubleToString(-1.0001500001e8));
265 assertEquals("-1.0001e8", TextUtil.doubleToString(-1.0001499999e8));
266 assertEquals("-1.0002e9", TextUtil.doubleToString(-1.0001500001e9));
267 assertEquals("-1.0001e9", TextUtil.doubleToString(-1.0001499999e9));
268 assertEquals("-1.0002e10", TextUtil.doubleToString(-1.0001500001e10));
269 assertEquals("-1.0001e10", TextUtil.doubleToString(-1.0001499999e10));
275 public void randomTest() {
276 for (int i = 0; i < 10000; i++) {
277 double orig = Math.random();
279 double expected = Math.rint(orig * 100000) / 100000.0;
283 String s = TextUtil.doubleToString(orig);
284 result = Double.parseDouble(s);
285 assertEquals(expected, result, 0.00000001);