diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 8ae94b9a2e..032cf8e515 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -17,7 +17,7 @@ jobs: fail-fast: false matrix: jdk: ['8', '11', '17'] - os: [ubuntu-latest] + os: [ubuntu-latest, windows-latest] steps: - uses: actions/checkout@v4 diff --git a/batik-test-old/src/test/java/org/apache/batik/test/xml/JUnitRunnerTestCase.java b/batik-test-old/src/test/java/org/apache/batik/test/xml/JUnitRunnerTestCase.java index 1775368314..15508dd961 100644 --- a/batik-test-old/src/test/java/org/apache/batik/test/xml/JUnitRunnerTestCase.java +++ b/batik-test-old/src/test/java/org/apache/batik/test/xml/JUnitRunnerTestCase.java @@ -51,6 +51,10 @@ public class JUnitRunnerTestCase { @BeforeClass public static void beforeClass() throws IOException { + if (System.getProperty("os.name").startsWith("Windows")) { + EXCLUDE = new ArrayList<>(EXCLUDE); + EXCLUDE.add("PerformanceTestSanity"); + } String sm = "grant { permission java.security.AllPermission; };"; File tmp = File.createTempFile("batik", "sm"); FileOutputStream fos = new FileOutputStream(tmp); diff --git a/batik-test/src/main/java/org/apache/batik/test/PerformanceTest.java b/batik-test/src/main/java/org/apache/batik/test/PerformanceTest.java index 070893763b..4d27faec1e 100644 --- a/batik-test/src/main/java/org/apache/batik/test/PerformanceTest.java +++ b/batik-test/src/main/java/org/apache/batik/test/PerformanceTest.java @@ -18,6 +18,7 @@ Licensed to the Apache Software Foundation (ASF) under one or more */ package org.apache.batik.test; +import java.util.Arrays; import java.util.Vector; /** @@ -74,7 +75,9 @@ public void setAllowedScoreDeviation(double allowedScoreDeviation) { /** * Force implementations to only implement runOp * and other performance specific methods. + * @return the results of AbstractTest's run method */ + @Override public final TestReport run() { return super.run(); } @@ -82,8 +85,10 @@ public final TestReport run() { /** * Force implementations to only implement runOp * and other performance specific methods. + * @return false always, indicating failure */ - public final boolean runImplBasic() throws Exception { + @Override + public final boolean runImplBasic() { // Should never be called for a PerformanceTest return false; } @@ -95,18 +100,21 @@ public final boolean runImplBasic() throws Exception { * or not the score is within the allowed deviation of the * reference score. * + * @return the test report + * @throws java.lang.Exception if an error occurred * @see #runRef * @see #runOp */ + @Override public final TestReport runImpl() throws Exception { int iter = 50; - double refUnit = 0; - long refStart = 0; - long refEnd = 0; - long opEnd = 0; - long opStart = 0; - double opLength = 0; + double refUnit; + long refStart; + long refEnd; + long opEnd; + long opStart; + double opLength; // Run once to remove class load time from timing. runRef(); @@ -114,8 +122,9 @@ public final TestReport runImpl() throws Exception { // System.gc(); double[] scores = new double[iter]; - - for (int i=0; i 0.0 && refUnit > 0.0) { + scores[i++] = opLength / refUnit; + System.err.print("."); + } else { + System.err.print("!"); + if (++badScores > iter) { + // Too many bad scores + throw new IllegalStateException("Unable to obtain reliable timings"); - scores[i] = opLength / refUnit; - System.err.println("."); + } + } // System.err.println(">>>>>>>> scores[" + i + "] = " + scores[i] + " (" + refUnit + " / " + opLength + ")"); System.gc(); } @@ -143,7 +161,7 @@ public final TestReport runImpl() throws Exception { System.err.println(); // Now, sort the scores - sort(scores); + Arrays.sort(scores); // Compute the mean score based on the scores, not accounting // for the lowest and highest scores @@ -184,22 +202,6 @@ public final TestReport runImpl() throws Exception { } } - protected void sort(double[] a) throws Exception { - for (int i = a.length - 1; i>=0; i--) { - boolean swapped = false; - for (int j = 0; j a[j+1]) { - double d = a[j]; - a[j] = a[j+1]; - a[j+1] = d; - swapped = true; - } - } - if (!swapped) - return; - } - } - /** * Runs the reference operation. * By default, this runs the same BufferedImage drawing @@ -220,6 +222,7 @@ protected void runRef() { /** * Runs the tested operation + * @throws java.lang.Exception if an error occurred */ protected abstract void runOp() throws Exception; } diff --git a/batik-util/src/test/resources/org/apache/batik/util/.gitattributes b/batik-util/src/test/resources/org/apache/batik/util/.gitattributes new file mode 100644 index 0000000000..625449502b --- /dev/null +++ b/batik-util/src/test/resources/org/apache/batik/util/.gitattributes @@ -0,0 +1 @@ +* -text