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;
15 import static org.junit.Assert.*;
20 public class JsNumberTest {
22 public JsNumberTest() {
26 public static void setUpClass() throws Exception{
30 public static void tearDownClass() throws Exception{
38 public void tearDown() {
42 * Test of parseNumber method, of class JsNumber.
45 public void testParseNumber() throws Exception{
46 System.out.println("parseNumber");
51 source = new JsonSource("0");
52 number = JsNumber.parseNumber(source);
53 assertEquals("0", number.toString());
55 source = new JsonSource("-0");
56 number = JsNumber.parseNumber(source);
57 assertEquals("0", number.toString());
59 source = new JsonSource("12");
60 number = JsNumber.parseNumber(source);
61 assertEquals("12", number.toString());
63 source = new JsonSource("-12");
64 number = JsNumber.parseNumber(source);
65 assertEquals("-12", number.toString());
67 source = new JsonSource("+12");
68 number = JsNumber.parseNumber(source);
72 source = new JsonSource("12.");
73 number = JsNumber.parseNumber(source);
75 }catch(JsParseException e){
80 source = new JsonSource("12.@");
81 number = JsNumber.parseNumber(source);
83 }catch(JsParseException e){
87 source = new JsonSource("12.34");
88 number = JsNumber.parseNumber(source);
89 assertEquals("12.34", number.toString());
91 source = new JsonSource("12.0");
92 number = JsNumber.parseNumber(source);
93 assertEquals("12.0", number.toString());
95 source = new JsonSource("12.00");
96 number = JsNumber.parseNumber(source);
97 assertEquals("12.00", number.toString());
99 source = new JsonSource("12.003");
100 number = JsNumber.parseNumber(source);
101 assertEquals("12.003", number.toString());
103 source = new JsonSource("12.0030");
104 number = JsNumber.parseNumber(source);
105 assertEquals("12.0030", number.toString());
108 source = new JsonSource("09");
109 number = JsNumber.parseNumber(source);
111 }catch(JsParseException e){
115 source = new JsonSource("12e34");
116 number = JsNumber.parseNumber(source);
117 assertEquals("1.2E+35", number.toString());
119 source = new JsonSource("12E34");
120 number = JsNumber.parseNumber(source);
121 assertEquals("1.2E+35", number.toString());
123 source = new JsonSource("12e+34");
124 number = JsNumber.parseNumber(source);
125 assertEquals("1.2E+35", number.toString());
127 source = new JsonSource("12e-34");
128 number = JsNumber.parseNumber(source);
129 assertEquals("1.2E-33", number.toString());
131 source = new JsonSource("12e0034");
132 number = JsNumber.parseNumber(source);
133 assertEquals("1.2E+35", number.toString());
136 source = new JsonSource("12e");
137 number = JsNumber.parseNumber(source);
139 }catch(JsParseException e){
144 source = new JsonSource("12e+");
145 number = JsNumber.parseNumber(source);
147 }catch(JsParseException e){
152 source = new JsonSource("12e-");
153 number = JsNumber.parseNumber(source);
155 }catch(JsParseException e){
160 source = new JsonSource("12e#");
161 number = JsNumber.parseNumber(source);
163 }catch(JsParseException e){
167 source = new JsonSource("-12.34e-056");
168 number = JsNumber.parseNumber(source);
169 assertEquals("-1.234E-55", number.toString());
175 * Test of constructor, of class JsNumber.
178 public void testConstructors() throws Exception{
179 System.out.println("constructor");
184 number = new JsNumber(99L);
185 decimal = number.decimalValue();
186 assertEquals(new BigInteger("99"), decimal.unscaledValue());
187 assertEquals(0, decimal.scale());
189 number = new JsNumber(99.0);
190 decimal = number.decimalValue();
191 assertEquals(new BigInteger("990"), decimal.unscaledValue());
192 assertEquals(1, decimal.scale());
194 number = new JsNumber(new BigInteger("99"));
195 decimal = number.decimalValue();
196 assertEquals(new BigInteger("99"), decimal.unscaledValue());
197 assertEquals(0, decimal.scale());
199 number = new JsNumber("99.9");
200 decimal = number.decimalValue();
201 assertEquals(new BigInteger("999"), decimal.unscaledValue());
202 assertEquals(1, decimal.scale());
204 number = new JsNumber(new BigDecimal("99.9"));
205 decimal = number.decimalValue();
206 assertEquals(new BigInteger("999"), decimal.unscaledValue());
207 assertEquals(1, decimal.scale());
209 number = new JsNumber(1.0 / 10.0);
210 decimal = number.decimalValue();
211 assertEquals(new BigInteger("1"), decimal.unscaledValue());
212 assertEquals(1, decimal.scale());
214 number = new JsNumber(new BigDecimal(1.0 / 10.0));
215 decimal = number.decimalValue();
218 "1000000000000000055511151231257827021181583404541015625"),
219 decimal.unscaledValue());
220 assertEquals(55, decimal.scale());
223 number = new JsNumber((BigDecimal)null);
225 }catch(NullPointerException e){
233 * Test of traverse method, of class JsNumber.
236 public void testTraverse(){
237 System.out.println("traverse");
239 JsNumber number = new JsNumber("0");
242 number.traverse(new ValueVisitor(){
245 public void visitValue(JsValue value)
246 throws JsVisitException{
247 assertEquals(new JsNumber("0"), value);
248 assertTrue(this.ct++ <= 0);
251 public void visitPairName(String name)
252 throws JsVisitException{
253 throw new JsVisitException();
256 public void visitCompositionClose(JsComposition composite)
257 throws JsVisitException{
258 throw new JsVisitException();
261 }catch(JsVisitException e){
269 * Test of decimalValue method, of class JsNumber.
272 public void testDecimalValue(){
273 System.out.println("decimalValue");
275 JsNumber number = new JsNumber("-123.456e+1");
276 BigDecimal decimal = number.decimalValue();
278 assertEquals(new BigDecimal("-123.456e+1"), decimal);
279 assertEquals(2, decimal.scale());
280 assertEquals(new BigInteger("-123456"), decimal.unscaledValue());
286 * Test of intValue method, of class JsNumber.
289 public void testIntValue(){
290 System.out.println("intValue");
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());
301 * Test of longValue method, of class JsNumber.
304 public void testLongValue(){
305 System.out.println("longValue");
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());
316 * Test of floatValue method, of class JsNumber.
319 public void testFloatValue(){
320 System.out.println("floatValue");
322 assertEquals(1.25f, new JsNumber("1.25").floatValue(), 0.0);
323 assertEquals(1.25f, new JsNumber("125E-2").floatValue(), 0.0);
329 * Test of doubleValue method, of class JsNumber.
332 public void testDoubleValue(){
333 System.out.println("doubleValue");
335 assertEquals(1.25, new JsNumber("1.25").doubleValue(), 0.0);
336 assertEquals(1.25, new JsNumber("125E-2").doubleValue(), 0.0);
342 * Test of hashCode method, of class JsNumber.
345 public void testHashCode(){
346 System.out.println("hashCode");
348 assertEquals(new JsNumber("1").hashCode(), new JsNumber("1").hashCode());
349 assertEquals(new JsNumber("1.23").hashCode(), new JsNumber("123e-2").hashCode());
355 * Test of equals method, of class JsNumber.
358 public void testEquals(){
359 System.out.println("equals");
361 JsNumber nullVal = null;
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(""));
368 assertTrue(new JsNumber("1.23").equals(new JsNumber("123e-2")));
369 assertFalse(new JsNumber("1.0").equals(new JsNumber("1.00")));
375 * Test of compareTo method, of class JsNumber.
378 public void testCompareTo(){
379 System.out.println("compareTo");
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);
385 assertTrue(0 > new JsNumber("1").compareTo(new JsNumber("2")));
386 assertTrue(0 < new JsNumber("9").compareTo(new JsNumber("8")));
388 assertTrue(new JsNumber("1.23").compareTo(new JsNumber("123e-2")) == 0);
389 assertTrue(new JsNumber("1.0").compareTo(new JsNumber("1.00")) == 0);
391 JsNumber number = new JsNumber("99");
392 assertTrue(number.compareTo(number) == 0);
398 * Test of toString method, of class JsNumber.
401 public void testToString(){
402 System.out.println("toString");
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());
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());
420 number = new JsNumber("0.0");
421 assertEquals("0.0", number.toString());
423 number = new JsNumber("1.0");
424 assertEquals("1.0", number.toString());
426 number = new JsNumber("1.00");
427 assertEquals("1.00", number.toString());
429 number = new JsNumber("0.1");
430 assertEquals("0.1", number.toString());
432 number = new JsNumber("0.10");
433 assertEquals("0.10", number.toString());
435 number = new JsNumber("0.000001");
436 assertEquals("0.000001", number.toString());
438 number = new JsNumber("0.0000001");
439 assertEquals("1E-7", number.toString());
441 number = new JsNumber("123e0");
442 assertEquals("123", number.toString());
444 number = new JsNumber("123e1");
445 assertEquals("1.23E+3", number.toString());
447 number = new JsNumber("123E1");
448 assertEquals("1.23E+3", number.toString());
450 number = new JsNumber("123e+1");
451 assertEquals("1.23E+3", number.toString());
453 number = new JsNumber("123e-1");
454 assertEquals("12.3", number.toString());
456 number = new JsNumber("123e-8");
457 assertEquals("0.00000123", number.toString());
459 number = new JsNumber("123e-9");
460 assertEquals("1.23E-7", number.toString());
466 * Test of getJsTypes method, of class JsNumber.
469 public void testGetJsTypes() {
470 System.out.println("getJsTypes");
472 JsNumber instance = new JsNumber(0);
474 assertEquals(JsTypes.NUMBER, instance.getJsTypes());
480 * Test of isLatinDigit method, of class JsNumber.
483 public void testIsLatinDigit(){
484 System.out.println("isLatinDigit");
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'));
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'));
508 * Test of scale method, of class JsNumber.
511 public void testScale() throws Exception{
512 System.out.println("scale");
517 source = new JsonSource("10");
518 number = JsNumber.parseNumber(source);
519 assertEquals(0, number.scale());
521 source = new JsonSource("10.0");
522 number = JsNumber.parseNumber(source);
523 assertEquals(1, number.scale());
525 source = new JsonSource("10.0E+3");
526 number = JsNumber.parseNumber(source);
527 assertEquals(-2, number.scale());
529 source = new JsonSource("10E+3");
530 number = JsNumber.parseNumber(source);
531 assertEquals(-3, number.scale());