diff a/test/jdk/java/util/Collections/Shuffle.java b/test/jdk/java/util/Collections/Shuffle.java --- a/test/jdk/java/util/Collections/Shuffle.java +++ b/test/jdk/java/util/Collections/Shuffle.java @@ -1,7 +1,7 @@ /* - * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2023, 2026, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. @@ -24,12 +24,14 @@ /* * @test * @bug 8294693 * @summary Basic test for Collections.shuffle * @key randomness + * @library /test/lib */ +import jdk.test.lib.valueclass.VClass; import java.util.ArrayList; import java.util.Collections; import java.util.LinkedList; import java.util.List; import java.util.Random; @@ -40,10 +42,11 @@ static final int N = 100; public static void main(String[] args) { test(new ArrayList<>()); test(new LinkedList<>()); + testValue(); } static void test(List list) { for (int i = 0; i < N; i++) { list.add(i); @@ -60,10 +63,20 @@ checkRandom(list, l -> Collections.shuffle(l, new Random(1))); RandomGenerator.JumpableGenerator generator = RandomGenerator.JumpableGenerator.of("Xoshiro256PlusPlus"); checkRandom(list, l -> Collections.shuffle(l, generator.copy())); } + static void testValue() { + List values = new ArrayList<>(); + for (int i = 0; i < N; i++) values.add(new VClass(i, new int[] { i })); + Collections.shuffle(values, new Random(1)); + if (values.size() != N) throw new RuntimeException("value shuffle size"); + for (int i = 0; i < N; i++) + if (Collections.frequency(values, new VClass(i, new int[] { i })) != 1) + throw new RuntimeException("value shuffle lost " + i); + } + private static void checkRandom(List list, Consumer> randomizer) { list.sort(null); randomizer.accept(list); ArrayList copy = new ArrayList<>(list); list.sort(null);