OSDN Git Service

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