RFR: 8285295: Need better testing for IdentityHashMap [v2]
Stuart Marks
smarks at openjdk.java.net
Wed May 4 18:53:28 UTC 2022
On Wed, 4 May 2022 14:55:25 GMT, Jaikiran Pai <jpai at openjdk.org> wrote:
>> Stuart Marks has updated the pull request incrementally with two additional commits since the last revision:
>>
>> - Assertions over return values. Some refinement of equals() testing.
>> - Add comment about Map.Entry identity not guaranteed.
>
> test/jdk/java/util/IdentityHashMap/Basic.java line 50:
>
>> 48: // that a map's entrySet contains exactly the expected mappings. In most cases, keys and
>> 49: // values should be compared by identity, not equality. However, the identities of Map.Entry
>> 50: // instances from an IdentityHashSet are not guaranteed; the keys and values they contain
>
> I think I understand what you are saying here, but it took me a few reads to understand it. More so because of `IdentityHashSet` here, which I think is a typo.
> So what's being stated here is that you cannot do something like:
>
> IdentityHashMap m = new IdentityHashMap();
> ...
> var e1 = m.entrySet();
> var e2 = m.entrySet();
>
> assertSame(e1, e2); // this isn't guaranteed to pass
>
> Did I understand this right?
Yeah that comment was poorly worded, and indeed I meant the IdentityHashMap's entrySet and not IdentityHashSet. I've reworded it. I was trying to make a statement about exactly what needs to be compared if you want to make assertions about two maps being "equal" in the sense of IdentityHashMap behaving correctly. Specifically, given two maps `m1` and `m2`, clearly we don't want either of
assertSame(m1, m2);
assertSame(m1.entrySet(), m2.entrySet());
Instead, we want the `Map.Entry` instances to "match". However, given two entries `entry1` and `entry2` that are supposed to match, we also do not want
assertSame(entry1, entry2);
Instead, we want
assertSame(entry1.getKey(), entry2.getKey());
assertSame(entry1.getValue(), entry2,getValue());
The `checkEntries` method goes to some length to get this right.
-------------
PR: https://git.openjdk.java.net/jdk/pull/8354
More information about the core-libs-dev
mailing list