< prev index next >

test/jdk/java/util/Collections/Shuffle.java

Print this page
*** 1,7 ***
  /*
!  * Copyright (c) 2023, 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.
--- 1,7 ---
  /*
!  * 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<Integer> 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<VClass> 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<Integer> list, Consumer<List<?>> randomizer) {
          list.sort(null);
          randomizer.accept(list);
          ArrayList<Integer> copy = new ArrayList<>(list);
          list.sort(null);
< prev index next >