1 /* 2 * Copyright (c) 2001, 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 * @test 26 * @bug 4486049 27 * @summary min and max methods fail if size changes in between a call to size 28 * and an attempt to iterate. 29 * @author Josh Bloch 30 */ 31 32 package test.java.util.Collections; 33 34 import java.util.Collections; 35 import java.util.LinkedHashSet; 36 import java.util.Set; 37 38 public class MinMax { main(String[] args)39 public static void main(String[] args) { 40 Set s = new LyingSet(); 41 s.add("x"); 42 if (!Collections.min(s).equals("x")) 43 throw new RuntimeException("1: " + Collections.min(s)); 44 if (!Collections.max(s).equals("x")) 45 throw new RuntimeException("2: " + Collections.max(s)); 46 47 s.add("y"); 48 if (!Collections.min(s).equals("x")) 49 throw new RuntimeException("3: " + Collections.min(s)); 50 if (!Collections.max(s).equals("y")) 51 throw new RuntimeException("4: " + Collections.max(s)); 52 53 s.add("w"); 54 if (!Collections.min(s).equals("w")) 55 throw new RuntimeException("5: " + Collections.min(s)); 56 if (!Collections.max(s).equals("y")) 57 throw new RuntimeException("6: " + Collections.max(s)); 58 59 s.clear(); 60 s.add("x"); 61 if (!Collections.min(s, Collections.reverseOrder()).equals("x")) 62 throw new RuntimeException("1a: " + Collections.min(s)); 63 if (!Collections.max(s, Collections.reverseOrder()).equals("x")) 64 throw new RuntimeException("2a: " + Collections.max(s)); 65 66 s.add("y"); 67 if (!Collections.min(s, Collections.reverseOrder()).equals("y")) 68 throw new RuntimeException("3a: " + Collections.min(s)); 69 if (!Collections.max(s, Collections.reverseOrder()).equals("x")) 70 throw new RuntimeException("4a: " + Collections.max(s)); 71 72 s.add("w"); 73 if (!Collections.min(s, Collections.reverseOrder()).equals("y")) 74 throw new RuntimeException("5a: " + Collections.min(s)); 75 if (!Collections.max(s, Collections.reverseOrder()).equals("w")) 76 throw new RuntimeException("6a: " + Collections.max(s)); 77 } 78 } 79 80 class LyingSet extends LinkedHashSet { size()81 public int size() { 82 return super.size() + 1; // Lies, lies, all lies! 83 } 84 } 85