Skip to content

Commit 2842b63

Browse files
bogovicjcmhulbert
authored andcommitted
test: AbstractN5Test back to using read/writeBlock
* improve testReadChunkVsBlock
1 parent 62e1b7e commit 2842b63

1 file changed

Lines changed: 52 additions & 48 deletions

File tree

src/test/java/org/janelia/saalfeldlab/n5/AbstractN5Test.java

Lines changed: 52 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,8 @@
7575
* Abstract base class for testing N5 functionality.
7676
* Subclasses are expected to provide a specific N5 implementation to be tested by defining the {@link #createN5Writer()} method.
7777
* <p>
78-
* This class does not create sharded datasets. Its tests generally call read/writeChunk, not read/writeBlock despite
79-
* test methods using the generic term "block".
78+
* This class does not create sharded datasets. Its tests generally call read/writeBlock which are equivalent to read/writeChunk
79+
* for the cases being tested here. The test {@link #testReadChunkVsBlock} checks that the equivalence between these methods holds.
8080
*
8181
* @author Stephan Saalfeld &lt;saalfelds@janelia.hhmi.org&gt;
8282
* @author Igor Pisarev &lt;pisarevi@janelia.hhmi.org&gt;
@@ -269,10 +269,10 @@ public void testBlocksLargerThanDimensions() {
269269
}
270270

271271
final ByteArrayDataBlock dataBlock = new ByteArrayDataBlock(largeBlockSize, new long[]{0, 0, 0}, data);
272-
n5.writeChunk(datasetName, attributes, dataBlock);
272+
n5.writeBlock(datasetName, attributes, dataBlock);
273273

274274
// Read the block back
275-
final DataBlock<?> loadedDataBlock = n5.readChunk(datasetName, attributes, 0, 0, 0);
275+
final DataBlock<?> loadedDataBlock = n5.readBlock(datasetName, attributes, 0, 0, 0);
276276
assertNotNull("Block should be readable", loadedDataBlock);
277277
assertArrayEquals("Block size should match", largeBlockSize, loadedDataBlock.getSize());
278278
assertArrayEquals("Block data should match", data, (byte[])loadedDataBlock.getData());
@@ -298,9 +298,9 @@ public void testUnalignedBlocksTruncatedAtEnd() {
298298
data0[i] = i + 1000;
299299
}
300300
final IntArrayDataBlock dataBlock0 = new IntArrayDataBlock(truncatedBlockSize0, new long[]{1, 0, 0}, data0);
301-
n5.writeChunk(datasetName, attributes, dataBlock0);
301+
n5.writeBlock(datasetName, attributes, dataBlock0);
302302

303-
final DataBlock<?> loadedBlock0 = n5.readChunk(datasetName, attributes, 1, 0, 0);
303+
final DataBlock<?> loadedBlock0 = n5.readBlock(datasetName, attributes, 1, 0, 0);
304304
assertNotNull("Truncated block should be readable", loadedBlock0);
305305
assertArrayEquals("Truncated block data should match", data0, (int[])loadedBlock0.getData());
306306

@@ -312,9 +312,9 @@ public void testUnalignedBlocksTruncatedAtEnd() {
312312
data1[i] = i + 2000;
313313
}
314314
final IntArrayDataBlock dataBlock1 = new IntArrayDataBlock(truncatedBlockSize1, new long[]{0, 2, 0}, data1);
315-
n5.writeChunk(datasetName, attributes, dataBlock1);
315+
n5.writeBlock(datasetName, attributes, dataBlock1);
316316

317-
final DataBlock<?> loadedBlock1 = n5.readChunk(datasetName, attributes, 0, 2, 0);
317+
final DataBlock<?> loadedBlock1 = n5.readBlock(datasetName, attributes, 0, 2, 0);
318318
assertNotNull("Truncated block should be readable", loadedBlock1);
319319
assertArrayEquals("Truncated block data should match", data1, (int[])loadedBlock1.getData());
320320

@@ -326,16 +326,14 @@ public void testUnalignedBlocksTruncatedAtEnd() {
326326
data2[i] = i + 3000;
327327
}
328328
final IntArrayDataBlock dataBlock2 = new IntArrayDataBlock(truncatedBlockSize2, new long[]{0, 0, 4}, data2);
329-
n5.writeChunk(datasetName, attributes, dataBlock2);
329+
n5.writeBlock(datasetName, attributes, dataBlock2);
330330

331-
final DataBlock<?> loadedBlock2 = n5.readChunk(datasetName, attributes, 0, 0, 4);
331+
final DataBlock<?> loadedBlock2 = n5.readBlock(datasetName, attributes, 0, 0, 4);
332332
assertNotNull("Truncated block should be readable", loadedBlock2);
333333
assertArrayEquals("Truncated block data should match", data2, (int[])loadedBlock2.getData());
334334
}
335335
}
336336

337-
338-
339337
@Test
340338
public void testWriteReadByteBlock() {
341339

@@ -347,9 +345,9 @@ public void testWriteReadByteBlock() {
347345
n5.createDataset(datasetName, dimensions, blockSize, dataType, compression);
348346
final DatasetAttributes attributes = n5.getDatasetAttributes(datasetName);
349347
final ByteArrayDataBlock dataBlock = new ByteArrayDataBlock(blockSize, new long[]{0, 0, 0}, byteBlock);
350-
n5.writeChunk(datasetName, attributes, dataBlock);
348+
n5.writeBlock(datasetName, attributes, dataBlock);
351349

352-
final DataBlock<?> loadedDataBlock = n5.readChunk(datasetName, attributes, 0, 0, 0);
350+
final DataBlock<?> loadedDataBlock = n5.readBlock(datasetName, attributes, 0, 0, 0);
353351
assertArrayEquals(byteBlock, (byte[])loadedDataBlock.getData());
354352
}
355353
}
@@ -369,9 +367,9 @@ public void testWriteReadStringBlock() {
369367
n5.createDataset(datasetName, dimensions, blockSize, dataType, compression);
370368
final DatasetAttributes attributes = n5.getDatasetAttributes(datasetName);
371369
final StringDataBlock dataBlock = new StringDataBlock(blockSize, new long[]{0L, 0L, 0L}, stringBlock);
372-
n5.writeChunk(datasetName, attributes, dataBlock);
370+
n5.writeBlock(datasetName, attributes, dataBlock);
373371

374-
final DataBlock<?> loadedDataBlock = n5.readChunk(datasetName, attributes, 0L, 0L, 0L);
372+
final DataBlock<?> loadedDataBlock = n5.readBlock(datasetName, attributes, 0L, 0L, 0L);
375373

376374
assertArrayEquals(stringBlock, (String[])loadedDataBlock.getData());
377375
}
@@ -390,9 +388,9 @@ public void testWriteReadShortBlock() {
390388
n5.createDataset(datasetName, dimensions, blockSize, dataType, compression);
391389
final DatasetAttributes attributes = n5.getDatasetAttributes(datasetName);
392390
final ShortArrayDataBlock dataBlock = new ShortArrayDataBlock(blockSize, new long[]{0, 0, 0}, shortBlock);
393-
n5.writeChunk(datasetName, attributes, dataBlock);
391+
n5.writeBlock(datasetName, attributes, dataBlock);
394392

395-
final DataBlock<?> loadedDataBlock = n5.readChunk(datasetName, attributes, 0, 0, 0);
393+
final DataBlock<?> loadedDataBlock = n5.readBlock(datasetName, attributes, 0, 0, 0);
396394

397395
assertArrayEquals(shortBlock, (short[])loadedDataBlock.getData());
398396
}
@@ -412,9 +410,9 @@ public void testWriteReadIntBlock() {
412410
n5.createDataset(datasetName, dimensions, blockSize, dataType, compression);
413411
final DatasetAttributes attributes = n5.getDatasetAttributes(datasetName);
414412
final IntArrayDataBlock dataBlock = new IntArrayDataBlock(blockSize, new long[]{0, 0, 0}, intBlock);
415-
n5.writeChunk(datasetName, attributes, dataBlock);
413+
n5.writeBlock(datasetName, attributes, dataBlock);
416414

417-
final DataBlock<?> loadedDataBlock = n5.readChunk(datasetName, attributes, 0, 0, 0);
415+
final DataBlock<?> loadedDataBlock = n5.readBlock(datasetName, attributes, 0, 0, 0);
418416

419417
assertArrayEquals(intBlock, (int[])loadedDataBlock.getData());
420418
}
@@ -434,9 +432,9 @@ public void testWriteReadLongBlock() {
434432
n5.createDataset(datasetName, dimensions, blockSize, dataType, compression);
435433
final DatasetAttributes attributes = n5.getDatasetAttributes(datasetName);
436434
final LongArrayDataBlock dataBlock = new LongArrayDataBlock(blockSize, new long[]{0, 0, 0}, longBlock);
437-
n5.writeChunk(datasetName, attributes, dataBlock);
435+
n5.writeBlock(datasetName, attributes, dataBlock);
438436

439-
final DataBlock<?> loadedDataBlock = n5.readChunk(datasetName, attributes, 0, 0, 0);
437+
final DataBlock<?> loadedDataBlock = n5.readBlock(datasetName, attributes, 0, 0, 0);
440438

441439
assertArrayEquals(longBlock, (long[])loadedDataBlock.getData());
442440
}
@@ -452,9 +450,9 @@ public void testWriteReadFloatBlock() {
452450
n5.createDataset(datasetName, dimensions, blockSize, DataType.FLOAT32, compression);
453451
final DatasetAttributes attributes = n5.getDatasetAttributes(datasetName);
454452
final FloatArrayDataBlock dataBlock = new FloatArrayDataBlock(blockSize, new long[]{0, 0, 0}, floatBlock);
455-
n5.writeChunk(datasetName, attributes, dataBlock);
453+
n5.writeBlock(datasetName, attributes, dataBlock);
456454

457-
final DataBlock<?> loadedDataBlock = n5.readChunk(datasetName, attributes, 0, 0, 0);
455+
final DataBlock<?> loadedDataBlock = n5.readBlock(datasetName, attributes, 0, 0, 0);
458456

459457
assertArrayEquals(floatBlock, (float[])loadedDataBlock.getData(), 0.001f);
460458
}
@@ -469,9 +467,9 @@ public void testWriteReadDoubleBlock() {
469467
n5.createDataset(datasetName, dimensions, blockSize, DataType.FLOAT64, compression);
470468
final DatasetAttributes attributes = n5.getDatasetAttributes(datasetName);
471469
final DoubleArrayDataBlock dataBlock = new DoubleArrayDataBlock(blockSize, new long[]{0, 0, 0}, doubleBlock);
472-
n5.writeChunk(datasetName, attributes, dataBlock);
470+
n5.writeBlock(datasetName, attributes, dataBlock);
473471

474-
final DataBlock<?> loadedDataBlock = n5.readChunk(datasetName, attributes, 0, 0, 0);
472+
final DataBlock<?> loadedDataBlock = n5.readBlock(datasetName, attributes, 0, 0, 0);
475473

476474
assertArrayEquals(doubleBlock, (double[])loadedDataBlock.getData(), 0.001);
477475
}
@@ -485,19 +483,25 @@ public void testReadChunkVsBlock() {
485483
for (final Compression compression : getCompressions()) {
486484
try (final N5Writer n5 = createTempN5Writer()) {
487485

486+
final short[] shortData1 = new short[shortBlock.length];
487+
for( int i = 0; i < shortBlock.length; i++)
488+
shortData1[i] = (short)(2 * shortBlock[i] + 3);
489+
488490
n5.createDataset(datasetName, dimensions, blockSize, DataType.INT16, compression);
489491
final DatasetAttributes attributes = n5.getDatasetAttributes(datasetName);
490-
final ShortArrayDataBlock dataBlock = new ShortArrayDataBlock(blockSize, new long[]{0, 0, 0}, shortBlock);
492+
final ShortArrayDataBlock dataBlock0 = new ShortArrayDataBlock(blockSize, new long[]{0, 0, 0}, shortBlock);
493+
final ShortArrayDataBlock dataBlock1 = new ShortArrayDataBlock(blockSize, new long[]{1, 0, 0}, shortData1);
491494

492-
n5.writeChunk(datasetName, attributes, dataBlock);
495+
n5.writeChunk(datasetName, attributes, dataBlock0);
496+
n5.writeBlock(datasetName, attributes, dataBlock1);
493497

494498
// read with readBlock
495-
final DataBlock<?> loadedShard = n5.readBlock(datasetName, attributes, 0, 0, 0);
496-
assertArrayEquals(shortBlock, (short[])loadedShard.getData());
499+
assertArrayEquals(shortBlock, (short[])n5.readBlock(datasetName, attributes, 0, 0, 0).getData());
500+
assertArrayEquals(shortData1, (short[])n5.readBlock(datasetName, attributes, 1, 0, 0).getData());
497501

498502
// read with readChunk
499-
final DataBlock<?> loadedDataBlock = n5.readChunk(datasetName, attributes, 0, 0, 0);
500-
assertArrayEquals(shortBlock, (short[])loadedDataBlock.getData());
503+
assertArrayEquals(shortBlock, (short[])n5.readChunk(datasetName, attributes, 0, 0, 0).getData());
504+
assertArrayEquals(shortData1, (short[])n5.readChunk(datasetName, attributes, 1, 0, 0).getData());
501505
}
502506
}
503507
}
@@ -516,9 +520,9 @@ public void testMode1WriteReadByteBlock() {
516520
n5.createDataset(datasetName, dimensions, differentBlockSize, dataType, compression);
517521
final DatasetAttributes attributes = n5.getDatasetAttributes(datasetName);
518522
final ByteArrayDataBlock dataBlock = new ByteArrayDataBlock(differentBlockSize, new long[]{0, 0, 0}, byteBlock);
519-
n5.writeChunk(datasetName, attributes, dataBlock);
523+
n5.writeBlock(datasetName, attributes, dataBlock);
520524

521-
final DataBlock<?> loadedDataBlock = n5.readChunk(datasetName, attributes, 0, 0, 0);
525+
final DataBlock<?> loadedDataBlock = n5.readBlock(datasetName, attributes, 0, 0, 0);
522526

523527
assertArrayEquals(byteBlock, (byte[])loadedDataBlock.getData());
524528
}
@@ -582,22 +586,22 @@ public void testWriteInvalidBlock() {
582586

583587
// write a block that is too large
584588
final ByteArrayDataBlock bigDataBlock = new ByteArrayDataBlock(biggerBlockSize, new long[]{0, 0, 0}, biggerData);
585-
n5.writeChunk(datasetName, attributes, bigDataBlock);
589+
n5.writeBlock(datasetName, attributes, bigDataBlock);
586590

587-
final DataBlock<?> loadedBigDataBlock = n5.readChunk(datasetName, attributes, 0, 0, 0);
591+
final DataBlock<?> loadedBigDataBlock = n5.readBlock(datasetName, attributes, 0, 0, 0);
588592
assertArrayEquals(biggerData, (byte[])loadedBigDataBlock.getData());
589593

590594
// write a block that is too small
591595
final ByteArrayDataBlock smallDataBlock = new ByteArrayDataBlock(smallerBlockSize, new long[]{0, 0, 0}, smallerData);
592-
n5.writeChunk(datasetName, attributes, smallDataBlock);
596+
n5.writeBlock(datasetName, attributes, smallDataBlock);
593597

594-
final DataBlock<?> loadedSmallDataBlock = n5.readChunk(datasetName, attributes, 0, 0, 0);
598+
final DataBlock<?> loadedSmallDataBlock = n5.readBlock(datasetName, attributes, 0, 0, 0);
595599
assertArrayEquals(smallerData, (byte[])loadedSmallDataBlock.getData());
596600

597601
// write a block of the wrong type
598602
final FloatArrayDataBlock floatDataBlock = new FloatArrayDataBlock(blockSize, new long[]{0, 0, 0}, floatData);
599603
assertThrows(ClassCastException.class, () -> {
600-
n5.writeChunk(datasetName, attributes, floatDataBlock);
604+
n5.writeBlock(datasetName, attributes, floatDataBlock);
601605
});
602606
}
603607
}
@@ -611,15 +615,15 @@ public void testOverwriteBlock() {
611615
final DatasetAttributes attributes = n5.getDatasetAttributes(datasetName);
612616

613617
final IntArrayDataBlock randomDataBlock = new IntArrayDataBlock(blockSize, new long[]{0, 0, 0}, intBlock);
614-
n5.writeChunk(datasetName, attributes, randomDataBlock);
615-
final DataBlock<?> loadedRandomDataBlock = n5.readChunk(datasetName, attributes, 0, 0, 0);
618+
n5.writeBlock(datasetName, attributes, randomDataBlock);
619+
final DataBlock<?> loadedRandomDataBlock = n5.readBlock(datasetName, attributes, 0, 0, 0);
616620
assertArrayEquals(intBlock, (int[])loadedRandomDataBlock.getData());
617621

618622
// test the case where the resulting file becomes shorter (because the data compresses better)
619623
final int[] emptyBlock = new int[DataBlock.getNumElements(blockSize)];
620624
final IntArrayDataBlock emptyDataBlock = new IntArrayDataBlock(blockSize, new long[]{0, 0, 0}, emptyBlock);
621-
n5.writeChunk(datasetName, attributes, emptyDataBlock);
622-
final DataBlock<?> loadedEmptyDataBlock = n5.readChunk(datasetName, attributes, 0, 0, 0);
625+
n5.writeBlock(datasetName, attributes, emptyDataBlock);
626+
final DataBlock<?> loadedEmptyDataBlock = n5.readBlock(datasetName, attributes, 0, 0, 0);
623627
assertArrayEquals(emptyBlock, (int[])loadedEmptyDataBlock.getData());
624628
}
625629
}
@@ -1053,7 +1057,7 @@ public void testDeepList() throws ExecutionException, InterruptedException {
10531057
final DatasetAttributes datasetAttributes = new DatasetAttributes(dimensions, blockSize, DataType.UINT64);
10541058
final LongArrayDataBlock dataBlock = new LongArrayDataBlock(blockSize, new long[]{0, 0, 0}, new long[blockNumElements]);
10551059
n5.createDataset(datasetName, datasetAttributes);
1056-
n5.writeChunk(datasetName, datasetAttributes, dataBlock);
1060+
n5.writeBlock(datasetName, datasetAttributes, dataBlock);
10571061

10581062
final List<String> datasetList = Arrays.asList(n5.deepList("/"));
10591063
for (final String subGroup : subGroupNames)
@@ -1297,10 +1301,10 @@ public void testDelete() {
12971301
final long[] position2 = {0, 1, 2};
12981302

12991303
// no blocks should exist to begin with
1300-
assertNull(n5.readChunk(datasetName, attributes, position1));
1304+
assertNull(n5.readBlock(datasetName, attributes, position1));
13011305

13021306
final ByteArrayDataBlock dataBlock = new ByteArrayDataBlock(blockSize, position1, byteBlock);
1303-
n5.writeChunk(datasetName, attributes, dataBlock);
1307+
n5.writeBlock(datasetName, attributes, dataBlock);
13041308

13051309
// block should exist at position1 but not at position2
13061310
final DataBlock<?> readBlock = n5.readChunk(datasetName, attributes, position1);
@@ -1320,8 +1324,8 @@ public void testDelete() {
13201324
assertTrue("deleting existing block should return true", n5.deleteBlock(datasetName, position1));
13211325

13221326
// no block should exist anymore
1323-
assertNull(n5.readChunk(datasetName, attributes, position1));
1324-
assertNull(n5.readChunk(datasetName, attributes, position2));
1327+
assertNull(n5.readBlock(datasetName, attributes, position1));
1328+
assertNull(n5.readBlock(datasetName, attributes, position2));
13251329
}
13261330
}
13271331

0 commit comments

Comments
 (0)