1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    * 
9    *      http://www.apache.org/licenses/LICENSE-2.0
10   * 
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.apache.commons.lang.mutable;
18  
19  import junit.framework.Test;
20  import junit.framework.TestCase;
21  import junit.framework.TestSuite;
22  import junit.textui.TestRunner;
23  
24  /**
25   * JUnit tests.
26   * 
27   * @version $Id: MutableDoubleTest.java 618693 2008-02-05 16:33:29Z sebb $
28   * @see MutableDouble
29   */
30  public class MutableDoubleTest extends TestCase {
31  
32      public MutableDoubleTest(String testName) {
33          super(testName);
34      }
35  
36      public static void main(String[] args) {
37          TestRunner.run(suite());
38      }
39  
40      public static Test suite() {
41          return new TestSuite(MutableDoubleTest.class);
42      }
43  
44      // ----------------------------------------------------------------
45      public void testConstructors() {
46          assertEquals(0d, new MutableDouble().doubleValue(), 0.0001d);
47          
48          assertEquals(1d, new MutableDouble(1d).doubleValue(), 0.0001d);
49          
50          assertEquals(2d, new MutableDouble(new Double(2d)).doubleValue(), 0.0001d);
51          assertEquals(3d, new MutableDouble(new MutableDouble(3d)).doubleValue(), 0.0001d);
52          try {
53              new MutableDouble(null);
54              fail();
55          } catch (NullPointerException ex) {}
56      }
57  
58      public void testGetSet() {
59          final MutableDouble mutNum = new MutableDouble(0d);
60          assertEquals(0d, new MutableDouble().doubleValue(), 0.0001d);
61          assertEquals(new Double(0), new MutableDouble().getValue());
62          
63          mutNum.setValue(1);
64          assertEquals(1d, mutNum.doubleValue(), 0.0001d);
65          assertEquals(new Double(1d), mutNum.getValue());
66          
67          mutNum.setValue(new Double(2d));
68          assertEquals(2d, mutNum.doubleValue(), 0.0001d);
69          assertEquals(new Double(2d), mutNum.getValue());
70          
71          mutNum.setValue(new MutableDouble(3d));
72          assertEquals(3d, mutNum.doubleValue(), 0.0001d);
73          assertEquals(new Double(3d), mutNum.getValue());
74          try {
75              mutNum.setValue(null);
76              fail();
77          } catch (NullPointerException ex) {}
78          try {
79              mutNum.setValue("0");
80              fail();
81          } catch (ClassCastException ex) {}
82      }
83  
84      public void testNanInfinite() {
85          MutableDouble mutNum = new MutableDouble(Double.NaN);
86          assertEquals(true, mutNum.isNaN());
87          
88          mutNum = new MutableDouble(Double.POSITIVE_INFINITY);
89          assertEquals(true, mutNum.isInfinite());
90          
91          mutNum = new MutableDouble(Double.NEGATIVE_INFINITY);
92          assertEquals(true, mutNum.isInfinite());
93      }
94  
95      public void testEquals() {
96          final MutableDouble mutNumA = new MutableDouble(0d);
97          final MutableDouble mutNumB = new MutableDouble(0d);
98          final MutableDouble mutNumC = new MutableDouble(1d);
99  
100         assertEquals(true, mutNumA.equals(mutNumA));
101         assertEquals(true, mutNumA.equals(mutNumB));
102         assertEquals(true, mutNumB.equals(mutNumA));
103         assertEquals(true, mutNumB.equals(mutNumB));
104         assertEquals(false, mutNumA.equals(mutNumC));
105         assertEquals(false, mutNumB.equals(mutNumC));
106         assertEquals(true, mutNumC.equals(mutNumC));
107         assertEquals(false, mutNumA.equals(null));
108         assertEquals(false, mutNumA.equals(new Double(0d)));
109         assertEquals(false, mutNumA.equals("0"));
110     }
111 
112     public void testHashCode() {
113         final MutableDouble mutNumA = new MutableDouble(0d);
114         final MutableDouble mutNumB = new MutableDouble(0d);
115         final MutableDouble mutNumC = new MutableDouble(1d);
116 
117         assertEquals(true, mutNumA.hashCode() == mutNumA.hashCode());
118         assertEquals(true, mutNumA.hashCode() == mutNumB.hashCode());
119         assertEquals(false, mutNumA.hashCode() == mutNumC.hashCode());
120         assertEquals(true, mutNumA.hashCode() == new Double(0d).hashCode());
121     }
122 
123     public void testCompareTo() {
124         final MutableDouble mutNum = new MutableDouble(0d);
125 
126         assertEquals(0, mutNum.compareTo(new MutableDouble(0d)));
127         assertEquals(+1, mutNum.compareTo(new MutableDouble(-1d)));
128         assertEquals(-1, mutNum.compareTo(new MutableDouble(1d)));
129         try {
130             mutNum.compareTo(null);
131             fail();
132         } catch (NullPointerException ex) {}
133         try {
134             mutNum.compareTo(new Double(0d));
135             fail();
136         } catch (ClassCastException ex) {}
137         try {
138             mutNum.compareTo("0");
139             fail();
140         } catch (ClassCastException ex) {}
141     }
142 
143     public void testPrimitiveValues() {
144         MutableDouble mutNum = new MutableDouble(1.7);
145         
146         assertEquals( 1.7F, mutNum.floatValue(), 0 );
147         assertEquals( 1.7, mutNum.doubleValue(), 0 );
148         assertEquals( (byte) 1, mutNum.byteValue() );
149         assertEquals( (short) 1, mutNum.shortValue() );
150         assertEquals( 1, mutNum.intValue() );
151         assertEquals( 1L, mutNum.longValue() );
152     }
153 
154     public void testToDouble() {
155         assertEquals(new Double(0d), new MutableDouble(0d).toDouble());
156         assertEquals(new Double(12.3d), new MutableDouble(12.3d).toDouble());
157     }
158 
159     public void testIncrement() {
160         MutableDouble mutNum = new MutableDouble(1);
161         mutNum.increment();
162         
163         assertEquals(2, mutNum.intValue());
164         assertEquals(2L, mutNum.longValue());
165     }
166 
167     public void testDecrement() {
168         MutableDouble mutNum = new MutableDouble(1);
169         mutNum.decrement();
170         
171         assertEquals(0, mutNum.intValue());
172         assertEquals(0L, mutNum.longValue());
173     }
174 
175     public void testAddValuePrimitive() {
176         MutableDouble mutNum = new MutableDouble(1);
177         mutNum.add(1.1d);
178         
179         assertEquals(2.1d, mutNum.doubleValue(), 0.01d);
180     }
181 
182     public void testAddValueObject() {
183         MutableDouble mutNum = new MutableDouble(1);
184         mutNum.add(new Double(1.1d));
185         
186         assertEquals(2.1d, mutNum.doubleValue(), 0.01d);
187     }
188 
189     public void testSubtractValuePrimitive() {
190         MutableDouble mutNum = new MutableDouble(1);
191         mutNum.subtract(0.9d);
192         
193         assertEquals(0.1d, mutNum.doubleValue(), 0.01d);
194     }
195 
196     public void testSubtractValueObject() {
197         MutableDouble mutNum = new MutableDouble(1);
198         mutNum.subtract(new Double(0.9d));
199         
200         assertEquals(0.1d, mutNum.doubleValue(), 0.01d);
201     }
202 
203     public void testToString() {
204         assertEquals("0.0", new MutableDouble(0d).toString());
205         assertEquals("10.0", new MutableDouble(10d).toString());
206         assertEquals("-123.0", new MutableDouble(-123d).toString());
207     }
208 
209 }