KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > commons > lang > builder > HashCodeBuilderTest


1 /*
2  * Copyright 2002-2005 The Apache Software Foundation.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */

16 package org.apache.commons.lang.builder;
17
18 import junit.framework.Test;
19 import junit.framework.TestCase;
20 import junit.framework.TestSuite;
21 import junit.textui.TestRunner;
22
23 /**
24  * Unit tests {@link org.apache.commons.lang.builder.HashCodeBuilder}.
25  *
26  * @author <a HREF="mailto:scolebourne@joda.org">Stephen Colebourne</a>
27  * @version $Id: HashCodeBuilderTest.java 161244 2005-04-14 06:16:36Z ggregory $
28  */

29 public class HashCodeBuilderTest extends TestCase {
30
31     public HashCodeBuilderTest(String JavaDoc name) {
32         super(name);
33     }
34
35     public static void main(String JavaDoc[] args) {
36         TestRunner.run(suite());
37     }
38
39     public static Test suite() {
40         TestSuite suite = new TestSuite(HashCodeBuilderTest.class);
41         suite.setName("HashCodeBuilder Tests");
42         return suite;
43     }
44
45     protected void setUp() throws Exception JavaDoc {
46         super.setUp();
47     }
48
49     protected void tearDown() throws Exception JavaDoc {
50         super.tearDown();
51     }
52
53     //-----------------------------------------------------------------------
54

55     public void testConstructorEx1() {
56         try {
57             new HashCodeBuilder(0, 0);
58             
59         } catch (IllegalArgumentException JavaDoc ex) {
60             return;
61         }
62         fail();
63     }
64
65     public void testConstructorEx2() {
66         try {
67             new HashCodeBuilder(2, 2);
68             
69         } catch (IllegalArgumentException JavaDoc ex) {
70             return;
71         }
72         fail();
73     }
74
75     static class TestObject {
76         private int a;
77         public TestObject(int a) {
78             this.a = a;
79         }
80         public boolean equals(Object JavaDoc o) {
81             if (o == this) {
82                 return true;
83             }
84             if (!(o instanceof TestObject)) {
85                 return false;
86             }
87             TestObject rhs = (TestObject) o;
88             return (a == rhs.a);
89         }
90
91         public void setA(int a) {
92             this.a = a;
93         }
94
95         public int getA() {
96             return a;
97         }
98     }
99
100     static class TestSubObject extends TestObject {
101         private int b;
102         transient private int t;
103         public TestSubObject() {
104             super(0);
105         }
106         public TestSubObject(int a, int b, int t) {
107             super(a);
108             this.b = b;
109             this.t = t;
110         }
111         public boolean equals(Object JavaDoc o) {
112             if (o == this) {
113                 return true;
114             }
115             if (!(o instanceof TestSubObject)) {
116                 return false;
117             }
118             TestSubObject rhs = (TestSubObject) o;
119             return super.equals(o) && (b == rhs.b);
120         }
121     }
122
123     public void testReflectionHashCode() {
124         assertEquals(17 * 37, HashCodeBuilder.reflectionHashCode(new TestObject(0)));
125         assertEquals(17 * 37 + 123456, HashCodeBuilder.reflectionHashCode(new TestObject(123456)));
126     }
127
128     public void testReflectionHierarchyHashCode() {
129         assertEquals(17 * 37 * 37, HashCodeBuilder.reflectionHashCode(new TestSubObject(0, 0, 0)));
130         assertEquals(17 * 37 * 37 * 37, HashCodeBuilder.reflectionHashCode(new TestSubObject(0, 0, 0), true));
131         assertEquals((17 * 37 + 7890) * 37 + 123456, HashCodeBuilder.reflectionHashCode(new TestSubObject(123456, 7890, 0)));
132         assertEquals(((17 * 37 + 7890) * 37 + 0) * 37 + 123456, HashCodeBuilder.reflectionHashCode(new TestSubObject(123456, 7890, 0), true));
133     }
134
135     public void testReflectionHierarchyHashCodeEx1() {
136         try {
137             HashCodeBuilder.reflectionHashCode(0, 0, new TestSubObject(0, 0, 0), true);
138         } catch (IllegalArgumentException JavaDoc ex) {
139             return;
140         }
141         fail();
142     }
143
144     public void testReflectionHierarchyHashCodeEx2() {
145         try {
146             HashCodeBuilder.reflectionHashCode(2, 2, new TestSubObject(0, 0, 0), true);
147         } catch (IllegalArgumentException JavaDoc ex) {
148             return;
149         }
150         fail();
151     }
152
153     public void testReflectionHashCodeEx1() {
154         try {
155             HashCodeBuilder.reflectionHashCode(0, 0, new TestObject(0), true);
156         } catch (IllegalArgumentException JavaDoc ex) {
157             return;
158         }
159         fail();
160     }
161
162     public void testReflectionHashCodeEx2() {
163         try {
164             HashCodeBuilder.reflectionHashCode(2, 2, new TestObject(0), true);
165         } catch (IllegalArgumentException JavaDoc ex) {
166             return;
167         }
168         fail();
169     }
170
171     public void testReflectionHashCodeEx3() {
172         try {
173             HashCodeBuilder.reflectionHashCode(13, 19, null, true);
174         } catch (IllegalArgumentException JavaDoc ex) {
175             return;
176         }
177         fail();
178     }
179
180     public void testSuper() {
181         Object JavaDoc obj = new Object JavaDoc();
182         assertEquals(17 * 37 + (19 * 41 + obj.hashCode()), new HashCodeBuilder(17, 37).appendSuper(
183             new HashCodeBuilder(19, 41).append(obj).toHashCode()
184         ).toHashCode());
185     }
186
187     public void testObject() {
188         Object JavaDoc obj = null;
189         assertEquals(17 * 37, new HashCodeBuilder(17, 37).append(obj).toHashCode());
190         obj = new Object JavaDoc();
191         assertEquals(17 * 37 + obj.hashCode(), new HashCodeBuilder(17, 37).append(obj).toHashCode());
192     }
193
194     public void testLong() {
195         assertEquals(17 * 37, new HashCodeBuilder(17, 37).append((long) 0L).toHashCode());
196         assertEquals(17 * 37 + (int) (123456789L ^ (123456789L >> 32)), new HashCodeBuilder(17, 37).append((long) 123456789L).toHashCode());
197     }
198
199     public void testInt() {
200         assertEquals(17 * 37, new HashCodeBuilder(17, 37).append((int) 0).toHashCode());
201         assertEquals(17 * 37 + 123456, new HashCodeBuilder(17, 37).append((int) 123456).toHashCode());
202     }
203
204     public void testShort() {
205         assertEquals(17 * 37, new HashCodeBuilder(17, 37).append((short) 0).toHashCode());
206         assertEquals(17 * 37 + 12345, new HashCodeBuilder(17, 37).append((short) 12345).toHashCode());
207     }
208
209     public void testChar() {
210         assertEquals(17 * 37, new HashCodeBuilder(17, 37).append((char) 0).toHashCode());
211         assertEquals(17 * 37 + 1234, new HashCodeBuilder(17, 37).append((char) 1234).toHashCode());
212     }
213
214     public void testByte() {
215         assertEquals(17 * 37, new HashCodeBuilder(17, 37).append((byte) 0).toHashCode());
216         assertEquals(17 * 37 + 123, new HashCodeBuilder(17, 37).append((byte) 123).toHashCode());
217     }
218
219     public void testDouble() {
220         assertEquals(17 * 37, new HashCodeBuilder(17, 37).append((double) 0d).toHashCode());
221         double d = 1234567.89;
222         long l = Double.doubleToLongBits(d);
223         assertEquals(17 * 37 + (int) (l ^ (l >> 32)), new HashCodeBuilder(17, 37).append(d).toHashCode());
224     }
225
226     public void testFloat() {
227         assertEquals(17 * 37, new HashCodeBuilder(17, 37).append((float) 0f).toHashCode());
228         float f = 1234.89f;
229         int i = Float.floatToIntBits(f);
230         assertEquals(17 * 37 + i, new HashCodeBuilder(17, 37).append(f).toHashCode());
231     }
232
233     public void testBoolean() {
234         assertEquals(17 * 37 + 0, new HashCodeBuilder(17, 37).append(true).toHashCode());
235         assertEquals(17 * 37 + 1, new HashCodeBuilder(17, 37).append(false).toHashCode());
236     }
237
238     public void testObjectArray() {
239         assertEquals(17 * 37, new HashCodeBuilder(17, 37).append((Object JavaDoc[]) null).toHashCode());
240         Object JavaDoc[] obj = new Object JavaDoc[2];
241         assertEquals((17 * 37) * 37 , new HashCodeBuilder(17, 37).append(obj).toHashCode());
242         obj[0] = new Object JavaDoc();
243         assertEquals((17 * 37 + obj[0].hashCode()) * 37, new HashCodeBuilder(17, 37).append(obj).toHashCode());
244         obj[1] = new Object JavaDoc();
245         assertEquals( (17 * 37 + obj[0].hashCode()) * 37 + obj[1].hashCode(), new HashCodeBuilder(17, 37).append(obj).toHashCode());
246     }
247
248     public void testObjectArrayAsObject() {
249         Object JavaDoc[] obj = new Object JavaDoc[2];
250         assertEquals((17 * 37) * 37 , new HashCodeBuilder(17, 37).append((Object JavaDoc) obj).toHashCode());
251         obj[0] = new Object JavaDoc();
252         assertEquals((17 * 37 + obj[0].hashCode()) * 37, new HashCodeBuilder(17, 37).append((Object JavaDoc) obj).toHashCode());
253         obj[1] = new Object JavaDoc();
254         assertEquals( (17 * 37 + obj[0].hashCode()) * 37 + obj[1].hashCode(), new HashCodeBuilder(17, 37).append((Object JavaDoc) obj).toHashCode());
255     }
256
257     public void testLongArray() {
258         assertEquals(17 * 37, new HashCodeBuilder(17, 37).append((long[]) null).toHashCode());
259         long[] obj = new long[2];
260         assertEquals((17 * 37) * 37 , new HashCodeBuilder(17, 37).append(obj).toHashCode());
261         obj[0] = 5L;
262         int h1 = (int) (5L ^ (5L >> 32));
263         assertEquals((17 * 37 + h1) * 37, new HashCodeBuilder(17, 37).append(obj).toHashCode());
264         obj[1] = 6L;
265         int h2 = (int) (6L ^ (6L >> 32));
266         assertEquals( (17 * 37 + h1) * 37 + h2, new HashCodeBuilder(17, 37).append(obj).toHashCode());
267     }
268
269     public void testLongArrayAsObject() {
270         long[] obj = new long[2];
271         assertEquals((17 * 37) * 37 , new HashCodeBuilder(17, 37).append((Object JavaDoc) obj).toHashCode());
272         obj[0] = 5L;
273         int h1 = (int) (5L ^ (5L >> 32));
274         assertEquals((17 * 37 + h1) * 37, new HashCodeBuilder(17, 37).append((Object JavaDoc) obj).toHashCode());
275         obj[1] = 6L;
276         int h2 = (int) (6L ^ (6L >> 32));
277         assertEquals( (17 * 37 + h1) * 37 + h2, new HashCodeBuilder(17, 37).append((Object JavaDoc) obj).toHashCode());
278     }
279
280     public void testIntArray() {
281         assertEquals(17 * 37, new HashCodeBuilder(17, 37).append((int[]) null).toHashCode());
282         int[] obj = new int[2];
283         assertEquals((17 * 37) * 37 , new HashCodeBuilder(17, 37).append(obj).toHashCode());
284         obj[0] = 5;
285         assertEquals((17 * 37 + 5) * 37, new HashCodeBuilder(17, 37).append(obj).toHashCode());
286         obj[1] = 6;
287         assertEquals( (17 * 37 + 5) * 37 + 6, new HashCodeBuilder(17, 37).append(obj).toHashCode());
288     }
289
290     public void testIntArrayAsObject() {
291         int[] obj = new int[2];
292         assertEquals((17 * 37) * 37 , new HashCodeBuilder(17, 37).append((Object JavaDoc) obj).toHashCode());
293         obj[0] = 5;
294         assertEquals((17 * 37 + 5) * 37, new HashCodeBuilder(17, 37).append((Object JavaDoc) obj).toHashCode());
295         obj[1] = 6;
296         assertEquals( (17 * 37 + 5) * 37 + 6, new HashCodeBuilder(17, 37).append((Object JavaDoc) obj).toHashCode());
297     }
298
299     public void testShortArray() {
300         assertEquals(17 * 37, new HashCodeBuilder(17, 37).append((short[]) null).toHashCode());
301         short[] obj = new short[2];
302         assertEquals((17 * 37) * 37 , new HashCodeBuilder(17, 37).append(obj).toHashCode());
303         obj[0] = (short) 5;
304         assertEquals((17 * 37 + 5) * 37, new HashCodeBuilder(17, 37).append(obj).toHashCode());
305         obj[1] = (short) 6;
306         assertEquals( (17 * 37 + 5) * 37 + 6, new HashCodeBuilder(17, 37).append(obj).toHashCode());
307     }
308
309     public void testShortArrayAsObject() {
310         short[] obj = new short[2];
311         assertEquals((17 * 37) * 37 , new HashCodeBuilder(17, 37).append((Object JavaDoc) obj).toHashCode());
312         obj[0] = (short) 5;
313         assertEquals((17 * 37 + 5) * 37, new HashCodeBuilder(17, 37).append((Object JavaDoc) obj).toHashCode());
314         obj[1] = (short) 6;
315         assertEquals( (17 * 37 + 5) * 37 + 6, new HashCodeBuilder(17, 37).append((Object JavaDoc) obj).toHashCode());
316     }
317
318     public void testCharArray() {
319         assertEquals(17 * 37, new HashCodeBuilder(17, 37).append((char[]) null).toHashCode());
320         char[] obj = new char[2];
321         assertEquals((17 * 37) * 37 , new HashCodeBuilder(17, 37).append(obj).toHashCode());
322         obj[0] = (char) 5;
323         assertEquals((17 * 37 + 5) * 37, new HashCodeBuilder(17, 37).append(obj).toHashCode());
324         obj[1] = (char) 6;
325         assertEquals( (17 * 37 + 5) * 37 + 6, new HashCodeBuilder(17, 37).append(obj).toHashCode());
326     }
327
328     public void testCharArrayAsObject() {
329         char[] obj = new char[2];
330         assertEquals((17 * 37) * 37 , new HashCodeBuilder(17, 37).append((Object JavaDoc) obj).toHashCode());
331         obj[0] = (char) 5;
332         assertEquals((17 * 37 + 5) * 37, new HashCodeBuilder(17, 37).append((Object JavaDoc) obj).toHashCode());
333         obj[1] = (char) 6;
334         assertEquals( (17 * 37 + 5) * 37 + 6, new HashCodeBuilder(17, 37).append((Object JavaDoc) obj).toHashCode());
335     }
336
337     public void testByteArray() {
338         assertEquals(17 * 37, new HashCodeBuilder(17, 37).append((byte[]) null).toHashCode());
339         byte[] obj = new byte[2];
340         assertEquals((17 * 37) * 37 , new HashCodeBuilder(17, 37).append(obj).toHashCode());
341         obj[0] = (byte) 5;
342         assertEquals((17 * 37 + 5) * 37, new HashCodeBuilder(17, 37).append(obj).toHashCode());
343         obj[1] = (byte) 6;
344         assertEquals( (17 * 37 + 5) * 37 + 6, new HashCodeBuilder(17, 37).append(obj).toHashCode());
345     }
346
347     public void testByteArrayAsObject() {
348         byte[] obj = new byte[2];
349         assertEquals((17 * 37) * 37 , new HashCodeBuilder(17, 37).append((Object JavaDoc) obj).toHashCode());
350         obj[0] = (byte) 5;
351         assertEquals((17 * 37 + 5) * 37, new HashCodeBuilder(17, 37).append((Object JavaDoc) obj).toHashCode());
352         obj[1] = (byte) 6;
353         assertEquals( (17 * 37 + 5) * 37 + 6, new HashCodeBuilder(17, 37).append((Object JavaDoc) obj).toHashCode());
354     }
355
356     public void testDoubleArray() {
357         assertEquals(17 * 37, new HashCodeBuilder(17, 37).append((double[]) null).toHashCode());
358         double[] obj = new double[2];
359         assertEquals((17 * 37) * 37 , new HashCodeBuilder(17, 37).append(obj).toHashCode());
360         obj[0] = 5.4d;
361         long l1 = Double.doubleToLongBits(5.4d);
362         int h1 = (int) (l1 ^ (l1 >> 32));
363         assertEquals((17 * 37 + h1) * 37, new HashCodeBuilder(17, 37).append(obj).toHashCode());
364         obj[1] = 6.3d;
365         long l2 = Double.doubleToLongBits(6.3d);
366         int h2 = (int) (l2 ^ (l2 >> 32));
367         assertEquals( (17 * 37 + h1) * 37 + h2, new HashCodeBuilder(17, 37).append(obj).toHashCode());
368     }
369
370     public void testDoubleArrayAsObject() {
371         double[] obj = new double[2];
372         assertEquals((17 * 37) * 37 , new HashCodeBuilder(17, 37).append((Object JavaDoc) obj).toHashCode());
373         obj[0] = 5.4d;
374         long l1 = Double.doubleToLongBits(5.4d);
375         int h1 = (int) (l1 ^ (l1 >> 32));
376         assertEquals((17 * 37 + h1) * 37, new HashCodeBuilder(17, 37).append((Object JavaDoc) obj).toHashCode());
377         obj[1] = 6.3d;
378         long l2 = Double.doubleToLongBits(6.3d);
379         int h2 = (int) (l2 ^ (l2 >> 32));
380         assertEquals( (17 * 37 + h1) * 37 + h2, new HashCodeBuilder(17, 37).append((Object JavaDoc) obj).toHashCode());
381     }
382
383     public void testFloatArray() {
384         assertEquals(17 * 37, new HashCodeBuilder(17, 37).append((float[]) null).toHashCode());
385         float[] obj = new float[2];
386         assertEquals((17 * 37) * 37 , new HashCodeBuilder(17, 37).append(obj).toHashCode());
387         obj[0] = 5.4f;
388         int h1 = Float.floatToIntBits(5.4f);
389         assertEquals((17 * 37 + h1) * 37, new HashCodeBuilder(17, 37).append(obj).toHashCode());
390         obj[1] = 6.3f;
391         int h2 = Float.floatToIntBits(6.3f);
392         assertEquals( (17 * 37 + h1) * 37 + h2, new HashCodeBuilder(17, 37).append(obj).toHashCode());
393     }
394
395     public void testFloatArrayAsObject() {
396         float[] obj = new float[2];
397         assertEquals((17 * 37) * 37 , new HashCodeBuilder(17, 37).append((Object JavaDoc) obj).toHashCode());
398         obj[0] = 5.4f;
399         int h1 = Float.floatToIntBits(5.4f);
400         assertEquals((17 * 37 + h1) * 37, new HashCodeBuilder(17, 37).append((Object JavaDoc) obj).toHashCode());
401         obj[1] = 6.3f;
402         int h2 = Float.floatToIntBits(6.3f);
403         assertEquals( (17 * 37 + h1) * 37 + h2, new HashCodeBuilder(17, 37).append((Object JavaDoc) obj).toHashCode());
404     }
405
406     public void testBooleanArray() {
407         assertEquals(17 * 37, new HashCodeBuilder(17, 37).append((boolean[]) null).toHashCode());
408         boolean[] obj = new boolean[2];
409         assertEquals((17 * 37 + 1) * 37 + 1 , new HashCodeBuilder(17, 37).append(obj).toHashCode());
410         obj[0] = true;
411         assertEquals((17 * 37 + 0) * 37 + 1, new HashCodeBuilder(17, 37).append(obj).toHashCode());
412         obj[1] = false;
413         assertEquals( (17 * 37 + 0) * 37 + 1, new HashCodeBuilder(17, 37).append(obj).toHashCode());
414     }
415
416     public void testBooleanArrayAsObject() {
417         boolean[] obj = new boolean[2];
418         assertEquals((17 * 37 + 1) * 37 + 1 , new HashCodeBuilder(17, 37).append((Object JavaDoc) obj).toHashCode());
419         obj[0] = true;
420         assertEquals((17 * 37 + 0) * 37 + 1, new HashCodeBuilder(17, 37).append((Object JavaDoc) obj).toHashCode());
421         obj[1] = false;
422         assertEquals( (17 * 37 + 0) * 37 + 1, new HashCodeBuilder(17, 37).append((Object JavaDoc) obj).toHashCode());
423     }
424
425     public void testBooleanMultiArray() {
426         boolean[][] obj = new boolean[2][];
427         assertEquals((17 * 37) * 37, new HashCodeBuilder(17, 37).append(obj).toHashCode());
428         obj[0] = new boolean[0];
429         assertEquals(17 * 37, new HashCodeBuilder(17, 37).append(obj).toHashCode());
430         obj[0] = new boolean[1];
431         assertEquals((17 * 37 + 1) * 37, new HashCodeBuilder(17, 37).append(obj).toHashCode());
432         obj[0] = new boolean[2];
433         assertEquals(((17 * 37 + 1) * 37 + 1) * 37, new HashCodeBuilder(17, 37).append(obj).toHashCode());
434         obj[0][0] = true;
435         assertEquals(((17 * 37 + 0) * 37 + 1) * 37, new HashCodeBuilder(17, 37).append(obj).toHashCode());
436         obj[1] = new boolean[1];
437         assertEquals( (((17 * 37 + 0) * 37 + 1) * 37 + 1), new HashCodeBuilder(17, 37).append(obj).toHashCode());
438     }
439
440 }
441
Popular Tags