Since Froyo doesn't support String.getBytes(Charset), implement a helper function...
[debian/openrocket] / core / test / net / sf / openrocket / util / TextUtilTest.java
1 package net.sf.openrocket.util;
2
3 import static java.lang.Math.PI;
4 import static org.junit.Assert.assertEquals;
5
6 import java.nio.charset.Charset;
7 import java.util.Random;
8
9 import org.junit.Test;
10
11 public class TextUtilTest {
12         
13         @Test
14         public void testConvertStringToBytes() {
15                 
16                 Charset us_ascii = Charset.forName("US-ASCII");
17                 
18                 byte[] ZIP_SIGNATURE_CORRECT = "PK".getBytes(us_ascii);
19                 byte[] ZIP_SIGNATURE_TEST = TextUtil.convertStringToBytes( "PK", us_ascii);
20                 
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]);
24                 }
25                 
26                 byte[] OPENROCKET_SIGNATURE_CORRECT = "<openrocket".getBytes(us_ascii);
27                 byte[] OPENROCKET_SIGNATURE_TEST = TextUtil.convertStringToBytes( "<openrocket", us_ascii);
28                 
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]);
32                 }
33                 
34                 byte[] ROCKSIM_SIGNATURE_CORRECT = "<RockSimDoc".getBytes(us_ascii);
35                 byte[] ROCKSIM_SIGNATURE_TEST = TextUtil.convertStringToBytes( "<RockSimDoc", us_ascii);
36                 
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]);
40                 }
41         }
42         
43         @Test
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 }));
48                 
49                 for (int i = 0; i <= 0xff; i++) {
50                         assertEquals(String.format("%02x", i), TextUtil.hexString(new byte[] { (byte) i }));
51                 }
52                 
53                 assertEquals("0f1e2d3c4b5a6978", TextUtil.hexString(new byte[] {
54                                 0x0f, 0x1e, 0x2d, 0x3c, 0x4b, 0x5a, 0x69, 0x78
55                 }));
56                 
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];
61                         rnd.nextBytes(bytes);
62                         StringBuilder sb = new StringBuilder();
63                         for (byte b : bytes) {
64                                 sb.append(String.format("%02x", b & 0xFF));
65                         }
66                         assertEquals(sb.toString(), TextUtil.hexString(bytes));
67                 }
68         }
69         
70         @Test
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));
78         }
79         
80         @Test
81         public void longTest() {
82                 
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));
99                 
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));
116                 
117         }
118         
119         @Test
120         public void shortTest() {
121                 double p = 3.1;
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));
138                 
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));
155                 
156                 p = 3;
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));
173                 
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));
190                 
191         }
192         
193         @Test
194         public void roundingTest() {
195                 
196                 assertEquals("1.001", TextUtil.doubleToString(1.00096));
197                 
198
199                 /*
200                  * Not testing with 1.00015 because it might be changed during number formatting
201                  * calculations.  Its rounding is basically arbitrary anyway.
202                  */
203
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));
236                 
237
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));
270                 
271         }
272         
273         
274         @Test
275         public void randomTest() {
276                 for (int i = 0; i < 10000; i++) {
277                         double orig = Math.random();
278                         double result;
279                         double expected = Math.rint(orig * 100000) / 100000.0;
280                         
281                         if (orig < 0.1)
282                                 continue;
283                         String s = TextUtil.doubleToString(orig);
284                         result = Double.parseDouble(s);
285                         assertEquals(expected, result, 0.00000001);
286                 }
287         }
288         
289 }