@@ -773,4 +773,51 @@ public void testUnalignedArrayAccess(int arrayShape, int chunkShape, int accessS
773773 Assertions .assertArrayEquals (expectedData , (int []) result .get1DJavaArray (ucar .ma2 .DataType .UINT ));
774774 }
775775 }
776- }
776+
777+ @ Test
778+ public void testDefaultChunkShape () throws IOException , ZarrException {
779+ // Test with a small array (< 512 elements per dimension)
780+ Array smallArray = Array .create (
781+ new FilesystemStore (TESTOUTPUT ).resolve ("v3_default_chunks_small" ),
782+ Array .metadataBuilder ()
783+ .withShape (100 , 50 )
784+ .withDataType (DataType .UINT8 )
785+ .build ()
786+ );
787+ Assertions .assertEquals (2 , smallArray .metadata ().chunkShape ().length );
788+ // Both dimensions < 512, so chunks should equal shape
789+ Assertions .assertEquals (100 , smallArray .metadata ().chunkShape ()[0 ]);
790+ Assertions .assertEquals (50 , smallArray .metadata ().chunkShape ()[1 ]);
791+
792+ // Test with a larger array (> 512 elements per dimension)
793+ Array largeArray = Array .create (
794+ new FilesystemStore (TESTOUTPUT ).resolve ("v3_default_chunks_large" ),
795+ Array .metadataBuilder ()
796+ .withShape (2000 , 1500 )
797+ .withDataType (DataType .UINT8 )
798+ .build ()
799+ );
800+ Assertions .assertEquals (2 , largeArray .metadata ().chunkShape ().length );
801+ // Chunks should be calculated based on division by 512
802+ Assertions .assertTrue (largeArray .metadata ().chunkShape ()[0 ] > 0 );
803+ Assertions .assertTrue (largeArray .metadata ().chunkShape ()[0 ] < 2000 );
804+ Assertions .assertTrue (largeArray .metadata ().chunkShape ()[1 ] > 0 );
805+ Assertions .assertTrue (largeArray .metadata ().chunkShape ()[1 ] < 1500 );
806+
807+ // Test with mixed dimensions
808+ Array mixedArray = Array .create (
809+ new FilesystemStore (TESTOUTPUT ).resolve ("v3_default_chunks_mixed" ),
810+ Array .metadataBuilder ()
811+ .withShape (1024 , 100 , 2048 )
812+ .withDataType (DataType .UINT8 )
813+ .build ()
814+ );
815+ Assertions .assertEquals (3 , mixedArray .metadata ().chunkShape ().length );
816+ // Verify chunks are reasonable
817+ Assertions .assertTrue (mixedArray .metadata ().chunkShape ()[0 ] > 0 );
818+ Assertions .assertTrue (mixedArray .metadata ().chunkShape ()[0 ] <= 1024 );
819+ Assertions .assertEquals (100 , mixedArray .metadata ().chunkShape ()[1 ]); // < 512, should equal shape
820+ Assertions .assertTrue (mixedArray .metadata ().chunkShape ()[2 ] > 0 );
821+ Assertions .assertTrue (mixedArray .metadata ().chunkShape ()[2 ] <= 2048 );
822+ }
823+ }
0 commit comments