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

Comparing jsr166/src/test/jtreg/util/Collections/CheckedIdentityMap.java (file contents):
Revision 1.2 by jsr166, Sun Sep 5 21:32:19 2010 UTC vs.
Revision 1.3 by jsr166, Tue Sep 15 05:31:14 2015 UTC

# Line 1 | Line 1
1   /*
2 < * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
2 > * Copyright (c) 2007, 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 24 | Line 24
24   /*
25   * @test
26   * @bug 6585904
27 + * @run testng CheckedIdentityMap
28   * @summary Checked collections with underlying maps with identity comparisons
29   */
30  
31   import java.util.*;
32   import static java.util.Collections.*;
33  
34 + import static org.testng.Assert.assertEquals;
35 + import static org.testng.Assert.assertNotEquals;
36 +
37 + import org.testng.annotations.Test;
38 +
39   public class CheckedIdentityMap {
40 <    void test(String[] args) throws Throwable {
40 >
41 >    @Test
42 >    public void testHashCode() {
43          Map<Integer, Integer> m1 = checkedMap(
44              new IdentityHashMap<Integer, Integer>(),
45              Integer.class, Integer.class);
46          Map<Integer, Integer> m2 = checkedMap(
47              new IdentityHashMap<Integer, Integer>(),
48              Integer.class, Integer.class);
49 +        // NB: these are unique instances. Compare vs. Integer.valueOf(1)
50          m1.put(new Integer(1), new Integer(1));
51          m2.put(new Integer(1), new Integer(1));
52  
53          Map.Entry<Integer, Integer> e1 = m1.entrySet().iterator().next();
54          Map.Entry<Integer, Integer> e2 = m2.entrySet().iterator().next();
55 <        check(! e1.equals(e2));
56 <        check(e1.hashCode() == hashCode(e1));
57 <        check(e2.hashCode() == hashCode(e2));
55 >
56 >        assertNotEquals(e1, e2);
57 >        assertEquals(e1.hashCode(), hashCode(e1));
58 >        assertEquals(e2.hashCode(), hashCode(e2));
59      }
60  
61 <    int hashCode(Map.Entry<?,?> e) {
61 >    static int hashCode(Map.Entry<?,?> e) {
62          return (System.identityHashCode(e.getKey()) ^
63                  System.identityHashCode(e.getValue()));
64      }
55
56    //--------------------- Infrastructure ---------------------------
57    volatile int passed = 0, failed = 0;
58    void pass() {passed++;}
59    void fail() {failed++; Thread.dumpStack();}
60    void fail(String msg) {System.err.println(msg); fail();}
61    void unexpected(Throwable t) {failed++; t.printStackTrace();}
62    void check(boolean cond) {if (cond) pass(); else fail();}
63    void equal(Object x, Object y) {
64        if (x == null ? y == null : x.equals(y)) pass();
65        else fail(x + " not equal to " + y);}
66    public static void main(String[] args) throws Throwable {
67        new CheckedIdentityMap().instanceMain(args);}
68    void instanceMain(String[] args) throws Throwable {
69        try {test(args);} catch (Throwable t) {unexpected(t);}
70        System.out.printf("%nPassed = %d, failed = %d%n%n", passed, failed);
71        if (failed > 0) throw new AssertionError("Some tests failed");}
72    abstract class F {abstract void f() throws Throwable;}
73    void THROWS(Class<? extends Throwable> k, F... fs) {
74        for (F f : fs)
75            try {f.f(); fail("Expected " + k.getName() + " not thrown");}
76            catch (Throwable t) {
77                if (k.isAssignableFrom(t.getClass())) pass();
78                else unexpected(t);}}
79    Thread checkedThread(final Runnable r) {
80        return new Thread() {public void run() {
81            try {r.run();} catch (Throwable t) {unexpected(t);}}};}
65   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines