2 * License : The MIT License
3 * Copyright(c) 2009 olyutorskii
6 package jp.sourceforge.jovsonz;
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;
16 import static org.junit.Assert.*;
21 public class JsNumberTest {
23 public JsNumberTest() {
27 public static void setUpClass() throws Exception{
31 public static void tearDownClass() throws Exception{
39 public void tearDown() {
43 * Test of parseNumber method, of class JsNumber.
46 public void testParseNumber() throws Exception{
47 System.out.println("parseNumber");
52 source = new JsonSource("0");
53 number = JsNumber.parseNumber(source);
54 assertEquals("0", number.toString());
56 source = new JsonSource("-0");
57 number = JsNumber.parseNumber(source);
58 assertEquals("0", number.toString());
60 source = new JsonSource("12");
61 number = JsNumber.parseNumber(source);
62 assertEquals("12", number.toString());
64 source = new JsonSource("-12");
65 number = JsNumber.parseNumber(source);
66 assertEquals("-12", number.toString());
68 source = new JsonSource("+12");
69 number = JsNumber.parseNumber(source);
73 source = new JsonSource("12.");
74 number = JsNumber.parseNumber(source);
76 }catch(JsParseException e){
81 source = new JsonSource("12.@");
82 number = JsNumber.parseNumber(source);
84 }catch(JsParseException e){
88 source = new JsonSource("12.34");
89 number = JsNumber.parseNumber(source);
90 assertEquals("12.34", number.toString());
92 source = new JsonSource("12.0");
93 number = JsNumber.parseNumber(source);
94 assertEquals("12.0", number.toString());
96 source = new JsonSource("12.00");
97 number = JsNumber.parseNumber(source);
98 assertEquals("12.00", number.toString());
100 source = new JsonSource("12.003");
101 number = JsNumber.parseNumber(source);
102 assertEquals("12.003", number.toString());
104 source = new JsonSource("12.0030");
105 number = JsNumber.parseNumber(source);
106 assertEquals("12.0030", number.toString());
109 source = new JsonSource("09");
110 number = JsNumber.parseNumber(source);
112 }catch(JsParseException e){
116 source = new JsonSource("12e34");
117 number = JsNumber.parseNumber(source);
118 assertEquals("1.2E+35", number.toString());
120 source = new JsonSource("12E34");
121 number = JsNumber.parseNumber(source);
122 assertEquals("1.2E+35", number.toString());
124 source = new JsonSource("12e+34");
125 number = JsNumber.parseNumber(source);
126 assertEquals("1.2E+35", number.toString());
128 source = new JsonSource("12e-34");
129 number = JsNumber.parseNumber(source);
130 assertEquals("1.2E-33", number.toString());
132 source = new JsonSource("12e0034");
133 number = JsNumber.parseNumber(source);
134 assertEquals("1.2E+35", number.toString());
137 source = new JsonSource("12e");
138 number = JsNumber.parseNumber(source);
140 }catch(JsParseException e){
145 source = new JsonSource("12e+");
146 number = JsNumber.parseNumber(source);
148 }catch(JsParseException e){
153 source = new JsonSource("12e-");
154 number = JsNumber.parseNumber(source);
156 }catch(JsParseException e){
161 source = new JsonSource("12e#");
162 number = JsNumber.parseNumber(source);
164 }catch(JsParseException e){
168 source = new JsonSource("-12.34e-056");
169 number = JsNumber.parseNumber(source);
170 assertEquals("-1.234E-55", number.toString());
176 * Test of constructor, of class JsNumber.
179 public void testConstructors() throws Exception{
180 System.out.println("constructor");
185 number = new JsNumber(99L);
186 decimal = number.decimalValue();
187 assertEquals(new BigInteger("99"), decimal.unscaledValue());
188 assertEquals(0, decimal.scale());
190 number = new JsNumber(99.0);
191 decimal = number.decimalValue();
192 assertEquals(new BigInteger("990"), decimal.unscaledValue());
193 assertEquals(1, decimal.scale());
195 number = new JsNumber(new BigInteger("99"));
196 decimal = number.decimalValue();
197 assertEquals(new BigInteger("99"), decimal.unscaledValue());
198 assertEquals(0, decimal.scale());
200 number = new JsNumber("99.9");
201 decimal = number.decimalValue();
202 assertEquals(new BigInteger("999"), decimal.unscaledValue());
203 assertEquals(1, decimal.scale());
205 number = new JsNumber(new BigDecimal("99.9"));
206 decimal = number.decimalValue();
207 assertEquals(new BigInteger("999"), decimal.unscaledValue());
208 assertEquals(1, decimal.scale());
210 number = new JsNumber(1.0 / 10.0);
211 decimal = number.decimalValue();
212 assertEquals(new BigInteger("1"), decimal.unscaledValue());
213 assertEquals(1, decimal.scale());
215 number = new JsNumber(new BigDecimal(1.0 / 10.0));
216 decimal = number.decimalValue();
219 "1000000000000000055511151231257827021181583404541015625"),
220 decimal.unscaledValue());
221 assertEquals(55, decimal.scale());
224 number = new JsNumber((BigDecimal)null);
226 }catch(NullPointerException e){
234 * Test of traverse method, of class JsNumber.
237 public void testTraverse(){
238 System.out.println("traverse");
240 JsNumber number = new JsNumber("0");
243 number.traverse(new ValueVisitor(){
246 public void visitValue(JsValue value)
247 throws JsVisitException{
248 assertEquals(new JsNumber("0"), value);
249 assertTrue(this.ct++ <= 0);
252 public void visitPairName(String name)
253 throws JsVisitException{
254 throw new JsVisitException();
257 public void visitCompositionClose(JsComposition composite)
258 throws JsVisitException{
259 throw new JsVisitException();
262 }catch(JsVisitException e){
270 * Test of decimalValue method, of class JsNumber.
273 public void testDecimalValue(){
274 System.out.println("decimalValue");
276 JsNumber number = new JsNumber("-123.456e+1");
277 BigDecimal decimal = number.decimalValue();
279 assertEquals(new BigDecimal("-123.456e+1"), decimal);
280 assertEquals(2, decimal.scale());
281 assertEquals(new BigInteger("-123456"), decimal.unscaledValue());
287 * Test of intValue method, of class JsNumber.
290 public void testIntValue(){
291 System.out.println("intValue");
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());
302 * Test of longValue method, of class JsNumber.
305 public void testLongValue(){
306 System.out.println("longValue");
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());
317 * Test of floatValue method, of class JsNumber.
320 public void testFloatValue(){
321 System.out.println("floatValue");
323 assertEquals(1.25f, new JsNumber("1.25").floatValue(), 0.0);
324 assertEquals(1.25f, new JsNumber("125E-2").floatValue(), 0.0);
330 * Test of doubleValue method, of class JsNumber.
333 public void testDoubleValue(){
334 System.out.println("doubleValue");
336 assertEquals(1.25, new JsNumber("1.25").doubleValue(), 0.0);
337 assertEquals(1.25, new JsNumber("125E-2").doubleValue(), 0.0);
343 * Test of hashCode method, of class JsNumber.
346 public void testHashCode(){
347 System.out.println("hashCode");
349 assertEquals(new JsNumber("1").hashCode(), new JsNumber("1").hashCode());
350 assertEquals(new JsNumber("1.23").hashCode(), new JsNumber("123e-2").hashCode());
356 * Test of equals method, of class JsNumber.
359 public void testEquals(){
360 System.out.println("equals");
362 JsNumber nullVal = null;
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(""));
369 assertTrue(new JsNumber("1.23").equals(new JsNumber("123e-2")));
370 assertFalse(new JsNumber("1.0").equals(new JsNumber("1.00")));
376 * Test of compareTo method, of class JsNumber.
379 public void testCompareTo(){
380 System.out.println("compareTo");
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);
386 assertTrue(0 > new JsNumber("1").compareTo(new JsNumber("2")));
387 assertTrue(0 < new JsNumber("9").compareTo(new JsNumber("8")));
389 assertTrue(new JsNumber("1.23").compareTo(new JsNumber("123e-2")) == 0);
390 assertTrue(new JsNumber("1.0").compareTo(new JsNumber("1.00")) == 0);
392 JsNumber number = new JsNumber("99");
393 assertTrue(number.compareTo(number) == 0);
399 * Test of toString method, of class JsNumber.
402 public void testToString(){
403 System.out.println("toString");
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());
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());
421 number = new JsNumber("0.0");
422 assertEquals("0.0", number.toString());
424 number = new JsNumber("1.0");
425 assertEquals("1.0", number.toString());
427 number = new JsNumber("1.00");
428 assertEquals("1.00", number.toString());
430 number = new JsNumber("0.1");
431 assertEquals("0.1", number.toString());
433 number = new JsNumber("0.10");
434 assertEquals("0.10", number.toString());
436 number = new JsNumber("0.000001");
437 assertEquals("0.000001", number.toString());
439 number = new JsNumber("0.0000001");
440 assertEquals("1E-7", number.toString());
442 number = new JsNumber("123e0");
443 assertEquals("123", number.toString());
445 number = new JsNumber("123e1");
446 assertEquals("1.23E+3", number.toString());
448 number = new JsNumber("123E1");
449 assertEquals("1.23E+3", number.toString());
451 number = new JsNumber("123e+1");
452 assertEquals("1.23E+3", number.toString());
454 number = new JsNumber("123e-1");
455 assertEquals("12.3", number.toString());
457 number = new JsNumber("123e-8");
458 assertEquals("0.00000123", number.toString());
460 number = new JsNumber("123e-9");
461 assertEquals("1.23E-7", number.toString());
467 * Test of getJsTypes method, of class JsNumber.
470 public void testGetJsTypes() {
471 System.out.println("getJsTypes");
473 JsNumber instance = new JsNumber(0);
475 assertEquals(JsTypes.NUMBER, instance.getJsTypes());
481 * Test of isLatinDigit method, of class JsNumber.
484 public void testIsLatinDigit(){
485 System.out.println("isLatinDigit");
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'));
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'));
509 * Test of scale method, of class JsNumber.
512 public void testScale() throws Exception{
513 System.out.println("scale");
518 source = new JsonSource("10");
519 number = JsNumber.parseNumber(source);
520 assertEquals(0, number.scale());
522 source = new JsonSource("10.0");
523 number = JsNumber.parseNumber(source);
524 assertEquals(1, number.scale());
526 source = new JsonSource("10.0E+3");
527 number = JsNumber.parseNumber(source);
528 assertEquals(-2, number.scale());
530 source = new JsonSource("10E+3");
531 number = JsNumber.parseNumber(source);
532 assertEquals(-3, number.scale());