RFR(s): 8201518 add test for randomized iteration order of unmodifiable Set and Map

Peter Levart peter.levart at gmail.com
Thu May 24 09:20:43 UTC 2018


Hi Stuart,

The test looks good, but the way you write keys from unmodifiable map 
composed of WORDS:

   84             Arrays.stream(WORDS)
   85                   .collect(toUnmodifiableMap(word -> word, word -> 
""))
   86                   .keySet()
   87                   .forEach(mapOut::println);

...could actually randomize order because of the way the collector 
constructs the unmodifiable map and not because of the unmodifiable map 
API itself:

     Collector<T, ?, Map<K,U>> toUnmodifiableMap(Function<? super T, ? 
extends K> keyMapper,
                                                 Function<? super T, ? 
extends U> valueMapper,
BinaryOperator<U> mergeFunction) {
         Objects.requireNonNull(keyMapper, "keyMapper");
         Objects.requireNonNull(valueMapper, "valueMapper");
         Objects.requireNonNull(mergeFunction, "mergeFunction");
         return collectingAndThen(
                 toMap(keyMapper, valueMapper, mergeFunction, HashMap::new),
                 map -> 
(Map<K,U>)Map.ofEntries(map.entrySet().toArray(new Map.Entry[0])));
     }

If for example HashMap did order randomization and unmodifiable map 
didn't, the test would still pass.

So you should perhaps construct an Map.Entry[] form WORDS keeping 
encounter order and initialize the unmodifiable map from it directly.

Regards, Peter


On 05/24/2018 02:26 AM, Stuart Marks wrote:
> Hi all,
>
> Please review this new test for testing the randomized iteration order 
> of unmodifiable Set and Map implementations.
>
> Bug:
>
>     https://bugs.openjdk.java.net/browse/JDK-8201518
>
> Webrev:
>
>     http://cr.openjdk.java.net/~smarks/reviews/8201518/webrev.0/
>
> Thanks,
>
> s'marks



More information about the core-libs-dev mailing list