aboutsummaryrefslogtreecommitdiff
path: root/test/sample
diff options
context:
space:
mode:
authorrbackman <none@none>2011-04-12 13:14:05 +0200
committerrbackman <none@none>2011-04-12 13:14:05 +0200
commite0f71908dc7aada9e246953c43dafd150c04e53d (patch)
tree18285e0bd55e30306fd946b77a93fb4b4f082b9b /test/sample
parent55d22f8e969d044575e501cabdefc110672d0907 (diff)
7026304: Fork-Join sample
Summary: Implement a merge-sort sample using Fork-Join Reviewed-by: hosterda, chegar, dholmes
Diffstat (limited to 'test/sample')
-rw-r--r--test/sample/mergesort/MergeSortTest.java102
1 files changed, 102 insertions, 0 deletions
diff --git a/test/sample/mergesort/MergeSortTest.java b/test/sample/mergesort/MergeSortTest.java
new file mode 100644
index 000000000..001e4f0a1
--- /dev/null
+++ b/test/sample/mergesort/MergeSortTest.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright (c) 2011 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.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/* @test
+ * @summary Test MergeSort
+ *
+ * @library ../../../src/share/sample/forkjoin/mergesort
+ * @build MergeSortTest MergeDemo MergeSort
+ * @run main MergeSortTest
+ */
+
+import java.util.Arrays;
+import java.util.Random;
+
+public class MergeSortTest {
+ private Random random;
+ private MergeSort target;
+
+ public MergeSortTest(Random random, MergeSort target) {
+ this.random = random;
+ this.target = target;
+ }
+
+ public static void main(String[] args) {
+ MergeSortTest test = new MergeSortTest(new Random(), new MergeSort(Runtime.getRuntime().availableProcessors() * 4));
+ test.run();
+ }
+
+ private int[] generateArray(int elements) {
+ int[] array = new int[elements];
+ for (int i = 0; i < array.length; ++i) {
+ array[i] = random.nextInt(10);
+ }
+ return array;
+ }
+
+ private void run() {
+ testSort();
+ testSortSingle();
+ testSortEmpty();
+ testLong();
+ }
+
+ public void testLong() {
+ for (int i = 0; i < 1000; ++i) {
+ int elements = 1 + i * 100;
+
+ int[] array = generateArray(elements);
+ int[] copy = Arrays.copyOf(array, array.length);
+ Arrays.sort(copy);
+ target.sort(array);
+ assertEqual(copy, array);
+ }
+ }
+
+ private void testSortEmpty() {
+ int[] array = { };
+ target.sort(array);
+ assertEqual(new int[] { }, array);
+ }
+
+ private void testSortSingle() {
+ int[] array = { 1 };
+ target.sort(array);
+ assertEqual(new int[] { 1 }, array);
+ }
+
+ private void testSort() {
+ int[] array = { 7, 3, 9, 0, -6, 12, 54, 3, -6, 88, 1412};
+ target.sort(array);
+ assertEqual(new int[] { -6, -6, 0, 3, 3, 7, 9, 12, 54, 88, 1412 }, array);
+ }
+
+ private void assertEqual(int[] expected, int[] array) {
+ if (!Arrays.equals(expected, array)) {
+ throw new RuntimeException("Invalid sorted array!");
+ }
+ }
+
+
+}