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.3 by jsr166, Thu Sep 10 01:04:35 2015 UTC vs.
Revision 1.4 by jsr166, Tue Sep 15 07:00:00 2015 UTC

# Line 1 | Line 1
1   /*
2 < * Copyright (c) 2002, Oracle and/or its affiliates. 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 23 | Line 23
23  
24   /*
25   * @test
26 < * @bug 4593209
26 > * @bug 4593209 8001667
27   * @summary Reverse comparator was subtly broken
28   * @author Josh Bloch
29   */
30  
31   import java.util.*;
32 + import java.io.*;
33  
34   public class ReverseOrder {
35 +    static byte[] serialBytes(Object o) {
36 +        try {
37 +            ByteArrayOutputStream bos = new ByteArrayOutputStream();
38 +            ObjectOutputStream oos = new ObjectOutputStream(bos);
39 +            oos.writeObject(o);
40 +            oos.flush();
41 +            oos.close();
42 +            return bos.toByteArray();
43 +        } catch (Throwable t) {
44 +            throw new Error(t);
45 +        }
46 +    }
47 +
48 +    @SuppressWarnings("unchecked")
49 +    static <T> T serialClone(T o) {
50 +        try {
51 +            ObjectInputStream ois = new ObjectInputStream
52 +                (new ByteArrayInputStream(serialBytes(o)));
53 +            T clone = (T) ois.readObject();
54 +            return clone;
55 +        } catch (Throwable t) {
56 +            throw new Error(t);
57 +        }
58 +    }
59 +
60      public static void main(String[] args) throws Exception {
61          Foo[] a = { new Foo(2), new Foo(3), new Foo(1) };
62          List list = Arrays.asList(a);
63 <        Collections.sort(list, Collections.reverseOrder());
63 >        Comparator cmp = Collections.reverseOrder();
64 >        Collections.sort(list, cmp);
65  
66          Foo[] golden = { new Foo(3), new Foo(2), new Foo(1) };
67          List goldenList = Arrays.asList(golden);
68          if (!list.equals(goldenList))
69              throw new Exception(list.toString());
70 +
71 +        Comparator clone = serialClone(cmp);
72 +        List list2 = Arrays.asList(a);
73 +        Collections.sort(list2, clone);
74 +        if (!list2.equals(goldenList))
75 +            throw new Exception(list.toString());
76      }
77   }
78  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines