From b7b1c309e7ac8c4bbf20c48891568c3cca7c7fac Mon Sep 17 00:00:00 2001 From: Luc Maisonobe <luc@orekit.org> Date: Sat, 15 Mar 2014 13:16:27 +0100 Subject: [PATCH] Added isColumnMerging predicate. --- .../rugged/core/duvenhage/MinMaxTreeTile.java | 12 +++++++++++- .../rugged/core/duvenhage/MinMaxTreeTileTest.java | 15 +++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/rugged-core/src/main/java/org/orekit/rugged/core/duvenhage/MinMaxTreeTile.java b/rugged-core/src/main/java/org/orekit/rugged/core/duvenhage/MinMaxTreeTile.java index 3b1dede6..0205e3f7 100644 --- a/rugged-core/src/main/java/org/orekit/rugged/core/duvenhage/MinMaxTreeTile.java +++ b/rugged-core/src/main/java/org/orekit/rugged/core/duvenhage/MinMaxTreeTile.java @@ -155,6 +155,15 @@ public class MinMaxTreeTile extends SimpleTile { } + /** Check if the merging operation between level and level+1 is a column merging. + * @param level level to check + * @return true if the merging operation between level and level+1 is a column + * merging, false if is a row merging + */ + public boolean isColumnMerging(final int level) { + return (level & 0x1) != (start.length & 0x1); + } + /** Recursive setting of tree levels. * <p> * The following algorithms works for any array shape, even with @@ -228,7 +237,8 @@ public class MinMaxTreeTile extends SimpleTile { final int level, final int levelRows, final int levelColumns, final BivariateFunction f, final double[] base, final int first) { - if ((level & 0x1) != (start.length & 0x1)) { + + if (isColumnMerging(level)) { // merge columns pairs int iTree = start[level]; diff --git a/rugged-core/src/test/java/org/orekit/rugged/core/duvenhage/MinMaxTreeTileTest.java b/rugged-core/src/test/java/org/orekit/rugged/core/duvenhage/MinMaxTreeTileTest.java index a4edf7eb..b22f7f07 100644 --- a/rugged-core/src/test/java/org/orekit/rugged/core/duvenhage/MinMaxTreeTileTest.java +++ b/rugged-core/src/test/java/org/orekit/rugged/core/duvenhage/MinMaxTreeTileTest.java @@ -47,6 +47,16 @@ public class MinMaxTreeTileTest { Assert.assertEquals( 577, start[ 7]); Assert.assertEquals(1117, start[ 8]); + Assert.assertTrue(tile.isColumnMerging(8)); + Assert.assertFalse(tile.isColumnMerging(7)); + Assert.assertTrue(tile.isColumnMerging(6)); + Assert.assertFalse(tile.isColumnMerging(5)); + Assert.assertTrue(tile.isColumnMerging(4)); + Assert.assertFalse(tile.isColumnMerging(3)); + Assert.assertTrue(tile.isColumnMerging(2)); + Assert.assertFalse(tile.isColumnMerging(1)); + Assert.assertTrue(tile.isColumnMerging(0)); + Field minTreeField = MinMaxTreeTile.class.getDeclaredField("minTree"); minTreeField.setAccessible(true); Assert.assertEquals(2187, ((double[]) minTreeField.get(tile)).length); @@ -71,6 +81,11 @@ public class MinMaxTreeTileTest { Assert.assertEquals( 6, start[ 2]); Assert.assertEquals(14, start[ 3]); + Assert.assertTrue(tile.isColumnMerging(3)); + Assert.assertFalse(tile.isColumnMerging(2)); + Assert.assertTrue(tile.isColumnMerging(1)); + Assert.assertFalse(tile.isColumnMerging(0)); + Field minTreeField = MinMaxTreeTile.class.getDeclaredField("minTree"); minTreeField.setAccessible(true); Assert.assertEquals(30, ((double[]) minTreeField.get(tile)).length); -- GitLab