< prev index next >

test/java/util/Arrays/largeMemory/ParallelPrefix.java

Print this page

        

@@ -23,24 +23,28 @@
 
 /**
  * @test 8014076 8025067
  * @summary unit test for Arrays.ParallelPrefix().
  * @author Tristan Yan
- * @run testng ParallelPrefix
+ * @modules java.management jdk.management
+ * @run testng/othervm -Xms256m -Xmx1024m ParallelPrefix
  */
 
+import java.lang.management.ManagementFactory;
 import java.util.Arrays;
 import java.util.function.BinaryOperator;
 import java.util.function.DoubleBinaryOperator;
 import java.util.function.Function;
 import java.util.function.IntBinaryOperator;
 import java.util.function.LongBinaryOperator;
 import java.util.stream.IntStream;
 import java.util.stream.LongStream;
+import com.sun.management.OperatingSystemMXBean;
 import static org.testng.Assert.*;
 import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;
+import org.testng.annotations.BeforeSuite;
 
 public class ParallelPrefix {
     //Array size less than MIN_PARTITION
     private static final int SMALL_ARRAY_SIZE = 1 << 3;
 

@@ -51,16 +55,41 @@
     private static final int MEDIUM_ARRAY_SIZE = 1 << 8;
 
     //Array size much greater than MIN_PARTITION
     private static final int LARGE_ARRAY_SIZE = 1 << 14;
 
-    private static final int[] ARRAY_SIZE_COLLECTION  = new int[]{
+    private static int[] arraySizeCollection;
+
+    @BeforeSuite
+    public static void setup() {
+        java.lang.management.OperatingSystemMXBean bean =
+                ManagementFactory.getOperatingSystemMXBean();
+        if (bean instanceof OperatingSystemMXBean) {
+            OperatingSystemMXBean os = (OperatingSystemMXBean)bean;
+            long physicalMemorySize = os.getTotalPhysicalMemorySize() / (1024 * 1024);
+            System.out.println("System memory size: " + physicalMemorySize + "M");
+            // when we can get system memory size, and it's larger than 2G,
+            // then we enable large array size test below,
+            // else disable large array size test below.
+            if (physicalMemorySize > (2 * 1024)) {
+                arraySizeCollection  = new int[]{
         SMALL_ARRAY_SIZE,
         THRESHOLD_ARRAY_SIZE,
         MEDIUM_ARRAY_SIZE,
         LARGE_ARRAY_SIZE
     };
+                System.out.println("System memory is large enough, add large array size test");
+                return;
+            }
+        }
+        arraySizeCollection  = new int[]{
+                SMALL_ARRAY_SIZE,
+                THRESHOLD_ARRAY_SIZE,
+                MEDIUM_ARRAY_SIZE
+            };
+        System.out.println("System memory is not large enough, remove large array size test");
+    }
 
     @DataProvider(name = "intSet")
     public static Object[][] intSet(){
         return genericData(size -> IntStream.range(0, size).toArray(),
                 new IntBinaryOperator[]{

@@ -94,14 +123,14 @@
                     concat });
     }
 
     private static <T, OPS> Object[][] genericData(Function<Integer, T> generateFunc, OPS[] ops) {
         //test arrays which size is equals n-1, n, n+1, test random data
-        Object[][] data = new Object[ARRAY_SIZE_COLLECTION.length * 3 * ops.length][4];
-        for(int n = 0; n < ARRAY_SIZE_COLLECTION.length; n++ ) {
+        Object[][] data = new Object[arraySizeCollection.length * 3 * ops.length][4];
+        for(int n = 0; n < arraySizeCollection.length; n++ ) {
             for(int testValue = -1 ; testValue <= 1; testValue++) {
-                int array_size = ARRAY_SIZE_COLLECTION[n] + testValue;
+                int array_size = arraySizeCollection[n] + testValue;
                 for(int opsN = 0; opsN < ops.length; opsN++) {
                     int index = n * 3 * ops.length + (testValue + 1) * ops.length + opsN;
                     data[index][0] = generateFunc.apply(array_size);
                     data[index][1] = array_size / 3;
                     data[index][2] = 2 * array_size / 3;
< prev index next >