ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/jtreg/util/Collections/ReverseOrder.java
(Generate patch)

Comparing jsr166/src/test/jtreg/util/Collections/ReverseOrder.java (file contents):
Revision 1.1 by jsr166, Tue Sep 1 01:24:16 2009 UTC vs.
Revision 1.5 by jsr166, Mon Jan 8 03:12:03 2018 UTC

# Line 1 | Line 1
1   /*
2 < * Copyright 2002 Sun Microsystems, Inc.  All Rights Reserved.
2 > * Copyright (c) 2002, 2013, 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
# Line 16 | Line 16
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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
20 < * CA 95054 USA or visit www.sun.com if you need additional information or
21 < * have any questions.
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 4593209
26 > * @bug 4593209 8001667
27   * @summary Reverse comparator was subtly broken
28 < * @author Josh bloch
28 > * @author Josh Bloch
29   */
30  
31 < import java.util.*;
31 > import java.io.ByteArrayInputStream;
32 > import java.io.ByteArrayOutputStream;
33 > import java.io.ObjectInputStream;
34 > import java.io.ObjectOutputStream;
35 > import java.util.Arrays;
36 > import java.util.Collections;
37 > import java.util.Comparator;
38 > import java.util.List;
39  
40   public class ReverseOrder {
41 +    static byte[] serialBytes(Object o) {
42 +        try {
43 +            ByteArrayOutputStream bos = new ByteArrayOutputStream();
44 +            ObjectOutputStream oos = new ObjectOutputStream(bos);
45 +            oos.writeObject(o);
46 +            oos.flush();
47 +            oos.close();
48 +            return bos.toByteArray();
49 +        } catch (Throwable t) {
50 +            throw new Error(t);
51 +        }
52 +    }
53 +
54 +    @SuppressWarnings("unchecked")
55 +    static <T> T serialClone(T o) {
56 +        try {
57 +            ObjectInputStream ois = new ObjectInputStream
58 +                (new ByteArrayInputStream(serialBytes(o)));
59 +            T clone = (T) ois.readObject();
60 +            return clone;
61 +        } catch (Throwable t) {
62 +            throw new Error(t);
63 +        }
64 +    }
65 +
66      public static void main(String[] args) throws Exception {
67          Foo[] a = { new Foo(2), new Foo(3), new Foo(1) };
68          List list = Arrays.asList(a);
69 <        Collections.sort(list, Collections.reverseOrder());
69 >        Comparator cmp = Collections.reverseOrder();
70 >        Collections.sort(list, cmp);
71  
72          Foo[] golden = { new Foo(3), new Foo(2), new Foo(1) };
73          List goldenList = Arrays.asList(golden);
74          if (!list.equals(goldenList))
75              throw new Exception(list.toString());
76 +
77 +        Comparator clone = serialClone(cmp);
78 +        List list2 = Arrays.asList(a);
79 +        Collections.sort(list2, clone);
80 +        if (!list2.equals(goldenList))
81 +            throw new Exception(list.toString());
82      }
83   }
84  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines