diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 153b8279..c6cb5e2d 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -8,7 +8,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - java: [ '11' ] + java: [ '17' ] name: Java ${{ matrix.java }} compile steps: - uses: actions/checkout@v2 diff --git a/org.eclipse.january.test/META-INF/MANIFEST.MF b/org.eclipse.january.test/META-INF/MANIFEST.MF index 240a1a37..dd803777 100644 --- a/org.eclipse.january.test/META-INF/MANIFEST.MF +++ b/org.eclipse.january.test/META-INF/MANIFEST.MF @@ -5,7 +5,7 @@ Bundle-SymbolicName: org.eclipse.january.test Bundle-Version: 2.3.3.qualifier Fragment-Host: org.eclipse.january;bundle-version="2.3.3" Bundle-RequiredExecutionEnvironment: JavaSE-1.7 -Require-Bundle: org.junit;bundle-version="[4.12.0,5.0.0)", +Require-Bundle: org.junit;bundle-version="[4.13.0,5.0.0)", org.eclipse.january.asserts;bundle-version="2.3.2" Bundle-Vendor: Eclipse January Automatic-Module-Name: org.eclipse.january.test diff --git a/org.eclipse.january.test/src/org/eclipse/january/dataset/AbstractDatasetTest.java b/org.eclipse.january.test/src/org/eclipse/january/dataset/AbstractDatasetTest.java index b4445a06..6cd73261 100644 --- a/org.eclipse.january.test/src/org/eclipse/january/dataset/AbstractDatasetTest.java +++ b/org.eclipse.january.test/src/org/eclipse/january/dataset/AbstractDatasetTest.java @@ -13,8 +13,8 @@ import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; @@ -31,6 +31,7 @@ import org.eclipse.january.metadata.StatisticsMetadata; import org.junit.Assert; import org.junit.Test; +import org.junit.function.ThrowingRunnable; public class AbstractDatasetTest { @Test @@ -426,9 +427,7 @@ public void testSqueeze() { ds.setShape(2,1,5); ds.squeeze(); - assertEquals(2, ds.getShapeRef().length); - assertEquals(2, ds.getShapeRef()[0]); - assertEquals(5, ds.getShapeRef()[1]); + assertArrayEquals(new int[] {2, 5}, ds.getShapeRef()); int[] os, ns; os = new int[] { 1, 1 }; @@ -439,47 +438,27 @@ public void testSqueeze() { os = new int[] { 2, 1, 5 }; ns = ShapeUtils.squeezeShape(os, false); - assertEquals(2, ns.length); - assertEquals(2, ns[0]); - assertEquals(5, ns[1]); + assertArrayEquals(new int[] {2, 5}, ns); ns = ShapeUtils.squeezeShape(os, true); - assertEquals(3, ns.length); - assertEquals(2, ns[0]); - assertEquals(1, ns[1]); - assertEquals(5, ns[2]); + assertArrayEquals(new int[] {2, 1, 5}, ns); os = new int[] { 2, 1, 5, 1 }; ns = ShapeUtils.squeezeShape(os, false); - assertEquals(2, ns.length); - assertEquals(2, ns[0]); - assertEquals(5, ns[1]); + assertArrayEquals(new int[] {2, 5}, ns); ns = ShapeUtils.squeezeShape(os, true); - assertEquals(3, ns.length); - assertEquals(2, ns[0]); - assertEquals(1, ns[1]); - assertEquals(5, ns[2]); + assertArrayEquals(new int[] {2, 1, 5}, ns); os = new int[] { 1, 2, 1, 5 }; ns = ShapeUtils.squeezeShape(os, false); - assertEquals(2, ns.length); - assertEquals(2, ns[0]); - assertEquals(5, ns[1]); + assertArrayEquals(new int[] {2, 5}, ns); ns = ShapeUtils.squeezeShape(os, true); - assertEquals(3, ns.length); - assertEquals(2, ns[0]); - assertEquals(1, ns[1]); - assertEquals(5, ns[2]); + assertArrayEquals(new int[] {2, 1, 5}, ns); os = new int[] { 1, 2, 1, 5, 1 }; ns = ShapeUtils.squeezeShape(os, false); - assertEquals(2, ns.length); - assertEquals(2, ns[0]); - assertEquals(5, ns[1]); + assertArrayEquals(new int[] {2, 5}, ns); ns = ShapeUtils.squeezeShape(os, true); - assertEquals(3, ns.length); - assertEquals(2, ns[0]); - assertEquals(1, ns[1]); - assertEquals(5, ns[2]); + assertArrayEquals(new int[] {2, 1, 5}, ns); } /** @@ -493,26 +472,21 @@ public void testTile() { Dataset ta = DatasetUtils.tile(ds, 2); double[] xa = { 0., 1., 2., 0., 1., 2. }; - assertEquals(1, ta.getShapeRef().length); - assertEquals(6, ta.getShapeRef()[0]); + assertArrayEquals(new int[] {6}, ta.getShapeRef()); for (int i = 0; i < xa.length; i++) { assertEquals(xa[i], ((DoubleDataset) ta).getData()[i], 1e-6); } Dataset tb = DatasetUtils.tile(ds, 1, 2); - assertEquals(2, tb.getShapeRef().length); - assertEquals(1, tb.getShapeRef()[0]); - assertEquals(6, tb.getShapeRef()[1]); + assertArrayEquals(new int[] {1, 6}, tb.getShapeRef()); for (int i = 0; i < xa.length; i++) { assertEquals(xa[i], ((DoubleDataset) tb).getData()[i], 1e-6); } Dataset tc = DatasetUtils.tile(ds, 2, 1); - assertEquals(2, tc.getShapeRef().length); - assertEquals(2, tc.getShapeRef()[0]); - assertEquals(3, tc.getShapeRef()[1]); + assertArrayEquals(new int[] {2, 3}, tc.getShapeRef()); for (int i = 0; i < xa.length; i++) { assertEquals(xa[i], ((DoubleDataset) tc).getData()[i], 1e-6); } @@ -523,18 +497,14 @@ public void testTile() { Dataset td = DatasetUtils.tile(ds, 2); double[] xd = { 0., 1., 2., 0., 1., 2., 3., 4., 5., 3., 4., 5. }; - assertEquals(2, td.getShapeRef().length); - assertEquals(2, td.getShapeRef()[0]); - assertEquals(6, td.getShapeRef()[1]); + assertArrayEquals(new int[] {2, 6}, td.getShapeRef()); for (int i = 0; i < xd.length; i++) { assertEquals(xd[i], ((DoubleDataset) td).getData()[i], 1e-6); } Dataset te = DatasetUtils.tile(ds, 1, 2); - assertEquals(2, te.getShapeRef().length); - assertEquals(2, te.getShapeRef()[0]); - assertEquals(6, te.getShapeRef()[1]); + assertArrayEquals(new int[] {2, 6}, te.getShapeRef()); for (int i = 0; i < xd.length; i++) { assertEquals(xd[i], ((DoubleDataset) te).getData()[i], 1e-6); } @@ -542,9 +512,7 @@ public void testTile() { Dataset tf = DatasetUtils.tile(ds, 2, 1); double[] xf = { 0., 1., 2., 3., 4., 5., 0., 1., 2., 3., 4., 5. }; - assertEquals(2, tf.getShapeRef().length); - assertEquals(4, tf.getShapeRef()[0]); - assertEquals(3, tf.getShapeRef()[1]); + assertArrayEquals(new int[] {4, 3}, tf.getShapeRef()); for (int i = 0; i < xf.length; i++) { assertEquals(xf[i], ((DoubleDataset) tf).getData()[i], 1e-6); } @@ -624,9 +592,7 @@ public void testTranspose() { Dataset ta = DatasetUtils.transpose(ds, 1, 0); double[][] xa = { { 0., 1., 2. }, { 3., 4., 5. } }; - assertEquals(2, ta.getShapeRef().length); - assertEquals(3, ta.getShapeRef()[0]); - assertEquals(2, ta.getShapeRef()[1]); + assertArrayEquals(new int[] {3, 2}, ta.getShapeRef()); for (int i = 0; i < 2; i++) { for (int j = 0; j < 3; j++) { assertEquals(xa[i][j], ta.getDouble(j, i), 1e-6); @@ -647,37 +613,30 @@ public void testTranspose() { double[][][] xb = { {{ 0., 1., 2., 3.}, {4., 5., 6., 7.}, {8., 9., 10., 11. }}, {{12., 13., 14., 15.}, {16., 17., 18., 19.}, {20., 21., 22., 23.}} }; - Dataset tb; - - try { - tb = DatasetUtils.transpose(ds, 0); - } catch (IllegalArgumentException e) { - // this is correct. - } catch (Exception e) { - fail("wrong exception type passed from incorrect arguments being passed to the constructor"); - } + final Dataset df = ds; + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() { + DatasetUtils.transpose(df, 0); + } + }); - try { - tb = DatasetUtils.transpose(ds, 0, -1, 0); - } catch (IllegalArgumentException e) { - // this is correct. - } catch (Exception e) { - fail("wrong exception type passed from incorrect arguments being passed to the constructor"); - } + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() { + DatasetUtils.transpose(df, 0, -1, 0); + } + }); - try { - tb = DatasetUtils.transpose(ds, 0, 1, 1); - } catch (IllegalArgumentException e) { - // this is correct. - } catch (Exception e) { - fail("wrong exception type passed from incorrect arguments being passed to the constructor"); - } + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() { + DatasetUtils.transpose(df, 0, 1, 1); + } + }); - tb = DatasetUtils.transpose(ds, 0, 1, 2); - assertEquals(3, tb.getShapeRef().length); - assertEquals(2, tb.getShapeRef()[0]); - assertEquals(3, tb.getShapeRef()[1]); - assertEquals(4, tb.getShapeRef()[2]); + Dataset tb = DatasetUtils.transpose(ds, 0, 1, 2); + assertArrayEquals(new int[] {2, 3, 4}, tb.getShapeRef()); for (int i = 0; i < 2; i++) { for (int j = 0; j < 3; j++) { for (int k = 0; k < 4; k++) { @@ -687,10 +646,7 @@ public void testTranspose() { } tb = DatasetUtils.transpose(ds, 1, 0, 2); - assertEquals(3, tb.getShapeRef().length); - assertEquals(3, tb.getShapeRef()[0]); - assertEquals(2, tb.getShapeRef()[1]); - assertEquals(4, tb.getShapeRef()[2]); + assertArrayEquals(new int[] {3, 2, 4}, tb.getShapeRef()); for (int i = 0; i < 2; i++) { for (int j = 0; j < 3; j++) { for (int k = 0; k < 4; k++) { @@ -700,10 +656,7 @@ public void testTranspose() { } tb = DatasetUtils.transpose(ds, 2, 0, 1); - assertEquals(3, tb.getShapeRef().length); - assertEquals(4, tb.getShapeRef()[0]); - assertEquals(2, tb.getShapeRef()[1]); - assertEquals(3, tb.getShapeRef()[2]); + assertArrayEquals(new int[] {4, 2, 3}, tb.getShapeRef()); for (int i = 0; i < 2; i++) { for (int j = 0; j < 3; j++) { for (int k = 0; k < 4; k++) { @@ -719,22 +672,19 @@ public void testTranspose() { @Test public void testRepeat() { // 2D - Dataset ds = DatasetFactory.createRange(DoubleDataset.class, 6); + final Dataset ds = DatasetFactory.createRange(DoubleDataset.class, 6); ds.setShape(2,3); double[] xa = { 0., 0., 1., 1., 2., 2., 3., 3., 4., 4., 5., 5. }; DoubleDataset ta = (DoubleDataset) DatasetUtils.repeat(ds, new int[] {2}, -1); - assertEquals(1, ta.getShapeRef().length); - assertEquals(12, ta.getShapeRef()[0]); + assertArrayEquals(new int[] {12}, ta.getShapeRef()); for (int i = 0; i < 12; i++) { assertEquals(xa[i], ta.get(i), 1e-6); } double[][] xb = { { 0., 0., 1., 1., 2., 2. }, { 3., 3., 4., 4., 5., 5. } }; DoubleDataset tb = (DoubleDataset) DatasetUtils.repeat(ds, new int[] {2}, 1); - assertEquals(2, tb.getShapeRef().length); - assertEquals(2, tb.getShapeRef()[0]); - assertEquals(6, tb.getShapeRef()[1]); + assertArrayEquals(new int[] {2, 6}, tb.getShapeRef()); for (int i = 0; i < 2; i++) { for (int j = 0; j < 6; j++) { assertEquals(xb[i][j], tb.get(i, j), 1e-6); @@ -743,9 +693,7 @@ public void testRepeat() { double[][] xc = { { 0., 1., 2. }, { 0., 1., 2. }, { 3., 4., 5. }, { 3., 4., 5. } }; DoubleDataset tc = (DoubleDataset) DatasetUtils.repeat(ds, new int[] {2}, 0); - assertEquals(2, tc.getShapeRef().length); - assertEquals(4, tc.getShapeRef()[0]); - assertEquals(3, tc.getShapeRef()[1]); + assertArrayEquals(new int[] {4, 3}, tc.getShapeRef()); for (int i = 0; i < 4; i++) { for (int j = 0; j < 3; j++) { assertEquals(xc[i][j], tc.get(i, j), 1e-6); @@ -754,9 +702,7 @@ public void testRepeat() { double[][] xd = { { 0., 1., 2. }, { 0., 1., 2. }, { 3., 4., 5. } }; DoubleDataset td = (DoubleDataset) DatasetUtils.repeat(ds, new int[] {2, 1}, 0); - assertEquals(2, td.getShapeRef().length); - assertEquals(3, td.getShapeRef()[0]); - assertEquals(3, td.getShapeRef()[1]); + assertArrayEquals(new int[] {3, 3}, td.getShapeRef()); for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { assertEquals(xd[i][j], td.get(i, j), 1e-6); @@ -765,9 +711,7 @@ public void testRepeat() { double[][] xe = { { 0., 1., 1., 2., 2., 2.}, { 3., 4., 4., 5., 5., 5. } }; DoubleDataset te = (DoubleDataset) DatasetUtils.repeat(ds, new int[] {1, 2, 3}, 1); - assertEquals(2, te.getShapeRef().length); - assertEquals(2, te.getShapeRef()[0]); - assertEquals(6, te.getShapeRef()[1]); + assertArrayEquals(new int[] {2, 6}, te.getShapeRef()); for (int i = 0; i < 2; i++) { for (int j = 0; j < 6; j++) { assertEquals(xe[i][j], te.get(i, j), 1e-6); @@ -776,35 +720,31 @@ public void testRepeat() { double[] xf = { 0., 1., 2., 2., 5., 5., 5. }; DoubleDataset tf = (DoubleDataset) DatasetUtils.repeat(ds, new int[] {1, 1, 2, 0, 0, 3}, -1); - assertEquals(1, tf.getShapeRef().length); - assertEquals(7, tf.getShapeRef()[0]); + assertArrayEquals(new int[] {7}, tf.getShapeRef()); for (int i = 0; i < 7; i++) { assertEquals(xf[i], tf.get(i), 1e-6); } - try { - tf = (DoubleDataset) DatasetUtils.repeat(ds, new int[] {0}, 3); - } catch (IllegalArgumentException e) { - // this is correct. - } catch (Exception e) { - fail("wrong exception type passed from incorrect arguments being passed to the constructor"); - } + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() { + DatasetUtils.repeat(ds, new int[] {0}, 3); + } + }); - try { - tf = (DoubleDataset) DatasetUtils.repeat(ds, new int[] {2, 1}, -1); - } catch (IllegalArgumentException e) { - // this is correct. - } catch (Exception e) { - fail("wrong exception type passed from incorrect arguments being passed to the constructor"); - } + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() { + DatasetUtils.repeat(ds, new int[] {2, 1}, -1); + } + }); - try { - tf = (DoubleDataset) DatasetUtils.repeat(ds, new int[] {-1}, -1); - } catch (IllegalArgumentException e) { - // this is correct. - } catch (Exception e) { - fail("wrong exception type passed from incorrect arguments being passed to the constructor"); - } + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() { + DatasetUtils.repeat(ds, new int[] {-1}, -1); + } + }); } /** @@ -994,13 +934,12 @@ public void testToString() { @Test public void testSlicing() { - Dataset a = DatasetFactory.createRange(IntegerDataset.class, 1000); + final Dataset a = DatasetFactory.createRange(IntegerDataset.class, 1000); Dataset s, t; IndexIterator is, it; s = a.getSlice(null, new int[] {10}, null); - assertEquals(1, s.getShapeRef().length); - assertEquals(10, s.getShapeRef()[0]); + assertArrayEquals(new int[] {10}, s.getShapeRef()); is = s.getIterator(); for (int i = 0; is.hasNext(); i++) { @@ -1008,8 +947,7 @@ public void testSlicing() { } t = a.getSlice(new Slice(10)); - assertEquals(1, t.getShapeRef().length); - assertEquals(10, t.getShapeRef()[0]); + assertArrayEquals(new int[] {10}, t.getShapeRef()); it = t.getIterator(); for (int i = 0; it.hasNext(); i++) { @@ -1023,16 +961,13 @@ public void testSlicing() { } s = a.getSlice(new int[]{0}, new int[] {10}, null); - assertEquals(1, s.getShapeRef().length); - assertEquals(10, s.getShapeRef()[0]); + assertArrayEquals(new int[] {10}, s.getShapeRef()); s = a.getSlice(new int[]{-1000}, new int[] {10}, null); - assertEquals(1, s.getShapeRef().length); - assertEquals(10, s.getShapeRef()[0]); + assertArrayEquals(new int[] {10}, s.getShapeRef()); s = a.getSlice(new int[] {9}, null, new int[] {-1}); - assertEquals(1, s.getShapeRef().length); - assertEquals(10, s.getShapeRef()[0]); + assertArrayEquals(new int[] {10}, s.getShapeRef()); is = s.getIterator(); for (int i = 9; is.hasNext(); i--) { @@ -1040,8 +975,7 @@ public void testSlicing() { } t = a.getSlice(new Slice(9, null, -1)); - assertEquals(1, t.getShapeRef().length); - assertEquals(10, t.getShapeRef()[0]); + assertArrayEquals(new int[] {10}, s.getShapeRef()); it = t.getIterator(); for (int i = 9; it.hasNext(); i--) { @@ -1123,26 +1057,26 @@ public void testSlicing() { } // test input SliceND checking - try { - a.getSlice(new SliceND(null)); - fail(); - } catch (IllegalArgumentException e) { - System.out.println("As expected: " + e); - } + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() { + a.getSlice(new SliceND(null)); + } + }); - try { - a.getSlice(new SliceND(new int[0])); - fail(); - } catch (IllegalArgumentException e) { - System.out.println("As expected: " + e); - } + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() { + a.getSlice(new SliceND(new int[0])); + } + }); - try { - a.getSlice(new SliceND(new int[2])); - fail(); - } catch (IllegalArgumentException e) { - System.out.println("As expected: " + e); - } + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() { + a.getSlice(new SliceND(new int[2])); + } + }); s = a.getSlice(new SliceND(a.getShape())); assertEquals("Full slice", a, s); @@ -1173,14 +1107,14 @@ public void testSlicingViews() { c.setShape(6,2,2); assertEquals(c, b); b.setShape(6,4); - try { - b.setShape(2,12); - fail("Should have raised an exception"); - } catch (IllegalArgumentException iae) { - // expected - } catch (Exception e) { - fail("Unexpected exception: " + e); - } + + final Dataset fb = b; + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() { + fb.setShape(2,12); + } + }); b = checkSliceView(a, new int[] {1, -1}, new int[] {-1, 2}, new int[] {1, -2}); // 4x4 checkSliceView(b, new int[] {1, 0}, new int[] {4, 3}, new int[] {2, 1}); @@ -1197,26 +1131,22 @@ public void testSlicingViews() { // test input SliceND checking a = DatasetFactory.createRange(60).reshape(6, 10); - try { - a.getSliceView(new SliceND(null)); - fail(); - } catch (IllegalArgumentException e) { - System.out.println("As expected: " + e); - } + final Dataset fa = a; + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() { + fa.getSliceView(new SliceND(null)); + } + }); - try { - a.getSliceView(new SliceND(new int[0])); - fail(); - } catch (IllegalArgumentException e) { - System.out.println("As expected: " + e); - } + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() { + fa.getSliceView(new SliceND(new int[0])); + } + }); - try { - a.getSliceView(new SliceND(new int[2])); - fail(); - } catch (IllegalArgumentException e) { - System.out.println("As expected: " + e); - } + a.getSliceView(new SliceND(new int[2])); b = a.getSliceView(new SliceND(a.getShape())); assertEquals("Full slice", a, b); @@ -1317,6 +1247,7 @@ public void testSetSlice() { // with broadcasting a = DatasetFactory.createRange(100).reshape(20, 5); + // (20, 5) [2:10, ::2] => (8,3) a.setSlice(DatasetFactory.createRange(ShortDataset.class, 3), new Slice(2, 10), new Slice(null, null, 2)); assertEquals(0, a.getDouble(0, 0), 1e-15); @@ -1337,11 +1268,14 @@ public void testSetSlice() { assertEquals(13, a.getDouble(2, 3), 1e-15); assertEquals(2, a.getDouble(2, 4), 1e-15); - try { - a.setSlice(DatasetFactory.createRange(ShortDataset.class, 3), new Slice(2, 7, 2), new Slice(2, 3)); - fail("Should have thrown an IAE"); - } catch (IllegalArgumentException e) { - } + final Dataset fa = a; + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() { + // (20, 5) [2:7:2, 2:3] => (3,1) + fa.setSlice(DatasetFactory.createRange(ShortDataset.class, 3), new Slice(2, 7, 2), new Slice(2, 3)); + } + }); // compound CompoundDataset c = DatasetFactory.createRange(3, CompoundDoubleDataset.class, 100).reshape(20, 5); @@ -1366,7 +1300,6 @@ public void testFillDataset() { @Test public void test1DErrors() { - // test 1D errors for single value Dataset a = DatasetFactory.createRange(IntegerDataset.class, 100); a.setErrors(5); @@ -1381,12 +1314,8 @@ public void test1DErrors() { Dataset error = a.getErrors(); // check compatibility - try { - ShapeUtils.checkCompatibility(a, error); - } catch (Exception e) { - fail("Error shape is not the same as input datasets"); - } - + ShapeUtils.checkCompatibility(a, error); + assertEquals(5.0, error.getDouble(0), 0.001); assertEquals(5.0, error.getDouble(50), 0.001); assertEquals(5.0, error.getDouble(99), 0.001); @@ -1402,21 +1331,15 @@ public void test1DErrors() { Dataset error2 = a.getErrors(); // check compatibility - try { - ShapeUtils.checkCompatibility(a, error2); - } catch (Exception e) { - fail("Error shape is not the same as input datasets"); - } - + ShapeUtils.checkCompatibility(a, error2); + assertEquals(10.0, error2.getDouble(0), 0.001); assertEquals(10.0, error2.getDouble(50), 0.001); assertEquals(10.0, error2.getDouble(99), 0.001); } - - + @Test public void test2DErrors() { - // test 1D errors for single value Dataset a = DatasetFactory.zeros(IntegerDataset.class, 100, 100); a.setErrors(5); @@ -1431,12 +1354,8 @@ public void test2DErrors() { Dataset error = a.getErrors(); // check compatibility - try { - ShapeUtils.checkCompatibility(a, error); - } catch (Exception e) { - fail("Error shape is not the same as input datasets"); - } - + ShapeUtils.checkCompatibility(a, error); + assertEquals(5.0, error.getDouble(0,0), 0.001); assertEquals(5.0, error.getDouble(50,50), 0.001); assertEquals(5.0, error.getDouble(99,99), 0.001); @@ -1452,12 +1371,8 @@ public void test2DErrors() { Dataset error2 = a.getErrors(); // check compatibility - try { - ShapeUtils.checkCompatibility(a, error2); - } catch (Exception e) { - fail("Error shape is not the same as input datasets"); - } - + ShapeUtils.checkCompatibility(a, error2); + assertEquals(10.0, error2.getDouble(0,0), 0.001); assertEquals(10.0, error2.getDouble(50,50), 0.001); assertEquals(10.0, error2.getDouble(99,99), 0.001); @@ -1484,7 +1399,6 @@ public void testErrors() { @Test public void testSetErrorBuffer() { - Dataset a = DatasetFactory.zeros(IntegerDataset.class, 100, 100); Dataset err = DatasetFactory.createLinearSpace(DoubleDataset.class, 0, a.getSize() - 1, a.getSize()); err.setShape(a.getShapeRef()); @@ -1501,13 +1415,8 @@ public void testSetErrorBuffer() { assertTrue(a.hasErrors()); // now for pulling out the full error array and check compatibility - Dataset error = a.getErrors(); - try { - ShapeUtils.checkCompatibility(a, error); - } catch (Exception e) { - fail("Error shape is not the same as input datasets"); - } - + ShapeUtils.checkCompatibility(a, a.getErrors()); + a.setErrorBuffer(err); assertEquals(0.0, a.getError(0,0), 0.001); @@ -1517,13 +1426,8 @@ public void testSetErrorBuffer() { assertTrue(a.hasErrors()); // now for pulling out the full error array and check compatibility - error = a.getErrors(); - try { - ShapeUtils.checkCompatibility(a, error); - } catch (Exception e) { - fail("Error shape is not the same as input datasets"); - } - + ShapeUtils.checkCompatibility(a, a.getErrors()); + a.setErrorBuffer(err.getBuffer()); assertEquals(0.0, a.getError(0,0), 0.001); @@ -1533,12 +1437,7 @@ public void testSetErrorBuffer() { assertTrue(a.hasErrors()); // now for pulling out the full error array and check compatibility - error = a.getErrors(); - try { - ShapeUtils.checkCompatibility(a, error); - } catch (Exception e) { - fail("Error shape is not the same as input datasets"); - } + ShapeUtils.checkCompatibility(a, a.getErrors()); } @Test @@ -1675,7 +1574,7 @@ public void testCast() { udata = new long[] {0, 1, 127, 128, 255, 256, 32767, 32768, 65535, 65536, 2147483647L, 2147483648L, 4294967295L, 4294967296L}; d = new LongDataset(udata); c = DatasetUtils.cast(IntegerDataset.class, d); - Assert.assertTrue(c.max().doubleValue() < d.max().doubleValue()); // check stored values + assertTrue(c.max().doubleValue() < d.max().doubleValue()); // check stored values a = DatasetFactory.createFromObject(true, c); assertEquals("Cast", 0, a.getLong(13)); for (int i = 0; i < 13; i++) { @@ -1683,7 +1582,7 @@ public void testCast() { } c = DatasetUtils.cast(ShortDataset.class, d); - Assert.assertTrue(c.max().doubleValue() < d.max().doubleValue()); + assertTrue(c.max().doubleValue() < d.max().doubleValue()); a = DatasetFactory.createFromObject(true, c); assertEquals("Cast", 0, a.getLong(9)); for (int i = 0; i < 9; i++) { @@ -1691,7 +1590,7 @@ public void testCast() { } c = DatasetUtils.cast(ByteDataset.class, d); - Assert.assertTrue(c.max().doubleValue() < d.max().doubleValue()); + assertTrue(c.max().doubleValue() < d.max().doubleValue()); a = DatasetFactory.createFromObject(true, c); assertEquals("Cast", 0, a.getLong(5)); for (int i = 0; i < 5; i++) { @@ -1758,10 +1657,10 @@ public void testRoll() { @Test public void testRollAxis() { Dataset a = DatasetFactory.ones(ByteDataset.class, 3, 4, 5, 6); - Assert.assertArrayEquals(new int[] {3, 6, 4, 5}, DatasetUtils.rollAxis(a, 3, 1).getShapeRef()); - Assert.assertArrayEquals(new int[] {5, 3, 4, 6}, DatasetUtils.rollAxis(a, 2, 0).getShapeRef()); - Assert.assertArrayEquals(new int[] {3, 5, 6, 4}, DatasetUtils.rollAxis(a, 1, 4).getShapeRef()); - Assert.assertArrayEquals(new int[] {3, 6, 4, 5}, DatasetUtils.rollAxis(a, -1, 1).getShapeRef()); + assertArrayEquals(new int[] {3, 6, 4, 5}, DatasetUtils.rollAxis(a, 3, 1).getShapeRef()); + assertArrayEquals(new int[] {5, 3, 4, 6}, DatasetUtils.rollAxis(a, 2, 0).getShapeRef()); + assertArrayEquals(new int[] {3, 5, 6, 4}, DatasetUtils.rollAxis(a, 1, 4).getShapeRef()); + assertArrayEquals(new int[] {3, 6, 4, 5}, DatasetUtils.rollAxis(a, -1, 1).getShapeRef()); } @Test @@ -1849,38 +1748,40 @@ public void testChoose() { Dataset a = DatasetFactory.createFromObject(new double[] { 0, 1, 3, 5, -7, -9 }); Dataset b = DatasetFactory.createFromObject(new double[] { 0.01, 1.2, 2.9, 5, -7.1, -9 }); - Dataset c = a.clone().reshape(2, 3); + final Dataset c = a.clone().reshape(2, 3); IntegerDataset d = DatasetFactory.createFromObject(IntegerDataset.class, new int[] {0, 0, 1, 1, 0, 1}, 2, 3); Dataset e = DatasetUtils.choose(d, new Object[] {c, -2}, true, false); assertDatasetEquals(DatasetFactory.createFromObject(new double[] {0, 1, -2, -2, -7, -2}, 2, 3), e); d = DatasetFactory.createFromObject(IntegerDataset.class, new int[] {-2, 0, 3, 1, 0, 2}, 2, 3); - try { - e = DatasetUtils.choose(d, new Object[] {c, -2}, true, false); - fail("Should have thrown an array index OOB exception"); - } catch (ArrayIndexOutOfBoundsException oob) { - // expected - } + final IntegerDataset fd = d; + assertThrows(ArrayIndexOutOfBoundsException.class, new ThrowingRunnable() { + @Override + public void run() { + DatasetUtils.choose(fd, new Object[] {c, -2}, true, false); + } + }); + e = DatasetUtils.choose(d, new Object[] {c, -2}, false, false); assertDatasetEquals(DatasetFactory.createFromObject(new double[] {0, 1, -2, -2, -7, -9}, 2, 3), e); e = DatasetUtils.choose(d, new Object[] {c, -2}, false, true); assertDatasetEquals(DatasetFactory.createFromObject(new double[] {0, 1, -2, -2, -7, -2}, 2, 3), e); - Dataset f = b.clone().reshape(2, 3); + final Dataset f = b.clone().reshape(2, 3); IntegerDataset g = DatasetFactory.createFromObject(IntegerDataset.class, new int[] {1, 0, 1, 1, 2, 2}, 2, 3); e = DatasetUtils.choose(g, new Object[] {c, f, -2}, true, false); assertDatasetEquals(DatasetFactory.createFromObject(new double[] {0.01, 1, 2.9, 5, -2, -2}, 2, 3), e); g = DatasetFactory.createFromObject(IntegerDataset.class, new int[] {-1, 3, 1, 1, 2, 2}, 2, 3); - try { - e = DatasetUtils.choose(d, new Object[] {c, f, -2}, true, false); - fail("Should have thrown an array index OOB exception"); - } catch (ArrayIndexOutOfBoundsException oob) { - // expected - } + assertThrows(ArrayIndexOutOfBoundsException.class, new ThrowingRunnable() { + @Override + public void run() { + DatasetUtils.choose(fd, new Object[] {c, f, -2}, true, false); + } + }); e = DatasetUtils.choose(g, new Object[] {c, f, -2}, false, false); assertDatasetEquals(DatasetFactory.createFromObject(new double[] {-2, 1, 2.9, 5, -2, -2}, 2, 3), e); @@ -1896,8 +1797,8 @@ public void testSize() { int[] small = new int[] {2}; int[] medium = new int[] {1024, 1024}; int[] large = new int[] {1024, 1024, 1024}; - int[] xxxlarge = new int[] {1024, 1024, 1024, 1024}; - int[] bad = new int[] {1024, -1, 1024}; + final int[] xxxlarge = new int[] {1024, 1024, 1024, 1024}; + final int[] bad = new int[] {1024, -1, 1024}; assertEquals(0, ShapeUtils.calcLongSize(zero)); assertEquals(0, ShapeUtils.calcSize(zero)); @@ -1915,37 +1816,31 @@ public void testSize() { assertEquals(1024*1024*1024, ShapeUtils.calcSize(large)); assertEquals(1024*1024*1024*1024L, ShapeUtils.calcLongSize(xxxlarge)); - try { - ShapeUtils.calcSize(xxxlarge); - fail("Should have thrown an illegal argument exception"); - } catch (IllegalArgumentException e) { - // expected - } catch (Throwable t) { - fail("Should have thrown an illegal argument exception"); - } + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() { + ShapeUtils.calcSize(xxxlarge); + } + }); - try { - ShapeUtils.calcLongSize(bad); - fail("Should have thrown an illegal argument exception"); - } catch (IllegalArgumentException e) { - // expected - } catch (Throwable t) { - fail("Should have thrown an illegal argument exception"); - } + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() { + ShapeUtils.calcLongSize(bad); + } + }); - try { - ShapeUtils.calcSize(bad); - fail("Should have thrown an illegal argument exception"); - } catch (IllegalArgumentException e) { - // expected - } catch (Throwable t) { - fail("Should have thrown an illegal argument exception"); - } + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() { + ShapeUtils.calcSize(bad); + } + }); } @Test public void testFill() { - Dataset a = DatasetFactory.createRange(DoubleDataset.class, 12); + final Dataset a = DatasetFactory.createRange(DoubleDataset.class, 12); Dataset b = DatasetFactory.zeros(a); a.fill(0); @@ -1966,11 +1861,12 @@ public void testFill() { a.fill(DatasetFactory.createFromObject(new int[] {0})); assertDatasetEquals(b, a, 1e-15, 1e-20); - try { - a.fill(DatasetFactory.createFromObject(new int[] {0, 1})); - fail(); - } catch (IllegalArgumentException e) { - } + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() { + a.fill(DatasetFactory.createFromObject(new int[] {0, 1})); + } + }); } @Test @@ -2176,7 +2072,7 @@ public void testBroadcast() { private Dataset checkBroadcast2D(Dataset a, boolean broadcastFirstDim, int... broadcastShape) { Dataset b = a.getBroadcastView(broadcastShape); - Assert.assertArrayEquals(broadcastShape, b.getShapeRef()); + assertArrayEquals(broadcastShape, b.getShapeRef()); int size = ShapeUtils.calcSize(broadcastShape); assertEquals(size, b.getSize()); diff --git a/org.eclipse.january.test/src/org/eclipse/january/dataset/LazyDatasetTest.java b/org.eclipse.january.test/src/org/eclipse/january/dataset/LazyDatasetTest.java index ff40fb7c..c8158751 100644 --- a/org.eclipse.january.test/src/org/eclipse/january/dataset/LazyDatasetTest.java +++ b/org.eclipse.january.test/src/org/eclipse/january/dataset/LazyDatasetTest.java @@ -15,6 +15,7 @@ import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertThrows; import static org.junit.Assert.fail; import java.util.Arrays; @@ -24,6 +25,7 @@ import org.eclipse.january.metadata.AxesMetadata; import org.eclipse.january.metadata.MetadataFactory; import org.junit.Test; +import org.junit.function.ThrowingRunnable; public class LazyDatasetTest { @@ -81,7 +83,7 @@ public void testSetShape() { public void testGetSlice() throws Exception { final int[] shape = new int[] {1, 2, 3, 4}; final Dataset d = Random.randn(shape); - LazyDataset ld = LazyDataset.createLazyDataset(d); + final LazyDataset ld = LazyDataset.createLazyDataset(d); Slice[] slice; slice = new Slice[]{null, new Slice(1), null, new Slice(1, 3)}; @@ -135,26 +137,26 @@ public void testGetSlice() throws Exception { assertEquals("Full negative slice", d.getSlice(slice), nd); // test input SliceND checking - try { - ld.getSlice(new SliceND(null)); - fail(); - } catch (IllegalArgumentException e) { - System.out.println("As expected: " + e); - } + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() throws Throwable { + ld.getSlice(new SliceND(null)); + } + }); - try { - ld.getSlice(new SliceND(new int[0])); - fail(); - } catch (IllegalArgumentException e) { - System.out.println("As expected: " + e); - } + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() throws Throwable { + ld.getSlice(new SliceND(new int[0])); + } + }); - try { - ld.getSlice(new SliceND(new int[2])); - fail(); - } catch (IllegalArgumentException e) { - System.out.println("As expected: " + e); - } + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() throws Throwable { + ld.getSlice(new SliceND(new int[2])); + } + }); nd = ld.getSlice(new SliceND(ld.getShape())); assertEquals("Full slice", d.getSlice(), nd); @@ -164,7 +166,7 @@ public void testGetSlice() throws Exception { public void testGetSliceView() throws Exception { final int[] shape = new int[] {6, 2, 4, 1}; final Dataset d = Random.randn(shape); - LazyDataset ld = LazyDataset.createLazyDataset(d); + final LazyDataset ld = LazyDataset.createLazyDataset(d); Slice[] slice; slice = new Slice[]{new Slice(1, null, 3), new Slice(1), new Slice(1, 3), null}; @@ -196,26 +198,26 @@ public void testGetSliceView() throws Exception { assertEquals("Full negative slice", d.getSlice(slice), l.getSlice()); // test input SliceND checking - try { - ld.getSliceView(new SliceND(null)); - fail(); - } catch (IllegalArgumentException e) { - System.out.println("As expected: " + e); - } + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() throws Throwable { + ld.getSliceView(new SliceND(null)); + } + }); - try { - ld.getSliceView(new SliceND(new int[0])); - fail(); - } catch (IllegalArgumentException e) { - System.out.println("As expected: " + e); - } + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() throws Throwable { + ld.getSliceView(new SliceND(new int[0])); + } + }); - try { - ld.getSliceView(new SliceND(new int[2])); - fail(); - } catch (IllegalArgumentException e) { - System.out.println("As expected: " + e); - } + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() throws Throwable { + ld.getSliceView(new SliceND(new int[2])); + } + }); l = ld.getSliceView(new SliceND(ld.getShape())); assertEquals("Full slice", d, l.getSlice()); diff --git a/org.eclipse.january.test/src/org/eclipse/january/dataset/SliceNDTest.java b/org.eclipse.january.test/src/org/eclipse/january/dataset/SliceNDTest.java index 0d60160a..076d2b7c 100644 --- a/org.eclipse.january.test/src/org/eclipse/january/dataset/SliceNDTest.java +++ b/org.eclipse.january.test/src/org/eclipse/january/dataset/SliceNDTest.java @@ -12,16 +12,18 @@ import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; import org.junit.Test; +import org.junit.function.ThrowingRunnable; public class SliceNDTest { @Test public void testSliceND() { - int[] step; + final int[] step; int[] lstart; int[] lstop; SliceND slice; @@ -30,6 +32,7 @@ public void testSliceND() { slice = new SliceND(null); assertTrue(slice.isAll()); assertEquals("", slice.toString()); + assertNull(slice.convertToSlice()); // zero-rank dataset slice = new SliceND(new int[0]); @@ -41,33 +44,32 @@ public void testSliceND() { assertFalse(slice.isAll()); assertEquals(":", slice.toString()); - step = new int[] {}; lstart = new int[] {}; lstop = new int[] {}; - slice = new SliceND(new int[] {}, null, null, step); + slice = new SliceND(new int[] {}, null, null, new int[] {}); assertArrayEquals(new int[] {}, slice.getShape()); - try { - slice = new SliceND(new int[] {1}, null, null, step); - fail(); - } catch (IllegalArgumentException e) { - System.out.println("As expected: " + e); - } + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() throws Throwable { + new SliceND(new int[] {1}, null, null, new int[] {}); + } + }); - try { - slice = new SliceND(new int[] {3}, null, null, new int[1]); - fail(); - } catch (IllegalArgumentException e) { - System.out.println("As expected: " + e); - } + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() throws Throwable { + new SliceND(new int[] {3}, null, null, new int[1]); + } + }); step = new int[] {2}; - try { - slice = new SliceND(new int[] {2, 3}, null, null, step); - fail(); - } catch (IllegalArgumentException e) { - System.out.println("As expected: " + e); - } + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() throws Throwable { + new SliceND(new int[] {2, 3}, null, null, step); + } + }); lstart = new int[1]; lstop = new int[1]; @@ -75,6 +77,7 @@ public void testSliceND() { assertArrayEquals(new int[] {4}, slice.getShape()); assertArrayEquals(new int[] {0}, slice.getStart()); assertArrayEquals(new int[] {7}, slice.getStop()); + assertArrayEquals(new int[] {7}, slice.getMaxShape()); lstart[0] = 0; slice = new SliceND(new int[] {7}, lstart, null, step); @@ -155,13 +158,13 @@ public void testSliceND() { assertArrayEquals(new int[] {4}, slice.getStart()); assertArrayEquals(new int[] {4}, slice.getStop()); - step = new int[] {-2}; - try { - slice = new SliceND(new int[] {2, 3}, null, null, step); - fail(); - } catch (IllegalArgumentException e) { - System.out.println("As expected: " + e); - } + step[0] = -2; + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() throws Throwable { + new SliceND(new int[] {2, 3}, null, null, step); + } + }); slice = new SliceND(new int[] {7}, null, null, step); assertArrayEquals(new int[] {4}, slice.getShape()); @@ -291,32 +294,76 @@ public void testSliceND() { assertArrayEquals(new int[] {0, 3}, slice.getShape()); assertArrayEquals(new int[] {1, 1}, slice.getStart()); assertArrayEquals(new int[] {1, 4}, slice.getStop()); - } + + slice = new SliceND(new int[] {8, 4}, new Slice(1,8,-3), new Slice(1, 4)); + assertArrayEquals(new int[] {0, 3}, slice.getShape()); + assertArrayEquals(new int[] {1, 1}, slice.getStart()); + assertArrayEquals(new int[] {1, 4}, slice.getStop()); + + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() throws Throwable { + new SliceND(new int[] {2, 3}, new Slice[] {null, null, null}); + } + }); +} @Test public void testExpandedSliceND() { - int[] step; + final int[] step; int[] lstart; int[] lstop; SliceND slice; - step = new int[] {}; lstart = new int[] {}; lstop = new int[] {}; - try { - slice = new SliceND(new int[] {1}, new int[] {}, null, null, null); - fail(); - } catch (IllegalArgumentException e) { - System.out.println("As expected: " + e); - } - - try { - slice = new SliceND(new int[] {1}, new int[] {2, 2}, null, null, null); - fail(); - } catch (IllegalArgumentException e) { - System.out.println("As expected: " + e); - } + slice = new SliceND(null, null, null, null, null); + assertArrayEquals(new int[] {}, slice.getShape()); + assertArrayEquals(new int[] {}, slice.getStart()); + assertArrayEquals(new int[] {}, slice.getStop()); + + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() throws Throwable { + new SliceND(new int[] {1}, new int[] {}, null, null, null); + } + }); + + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() throws Throwable { + new SliceND(new int[] {1}, new int[] {2, 2}, null, null, null); + } + }); + + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() throws Throwable { + new SliceND(new int[] {5}, new int[] {2}, null, null, null); + } + }); + + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() throws Throwable { + new SliceND(new int[] {5}, new int[] {2}, new int[0], null, null); + } + }); + + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() throws Throwable { + new SliceND(new int[] {5}, new int[] {2}, null, new int[2], null); + } + }); + + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() throws Throwable { + new SliceND(new int[] {5}, new int[] {2}, null, null, new int[0]); + } + }); step = new int[] {2}; @@ -326,12 +373,15 @@ public void testExpandedSliceND() { assertArrayEquals(new int[] {4}, slice.getShape()); assertArrayEquals(new int[] {0}, slice.getStart()); assertArrayEquals(new int[] {7}, slice.getStop()); + assertArrayEquals(new int[] {9}, slice.getMaxShape()); + assertFalse(slice.isExpanded()); lstart[0] = 0; slice = new SliceND(new int[] {7}, new int[] {9}, lstart, null, step); assertArrayEquals(new int[] {4}, slice.getShape()); assertArrayEquals(new int[] {0}, slice.getStart()); assertArrayEquals(new int[] {7}, slice.getStop()); + assertFalse(slice.isExpanded()); lstart[0] = 3; slice = new SliceND(new int[] {7}, new int[] {9}, lstart, null, step); @@ -341,22 +391,45 @@ public void testExpandedSliceND() { lstart[0] = 8; slice = new SliceND(new int[] {7}, new int[] {9}, lstart, null, step); - assertArrayEquals(new int[] {1}, slice.getShape()); + assertArrayEquals(new int[] {0}, slice.getShape()); assertArrayEquals(new int[] {8}, slice.getStart()); - assertArrayEquals(new int[] {9}, slice.getStop()); + assertArrayEquals(new int[] {8}, slice.getStop()); + assertTrue(slice.isExpanded()); lstart[0] = 8; - slice = new SliceND(new int[] {7}, new int[] {9}, lstart, new int[] {10}, step); + lstop[0] = 10; + slice = new SliceND(new int[] {7}, new int[] {9}, lstart, lstop, step); assertArrayEquals(new int[] {1}, slice.getShape()); assertArrayEquals(new int[] {8}, slice.getStart()); assertArrayEquals(new int[] {9}, slice.getStop()); + assertTrue(slice.isExpanded()); lstart[0] = 10; - slice = new SliceND(new int[] {7}, new int[] {9}, lstart, new int[] {10}, step); + slice = new SliceND(new int[] {7}, new int[] {9}, lstart, lstop, step); assertArrayEquals(new int[] {0}, slice.getShape()); assertArrayEquals(new int[] {9}, slice.getStart()); assertArrayEquals(new int[] {9}, slice.getStop()); + lstart[0] = 5; + lstop[0] = 2; + slice = new SliceND(new int[] {7}, new int[] {9}, lstart, lstop, step); + assertArrayEquals(new int[] {0}, slice.getShape()); + assertArrayEquals(new int[] {5}, slice.getStart()); + assertArrayEquals(new int[] {5}, slice.getStop()); + + lstart[0] = 12; + lstop[0] = 6; + slice = new SliceND(new int[] {7}, new int[] {19}, lstart, lstop, step); + assertArrayEquals(new int[] {0}, slice.getShape()); + assertArrayEquals(new int[] {12}, slice.getStart()); + assertArrayEquals(new int[] {12}, slice.getStop()); + + lstop[0] = 8; + slice = new SliceND(new int[] {7}, new int[] {19}, lstart, lstop, step); + assertArrayEquals(new int[] {0}, slice.getShape()); + assertArrayEquals(new int[] {12}, slice.getStart()); + assertArrayEquals(new int[] {12}, slice.getStop()); + lstart[0] = 10; slice = new SliceND(new int[] {7}, new int[] {9}, lstart, null, step); assertArrayEquals(new int[] {0}, slice.getShape()); @@ -377,17 +450,17 @@ public void testExpandedSliceND() { lstart[0] = 7; slice = new SliceND(new int[] {7}, new int[] {9}, lstart, null, step); - assertArrayEquals(new int[] {1}, slice.getShape()); + assertArrayEquals(new int[] {0}, slice.getShape()); assertArrayEquals(new int[] {7}, slice.getStart()); - assertArrayEquals(new int[] {9}, slice.getStop()); - assertArrayEquals(new int[] {9}, slice.getSourceShape()); + assertArrayEquals(new int[] {7}, slice.getStop()); + assertArrayEquals(new int[] {7}, slice.getSourceShape()); lstart[0] = 8; slice = new SliceND(new int[] {7}, new int[] {9}, lstart, null, step); - assertArrayEquals(new int[] {1}, slice.getShape()); + assertArrayEquals(new int[] {0}, slice.getShape()); assertArrayEquals(new int[] {8}, slice.getStart()); - assertArrayEquals(new int[] {9}, slice.getStop()); - assertArrayEquals(new int[] {9}, slice.getSourceShape()); + assertArrayEquals(new int[] {8}, slice.getStop()); + assertArrayEquals(new int[] {8}, slice.getSourceShape()); assertFalse(slice.isAll()); lstop[0] = 7; @@ -436,13 +509,13 @@ public void testExpandedSliceND() { assertArrayEquals(new int[] {9}, slice.getStop()); assertArrayEquals(new int[] {9}, slice.getSourceShape()); - step = new int[] {-2}; - try { - slice = new SliceND(new int[] {2, 3}, null, null, step); - fail(); - } catch (IllegalArgumentException e) { - System.out.println("As expected: " + e); - } + step[0] = -2; + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() throws Throwable { + new SliceND(new int[] {2, 3}, null, null, step); + } + }); slice = new SliceND(new int[] {7}, new int[] {9}, null, null, step); assertArrayEquals(new int[] {4}, slice.getShape()); @@ -550,12 +623,22 @@ public void testExpandedSliceND() { assertArrayEquals(new int[] {4}, slice.getShape()); assertArrayEquals(new int[] {6}, slice.getStart()); assertArrayEquals(new int[] {-1}, slice.getStop()); + + slice = new SliceND(new int[] {7, 12}, new int[] {9, 12}, (Slice[]) null); + assertArrayEquals(new int[] {7, 12}, slice.getShape()); + assertArrayEquals(new int[] {0, 0}, slice.getStart()); + assertArrayEquals(new int[] {7, 12}, slice.getStop()); + + slice = new SliceND(new int[] {7, 12}, new int[] {9, 12}, new Slice(null, -8, step[0]), null); + assertArrayEquals(new int[] {4, 12}, slice.getShape()); + assertArrayEquals(new int[] {6, 0}, slice.getStart()); + assertArrayEquals(new int[] {-1, 12}, slice.getStop()); } @Test public void testUnlimitedSliceND() { - int[] step; - int[] lstart; + final int[] step; + final int[] lstart; int[] lstop; SliceND slice; @@ -593,20 +676,16 @@ public void testUnlimitedSliceND() { assertArrayEquals(new int[] {7}, slice.getStop()); lstart[0] = 7; - try { - slice = new SliceND(new int[] {7}, new int[] {-1}, lstart, null, step); - fail(); - } catch (IllegalArgumentException e) { - System.out.println("As expected: " + e); - } + slice = new SliceND(new int[] {7}, new int[] {-1}, lstart, null, step); + assertArrayEquals(new int[] {0}, slice.getShape()); + assertArrayEquals(new int[] {7}, slice.getStart()); + assertArrayEquals(new int[] {7}, slice.getStop()); lstart[0] = 8; - try { - slice = new SliceND(new int[] {7}, new int[] {-1}, lstart, null, step); - fail(); - } catch (IllegalArgumentException e) { - System.out.println("As expected: " + e); - } + slice = new SliceND(new int[] {7}, new int[] {-1}, lstart, null, step); + assertArrayEquals(new int[] {0}, slice.getShape()); + assertArrayEquals(new int[] {8}, slice.getStart()); + assertArrayEquals(new int[] {8}, slice.getStop()); lstop[0] = 7; slice = new SliceND(new int[] {7}, new int[] {-1}, null, lstop, step); @@ -676,14 +755,28 @@ public void testUnlimitedSliceND() { assertArrayEquals(new int[] {12}, slice.getStop()); assertArrayEquals(new int[] {12}, slice.getSourceShape()); + lstart[0] = 9; + lstop[0] = 8; + slice = new SliceND(new int[] {7}, new int[] {-1}, lstart, lstop, step); + assertArrayEquals(new int[] {0}, slice.getShape()); + assertArrayEquals(new int[] {9}, slice.getStart()); + assertArrayEquals(new int[] {9}, slice.getStop()); + assertArrayEquals(new int[] {9}, slice.getSourceShape()); - step = new int[] {-2}; - try { - slice = new SliceND(new int[] {2, 3}, null, null, step); - fail(); - } catch (IllegalArgumentException e) { - System.out.println("As expected: " + e); - } + lstop[0] = 2; + slice = new SliceND(new int[] {7}, new int[] {-1}, lstart, lstop, step); + assertArrayEquals(new int[] {0}, slice.getShape()); + assertArrayEquals(new int[] {9}, slice.getStart()); + assertArrayEquals(new int[] {9}, slice.getStop()); + assertArrayEquals(new int[] {9}, slice.getSourceShape()); + + step[0]= -2; + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() throws Throwable { + new SliceND(new int[] {2, 3}, null, null, step); + } + }); slice = new SliceND(new int[] {7}, new int[] {-1}, null, null, step); assertArrayEquals(new int[] {4}, slice.getShape()); @@ -801,6 +894,10 @@ public void testIsAll() { slice = new SliceND(new int[] {}, null, null, step); assertTrue(slice.isAll()); + step = new int[] {1}; + slice = new SliceND(new int[] {7}, null, null, step); + assertTrue(slice.isAll()); + step = new int[] {-1}; slice = new SliceND(new int[] {7}, null, null, step); assertFalse(slice.isAll()); @@ -934,21 +1031,18 @@ public void testIsAll() { @Test public void testFlip() { + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() throws Throwable { + new SliceND(new int[] {}, null, null, new int[] {}).flip(0); + } + }); + int[] step; int[] lstart; SliceND slice; - step = new int[] {}; - slice = new SliceND(new int[] {}, null, null, step); - try { - slice.flip(0); - fail(); - } catch (IllegalArgumentException e) { - System.out.println("As expected: " + e); - } - step = new int[] {2}; - lstart = new int[1]; slice = new SliceND(new int[] {7}, null, null, step).flip(); assertArrayEquals(new int[] {4}, slice.getShape()); @@ -1068,12 +1162,17 @@ public void testSliceNDNegativeStepEndPoints() { @Test public void testSliceWithinShape() { assertTrue(SliceND.isSliceWithinShape(0, 0, 0, 1)); + assertFalse(SliceND.isSliceWithinShape(0, 1, 0, 1)); + assertFalse(SliceND.isSliceWithinShape(0, 0, 1, 1)); assertTrue(SliceND.isSliceWithinShape(5, 0, 5, 1)); assertTrue(SliceND.isSliceWithinShape(5, 1, 1, 1)); + assertFalse(SliceND.isSliceWithinShape(5, -1, 1, 1)); + assertFalse(SliceND.isSliceWithinShape(5, 3, 2, 1)); assertTrue(SliceND.isSliceWithinShape(5, 1, 5, 1)); assertTrue(SliceND.isSliceWithinShape(5, 4, 4, 1)); assertFalse(SliceND.isSliceWithinShape(5, 5, 5, 1)); + assertFalse(SliceND.isSliceWithinShape(5, 4, 6, 1)); assertFalse(SliceND.isSliceWithinShape(5, 2, 1, 1)); assertTrue(SliceND.isSliceWithinShape(5, 4, -1, -1)); @@ -1083,148 +1182,360 @@ public void testSliceWithinShape() { assertFalse(SliceND.isSliceWithinShape(5, 5, 5, -1)); assertFalse(SliceND.isSliceWithinShape(5, -1, -1, -1)); assertFalse(SliceND.isSliceWithinShape(5, 1, 2, -1)); + assertFalse(SliceND.isSliceWithinShape(5, 4, -2, -1)); } @Test public void testUpdateSourceShape() { - SliceND slice = new SliceND(new int[] {8, 4}, new int[] {6 , 1}, new int[] {2, 4}, new int[] {-3, 1}); - - slice.updateSourceShape(13, 4); - - slice.updateSourceShape(8, 6); - - try { - slice.updateSourceShape(8, 3); - fail(); - } catch (IllegalArgumentException e) { - System.out.println("As expected: " + e); - } - - try { - slice.updateSourceShape(3, 4); - fail(); - } catch (IllegalArgumentException e) { - System.out.println("As expected: " + e); - } - - try { - slice.updateSourceShape(1, 4); - fail(); - } catch (IllegalArgumentException e) { - System.out.println("As expected: " + e); - } - - try { - slice.updateSourceShape(3); - fail(); - } catch (IllegalArgumentException e) { - System.out.println("As expected: " + e); - } - - try { - slice.updateSourceShape(); - fail(); - } catch (IllegalArgumentException e) { - System.out.println("As expected: " + e); - } - - try { - slice.updateSourceShape(null); - fail(); - } catch (IllegalArgumentException e) { - System.out.println("As expected: " + e); - } - - slice = new SliceND(null); - slice.updateSourceShape(null); - - try { - slice.updateSourceShape(); - fail(); - } catch (IllegalArgumentException e) { - System.out.println("As expected: " + e); - } - - try { - slice.updateSourceShape(3); - fail(); - } catch (IllegalArgumentException e) { - System.out.println("As expected: " + e); - } + // (8,12)[6:2:-3, 5:9] => (2,3) + final SliceND slice = new SliceND(new int[] {8, 12}, new int[] {6 , 5}, new int[] {2, 9}, new int[] {-3, 1}); + + slice.updateSourceShape(13, 12); + + slice.updateSourceShape(8,14); + + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() throws Throwable { + slice.updateSourceShape(8, 3); + } + }); + + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() throws Throwable { + slice.updateSourceShape(8, 3); + } + }); + + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() throws Throwable { + slice.updateSourceShape(3, 4); + } + }); + + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() throws Throwable { + slice.updateSourceShape(1, 4); + } + }); + + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() throws Throwable { + slice.updateSourceShape(3); + } + }); + + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() throws Throwable { + slice.updateSourceShape(); + } + }); + + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() throws Throwable { + slice.updateSourceShape(null); + } + }); + + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() throws Throwable { + slice.updateSourceShape(); + } + }); + + final SliceND slice1 = new SliceND(null); + slice1.updateSourceShape(null); + + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() throws Throwable { + slice1.updateSourceShape(3); + } + }); } @Test public void testCheckShapes() { - SliceND slice = new SliceND(new int[] {8, 4}, new int[] {6 , 1}, new int[] {2, 4}, new int[] {-3, 1}); - - slice.checkShapes(new int[] {8, 4}, null); - - try { - slice.checkShapes(new int[] {7}, null); - fail(); - } catch (IllegalArgumentException e) { - System.out.println("As expected: " + e); - } + // [6:2:-3, 1:] in (8,4) has output shape is (2,3) + final SliceND slice1 = new SliceND(new int[] {8, 4}, new int[] {6 , 1}, new int[] {2, 4}, new int[] {-3, 1}); + + slice1.checkShapes(new int[] {8, 4}, null); + + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() throws Throwable { + slice1.checkShapes(new int[] {7}, null); + } + }); + + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() throws Throwable { + slice1.checkShapes(new int[] {7, 2}, null); + } + }); + + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() throws Throwable { + slice1.checkShapes(new int[] {6, 4}, null); + } + }); + + slice1.checkShapes(new int[] {6, 4}, new int[] {12, ILazyWriteableDataset.UNLIMITED}); + + slice1.checkShapes(new int[] {6, 4}, new int[] {ILazyWriteableDataset.UNLIMITED, 4}); + + // [6:2:-3, 2:] in (8,4) [max (12,6)] has output shape (2,3) + final SliceND slice2 = new SliceND(new int[] {8, 4}, new int[] {12, 6}, + new int[] {6 , 1}, new int[] {2, 4}, new int[] {-3, 1}); - try { - slice.checkShapes(new int[] {7, 4}, null); - fail(); - } catch (IllegalArgumentException e) { - System.out.println("As expected: " + e); - } + slice2.checkShapes(new int[] {10, 4}, null); - try { - slice.checkShapes(new int[] {6, 4}, null); - fail(); - } catch (IllegalArgumentException e) { - System.out.println("As expected: " + e); - } + slice2.checkShapes(new int[] {8, 4}, null); - slice.checkShapes(new int[] {6, 4}, new int[] {12, ILazyWriteableDataset.UNLIMITED}); + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() throws Throwable { + slice2.checkShapes(new int[] {6, 4}, null); + } + }); - slice.checkShapes(new int[] {6, 4}, new int[] {ILazyWriteableDataset.UNLIMITED, 4}); + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() throws Throwable { + slice2.checkShapes(new int[] {5, 5}, null); + } + }); - slice = new SliceND(new int[] {8, 4}, new int[] {12, 6}, - new int[] {6 , 1}, new int[] {2, 4}, new int[] {-3, 1}); + slice2.checkShapes(new int[] {7, 5}, new int[] {8, 4}); + slice2.checkShapes(new int[] {5, 5}, new int[] {8, 4}); + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() throws Throwable { + // b >= m + slice2.checkShapes(new int[] {5, 5}, new int[] {5, 4}); + } + }); - slice.checkShapes(new int[] {10, 4}, null); + slice2.checkShapes(new int[] {7, 3}, new int[] {8, 4}); + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() throws Throwable { + slice2.checkShapes(new int[] {7, 3}, new int[] {8, 3}); + } + }); - slice.checkShapes(new int[] {8, 4}, null); + slice2.checkShapes(new int[] {5, 5}, new int[] {ILazyWriteableDataset.UNLIMITED, 6}); - try { - slice.checkShapes(new int[] {7, 4}, null); - fail(); - } catch (IllegalArgumentException e) { - System.out.println("As expected: " + e); - } + slice2.checkShapes(new int[] {6, 5}, new int[] {ILazyWriteableDataset.UNLIMITED, 6}); - try { - slice.checkShapes(new int[] {5, 5}, null); - fail(); - } catch (IllegalArgumentException e) { - System.out.println("As expected: " + e); - } + slice2.checkShapes(new int[] {5, 5}, new int[] {12, ILazyWriteableDataset.UNLIMITED}); - slice.checkShapes(new int[] {5, 5}, new int[] {ILazyWriteableDataset.UNLIMITED, 6}); + slice2.checkShapes(new int[] {5, 3}, new int[] {12, ILazyWriteableDataset.UNLIMITED}); - slice.checkShapes(new int[] {5, 5}, new int[] {12, ILazyWriteableDataset.UNLIMITED}); + final SliceND slice3 = new SliceND(null); - try { - slice.checkShapes(new int[] {5, 2}, new int[] {12, 3}); - fail(); - } catch (IllegalArgumentException e) { - System.out.println("As expected: " + e); - } + slice3.checkShapes(null, null); - slice = new SliceND(null); + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() throws Throwable { + slice3.checkShapes(new int[] {5, 5}, null); + } + }); + } - slice.checkShapes(null, null); + @Test + public void testSetStartStop() { + int length = 12; + int step = 1; + int last = length - 1; + int stop = 5; + SliceND sl; + + sl = new SliceND(new int[] {length}); + assertEquals(0, sl.getStart()[0]); + assertEquals(length, sl.getShape()[0]); + + sl.setSlice(0, 1, null, step); + assertEquals(1, sl.getStart()[0]); + assertEquals(last, sl.getShape()[0]); + + sl.setSlice(0, -1, null, step); + assertEquals(last, sl.getStart()[0]); + assertEquals(1, sl.getShape()[0]); + + sl.setSlice(0, -length-1, null, step); + assertEquals(0, sl.getStart()[0]); + assertEquals(length, sl.getShape()[0]); + + sl.setSlice(0, last, null, step); + assertEquals(last, sl.getStart()[0]); + assertEquals(1, sl.getShape()[0]); + + + sl.setSlice(0, last + 2, null, step); + assertEquals(length, sl.getStart()[0]); + assertEquals(0, sl.getShape()[0]); + + sl.setSlice(0, 1, null, -step); + assertEquals(1, sl.getStart()[0]); + assertEquals(2, sl.getShape()[0]); + + sl.setSlice(0, -1, null, -step); + assertEquals(last, sl.getStart()[0]); + assertEquals(length, sl.getShape()[0]); + + sl.setSlice(0, -length-2, null, -step); + assertEquals(-1, sl.getStart()[0]); + assertEquals(0, sl.getShape()[0]); + + sl.setSlice(0, last, null, -step); + assertEquals(last, sl.getStart()[0]); + assertEquals(length, sl.getShape()[0]); + + sl.setSlice(0, last + 2, null, -step); + assertEquals(last, sl.getStart()[0]); + assertEquals(length, sl.getShape()[0]); + + // with a stop defined + sl.setSlice(0, 1, stop, step); + assertEquals(1, sl.getStart()[0]); + assertEquals(stop - 1, sl.getShape()[0]); + + sl.setSlice(0, -1, stop, step); + assertEquals(last, sl.getStart()[0]); + assertEquals(0, sl.getShape()[0]); + + sl.setSlice(0, -length-1, stop, step); + assertEquals(0, sl.getStart()[0]); + assertEquals(stop, sl.getShape()[0]); + + sl.setSlice(0, last, stop, step); + assertEquals(last, sl.getStart()[0]); + assertEquals(0, sl.getShape()[0]); + + sl.setSlice(0, last + 2, stop, step); + assertEquals(length, sl.getStart()[0]); + assertEquals(0, sl.getShape()[0]); + + sl.setSlice(0, last + 2, stop - 2, step); + assertEquals(length, sl.getStart()[0]); + assertEquals(0, sl.getShape()[0]); + + sl.setSlice(0, null, null, step); + assertEquals(length, sl.getStop()[0]); + assertEquals(0, sl.getStart()[0]); + assertEquals(length, sl.getShape()[0]); + + sl.setSlice(0, null, -length-1, step); + assertEquals(0, sl.getStop()[0]); + assertEquals(0, sl.getStart()[0]); + assertEquals(0, sl.getShape()[0]); + + sl.setSlice(0, null, length+1, step); + assertEquals(length, sl.getStop()[0]); + assertEquals(length, sl.getShape()[0]); + + sl.setSlice(0, 1, stop, -step); + assertEquals(1, sl.getStart()[0]); + assertEquals(0, sl.getShape()[0]); + + int expected = last - stop; + sl.setSlice(0, -1, stop, -step); + assertEquals(last, sl.getStart()[0]); + assertEquals(expected, sl.getShape()[0]); + + sl.setSlice(0, -length-1, stop, -step); + assertEquals(-1, sl.getStart()[0]); + assertEquals(0, sl.getShape()[0]); + + sl.setSlice(0, last, stop, -step); + assertEquals(last, sl.getStart()[0]); + assertEquals(expected, sl.getShape()[0]); + + sl.setSlice(0, last+1, stop, -step); + assertEquals(last, sl.getStart()[0]); + assertEquals(expected, sl.getShape()[0]); + + sl.setSlice(0, null, null, -step); + assertEquals(-1, sl.getStop()[0]); + assertEquals(length, sl.getShape()[0]); + + sl.setSlice(0, null, -length-1, -step); + assertEquals(-1, sl.getStop()[0]); + assertEquals(length, sl.getShape()[0]); + + sl.setSlice(0, null, length+1, -step); + assertEquals(last, sl.getStop()[0]); + assertEquals(0, sl.getShape()[0]); + + sl.setSlice(0, stop, length+1, -step); + assertEquals(stop, sl.getStop()[0]); + assertEquals(0, sl.getShape()[0]); + + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() throws Throwable { + new SliceND(null).setSlice(0, null, null, -2); + } + }); + } - try { - slice.checkShapes(new int[] {5, 5}, null); - fail(); - } catch (IllegalArgumentException e) { - System.out.println("As expected: " + e); - } + @Test + public void testCreateSlice() { + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() throws Throwable { + SliceND.createSlice(null, null, null, null, null); + } + }); + + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() throws Throwable { + SliceND.createSlice(new int[0], new int[1], null, null, null); + } + }); + + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() throws Throwable { + SliceND.createSlice(new int[1], null, new int[2], null, null); + } + }); + + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() throws Throwable { + SliceND.createSlice(new int[1], null, null, new int[2], null); + } + }); + + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + @Override + public void run() throws Throwable { + SliceND.createSlice(new int[1], null, null, null, new int[2]); + } + }); + + SliceND s = SliceND.createSlice(new int[0], null, null, null, null); + assertEquals(0, s.getShape().length); + + LazyDataset lazy = LazyDataset.createLazyDataset(DatasetFactory.createRange(12)); + s = SliceND.createSlice(lazy, new int[] {2}, new int[] {8}); + assertArrayEquals(new int[] {6}, s.getShape()); + + lazy = new LazyDynamicDataset(lazy.getLoader(), lazy.getName(), lazy.getElementsPerItem(), DoubleDataset.class, lazy.getShape(), new int[] {20}); + s = SliceND.createSlice(lazy, new int[] {2}, new int[] {8}); + assertArrayEquals(new int[] {6}, s.getShape()); } } diff --git a/org.eclipse.january.test/src/org/eclipse/january/dataset/SliceTest.java b/org.eclipse.january.test/src/org/eclipse/january/dataset/SliceTest.java index 4a2e6196..60d9e626 100644 --- a/org.eclipse.january.test/src/org/eclipse/january/dataset/SliceTest.java +++ b/org.eclipse.january.test/src/org/eclipse/january/dataset/SliceTest.java @@ -11,13 +11,15 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; import org.junit.Test; +import org.junit.function.ThrowingRunnable; public class SliceTest { - + @Test public void testSlice() { Slice sl; @@ -25,6 +27,8 @@ public void testSlice() { assertEquals(":", sl.toString()); sl = new Slice(12); assertEquals(":12", sl.toString()); + sl = sl.clone(); + assertEquals(":12", sl.toString()); sl = new Slice(1, 12); assertEquals("1:12", sl.toString()); sl = new Slice(0, 12); @@ -51,6 +55,8 @@ public void testSlice() { assertEquals("::3", sl.toString()); sl = new Slice(null, null, 3).setLength(12); assertEquals("::3", sl.toString()); + sl = new Slice(null, null, null).setLength(12); + assertEquals(":", sl.toString()); sl = new Slice(11, 12); assertEquals("11", sl.toString()); sl = new Slice(0, 1); @@ -103,18 +109,18 @@ public void testSliceSteps() { sl = new Slice(6, 0, -2).setLength(12); assertEquals(3, sl.getNumSteps()); - try { - sl = new Slice(); - sl.getNumSteps(); - fail("No exception thrown"); - } catch (IllegalStateException ise) { - // passed - } catch (Exception e) { - fail("Wrong exception type passed, this should give an IllegalStateException"); - } + assertThrows(IllegalStateException.class, new ThrowingRunnable() { + @Override + public void run() throws Throwable { + Slice sa = new Slice(); + sa.getNumSteps(); + } + }); sl = new Slice(12); assertEquals(12, sl.getNumSteps()); + sl = new Slice(null, 12); + assertEquals(12, sl.getNumSteps()); sl = new Slice(1, 12); assertEquals(11, sl.getNumSteps()); sl = new Slice(12, 1); @@ -134,15 +140,13 @@ public void testSliceSteps() { sl = new Slice(null, 11, 1); assertEquals(11, sl.getNumSteps()); - try { - sl = new Slice(11, null, -1); - sl.getNumSteps(); - fail("No exception thrown"); - } catch (IllegalStateException ise) { - // passed - } catch (Exception e) { - fail("Wrong exception type passed, this should give an IllegalStateException"); - } + assertThrows(IllegalStateException.class, new ThrowingRunnable() { + @Override + public void run() throws Throwable { + Slice sa = new Slice(null, 1, -1); + sa.getNumSteps(); + } + }); sl = new Slice(null, null, 15).setLength(4096); assertEquals(274, sl.getNumSteps()); @@ -186,123 +190,212 @@ public void testGetter() { Slice sl; sl = new Slice().setLength(12); - assertEquals(null, sl.getStart()); - assertEquals(null, sl.getStop()); + assertNull(sl.getStart()); + assertNull(sl.getStop()); assertEquals(1, sl.getStep()); assertEquals(12, sl.getLength()); sl = new Slice(10).setLength(12); - assertEquals(null, sl.getStart()); + assertNull(sl.getStart()); assertEquals(10, (int) sl.getStop()); assertEquals(1, sl.getStep()); assertEquals(12, sl.getLength()); } @Test - public void testSetter() { + public void testSetStartStop() { + int length = 12; + int step = 1; + int last = length - 1; + int stop = 5; Slice sl; - sl = new Slice().setLength(12); + sl = new Slice().setLength(length); + sl.setStep(step); + sl.setStart(null); + assertNull(sl.getStart()); + assertEquals(length, sl.getNumSteps()); + sl.setStart(1); assertEquals(1, (int) sl.getStart()); - sl.setStop(10); - assertEquals(10, (int) sl.getStop()); - sl.setStep(2); - assertEquals(2, sl.getStep()); - sl.setLength(11); - assertEquals(11, sl.getLength()); + assertEquals(last, sl.getNumSteps()); + + sl.setStart(-1); + assertEquals(last, (int) sl.getStart()); + assertEquals(1, sl.getNumSteps()); + + sl.setStart(-length-1); + assertEquals(0, (int) sl.getStart()); + assertEquals(length, sl.getNumSteps()); + + sl.setStart(last); + assertEquals(last, (int) sl.getStart()); + assertEquals(1, sl.getNumSteps()); + + sl.setStart(last + 2); + assertEquals(length, (int) sl.getStart()); + assertEquals(0, sl.getNumSteps()); + + sl.setStep(-step); + sl.setStart(1); + assertEquals(1, (int) sl.getStart()); + assertEquals(2, sl.getNumSteps()); + + sl.setStart(-1); + assertEquals(last, (int) sl.getStart()); + assertEquals(length, sl.getNumSteps()); + + sl.setStart(-length-2); + assertEquals(-1, (int) sl.getStart()); + assertEquals(0, sl.getNumSteps()); + + sl.setStart(last); + assertEquals(last, (int) sl.getStart()); + assertEquals(length, sl.getNumSteps()); + sl.setStart(last + 2); + assertEquals(last, (int) sl.getStart()); + assertEquals(length, sl.getNumSteps()); + + // with a stop defined + sl.setStep(step); + sl.setStart(1); + sl.setStop(stop); + assertEquals(1, (int) sl.getStart()); + assertEquals(stop - 1, sl.getNumSteps()); + + sl.setStart(-1); + assertEquals(stop, (int) sl.getStart()); + assertEquals(0, sl.getNumSteps()); + + sl.setStart(-length-1); + assertEquals(0, (int) sl.getStart()); + assertEquals(stop, sl.getNumSteps()); + + sl.setStart(last); + assertEquals(stop, (int) sl.getStart()); + assertEquals(0, sl.getNumSteps()); + + sl.setStart(last + 2); + assertEquals(stop, (int) sl.getStart()); + assertEquals(0, sl.getNumSteps()); + + sl.setStop(stop - 2); + assertEquals(stop, (int) sl.getStart()); + assertEquals(0, sl.getNumSteps()); + + sl.setStart(null); + sl.setStop(null); + assertNull(sl.getStop()); + assertEquals(length, sl.getNumSteps()); + + sl.setStop(-length-1); + assertEquals(0, (int) sl.getStop()); + assertEquals(0, sl.getNumSteps()); + + sl.setStop(length + 1); + assertEquals(length, (int) sl.getStop()); + assertEquals(length, sl.getNumSteps()); + + sl.setStop(stop); + sl.setStep(-step); + sl.setStart(1); + assertEquals(stop, (int) sl.getStart()); + assertEquals(0, sl.getNumSteps()); + + sl.setStart(-1); + assertEquals(last, (int) sl.getStart()); + int expected = last - stop; + assertEquals(expected, sl.getNumSteps()); + + sl.setStart(-length-1); + assertEquals(stop, (int) sl.getStart()); + assertEquals(0, sl.getNumSteps()); + + sl.setStart(last); + assertEquals(last, (int) sl.getStart()); + assertEquals(expected, sl.getNumSteps()); + + sl.setStart(last + 2); + assertEquals(last, (int) sl.getStart()); + assertEquals(expected, sl.getNumSteps()); + + sl.setStart(null); + sl.setStop(null); + assertNull(sl.getStop()); + assertEquals(length, sl.getNumSteps()); + + sl.setStop(-length-4); + assertEquals(-1, (int) sl.getStop()); + assertEquals(length, sl.getNumSteps()); + + sl.setStop(-length-1); + assertEquals(-1, (int) sl.getStop()); + assertEquals(length, sl.getNumSteps()); + + sl.setStop(length + 1); + assertEquals(last, (int) sl.getStop()); + assertEquals(0, sl.getNumSteps()); + + sl.setStop(null); + sl.setStart(stop); + sl.setStop(length + 1); + assertEquals(stop, (int) sl.getStop()); + assertEquals(0, sl.getNumSteps()); + } + + @Test + public void testSetLengthStep() { + Slice sl; sl = new Slice().setLength(12); - sl.setStart(3); sl.setStop(10); - try { - sl.setLength(9); - fail("No exception thrown"); - } catch (IllegalArgumentException iae) { - // passed - } catch (Exception e) { - fail("Wrong exception type passed, this should give an IllegalArgumentException"); - } - - try { - sl.setStart(11); - fail("No exception thrown"); - } catch (IllegalArgumentException iae) { - // passed - } catch (Exception e) { - fail("Wrong exception type passed, this should give an IllegalArgumentException"); - } + final Slice sa = sl; + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + public void run() throws Throwable { + sa.setLength(9); + } + }); sl = new Slice().setLength(12); sl.setStart(3); sl.setStop(10); - try { - sl.setLength(9); - fail("No exception thrown"); - } catch (IllegalArgumentException iae) { - // passed - } catch (Exception e) { - fail("Wrong exception type passed, this should give an IllegalArgumentException"); - } - - try { - sl.setStart(11); - fail("No exception thrown"); - } catch (IllegalArgumentException iae) { - // passed - } catch (Exception e) { - fail("Wrong exception type passed, this should give an IllegalArgumentException"); - } - try { - sl.setStop(0); - fail("No exception thrown"); - } catch (IllegalArgumentException iae) { - // passed - } catch (Exception e) { - fail("Wrong exception type passed, this should give an IllegalArgumentException"); - } + assertEquals(10, (int) sl.getStop()); + assertEquals(7, sl.getNumSteps()); + final Slice sb = sl; + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + public void run() throws Throwable { + sb.setLength(9); + } + }); sl = new Slice().setLength(12); sl.setStep(-2); sl.setStart(10); + assertEquals(10, (int) sl.getStart()); + assertEquals(6, sl.getNumSteps()); sl.setStop(3); - try { - sl.setLength(9); - fail("No exception thrown"); - } catch (IllegalArgumentException iae) { - // passed - } catch (Exception e) { - fail("Wrong exception type passed, this should give an IllegalArgumentException"); - } - - try { - sl.setStart(2); - fail("No exception thrown"); - } catch (IllegalArgumentException iae) { - // passed - } catch (Exception e) { - fail("Wrong exception type passed, this should give an IllegalArgumentException"); - } - try { - sl.setStop(10); - fail("No exception thrown"); - } catch (IllegalArgumentException iae) { - // passed - } catch (Exception e) { - fail("Wrong exception type passed, this should give an IllegalArgumentException"); - } - - try { - sl.setStep(0); - fail("No exception thrown"); - } catch (IllegalArgumentException iae) { - // passed - } catch (Exception e) { - fail("Wrong exception type passed, this should give an IllegalArgumentException"); - } + assertEquals(4, sl.getNumSteps()); + final Slice sc = sl; + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + public void run() throws Throwable { + sc.setLength(9); + } + }); + + sl.setStart(10); + sl.setStop(10); + assertEquals(10, (int) sl.getStop()); + assertEquals(0, sl.getNumSteps()); + + final Slice sd = sl; + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + public void run() throws Throwable { + sd.setStep(0); + } + }); sl = new Slice(10).setLength(12); - assertEquals(null, sl.getStart()); + assertNull(sl.getStart()); assertEquals(10, (int) sl.getStop()); assertEquals(1, sl.getStep()); assertEquals(12, sl.getLength()); @@ -331,15 +424,12 @@ public void testSliceEnd() { assertEquals(11, sl.getEnd()); sl = new Slice(1, 12); assertEquals(11, sl.getEnd()); - try { - sl = new Slice(12, 1); - sl.getEnd(); - fail("No exception thrown"); - } catch (IllegalStateException ise) { - // passed - } catch (Exception e) { - fail("Wrong exception type passed, this should give an IllegalStateException"); - } + final Slice sa = new Slice(12, 1); + assertThrows(IllegalStateException.class, new ThrowingRunnable() { + public void run() throws Throwable { + sa.getEnd(); + } + }); sl = new Slice(1, 12, 2); assertEquals(11, sl.getEnd()); sl = new Slice(1, 12, 12); @@ -353,24 +443,18 @@ public void testSliceEnd() { sl = new Slice(null, 12, 2); assertEquals(10, sl.getEnd()); - try { - sl = new Slice(null, 12, -2); - sl.getEnd(); - fail("No exception thrown"); - } catch (IllegalStateException ise) { - // passed - } catch (Exception e) { - fail("Wrong exception type passed, this should give an IllegalStateException"); - } - try { - sl = new Slice(null, null, -2); - sl.getEnd(); - fail("No exception thrown"); - } catch (IllegalStateException ise) { - // passed - } catch (Exception e) { - fail("Wrong exception type passed, this should give an IllegalStateException"); - } + final Slice sb = new Slice(null, 12, -2); + assertThrows(IllegalStateException.class, new ThrowingRunnable() { + public void run() throws Throwable { + sb.getEnd(); + } + }); + final Slice sc = new Slice(null, null, -2); + assertThrows(IllegalStateException.class, new ThrowingRunnable() { + public void run() throws Throwable { + sc.getEnd(); + } + }); } @Test @@ -397,44 +481,103 @@ public void testFlip() { assertEquals("11", sl.toString()); assertEquals("11", sl.flip().toString()); sl = new Slice(1, 12, 3).flip(); - assertEquals("10:-2:-3", sl.toString()); - assertEquals("1:13:3", sl.flip().toString()); + assertEquals("10:0:-3", sl.toString()); + assertEquals("1:11:3", sl.flip().toString()); sl = new Slice(11, 12, 3).flip(); assertEquals("11", sl.toString()); assertEquals("11", sl.flip().toString()); + sl = new Slice().setLength(12); sl.flip(); - assertEquals(null, sl.getStart()); - assertEquals(null, sl.getStop()); + assertNull(sl.getStart()); + assertNull(sl.getStop()); assertEquals(-1, sl.getStep()); - assertEquals(12, sl.getLength()); + assertEquals(12, sl.getNumSteps()); sl = new Slice(10).setLength(12); sl.flip(); assertEquals(9, (int) sl.getStart()); - assertEquals(null, sl.getStop()); + assertNull(sl.getStop()); assertEquals(-1, sl.getStep()); - assertEquals(12, sl.getLength()); + assertEquals(10, sl.getNumSteps()); + + sl = new Slice(null, 10).setLength(12); + sl.flip(); + assertEquals(9, (int) sl.getStart()); + assertNull(sl.getStop()); + assertEquals(-1, sl.getStep()); + assertEquals(10, sl.getNumSteps()); + + sl = new Slice(null, 4, -1).setLength(12); + sl.flip(); + assertEquals(5, (int) sl.getStart()); + assertNull(sl.getStop()); + assertEquals(1, sl.getStep()); + assertEquals(7, sl.getNumSteps()); + + sl = new Slice(3, 10).setLength(12); + sl.flip(); + assertEquals(9, (int) sl.getStart()); + assertEquals(2, (int) sl.getStop()); + assertEquals(-1, sl.getStep()); + assertEquals(7, sl.getNumSteps()); + + sl = new Slice(9, 2, -1).setLength(12); + sl.flip(); + assertEquals(3, (int) sl.getStart()); + assertEquals(10, (int) sl.getStop()); + assertEquals(1, sl.getStep()); + assertEquals(7, sl.getNumSteps()); } @Test public void testConverters() { - int[] start = new int[1]; - int[] stop = new int[1]; - int[] step = new int[1]; + final int[] start = new int[1]; + final int[] stop = new int[1]; + final int[] step = new int[1]; int[] shape = new int[] {12}; + Slice.convertFromSlice(null, shape, start, stop, step); + assertEquals(0, start[0]); + assertEquals(12, stop[0]); + assertEquals(1, step[0]); + Slice.convertFromSlice(new Slice[] {null}, shape, start, stop, step); assertEquals(0, start[0]); assertEquals(12, stop[0]); assertEquals(1, step[0]); + Slice.convertFromSlice(new Slice[] {new Slice(null,11,2)}, shape, start, stop, step); + assertEquals(0, start[0]); + assertEquals(11, stop[0]); + assertEquals(2, step[0]); + + Slice.convertFromSlice(new Slice[] {new Slice(null,null,2)}, shape, start, stop, step); + assertEquals(0, start[0]); + assertEquals(12, stop[0]); + assertEquals(2, step[0]); + + Slice.convertFromSlice(new Slice[] {new Slice(null,6,-2)}, shape, start, stop, step); + assertEquals(11, start[0]); + assertEquals(6, stop[0]); + assertEquals(-2, step[0]); + + Slice.convertFromSlice(new Slice[] {new Slice(null,null,-2)}, shape, start, stop, step); + assertEquals(11, start[0]); + assertEquals(-1, stop[0]); + assertEquals(-2, step[0]); + Slice.convertFromSlice(new Slice[] {new Slice(1,11,2).setLength(12)}, shape, start, stop, step); assertEquals(1, start[0]); assertEquals(11, stop[0]); assertEquals(2, step[0]); + Slice.convertFromSlice(new Slice[] {new Slice(3, 6).setLength(12), new Slice().setLength(12)}, shape, start, stop, step); + assertEquals(3, start[0]); + assertEquals(6, stop[0]); + assertEquals(1, step[0]); + Slice.convertFromSlice(new Slice[] {new Slice().setLength(12)}, shape, start, stop, step); assertEquals(0, start[0]); assertEquals(12, stop[0]); @@ -446,29 +589,51 @@ public void testConverters() { assertEquals(12, (int) sl[0].getStop()); assertEquals(1, sl[0].getStep()); + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + public void run() throws Throwable { + Slice.convertToSlice(start, new int[0], step); + } + }); + + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + public void run() throws Throwable { + Slice.convertToSlice(start, stop, new int[0]); + } + }); + sl = Slice.convertFromString("[:,:,:,:]"); assertEquals(4, sl.length); assertEquals(0, (int) sl[0].getStart()); assertEquals(0, (int) sl[1].getStart()); assertEquals(0, (int) sl[2].getStart()); assertEquals(0, (int) sl[3].getStart()); - assertEquals(null, sl[0].getStop()); - assertEquals(null, sl[1].getStop()); - assertEquals(null, sl[2].getStop()); - assertEquals(null, sl[3].getStop()); + assertNull(sl[0].getStop()); + assertNull(sl[1].getStop()); + assertNull(sl[2].getStop()); + assertNull(sl[3].getStop()); assertEquals(1, sl[0].getStep()); assertEquals(1, sl[1].getStep()); assertEquals(1, sl[2].getStep()); assertEquals(1, sl[3].getStep()); + sl = Slice.convertFromString("[7]"); + assertEquals(7, (int) sl[0].getStart()); + assertEquals(8, (int) sl[0].getStop()); + assertEquals(1, sl[0].getStep()); + + sl = Slice.convertFromString("[7:12]"); + assertEquals(7, (int) sl[0].getStart()); + assertEquals(12, (int) sl[0].getStop()); + assertEquals(1, sl[0].getStep()); + sl = Slice.convertFromString("[::]"); assertEquals(0, (int) sl[0].getStart()); - assertEquals(null, sl[0].getStop()); + assertNull(sl[0].getStop()); assertEquals(1, sl[0].getStep()); sl = Slice.convertFromString("[1::]"); assertEquals(1, (int) sl[0].getStart()); - assertEquals(null, sl[0].getStop()); + assertNull(sl[0].getStop()); assertEquals(1, sl[0].getStep()); sl = Slice.convertFromString("[:3:]"); @@ -478,7 +643,7 @@ public void testConverters() { sl = Slice.convertFromString("[::-1]"); assertEquals(0, (int) sl[0].getStart()); - assertEquals(null, sl[0].getStop()); + assertNull(sl[0].getStop()); assertEquals(-1, sl[0].getStep()); sl = Slice.convertFromString("[10:2:-2]"); @@ -505,112 +670,92 @@ public void testShifts() { @Test public void testPos() { - Slice sl; - - sl = new Slice(0, 10, 1); - assertEquals(0, sl.getPosition(0)); - assertEquals(5, sl.getPosition(5)); - try { - sl.getPosition(-1); - fail("No exception thrown"); - } catch (IllegalArgumentException iae) { - // passed - } catch (Exception e) { - fail("Wrong exception type passed, this should give an IllegalArgumentException"); - } - try { - sl.getPosition(10); - fail("No exception thrown"); - } catch (IllegalArgumentException iae) { - // passed - } catch (Exception e) { - fail("Wrong exception type passed, this should give an IllegalArgumentException"); - } - - sl = new Slice(5, 2, -1); - assertEquals(5, sl.getPosition(0)); - assertEquals(3, sl.getPosition(2)); - try { - sl.getPosition(3); - fail("No exception thrown"); - } catch (IllegalArgumentException iae) { - // passed - } catch (Exception e) { - fail("Wrong exception type passed, this should give an IllegalArgumentException"); - } - - sl = new Slice(null, null, 1).setLength(12); - assertEquals(0, sl.getPosition(0)); - assertEquals(3, sl.getPosition(3)); - try { - sl.getPosition(12); - fail("No exception thrown"); - } catch (IllegalArgumentException iae) { - // passed - } catch (Exception e) { - fail("Wrong exception type passed, this should give an IllegalArgumentException"); - } - - sl = new Slice(null, null, -1).setLength(12); - assertEquals(11, sl.getPosition(0)); - assertEquals(8, sl.getPosition(3)); - try { - sl.getPosition(12); - fail("No exception thrown"); - } catch (IllegalArgumentException iae) { - // passed - } catch (Exception e) { - fail("Wrong exception type passed, this should give an IllegalArgumentException"); - } - - sl = new Slice(null, null, -2).setLength(12); - assertEquals(11, sl.getPosition(0)); - assertEquals(5, sl.getPosition(3)); - assertEquals(1, sl.getPosition(5)); - try { - sl.getPosition(6); - fail("No exception thrown"); - } catch (IllegalArgumentException iae) { - // passed - } catch (Exception e) { - fail("Wrong exception type passed, this should give an IllegalArgumentException"); - } - - sl = new Slice(6, null, -2).setLength(12); - assertEquals(6, sl.getPosition(0)); - assertEquals(0, sl.getPosition(3)); - try { - sl.getPosition(4); - fail("No exception thrown"); - } catch (IllegalArgumentException iae) { - // passed - } catch (Exception e) { - fail("Wrong exception type passed, this should give an IllegalArgumentException"); - } - - sl = new Slice(6, 1, -2).setLength(12); - assertEquals(6, sl.getPosition(0)); - assertEquals(2, sl.getPosition(2)); - try { - sl.getPosition(3); - fail("No exception thrown"); - } catch (IllegalArgumentException iae) { - // passed - } catch (Exception e) { - fail("Wrong exception type passed, this should give an IllegalArgumentException"); - } - - sl = new Slice(6, 0, -2).setLength(12); - assertEquals(6, sl.getPosition(0)); - assertEquals(2, sl.getPosition(2)); - try { - sl.getPosition(3); - fail("No exception thrown"); - } catch (IllegalArgumentException iae) { - // passed - } catch (Exception e) { - fail("Wrong exception type passed, this should give an IllegalArgumentException"); - } + final Slice sa = new Slice(0, 10, 1); + assertEquals(0, sa.getPosition(0)); + assertEquals(5, sa.getPosition(5)); + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + public void run() throws Throwable { + sa.getPosition(-1); + } + }); + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + public void run() throws Throwable { + sa.getPosition(10); + } + }); + + final Slice sb = new Slice(5, 2, -1); + assertEquals(5, sb.getPosition(0)); + assertEquals(3, sb.getPosition(2)); + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + public void run() throws Throwable { + sb.getPosition(3); + } + }); + + final Slice sc = new Slice(null, null, 1).setLength(12); + assertEquals(0, sc.getPosition(0)); + assertEquals(3, sc.getPosition(3)); + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + public void run() throws Throwable { + sc.getPosition(12); + } + }); + + final Slice sd = new Slice(null, null, -1).setLength(12); + assertEquals(11, sd.getPosition(0)); + assertEquals(8, sd.getPosition(3)); + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + public void run() throws Throwable { + sd.getPosition(12); + } + }); + + sd.setLength(-1); + assertThrows(IllegalStateException.class, new ThrowingRunnable() { + public void run() throws Throwable { + sd.getPosition(1); + } + }); + sd.setStart(12); + assertEquals(9, sd.getPosition(3)); + + final Slice se = new Slice(null, null, -2).setLength(12); + assertEquals(11, se.getPosition(0)); + assertEquals(5, se.getPosition(3)); + assertEquals(1, se.getPosition(5)); + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + public void run() throws Throwable { + se.getPosition(6); + } + }); + + final Slice sf = new Slice(6, null, -2).setLength(12); + assertEquals(6, sf.getPosition(0)); + assertEquals(0, sf.getPosition(3)); + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + public void run() throws Throwable { + sf.getPosition(4); + } + }); + + final Slice sg = new Slice(6, 1, -2).setLength(12); + assertEquals(6, sg.getPosition(0)); + assertEquals(2, sg.getPosition(2)); + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + public void run() throws Throwable { + sg.getPosition(3); + } + }); + + final Slice sh = new Slice(6, 0, -2).setLength(12); + assertEquals(6, sh.getPosition(0)); + assertEquals(2, sh.getPosition(2)); + assertThrows(IllegalArgumentException.class, new ThrowingRunnable() { + public void run() throws Throwable { + sh.getPosition(3); + } + }); } @Test @@ -624,4 +769,51 @@ public void testSetZeroLength() { assertEquals(0, s.getNumSteps()); } + + @Test + public void testCreateStrings() { + assertEquals("", Slice.createString()); + assertEquals("", Slice.createString((Slice[]) null)); + assertEquals(":", Slice.createString(new Slice[1])); + assertEquals(":", Slice.createString(new Slice())); + assertEquals(":4", Slice.createString(new Slice(4))); + assertEquals("4:", Slice.createString(new Slice(4, null))); + assertEquals("4:7", Slice.createString(new Slice(4, 7).setLength(12))); + assertEquals("4", Slice.createString(new Slice(4, 5).setLength(12))); + assertEquals("", Slice.createString(new int[0], new int[] {0}, new int[] {12}, new int[] {1})); + assertEquals(":", Slice.createString(new int[] {12}, new int[] {0}, new int[] {12}, new int[] {1})); + assertEquals("4:", Slice.createString(new int[] {12}, new int[] {4}, new int[] {12}, new int[] {1})); + assertEquals("4:7", Slice.createString(new int[] {12}, new int[] {4}, new int[] {7}, new int[] {1})); + assertEquals("4", Slice.createString(new int[] {12}, new int[] {4}, new int[] {5}, new int[] {1})); + assertEquals(":", Slice.createString(new int[] {12}, null, null, null)); + assertEquals("::-1", Slice.createString(new int[] {12}, null, null, new int[] {-1})); + } + + @Test + public void testIsSliceComplete() { + Slice s = new Slice(); + + assertTrue(s.isSliceComplete()); + s.setStep(-1); + assertTrue(s.isSliceComplete()); + s.setStep(2); + assertFalse(s.isSliceComplete()); + s.setStep(-2); + assertFalse(s.isSliceComplete()); + s.setStep(1); + s.setStart(4); + assertFalse(s.isSliceComplete()); + s.setStart(null); + s.setStop(12); + assertFalse(s.isSliceComplete()); + s.setStop(null); + + s.setStart(4); + s.setLength(9); + assertFalse(s.isSliceComplete()); + s.setStart(null); + assertTrue(s.isSliceComplete()); + s.setStart(0); + assertTrue(s.isSliceComplete()); + } } diff --git a/org.eclipse.january/pom.xml b/org.eclipse.january/pom.xml index b2f66e35..9d3433fd 100644 --- a/org.eclipse.january/pom.xml +++ b/org.eclipse.january/pom.xml @@ -99,7 +99,7 @@ https://commons.apache.org/proper/commons-math/javadocs/api-3.5/ https://unitsofmeasurement.github.io/unit-api/site/apidocs/ https://www.slf4j.org/apidocs/ - https://junit.org/junit4/javadoc/4.12/ + https://junit.org/junit4/javadoc/4.13/ -Xmaxwarns 1000 @@ -130,7 +130,7 @@ junit junit - 4.12 + 4.13 diff --git a/org.eclipse.january/src/org/eclipse/january/dataset/LazyDataset.java b/org.eclipse.january/src/org/eclipse/january/dataset/LazyDataset.java index c993c15a..562bf319 100644 --- a/org.eclipse.january/src/org/eclipse/january/dataset/LazyDataset.java +++ b/org.eclipse.january/src/org/eclipse/january/dataset/LazyDataset.java @@ -166,6 +166,10 @@ public Dataset getDataset(IMonitor mon, SliceND slice) throws IOException { }, dataset.getName(), dataset.getElementsPerItem(), dataset.getClass(), dataset.getShapeRef()); } + ILazyLoader getLoader() { + return loader; + } + @Override public Class getElementClass() { return InterfaceUtils.getElementClass(clazz); @@ -605,6 +609,10 @@ protected final SliceND calcTrueSlice(SliceND slice) { slice = new SliceND(shape); } + if (padding == null && map == null && begSlice == null) { + return slice.clone(); + } + if (ShapeUtils.calcLongSize(slice.getShape()) == 0) { return null; } diff --git a/org.eclipse.january/src/org/eclipse/january/dataset/Slice.java b/org.eclipse.january/src/org/eclipse/january/dataset/Slice.java index 939409b6..a1fa560e 100644 --- a/org.eclipse.january/src/org/eclipse/january/dataset/Slice.java +++ b/org.eclipse.january/src/org/eclipse/january/dataset/Slice.java @@ -166,13 +166,11 @@ public Slice setLength(int length) { * {@code false} in the other case. */ public boolean isSliceComplete() { - if (start == null && stop == null && (step == 1 || step == -1)) - return true; if (length > 0) { return getNumSteps() == length; } - return true; + return start == null && stop == null && (step == 1 || step == -1); } /** @@ -213,22 +211,36 @@ public int getStep() { /** * Set the starting index of the slice. If the start point of the Slice is - * {@code null}, it will be set automatically to 0. + * {@code null}, it will be set automatically to 0 or end. * * @param start * Starting index of the Slice, may be {@code null} */ public void setStart(Integer start) { if (start != null && length > 0) { + if (start < 0) { + start += length; + } if (step > 0) { + // ensure start >= 0 and < end + if (start < 0) { + start = 0; + } int end = stop == null ? length : stop; - if (start >= end) { - throw new IllegalArgumentException("Non-null start must be less than end"); + if (start > end) { + start = end; } } else { + // ensure start >= -1 and >= end, start < length + if (start < -1) { + start = -1; + } int end = stop == null ? -1 : stop; if (start < end) { - throw new IllegalArgumentException("Non-null start must be greater than end for negative step"); + start = end; + } + if (start >= length) { + start = length - 1; } } } @@ -245,19 +257,32 @@ public void setStart(Integer start) { */ public void setStop(Integer stop) { if (stop != null && length > 0) { + if (stop < 0) { + stop += length; + } + if (step > 0) { + // ensure stop >=0 and >= beg + if (stop < 0) { + stop = 0; + } int beg = start == null ? 0 : start; if (stop < beg) { - throw new IllegalArgumentException("Non-null stop must be greater than or equal to beginning"); + stop = beg; + } + if (stop > length) { + stop = length; } } else { - int beg = start == null ? length - 1 : start; - if (stop >= beg) { - throw new IllegalArgumentException("Non-null stop must be less than beginning for negative step"); + // ensure stop >= -1 and >= end + if (stop < -1) { + stop = -1; + } + int end = start == null ? length - 1 : start; + if (stop > end) { + stop = end; } } - if (stop > length) - stop = length; } this.stop = stop; } @@ -299,14 +324,10 @@ public int getPosition(int n) { int beg; if (start == null) { if (step < 0) { - if (length < 0) { - if (stop == null) { - throw new IllegalStateException("Length or stop should be set"); - } - beg = stop - 1; - } else { - beg = length - 1; - } +// if (length < 0) { // not reachable as getNumSteps() throws exception +// throw new IllegalStateException("Length or stop should be set"); +// } + beg = length - 1; } else { beg = 0; } @@ -400,18 +421,27 @@ public String toString() { */ public int getNumSteps() { if (length < 0) { - if (stop == null) - throw new IllegalStateException("Slice is underspecified - stop is null and length is negative"); - int beg = start == null ? (step > 0 ? 0 : stop - 1) : start; - if (step > 0 && stop <= beg) - return 0; - if (step < 0 && stop > beg) + if (step > 0) { + if (stop == null) { + throw new IllegalStateException("Slice is underspecified - stop is null and length is negative"); + } + int beg = start == null ? 0 : start; + if (stop <= beg) { + return 0; + } + return getNumSteps(beg, stop, step); + } + if (start == null) { + throw new IllegalStateException("Slice is underspecified - start is null and length is negative"); + } + int end = stop == null ? -1 : stop; + if (start <= end) return 0; - return getNumSteps(beg, stop, step); + return getNumSteps(start, end, step); } int beg = start == null ? (step > 0 ? 0 : length - 1) : start; int end = stop == null ? (step > 0 ? length : -1) : stop; - return getNumSteps(beg, end, step); + return getNumSteps(beg, end); } /** @@ -428,7 +458,10 @@ public int getNumSteps(int beg, int end) { return getNumSteps(beg, end, step); } - private static int getNumSteps(int beg, int end, int step) { + static int getNumSteps(int beg, int end, int step) { + if (beg == end) { + return 0; + } int del = step > 0 ? 1 : -1; return Math.max(0, (end - beg - del) / step + 1); } @@ -455,17 +488,26 @@ public int getEnd() { * Note : the stop value may not be preserved across two flips *

* - * @return Flipped Slice. + * @return flipped slice */ public Slice flip() { if (length < 0) { - Integer tmp = start == null ? null : start - step; + Integer tmp; + if (step > 0) { + tmp = start == null ? null : start - 1; + } else { + tmp = start == null ? null : start + 1; + } start = stop == null ? null : getEnd(); stop = tmp; } else { Integer tstart = start; start = stop == null ? null : getEnd(); - stop = tstart == null ? null : tstart - step; + if (step > 0) { + stop = tstart == null ? null : tstart - 1; + } else { + stop = tstart == null ? null : tstart + 1; + } } step = -step; @@ -493,7 +535,7 @@ public static void convertFromSlice(final Slice[] slice, final int[] shape, fina int i = 0; for (; i < length; i++) { - if (length > rank) + if (i >= rank) break; Slice s = slice[i]; @@ -508,12 +550,6 @@ public static void convertFromSlice(final Slice[] slice, final int[] shape, fina start[i] = s.step > 0 ? 0 : shape[i] - 1; } else { n = s.start; - if (n < 0) - n += shape[i]; - if (n < 0 || n >= shape[i]) { - throw new IllegalArgumentException( - String.format("Start is out of bounds: %d is not in [%d,%d)", n, s.start, shape[i])); - } start[i] = n; } @@ -521,26 +557,10 @@ public static void convertFromSlice(final Slice[] slice, final int[] shape, fina stop[i] = s.step > 0 ? shape[i] : -1; } else { n = s.stop; - if (n < 0) - n += shape[i]; - if (n < 0 || n > shape[i]) { - throw new IllegalArgumentException( - String.format("Stop is out of bounds: %d is not in [%d,%d)", n, s.stop, shape[i])); - } stop[i] = n; } n = s.step; - if (n == 0) { - throw new IllegalArgumentException("Step cannot be zero"); - } - if (n > 0) { - if (start[i] > stop[i]) - throw new IllegalArgumentException("Start must be less than stop for positive steps"); - } else { - if (start[i] < stop[i]) - throw new IllegalArgumentException("Start must be greater than stop for negative steps"); - } step[i] = n; } for (; i < rank; i++) { diff --git a/org.eclipse.january/src/org/eclipse/january/dataset/SliceND.java b/org.eclipse.january/src/org/eclipse/january/dataset/SliceND.java index f5249eab..35f59337 100644 --- a/org.eclipse.january/src/org/eclipse/january/dataset/SliceND.java +++ b/org.eclipse.january/src/org/eclipse/january/dataset/SliceND.java @@ -137,7 +137,7 @@ public SliceND(final int[] shape, final int[] start, final int[] stop, final int * @param shape * Shape of the dataset, see {@link ILazyDataset#getShape()} * @param maxShape - * Array of maximals shapes, may be {@code null} + * Array of maximal shapes, may be {@code null} * @param start * Array of starts points, may be {@code null} * @param stop @@ -185,7 +185,11 @@ public SliceND(final int[] shape, final int[] maxShape, final int[] start, final } for (int i = 0; i < rank; i++) { - internalSetSlice(i, start == null ? null : lstart[i], stop == null ? null : lstop[i], lstep[i]); + int d = lstep[i]; + int l = oshape[i]; + int b = start == null ? (d > 0 ? 0 : l - 1) : lstart[i]; + int e = stop == null ? (d > 0 ? l : -1-l) : lstop[i]; + internalSetSlice(true, i, b, e, d); } } @@ -196,14 +200,27 @@ public SliceND(final int[] shape, final int[] maxShape, final int[] start, final * @param i * dimension * @param start - * Start point, may be {@code null} to imply start of dimension + * Start point * @param stop - * Stop point, may be {@code null} to imply end of dimension + * Stop point * @param step * Slice step */ - public void setSlice(int i, Integer start, Integer stop, int step) { - internalSetSlice(i, start, stop, step); + public void setSlice(int i, int start, int stop, int step) { + internalSetSlice(true, i, start, stop, step); + } + + /** + * Set slice for given dimension. + * + * @param i + * Dimension + * @param slice + * Slice with wanted properties to set + * @since 2.0 + */ + public void setSlice(int i, Slice slice) { + setSlice(i, slice.getStart(), slice.getStop(), slice.getStep()); } /** @@ -219,37 +236,49 @@ public void setSlice(int i, Integer start, Integer stop, int step) { * @param step * Slice step */ - public void setSlice(int i, int start, int stop, int step) { - internalSetSlice(i, start, stop, step); - } + public void setSlice(int i, Integer start, Integer stop, int step) { + i = ShapeUtils.checkAxis(oshape == null ? 0 : oshape.length, i); + final int s = oshape[i]; + final int m = mshape[i]; + int iStart; + int iStop; - /** - * Set slice for given dimension. - * - * @param i - * Dimension - * @param slice - * Slice with wanted properties to set - * @since 2.0 - */ - public void setSlice(int i, Slice slice) { - internalSetSlice(i, slice.getStart(), slice.getStop(), slice.getStep()); + if (start == null) { + iStart = step > 0 ? 0 : s - 1; + } else { + iStart = start; + } + if (stop == null) { + if (iStart > s) { + if (m == ILazyWriteableDataset.UNLIMITED) { + throw new IllegalArgumentException( + "To extend past current dimension in unlimited case, a stop value must be specified"); + } + iStop = step > 0 ? iStart : -1-s; + } else { + iStop = step > 0 ? s : -1-s; // need to offset before wrap + } + } else { + iStop = stop; + } + internalSetSlice(true, i, iStart, iStop, step); } /** * Set slice for given dimension, if the start is {@code null} it will be * set to 0, stop is by default equal to the entire size of the set. * + * @param wrap if true, wrap -ve stops when step -ve * @param i * dimension * @param start - * Start point, may be {@code null} to imply start of dimension + * Start point * @param stop - * Stop point, may be {@code null} to imply end of dimension + * Stop point * @param step * Slice step */ - private void internalSetSlice(int i, Integer start, Integer stop, int step) { + private void internalSetSlice(boolean wrap, int i, int start, int stop, int step) { if (oshape == null) { throw new IllegalArgumentException("Cannot set slice on null dataset"); } @@ -260,12 +289,11 @@ private void internalSetSlice(int i, Integer start, Integer stop, int step) { final int s = oshape[i]; final int m = mshape[i]; - if (start == null) { - start = step > 0 ? 0 : s - 1; - } else if (start < 0) { + if (start < 0) { start += s; } if (step > 0) { + // ensure start >= 0 and < length or max if (start < 0) { start = 0; } else if (start > s) { @@ -276,17 +304,9 @@ private void internalSetSlice(int i, Integer start, Integer stop, int step) { } } - if (stop == null) { - if (start >= s && m == ILazyWriteableDataset.UNLIMITED) { - throw new IllegalArgumentException( - "To extend past current dimension in unlimited case, a stop value must be specified"); - } - stop = s; - } else if (stop < 0) { - stop += s; - } + // ensure stop >= 0 and <= length or max if (stop < 0) { - stop = 0; + stop += s; } else if (stop > s) { if (m == s) { stop = s; @@ -294,17 +314,13 @@ private void internalSetSlice(int i, Integer start, Integer stop, int step) { stop = m; } } + if (stop < 0) { + stop = 0; + } - if (start >= stop) { - if (start < s || m == s) { - lstop[i] = start; - } else { // override end - stop = start + step; - if (m != ILazyWriteableDataset.UNLIMITED && stop > m) { - stop = m; - } - lstop[i] = stop; - } + // ensure start <= stop + if (start > stop) { + lstop[i] = start; } else { lstop[i] = stop; } @@ -314,15 +330,15 @@ private void internalSetSlice(int i, Integer start, Integer stop, int step) { expanded = true; } } else { + // ensure start >= -1 and < length if (start < 0) { start = -1; } else if (start >= s) { start = s - 1; } - if (stop == null) { - stop = -1; - } else if (stop < 0) { + // ensure stop >= -1 and < length + if (stop < 0 && wrap) { stop += s; } if (stop < -1) { @@ -330,7 +346,9 @@ private void internalSetSlice(int i, Integer start, Integer stop, int step) { } else if (stop >= s) { stop = s - 1; } - if (stop >= start) { + + // ensure stop <= start + if (stop > start) { lstop[i] = start; } else { lstop[i] = stop; @@ -338,23 +356,11 @@ private void internalSetSlice(int i, Integer start, Integer stop, int step) { } stop = lstop[i]; - lshape[i] = calcLength(start, stop, step); + lshape[i] = Slice.getNumSteps(start, stop, step); lstart[i] = start; lstep[i] = step; } - private static int calcLength(int start, int stop, int step) { - int l; - if (start == stop) { - l = 0; - } else if (step > 0) { - l = Math.max(0, (stop - start - 1) / step + 1); - } else { - l = Math.max(0, (stop - start + 1) / step + 1); - } - return l; - } - /** * Return an array of shapes of the source dataset (this can change for * dynamic datasets). @@ -437,8 +443,8 @@ public void updateSourceShape(int... shape) { } for (int i = 0; i < shape.length; i++) { int s = shape[i]; - if ((s > 1 || s < lshape[i]) && !isSliceWithinShape(s, lstart[i], lstop[i], lstep[i])) { - throw new IllegalArgumentException("Updated source shape must be outside latest slice"); + if (s > 1 && s < oshape[i] && !isSliceWithinShape(s, lstart[i], lstop[i], lstep[i])) { + throw new IllegalArgumentException("Updated source shape ("+ Arrays.toString(shape) + ") must be outside this slice: " + toString()); } } System.arraycopy(shape, 0, oshape, 0, shape.length); @@ -572,6 +578,7 @@ public Slice[] convertToSlice() { @Override public SliceND clone() { SliceND c = new SliceND(oshape); + c.mshape = copy(mshape); if (lshape != null) { for (int i = 0; i < lshape.length; i++) { c.lstart[i] = lstart[i]; @@ -639,18 +646,29 @@ public static SliceND createSlice(ILazyDataset data, int[] start, int[] stop, in return new SliceND(data.getShape(), start, stop, step); } + private static boolean isRankWrong(int rank, int[] array) { + if (array == null) { + return rank != 0; + } + return array.length != rank; + } + + private static int length(int[] array) { + return array == null ? 0 : array.length; + } + /** * Create SliceND without sanity checks on start, stop and step * @param shape * Shape of the dataset, see {@link ILazyDataset#getShape()} * @param maxShape - * Array of maximals shapes, may be {@code null} + * Array of maximal shapes, may be {@code null} * @param start - * Array of starts points, may be {@code null} + * Array of starts points, must not be {@code null} if rank is non-zero * @param stop - * Array of stops points, may be {@code null} + * Array of stops points, must not be {@code null} if rank is non-zero * @param step - * Array of steps, may be {@code null} + * Array of steps, must not be {@code null} if rank is non-zero * @return slice */ static SliceND createSlice(final int[] shape, final int[] maxShape, final int[] start, final int[] stop, final int[] step) { @@ -659,29 +677,21 @@ static SliceND createSlice(final int[] shape, final int[] maxShape, final int[] } int rank = shape.length; - if (maxShape != null && maxShape.length != rank) { - throw new IllegalArgumentException("Max shape must have same rank as shape"); - } - if (start.length != rank || stop.length != rank || step.length != rank) { + if (isRankWrong(rank, start) || isRankWrong(rank, stop) || isRankWrong(rank, step)) { throw new IllegalArgumentException("No of indexes does not match data dimensions: you passed it start=" - + start.length + ", stop=" + stop.length + ", step=" + step.length + ", and it needs " + rank); + + length(start) + ", stop=" + length(stop) + ", step=" + length(step) + ", and it needs " + rank); } SliceND s = new SliceND(shape); if (maxShape != null) { + if (maxShape.length != rank) { + throw new IllegalArgumentException("Max shape must have same rank as shape"); + } s.initMaxShape(maxShape); } - s.lstart = start; - s.lstop = stop; - s.lstep = step; for (int i = 0; i < rank; i++) { - int e = stop[i]; - s.lshape[i] = calcLength(start[i], e, step[i]); - if (e > shape[i]) { - s.oshape[i] = e; - s.expanded = true; - } + s.internalSetSlice(false, i, start[i], stop[i], step[i]); } return s; } @@ -693,40 +703,46 @@ static SliceND createSlice(final int[] shape, final int[] maxShape, final int[] * @since 2.3 */ public void checkShapes(int[] dShape, int[] dMShape) { - if (oshape == null) { + if (lshape == null) { if (dShape == null) { return; } - throw new IllegalArgumentException("Dataset shape must be null with source shape null"); - } - int r = oshape.length; - if (r != dShape.length) { - throw new IllegalArgumentException("Dataset shape must be equal in length to source shape"); + throw new IllegalArgumentException("Dataset shape must be null with slice shape null"); } - if (Arrays.equals(oshape, dShape)) { - return; + int rank = lshape.length; + if (rank != dShape.length) { + throw new IllegalArgumentException("Dataset shape must be equal in length to slice shape"); } + // assume start <= stop (or start >= stop, when step is -ve) if (dMShape == null) { - for (int i = 0; i < r; i++) { - int o = oshape[i]; - if (o == 0) { - throw new IllegalArgumentException("Slice shape has zero length"); - } - if (o > dShape[i]) { - throw new IllegalArgumentException("Slice shape is greater than dataset shape"); + for (int i = 0; i < rank; i++) { + int l = dShape[i]; + if (lstep[i] > 0) { + int e = lstop[i]; + if (e > l) { + throw new IllegalArgumentException(String.format("Slice ends outside shape: %d => %d > %d", i, e, l)); + } + } else { + int b = lstart[i]; + if (b >= l) { + throw new IllegalArgumentException(String.format("Slice begins outside shape: %d => %d >= %d", i, b, l)); + } } } } else { - for (int i = 0; i < r; i++) { - int o = oshape[i]; - if (o == 0) { - throw new IllegalArgumentException("Slice shape has zero length"); - } + for (int i = 0; i < rank; i++) { + int l = dShape[i]; int m = dMShape[i]; - if (m != ILazyWriteableDataset.UNLIMITED) { - if (o > m) { - throw new IllegalArgumentException("Slice shape is greater than max dataset shape"); + if (lstep[i] > 0) { + int e = lstop[i]; + if (e > l && m != ILazyWriteableDataset.UNLIMITED && e > m) { + throw new IllegalArgumentException(String.format("Slice ends outside shape: %d => %d > %d or %d", i, e, l, m)); + } + } else { + int b = lstart[i]; + if (b >= l && m != ILazyWriteableDataset.UNLIMITED && b >= m) { + throw new IllegalArgumentException(String.format("Slice begins outside shape: %d => %d >= %d or %d", i, b, l, m)); } } } diff --git a/releng/org.eclipse.january.releng.target/org.eclipse.january.releng.target.target b/releng/org.eclipse.january.releng.target/org.eclipse.january.releng.target.target index 42a16e26..abb634f6 100644 --- a/releng/org.eclipse.january.releng.target/org.eclipse.january.releng.target.target +++ b/releng/org.eclipse.january.releng.target/org.eclipse.january.releng.target.target @@ -1,21 +1,21 @@ - + - - + + - - + + - + diff --git a/releng/org.eclipse.january.releng.target/org.eclipse.january.releng.target.tpd b/releng/org.eclipse.january.releng.target/org.eclipse.january.releng.target.tpd index c9547f5b..e47a037e 100644 --- a/releng/org.eclipse.january.releng.target/org.eclipse.january.releng.target.tpd +++ b/releng/org.eclipse.january.releng.target/org.eclipse.january.releng.target.tpd @@ -11,7 +11,7 @@ *******************************************************************************/ target "January" with source requirements -location "https://download.eclipse.org/tools/orbit/downloads/drops/R20180606145124/repository" eclipse-orbit-photon { +location "https://download.eclipse.org/tools/orbit/downloads/drops/R20200224183213/repository" eclipse-orbit-2020-03 { // The versions we point to in Orbit are the versions we have CQs approved for, please // raise CQ for items not in this list or version changes @@ -19,16 +19,16 @@ location "https://download.eclipse.org/tools/orbit/downloads/drops/R201806061451 // to be updated so links point to same version javax.measure.unit-api [1.0.0] // CQ 13959 org.apache.commons.math3 [3.5.0,3.5.1) // CQ 11785 - org.slf4j.api [1.7.10,1.7.11) // CQ 11781 + org.slf4j.api [1.7.30,1.7.31) // Items below are not depended on by released January bundles, only test ones, so no CQs - org.junit [4.12.0,5.0.0) + org.junit [4.13.0,5.0.0) org.hamcrest.core [1.3.0,2.0.0) org.hamcrest.library [1.3.0,2.0.0) } // To speed up the build, pull the platform from its own site. version specific and not the EPP site -location "https://download.eclipse.org/eclipse/updates/4.7/R-4.7.2-201711300510/" { // tycho 1.1 depends on Oxygen.2 +location "https://download.eclipse.org/eclipse/updates/4.15/R-4.15-202003050155/" { // tycho 1.1 depends on Oxygen.2 org.eclipse.equinox.launcher lazy org.eclipse.core.runtime.feature.feature.group lazy } diff --git a/releng/org.eclipse.january.releng/pom.xml b/releng/org.eclipse.january.releng/pom.xml index f9948943..ddec129e 100644 --- a/releng/org.eclipse.january.releng/pom.xml +++ b/releng/org.eclipse.january.releng/pom.xml @@ -23,7 +23,7 @@ - 2.7.5 + 3.0.5 ${tycho-version} 1.3.2 @@ -110,9 +110,9 @@ ${tycho-version} - org.eclipse.tycho.extras + org.eclipse.tycho tycho-buildtimestamp-jgit - ${tycho-extras-version} + ${tycho-version} org.eclipse.tycho.extras