OSDN Git Service

7eb535655a4eff618b6f78f4986ae3b4d4af7a4b
[jovsonz/Jovsonz.git] / src / test / java / jp / sourceforge / jovsonz / JsNumberTest.java
1 /*
2  * License : The MIT License
3  * Copyright(c) 2009 olyutorskii
4  */
5
6 package jp.sourceforge.jovsonz;
7
8 import java.math.BigDecimal;
9 import java.math.BigInteger;
10 import org.junit.After;
11 import org.junit.AfterClass;
12 import org.junit.Before;
13 import org.junit.BeforeClass;
14 import org.junit.Test;
15 import static org.junit.Assert.*;
16
17 /**
18  *
19  */
20 public class JsNumberTest {
21
22     public JsNumberTest() {
23     }
24
25     @BeforeClass
26     public static void setUpClass() throws Exception{
27     }
28
29     @AfterClass
30     public static void tearDownClass() throws Exception{
31     }
32
33     @Before
34     public void setUp() {
35     }
36
37     @After
38     public void tearDown() {
39     }
40
41     /**
42      * Test of parseNumber method, of class JsNumber.
43      */
44     @Test
45     public void testParseNumber() throws Exception{
46         System.out.println("parseNumber");
47
48         JsonSource source;
49         JsNumber number;
50
51         source = new JsonSource("0");
52         number = JsNumber.parseNumber(source);
53         assertEquals("0", number.toString());
54
55         source = new JsonSource("-0");
56         number = JsNumber.parseNumber(source);
57         assertEquals("0", number.toString());
58
59         source = new JsonSource("12");
60         number = JsNumber.parseNumber(source);
61         assertEquals("12", number.toString());
62
63         source = new JsonSource("-12");
64         number = JsNumber.parseNumber(source);
65         assertEquals("-12", number.toString());
66
67         source = new JsonSource("+12");
68         number = JsNumber.parseNumber(source);
69         assertNull(number);
70
71         try{
72             source = new JsonSource("12.");
73             number = JsNumber.parseNumber(source);
74             fail();
75         }catch(JsParseException e){
76             // NOTHING
77         }
78
79         try{
80             source = new JsonSource("12.@");
81             number = JsNumber.parseNumber(source);
82             fail();
83         }catch(JsParseException e){
84             // NOTHING
85         }
86
87         source = new JsonSource("12.34");
88         number = JsNumber.parseNumber(source);
89         assertEquals("12.34", number.toString());
90
91         source = new JsonSource("12.0");
92         number = JsNumber.parseNumber(source);
93         assertEquals("12.0", number.toString());
94
95         source = new JsonSource("12.00");
96         number = JsNumber.parseNumber(source);
97         assertEquals("12.00", number.toString());
98
99         source = new JsonSource("12.003");
100         number = JsNumber.parseNumber(source);
101         assertEquals("12.003", number.toString());
102
103         source = new JsonSource("12.0030");
104         number = JsNumber.parseNumber(source);
105         assertEquals("12.0030", number.toString());
106
107         try{
108             source = new JsonSource("09");
109             number = JsNumber.parseNumber(source);
110             fail();
111         }catch(JsParseException e){
112             // NOTHING
113         }
114
115         source = new JsonSource("12e34");
116         number = JsNumber.parseNumber(source);
117         assertEquals("1.2E+35", number.toString());
118
119         source = new JsonSource("12E34");
120         number = JsNumber.parseNumber(source);
121         assertEquals("1.2E+35", number.toString());
122
123         source = new JsonSource("12e+34");
124         number = JsNumber.parseNumber(source);
125         assertEquals("1.2E+35", number.toString());
126
127         source = new JsonSource("12e-34");
128         number = JsNumber.parseNumber(source);
129         assertEquals("1.2E-33", number.toString());
130
131         source = new JsonSource("12e0034");
132         number = JsNumber.parseNumber(source);
133         assertEquals("1.2E+35", number.toString());
134
135         try{
136             source = new JsonSource("12e");
137             number = JsNumber.parseNumber(source);
138             fail();
139         }catch(JsParseException e){
140             // NOTHING
141         }
142
143         try{
144             source = new JsonSource("12e+");
145             number = JsNumber.parseNumber(source);
146             fail();
147         }catch(JsParseException e){
148             // NOTHING
149         }
150
151         try{
152             source = new JsonSource("12e-");
153             number = JsNumber.parseNumber(source);
154             fail();
155         }catch(JsParseException e){
156             // NOTHING
157         }
158
159         try{
160             source = new JsonSource("12e#");
161             number = JsNumber.parseNumber(source);
162             fail();
163         }catch(JsParseException e){
164             // NOTHING
165         }
166
167         source = new JsonSource("-12.34e-056");
168         number = JsNumber.parseNumber(source);
169         assertEquals("-1.234E-55", number.toString());
170
171         return;
172     }
173
174     /**
175      * Test of constructor, of class JsNumber.
176      */
177     @Test
178     public void testConstructors() throws Exception{
179         System.out.println("constructor");
180
181         JsNumber number;
182         BigDecimal decimal;
183
184         number = new JsNumber(99L);
185         decimal = number.decimalValue();
186         assertEquals(new BigInteger("99"), decimal.unscaledValue());
187         assertEquals(0, decimal.scale());
188
189         number = new JsNumber(99.0);
190         decimal = number.decimalValue();
191         assertEquals(new BigInteger("990"), decimal.unscaledValue());
192         assertEquals(1, decimal.scale());
193
194         number = new JsNumber(new BigInteger("99"));
195         decimal = number.decimalValue();
196         assertEquals(new BigInteger("99"), decimal.unscaledValue());
197         assertEquals(0, decimal.scale());
198
199         number = new JsNumber("99.9");
200         decimal = number.decimalValue();
201         assertEquals(new BigInteger("999"), decimal.unscaledValue());
202         assertEquals(1, decimal.scale());
203
204         number = new JsNumber(new BigDecimal("99.9"));
205         decimal = number.decimalValue();
206         assertEquals(new BigInteger("999"), decimal.unscaledValue());
207         assertEquals(1, decimal.scale());
208
209         number = new JsNumber(1.0 / 10.0);
210         decimal = number.decimalValue();
211         assertEquals(new BigInteger("1"), decimal.unscaledValue());
212         assertEquals(1, decimal.scale());
213
214         number = new JsNumber(new BigDecimal(1.0 / 10.0));
215         decimal = number.decimalValue();
216         assertEquals(
217                 new BigInteger(
218                 "1000000000000000055511151231257827021181583404541015625"),
219                 decimal.unscaledValue());
220         assertEquals(55, decimal.scale());
221
222         try{
223             number = new JsNumber((BigDecimal)null);
224             fail();
225         }catch(NullPointerException e){
226             //GOOD
227         }
228
229         return;
230     }
231
232     /**
233      * Test of traverse method, of class JsNumber.
234      */
235     @Test
236     public void testTraverse(){
237         System.out.println("traverse");
238
239         JsNumber number = new JsNumber("0");
240
241         try{
242             number.traverse(new ValueVisitor(){
243                 int ct = 0;
244
245                 public void visitValue(JsValue value)
246                         throws JsVisitException{
247                     assertEquals(new JsNumber("0"), value);
248                     assertTrue(this.ct++ <= 0);
249                 }
250
251                 public void visitPairName(String name)
252                         throws JsVisitException{
253                     throw new JsVisitException();
254                 }
255
256                 public void visitCompositionClose(JsComposition composite)
257                         throws JsVisitException{
258                     throw new JsVisitException();
259                 }
260             });
261         }catch(JsVisitException e){
262             fail();
263         }
264
265         return;
266     }
267
268     /**
269      * Test of decimalValue method, of class JsNumber.
270      */
271     @Test
272     public void testDecimalValue(){
273         System.out.println("decimalValue");
274
275         JsNumber number = new JsNumber("-123.456e+1");
276         BigDecimal decimal = number.decimalValue();
277
278         assertEquals(new BigDecimal("-123.456e+1"), decimal);
279         assertEquals(2, decimal.scale());
280         assertEquals(new BigInteger("-123456"), decimal.unscaledValue());
281
282         return;
283     }
284
285     /**
286      * Test of intValue method, of class JsNumber.
287      */
288     @Test
289     public void testIntValue(){
290         System.out.println("intValue");
291
292         assertEquals(0, new JsNumber("0").intValue());
293         assertEquals(99, new JsNumber("99.9").intValue());
294         assertEquals(-99, new JsNumber("-99.9").intValue());
295         assertEquals(2147483647, new JsNumber("2147483647").intValue());
296
297         return;
298     }
299
300     /**
301      * Test of longValue method, of class JsNumber.
302      */
303     @Test
304     public void testLongValue(){
305         System.out.println("longValue");
306
307         assertEquals(0L, new JsNumber("0").longValue());
308         assertEquals(99L, new JsNumber("99.9").longValue());
309         assertEquals(-99L, new JsNumber("-99.9").longValue());
310         assertEquals(999999999999L, new JsNumber("999999999999").longValue());
311
312         return;
313     }
314
315     /**
316      * Test of floatValue method, of class JsNumber.
317      */
318     @Test
319     public void testFloatValue(){
320         System.out.println("floatValue");
321
322         assertEquals(1.25f, new JsNumber("1.25").floatValue(), 0.0);
323         assertEquals(1.25f, new JsNumber("125E-2").floatValue(), 0.0);
324
325         return;
326     }
327
328     /**
329      * Test of doubleValue method, of class JsNumber.
330      */
331     @Test
332     public void testDoubleValue(){
333         System.out.println("doubleValue");
334
335         assertEquals(1.25, new JsNumber("1.25").doubleValue(), 0.0);
336         assertEquals(1.25, new JsNumber("125E-2").doubleValue(), 0.0);
337
338         return;
339     }
340
341     /**
342      * Test of hashCode method, of class JsNumber.
343      */
344     @Test
345     public void testHashCode(){
346         System.out.println("hashCode");
347
348         assertEquals(new JsNumber("1").hashCode(), new JsNumber("1").hashCode());
349         assertEquals(new JsNumber("1.23").hashCode(), new JsNumber("123e-2").hashCode());
350
351         return;
352     }
353
354     /**
355      * Test of equals method, of class JsNumber.
356      */
357     @Test
358     public void testEquals(){
359         System.out.println("equals");
360
361         JsNumber nullVal = null;
362
363         assertTrue(new JsNumber("1").equals(new JsNumber("1")));
364         assertFalse(new JsNumber("1").equals(new JsNumber("2")));
365         assertFalse(new JsNumber("1").equals(nullVal));
366         assertFalse(new JsNumber("1").equals(""));
367
368         assertTrue(new JsNumber("1.23").equals(new JsNumber("123e-2")));
369         assertFalse(new JsNumber("1.0").equals(new JsNumber("1.00")));
370
371         return;
372     }
373
374     /**
375      * Test of compareTo method, of class JsNumber.
376      */
377     @Test
378     public void testCompareTo(){
379         System.out.println("compareTo");
380
381         assertTrue(0 > new JsNumber("-1").compareTo(new JsNumber("1")));
382         assertTrue(0 < new JsNumber("1").compareTo(new JsNumber("-1")));
383         assertTrue(new JsNumber("1").compareTo(new JsNumber("1")) == 0);
384
385         assertTrue(0 > new JsNumber("1").compareTo(new JsNumber("2")));
386         assertTrue(0 < new JsNumber("9").compareTo(new JsNumber("8")));
387
388         assertTrue(new JsNumber("1.23").compareTo(new JsNumber("123e-2")) == 0);
389         assertTrue(new JsNumber("1.0").compareTo(new JsNumber("1.00")) == 0);
390
391         JsNumber number = new JsNumber("99");
392         assertTrue(number.compareTo(number) == 0);
393
394         return;
395     }
396
397     /**
398      * Test of toString method, of class JsNumber.
399      */
400     @Test
401     public void testToString(){
402         System.out.println("toString");
403
404         JsNumber number;
405
406         number = new JsNumber("0");
407         assertEquals("0", number.toString());
408         number = new JsNumber("+0");
409         assertEquals("0", number.toString());
410         number = new JsNumber("-0");
411         assertEquals("0", number.toString());
412
413         number = new JsNumber("1");
414         assertEquals("1", number.toString());
415         number = new JsNumber("+1");
416         assertEquals("1", number.toString());
417         number = new JsNumber("-1");
418         assertEquals("-1", number.toString());
419
420         number = new JsNumber("0.0");
421         assertEquals("0.0", number.toString());
422
423         number = new JsNumber("1.0");
424         assertEquals("1.0", number.toString());
425
426         number = new JsNumber("1.00");
427         assertEquals("1.00", number.toString());
428
429         number = new JsNumber("0.1");
430         assertEquals("0.1", number.toString());
431
432         number = new JsNumber("0.10");
433         assertEquals("0.10", number.toString());
434
435         number = new JsNumber("0.000001");
436         assertEquals("0.000001", number.toString());
437
438         number = new JsNumber("0.0000001");
439         assertEquals("1E-7", number.toString());
440
441         number = new JsNumber("123e0");
442         assertEquals("123", number.toString());
443
444         number = new JsNumber("123e1");
445         assertEquals("1.23E+3", number.toString());
446
447         number = new JsNumber("123E1");
448         assertEquals("1.23E+3", number.toString());
449
450         number = new JsNumber("123e+1");
451         assertEquals("1.23E+3", number.toString());
452
453         number = new JsNumber("123e-1");
454         assertEquals("12.3", number.toString());
455
456         number = new JsNumber("123e-8");
457         assertEquals("0.00000123", number.toString());
458
459         number = new JsNumber("123e-9");
460         assertEquals("1.23E-7", number.toString());
461
462         return;
463     }
464
465     /**
466      * Test of getJsTypes method, of class JsNumber.
467      */
468     @Test
469     public void testGetJsTypes() {
470         System.out.println("getJsTypes");
471
472         JsNumber instance = new JsNumber(0);
473
474         assertEquals(JsTypes.NUMBER, instance.getJsTypes());
475
476         return;
477     }
478
479     /**
480      * Test of isLatinDigit method, of class JsNumber.
481      */
482     @Test
483     public void testIsLatinDigit(){
484         System.out.println("isLatinDigit");
485
486         assertTrue(JsNumber.isLatinDigit('0'));
487         assertTrue(JsNumber.isLatinDigit('1'));
488         assertTrue(JsNumber.isLatinDigit('2'));
489         assertTrue(JsNumber.isLatinDigit('3'));
490         assertTrue(JsNumber.isLatinDigit('4'));
491         assertTrue(JsNumber.isLatinDigit('5'));
492         assertTrue(JsNumber.isLatinDigit('6'));
493         assertTrue(JsNumber.isLatinDigit('7'));
494         assertTrue(JsNumber.isLatinDigit('8'));
495         assertTrue(JsNumber.isLatinDigit('9'));
496
497         assertFalse(JsNumber.isLatinDigit('A'));
498         assertFalse(JsNumber.isLatinDigit('+'));
499         assertFalse(JsNumber.isLatinDigit('-'));
500         assertFalse(JsNumber.isLatinDigit('.'));
501         assertFalse(JsNumber.isLatinDigit('\u0000'));
502         assertFalse(JsNumber.isLatinDigit('\uffff'));
503
504         return;
505     }
506
507     /**
508      * Test of scale method, of class JsNumber.
509      */
510     @Test
511     public void testScale() throws Exception{
512         System.out.println("scale");
513
514         JsNumber number;
515         JsonSource source;
516
517         source = new JsonSource("10");
518         number = JsNumber.parseNumber(source);
519         assertEquals(0, number.scale());
520
521         source = new JsonSource("10.0");
522         number = JsNumber.parseNumber(source);
523         assertEquals(1, number.scale());
524
525         source = new JsonSource("10.0E+3");
526         number = JsNumber.parseNumber(source);
527         assertEquals(-2, number.scale());
528
529         source = new JsonSource("10E+3");
530         number = JsNumber.parseNumber(source);
531         assertEquals(-3, number.scale());
532
533         return;
534     }
535
536 }