@@ -573,3 +573,37 @@ async def test_use_consolidated_false(
573573            assert  len ([x  async  for  x  in  good .members ()]) ==  2 
574574            assert  good .metadata .consolidated_metadata 
575575            assert  sorted (good .metadata .consolidated_metadata .metadata ) ==  ["a" , "b" ]
576+ 
577+ 
578+ @pytest .mark .parametrize ("fill_value" , [np .nan , np .inf , - np .inf ]) 
579+ async  def  test_consolidated_metadata_encodes_special_chars (
580+     memory_store : Store , zarr_format : ZarrFormat , fill_value : float 
581+ ):
582+     root  =  await  group (store = memory_store , zarr_format = zarr_format )
583+     _child  =  await  root .create_group ("child" , attributes = {"test" : fill_value })
584+     _time  =  await  root .create_array ("time" , shape = (12 ,), dtype = np .float64 , fill_value = fill_value )
585+     await  zarr .api .asynchronous .consolidate_metadata (memory_store )
586+ 
587+     root  =  await  group (store = memory_store , zarr_format = zarr_format )
588+     root_buffer  =  root .metadata .to_buffer_dict (default_buffer_prototype ())
589+ 
590+     if  zarr_format  ==  2 :
591+         root_metadata  =  json .loads (root_buffer [".zmetadata" ].to_bytes ().decode ("utf-8" ))["metadata" ]
592+     elif  zarr_format  ==  3 :
593+         root_metadata  =  json .loads (root_buffer ["zarr.json" ].to_bytes ().decode ("utf-8" ))[
594+             "consolidated_metadata" 
595+         ]["metadata" ]
596+ 
597+     if  np .isnan (fill_value ):
598+         expected_fill_value  =  "NaN" 
599+     elif  np .isneginf (fill_value ):
600+         expected_fill_value  =  "-Infinity" 
601+     elif  np .isinf (fill_value ):
602+         expected_fill_value  =  "Infinity" 
603+ 
604+     if  zarr_format  ==  2 :
605+         assert  root_metadata ["child/.zattrs" ]["test" ] ==  expected_fill_value 
606+         assert  root_metadata ["time/.zarray" ]["fill_value" ] ==  expected_fill_value 
607+     elif  zarr_format  ==  3 :
608+         assert  root_metadata ["child" ]["attributes" ]["test" ] ==  expected_fill_value 
609+         assert  root_metadata ["time" ]["fill_value" ] ==  expected_fill_value 
0 commit comments