From 8e22b1791964c37293981a350395e76d0f919f31 Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Wed, 23 Nov 2016 14:20:06 +0300 Subject: [PATCH 1/2] java: backport test changes from master --- .../src/org/opencv/test/OpenCVTestCase.java | 43 +++++++++++++++++-- .../src/org/opencv/test/core/CoreTest.java | 2 +- .../src/org/opencv/test/core/MatTest.java | 4 +- .../org/opencv/test/imgproc/ImgprocTest.java | 8 ++-- modules/java/test/build.xml | 16 +++++-- .../src/org/opencv/test/OpenCVTestCase.java | 43 +++++++++++++++++-- 6 files changed, 99 insertions(+), 17 deletions(-) diff --git a/modules/java/android_test/src/org/opencv/test/OpenCVTestCase.java b/modules/java/android_test/src/org/opencv/test/OpenCVTestCase.java index 5c932110d3..198dac2ac1 100644 --- a/modules/java/android_test/src/org/opencv/test/OpenCVTestCase.java +++ b/modules/java/android_test/src/org/opencv/test/OpenCVTestCase.java @@ -26,6 +26,11 @@ import org.opencv.highgui.Highgui; import android.util.Log; public class OpenCVTestCase extends TestCase { + + public static class TestSkipException extends RuntimeException { + public TestSkipException() {} + } + //change to 'true' to unblock fail on fail("Not yet implemented") public static final boolean passNYI = true; @@ -182,12 +187,40 @@ public class OpenCVTestCase extends TestCase { protected void runTest() throws Throwable { // Do nothing if the precondition does not hold. if (isTestCaseEnabled) { - super.runTest(); + try { + super.runTest(); + } catch (TestSkipException ex) { + Log.w(TAG, "Test case \"" + this.getClass().getName() + "\" skipped!"); + assertTrue(true); + } } else { Log.e(TAG, "Test case \"" + this.getClass().getName() + "\" disabled!"); } } + public void runBare() throws Throwable { + Throwable exception = null; + try { + setUp(); + } catch (TestSkipException ex) { + Log.w(TAG, "Test case \"" + this.getClass().getName() + "\" skipped!"); + assertTrue(true); + return; + } + try { + runTest(); + } catch (Throwable running) { + exception = running; + } finally { + try { + tearDown(); + } catch (Throwable tearingDown) { + if (exception == null) exception = tearingDown; + } + } + if (exception != null) throw exception; + } + protected Mat getMat(int type, double... vals) { return new Mat(matSize, matSize, type, new Scalar(vals)); @@ -205,6 +238,10 @@ public class OpenCVTestCase extends TestCase { TestCase.fail(msg); } + public static void assertGE(double v1, double v2) { + assertTrue("Failed: " + v1 + " >= " + v2, v1 >= v2); + } + public static void assertListEquals(List list1, List list2) { if (list1.size() != list2.size()) { throw new UnsupportedOperationException(); @@ -419,10 +456,10 @@ public class OpenCVTestCase extends TestCase { if (isEqualityMeasured) assertTrue("Max difference between expected and actiual Mats is "+ maxDiff + ", that bigger than " + eps, - Core.checkRange(diff, true, 0.0, eps)); + maxDiff <= eps); else assertFalse("Max difference between expected and actiual Mats is "+ maxDiff + ", that less than " + eps, - Core.checkRange(diff, true, 0.0, eps)); + maxDiff <= eps); } protected static String readFile(String path) { diff --git a/modules/java/android_test/src/org/opencv/test/core/CoreTest.java b/modules/java/android_test/src/org/opencv/test/core/CoreTest.java index 45e435330c..83511b995b 100644 --- a/modules/java/android_test/src/org/opencv/test/core/CoreTest.java +++ b/modules/java/android_test/src/org/opencv/test/core/CoreTest.java @@ -2052,7 +2052,7 @@ public class CoreTest extends OpenCVTestCase { }; Mat roots = new Mat(); - assertEquals(0.0, Core.solvePoly(coeffs, roots)); + assertGE(1e-6, Math.abs(Core.solvePoly(coeffs, roots))); truth = new Mat(3, 1, CvType.CV_32FC2) { { diff --git a/modules/java/android_test/src/org/opencv/test/core/MatTest.java b/modules/java/android_test/src/org/opencv/test/core/MatTest.java index a2570f4342..610f0eb7eb 100644 --- a/modules/java/android_test/src/org/opencv/test/core/MatTest.java +++ b/modules/java/android_test/src/org/opencv/test/core/MatTest.java @@ -488,13 +488,13 @@ public class MatTest extends OpenCVTestCase { public void testIsContinuous() { assertTrue(gray0.isContinuous()); - Mat subMat = gray0.submat(0, 0, gray0.rows() / 2, gray0.cols() / 2); + Mat subMat = gray0.submat(0, gray0.rows() / 2, 0, gray0.cols() / 2); assertFalse(subMat.isContinuous()); } public void testIsSubmatrix() { assertFalse(gray0.isSubmatrix()); - Mat subMat = gray0.submat(0, 0, gray0.rows() / 2, gray0.cols() / 2); + Mat subMat = gray0.submat(0, gray0.rows() / 2, 0, gray0.cols() / 2); assertTrue(subMat.isSubmatrix()); } diff --git a/modules/java/android_test/src/org/opencv/test/imgproc/ImgprocTest.java b/modules/java/android_test/src/org/opencv/test/imgproc/ImgprocTest.java index 7eed06abd9..ac2fc18d26 100644 --- a/modules/java/android_test/src/org/opencv/test/imgproc/ImgprocTest.java +++ b/modules/java/android_test/src/org/opencv/test/imgproc/ImgprocTest.java @@ -165,7 +165,7 @@ public class ImgprocTest extends OpenCVTestCase { double arcLength = Imgproc.arcLength(curve, false); - assertEquals(5.656854152679443, arcLength); + assertEquals(5.656854152679443, arcLength, EPS); } public void testBilateralFilterMatMatIntDoubleDouble() { @@ -367,7 +367,7 @@ public class ImgprocTest extends OpenCVTestCase { double distance = Imgproc.compareHist(H1, H2, Imgproc.CV_COMP_CORREL); - assertEquals(1., distance); + assertEquals(1., distance, EPS); } public void testContourAreaMat() { @@ -376,7 +376,7 @@ public class ImgprocTest extends OpenCVTestCase { double area = Imgproc.contourArea(contour); - assertEquals(45., area); + assertEquals(45., area, EPS); } public void testContourAreaMatBoolean() { @@ -385,7 +385,7 @@ public class ImgprocTest extends OpenCVTestCase { double area = Imgproc.contourArea(contour, true); - assertEquals(45., area); + assertEquals(45., area, EPS); // TODO_: write better test } diff --git a/modules/java/test/build.xml b/modules/java/test/build.xml index d3f826cf00..dac4d4b455 100644 --- a/modules/java/test/build.xml +++ b/modules/java/test/build.xml @@ -1,5 +1,7 @@ + + @@ -12,7 +14,7 @@ - + @@ -34,8 +36,8 @@ - - + + @@ -45,12 +47,18 @@ - + + + + + + + diff --git a/modules/java/test/src/org/opencv/test/OpenCVTestCase.java b/modules/java/test/src/org/opencv/test/OpenCVTestCase.java index a9b5041189..df0bb04cfa 100644 --- a/modules/java/test/src/org/opencv/test/OpenCVTestCase.java +++ b/modules/java/test/src/org/opencv/test/OpenCVTestCase.java @@ -28,6 +28,11 @@ import org.opencv.features2d.KeyPoint; import org.opencv.highgui.Highgui; public class OpenCVTestCase extends TestCase { + + public static class TestSkipException extends RuntimeException { + public TestSkipException() {} + } + //change to 'true' to unblock fail on fail("Not yet implemented") public static final boolean passNYI = true; @@ -212,12 +217,40 @@ public class OpenCVTestCase extends TestCase { protected void runTest() throws Throwable { // Do nothing if the precondition does not hold. if (isTestCaseEnabled) { - super.runTest(); + try { + super.runTest(); + } catch (TestSkipException ex) { + OpenCVTestRunner.Log(TAG + " :: " + "Test case \"" + this.getClass().getName() + "\" skipped!"); + assertTrue(true); + } } else { OpenCVTestRunner.Log(TAG + " :: " + "Test case \"" + this.getClass().getName() + "\" disabled!"); } } + public void runBare() throws Throwable { + Throwable exception = null; + try { + setUp(); + } catch (TestSkipException ex) { + OpenCVTestRunner.Log(TAG + " :: " + "Test case \"" + this.getClass().getName() + "\" skipped!"); + assertTrue(true); + return; + } + try { + runTest(); + } catch (Throwable running) { + exception = running; + } finally { + try { + tearDown(); + } catch (Throwable tearingDown) { + if (exception == null) exception = tearingDown; + } + } + if (exception != null) throw exception; + } + protected Mat getMat(int type, double... vals) { return new Mat(matSize, matSize, type, new Scalar(vals)); @@ -235,6 +268,10 @@ public class OpenCVTestCase extends TestCase { TestCase.fail(msg); } + public static void assertGE(double v1, double v2) { + assertTrue("Failed: " + v1 + " >= " + v2, v1 >= v2); + } + public static void assertListEquals(List list1, List list2) { if (list1.size() != list2.size()) { throw new UnsupportedOperationException(); @@ -449,10 +486,10 @@ public class OpenCVTestCase extends TestCase { if (isEqualityMeasured) assertTrue("Max difference between expected and actiual Mats is "+ maxDiff + ", that bigger than " + eps, - Core.checkRange(diff, true, 0.0, eps)); + maxDiff <= eps); else assertFalse("Max difference between expected and actiual Mats is "+ maxDiff + ", that less than " + eps, - Core.checkRange(diff, true, 0.0, eps)); + maxDiff <= eps); } protected static String readFile(String path) { From da75d129fe0e5238f9263e4cd6339b446ba8d3ad Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Tue, 15 Nov 2016 16:13:36 +0300 Subject: [PATCH 2/2] java: fix Calib3d test --- .../org/opencv/test/calib3d/Calib3dTest.java | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/modules/java/android_test/src/org/opencv/test/calib3d/Calib3dTest.java b/modules/java/android_test/src/org/opencv/test/calib3d/Calib3dTest.java index db806b6fc9..b79a99625b 100644 --- a/modules/java/android_test/src/org/opencv/test/calib3d/Calib3dTest.java +++ b/modules/java/android_test/src/org/opencv/test/calib3d/Calib3dTest.java @@ -249,9 +249,22 @@ public class Calib3dTest extends OpenCVTestCase { Mat fm = Calib3d.findFundamentalMat(pts, pts); - truth = new Mat(3, 3, CvType.CV_64F); - truth.put(0, 0, 0, -0.577, 0.288, 0.577, 0, 0.288, -0.288, -0.288, 0); - assertMatEqual(truth, fm, EPS); + // Check definition of fundamental matrix: + // [p2; 1]T * F * [p1; 1] = 0 + // (p2 == p1 in this testcase) + for (int i = 0; i < pts.rows(); i++) + { + Mat pt = new Mat(3, 1, fm.type()); + pt.put(0, 0, pts.get(i, 0)[0], pts.get(i, 0)[1], 1); + + Mat pt_t = pt.t(); + + Mat tmp = new Mat(); + Mat res = new Mat(); + Core.gemm(pt_t, fm, 1.0, new Mat(), 0.0, tmp); + Core.gemm(tmp, pt, 1.0, new Mat(), 0.0, res); + assertTrue(Math.abs(res.get(0, 0)[0]) <= 1e-6); + } } public void testFindFundamentalMatListOfPointListOfPointInt() {