< prev index next >
test/jdk/java/util/Collections/NCopies.java
Print this page
*** 1,7 ****
/*
! * Copyright (c) 2005, 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) 2005, 2018, 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.
*** 27,37 ****
--- 27,39 ----
* @summary Test Collections.nCopies
* @author Martin Buchholz
*/
import java.util.Collections;
+ import java.util.AbstractList;
import java.util.List;
+ import java.util.Objects;
public class NCopies {
static volatile int passed = 0, failed = 0;
static void fail(String msg) {
*** 80,99 ****
--- 82,128 ----
check(sa[sa.length-1].equals("foo"));
check(x.get(x.size()/2).equals("foo"));
checkEmpty(x.subList(x.size()/2, x.size()/2));
}
+ private static <T> List<T> referenceNCopies(int n, T o) {
+ // A simplest correct implementation of nCopies to compare with the actual optimized implementation
+ return new AbstractList<>() {
+ public int size() { return n; }
+
+ public T get(int index) {
+ Objects.checkIndex(index, n);
+ return o;
+ }
+ };
+ }
+
+ private static void checkHashCode() {
+ int[] sizes = {0, 1, 2, 3, 5, 10, 31, 32, 100, 1000};
+ String[] elements = {null, "non-null"};
+ for (int size : sizes) {
+ for (String element : elements) {
+ int expectedHashCode = referenceNCopies(size, element).hashCode();
+ int actualHashCode = Collections.nCopies(size, element).hashCode();
+ check(expectedHashCode == actualHashCode,
+ "Collections.nCopies(" + size + ", " + element + ").hashCode()");
+ }
+ }
+ }
+
public static void main(String[] args) {
try {
List<String> empty = Collections.nCopies(0, "foo");
checkEmpty(empty);
checkEmpty(empty.subList(0,0));
List<String> foos = Collections.nCopies(42, "foo");
check(foos.size() == 42);
checkFoos(foos.subList(foos.size()/2, foos.size()-1));
+ checkHashCode();
+
} catch (Throwable t) { unexpected(t); }
System.out.printf("%nPassed = %d, failed = %d%n%n", passed, failed);
if (failed > 0) throw new Error("Some tests failed");
}
< prev index next >