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 <saalfelds@janelia.hhmi.org>
8282 * @author Igor Pisarev <pisarevi@janelia.hhmi.org>
@@ -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