Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/test/sun/text/IntHashtable/Bug4170614Test.java
38839 views
1
/*
2
* Copyright (c) 1999, 2016, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation.
8
*
9
* This code is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12
* version 2 for more details (a copy is included in the LICENSE file that
13
* accompanied this code).
14
*
15
* You should have received a copy of the GNU General Public License version
16
* 2 along with this work; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*/
23
24
/*
25
(this test doesn't have an at-test tag because it's run by a shell
26
script instead of directly by the test harness)
27
*/
28
29
/*
30
*
31
*
32
* (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
33
* (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
34
*
35
* Portions copyright (c) 2007 Sun Microsystems, Inc.
36
* All Rights Reserved.
37
*
38
* The original version of this source code and documentation
39
* is copyrighted and owned by Taligent, Inc., a wholly-owned
40
* subsidiary of IBM. These materials are provided under terms
41
* of a License Agreement between Taligent and Sun. This technology
42
* is protected by multiple US and International patents.
43
*
44
* This notice and attribution to Taligent may not be removed.
45
* Taligent is a registered trademark of Taligent, Inc.
46
*
47
* Permission to use, copy, modify, and distribute this software
48
* and its documentation for NON-COMMERCIAL purposes and without
49
* fee is hereby granted provided that this copyright notice
50
* appears in all copies. Please refer to the file "copyright.html"
51
* for further important copyright and licensing information.
52
*
53
* SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
54
* THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
55
* TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
56
* PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
57
* ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
58
* DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
59
*
60
*/
61
package java.text;
62
import sun.text.IntHashtable;
63
64
65
/**
66
* This class tests some internal hashCode() functions.
67
* Bug #4170614 complained that we had two iternal classes that
68
* break the invariant that if a.equals(b) than a.hashCode() ==
69
* b.hashCode(). This is because these classes overrode equals()
70
* but not hashCode(). These are both purely internal classes, and
71
* the library itself doesn't actually call hashCode(), so this isn't
72
* actually causing anyone problems yet. But if these classes are
73
* ever exposed in the API, their hashCode() methods need to work right.
74
* PatternEntry will never be exposed in the API, but IntHashtable
75
* might be. This is a shell test to allow us to access classes that
76
* are declared package private.
77
* @author Richard Gillam
78
*/
79
public class Bug4170614Test {
80
public static void main(String[] args) throws Exception {
81
testIntHashtable();
82
testPatternEntry();
83
}
84
85
86
public static void testIntHashtable() throws Exception {
87
IntHashtable fred = new IntHashtable();
88
fred.put(1, 10);
89
fred.put(2, 20);
90
fred.put(3, 30);
91
92
IntHashtable barney = new IntHashtable();
93
barney.put(1, 10);
94
barney.put(3, 30);
95
barney.put(2, 20);
96
97
IntHashtable homer = new IntHashtable();
98
homer.put(3, 30);
99
homer.put(1, 10);
100
homer.put(7, 900);
101
102
if (fred.equals(barney)) {
103
System.out.println("fred.equals(barney)");
104
}
105
else {
106
System.out.println("!fred.equals(barney)");
107
}
108
System.out.println("fred.hashCode() == " + fred.hashCode());
109
System.out.println("barney.hashCode() == " + barney.hashCode());
110
111
if (!fred.equals(barney)) {
112
throw new Exception("equals() failed on two hashtables that are equal");
113
}
114
115
if (fred.hashCode() != barney.hashCode()) {
116
throw new Exception("hashCode() failed on two hashtables that are equal");
117
}
118
119
System.out.println();
120
if (fred.equals(homer)) {
121
System.out.println("fred.equals(homer)");
122
}
123
else {
124
System.out.println("!fred.equals(homer)");
125
}
126
System.out.println("fred.hashCode() == " + fred.hashCode());
127
System.out.println("homer.hashCode() == " + homer.hashCode());
128
129
if (fred.equals(homer)) {
130
throw new Exception("equals() failed on two hashtables that are not equal");
131
}
132
133
if (fred.hashCode() == homer.hashCode()) {
134
throw new Exception("hashCode() failed on two hashtables that are not equal");
135
}
136
137
System.out.println();
138
System.out.println("testIntHashtable() passed.\n");
139
}
140
141
public static void testPatternEntry() throws Exception {
142
PatternEntry fred = new PatternEntry(1,
143
new StringBuffer("hello"),
144
new StringBuffer("up"));
145
PatternEntry barney = new PatternEntry(1,
146
new StringBuffer("hello"),
147
new StringBuffer("down"));
148
// (equals() only considers the "chars" field, so fred and barney are equal)
149
PatternEntry homer = new PatternEntry(1,
150
new StringBuffer("goodbye"),
151
new StringBuffer("up"));
152
153
if (fred.equals(barney)) {
154
System.out.println("fred.equals(barney)");
155
}
156
else {
157
System.out.println("!fred.equals(barney)");
158
}
159
System.out.println("fred.hashCode() == " + fred.hashCode());
160
System.out.println("barney.hashCode() == " + barney.hashCode());
161
162
if (!fred.equals(barney)) {
163
throw new Exception("equals() failed on two hashtables that are equal");
164
}
165
166
if (fred.hashCode() != barney.hashCode()) {
167
throw new Exception("hashCode() failed on two hashtables that are equal");
168
}
169
170
System.out.println();
171
if (fred.equals(homer)) {
172
System.out.println("fred.equals(homer)");
173
}
174
else {
175
System.out.println("!fred.equals(homer)");
176
}
177
System.out.println("fred.hashCode() == " + fred.hashCode());
178
System.out.println("homer.hashCode() == " + homer.hashCode());
179
180
if (fred.equals(homer)) {
181
throw new Exception("equals() failed on two hashtables that are not equal");
182
}
183
184
if (fred.hashCode() == homer.hashCode()) {
185
throw new Exception("hashCode() failed on two hashtables that are not equal");
186
}
187
188
System.out.println();
189
System.out.println("testPatternEntry() passed.\n");
190
}
191
}
192
193