* configure.ac: New switch for disabling -O2 (--disable-optimizations).
[cacao.git] / tests / gc / Hashcode.java
1 public class Hashcode {
2         public static final boolean doPrintHashes = false;
3         public static final int N = 20;
4         public static final int N2 = N/2;
5
6         public static void compareHashes(int[] a, int[] b) {
7                 boolean diff = false;
8
9                 for (int i=0; i<a.length; i++)
10                         if (a[i] != b[i]) {
11                                 System.out.println("\tHash #" + i + " changed!");
12                                 diff = true;
13                         }
14
15                 if (diff)
16                         System.out.println("\tHashes are DIFFERENT!");
17                 else
18                         System.out.println("\tHashes are ok.");
19         }
20
21         public static void printHashes(int[] a) {
22                 for (int i=0; i<a.length; i++)
23                         System.out.println("\t#" + i + ": " + a[i]);
24         }
25
26         public static int[] getHashes(Object[] a) {
27                 int[] result = new int[a.length];
28
29                 for (int i=0; i<a.length; i++)
30                         result[i] = System.identityHashCode(a[i]);
31
32                 return result;
33         }
34
35         public static void main(String[] s) {
36                 Object[] a = new Object[N];
37                 int[] hashes1, hashes2;
38
39                 System.out.println("Creating objects ...");
40                 for (int i=0; i<N2; i++)
41                         a[i] = new Object();
42                 for (int i=N2+1; i<N; i++)
43                         a[i] = new String("String-" + i);
44
45                 System.out.println("Forgetting some objects ...");
46                 for (int i=0; i<N; i+=2)
47                         a[i] = null;
48
49                 System.out.println("Getting hashes before GC ...");
50                 hashes1 = getHashes(a);
51                 if (doPrintHashes)
52                         printHashes(hashes1);
53
54                 System.out.println("Invoking the GC ...");
55                 System.gc();
56                 System.out.println("\tfinished.");
57
58                 System.out.println("Getting hashes after GC ...");
59                 hashes2 = getHashes(a);
60                 if (doPrintHashes)
61                         printHashes(hashes2);
62
63                 System.out.println("Comparing hashes now ...");
64                 compareHashes(hashes1, hashes2);
65         }
66 }