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

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 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