1*44bedb31SLionel Sambuc---------------------------------------------------------------- 2*44bedb31SLionel Sambuc-- ZLib for Ada thick binding. -- 3*44bedb31SLionel Sambuc-- -- 4*44bedb31SLionel Sambuc-- Copyright (C) 2002-2003 Dmitriy Anisimkov -- 5*44bedb31SLionel Sambuc-- -- 6*44bedb31SLionel Sambuc-- Open source license information is in the zlib.ads file. -- 7*44bedb31SLionel Sambuc---------------------------------------------------------------- 8*44bedb31SLionel Sambuc 9*44bedb31SLionel Sambuc-- Id: test.adb,v 1.17 2003/08/12 12:13:30 vagul Exp 10*44bedb31SLionel Sambuc 11*44bedb31SLionel Sambuc-- The program has a few aims. 12*44bedb31SLionel Sambuc-- 1. Test ZLib.Ada95 thick binding functionality. 13*44bedb31SLionel Sambuc-- 2. Show the example of use main functionality of the ZLib.Ada95 binding. 14*44bedb31SLionel Sambuc-- 3. Build this program automatically compile all ZLib.Ada95 packages under 15*44bedb31SLionel Sambuc-- GNAT Ada95 compiler. 16*44bedb31SLionel Sambuc 17*44bedb31SLionel Sambucwith ZLib.Streams; 18*44bedb31SLionel Sambucwith Ada.Streams.Stream_IO; 19*44bedb31SLionel Sambucwith Ada.Numerics.Discrete_Random; 20*44bedb31SLionel Sambuc 21*44bedb31SLionel Sambucwith Ada.Text_IO; 22*44bedb31SLionel Sambuc 23*44bedb31SLionel Sambucwith Ada.Calendar; 24*44bedb31SLionel Sambuc 25*44bedb31SLionel Sambucprocedure Test is 26*44bedb31SLionel Sambuc 27*44bedb31SLionel Sambuc use Ada.Streams; 28*44bedb31SLionel Sambuc use Stream_IO; 29*44bedb31SLionel Sambuc 30*44bedb31SLionel Sambuc ------------------------------------ 31*44bedb31SLionel Sambuc -- Test configuration parameters -- 32*44bedb31SLionel Sambuc ------------------------------------ 33*44bedb31SLionel Sambuc 34*44bedb31SLionel Sambuc File_Size : Count := 100_000; 35*44bedb31SLionel Sambuc Continuous : constant Boolean := False; 36*44bedb31SLionel Sambuc 37*44bedb31SLionel Sambuc Header : constant ZLib.Header_Type := ZLib.Default; 38*44bedb31SLionel Sambuc -- ZLib.None; 39*44bedb31SLionel Sambuc -- ZLib.Auto; 40*44bedb31SLionel Sambuc -- ZLib.GZip; 41*44bedb31SLionel Sambuc -- Do not use Header other then Default in ZLib versions 1.1.4 42*44bedb31SLionel Sambuc -- and older. 43*44bedb31SLionel Sambuc 44*44bedb31SLionel Sambuc Strategy : constant ZLib.Strategy_Type := ZLib.Default_Strategy; 45*44bedb31SLionel Sambuc Init_Random : constant := 10; 46*44bedb31SLionel Sambuc 47*44bedb31SLionel Sambuc -- End -- 48*44bedb31SLionel Sambuc 49*44bedb31SLionel Sambuc In_File_Name : constant String := "testzlib.in"; 50*44bedb31SLionel Sambuc -- Name of the input file 51*44bedb31SLionel Sambuc 52*44bedb31SLionel Sambuc Z_File_Name : constant String := "testzlib.zlb"; 53*44bedb31SLionel Sambuc -- Name of the compressed file. 54*44bedb31SLionel Sambuc 55*44bedb31SLionel Sambuc Out_File_Name : constant String := "testzlib.out"; 56*44bedb31SLionel Sambuc -- Name of the decompressed file. 57*44bedb31SLionel Sambuc 58*44bedb31SLionel Sambuc File_In : File_Type; 59*44bedb31SLionel Sambuc File_Out : File_Type; 60*44bedb31SLionel Sambuc File_Back : File_Type; 61*44bedb31SLionel Sambuc File_Z : ZLib.Streams.Stream_Type; 62*44bedb31SLionel Sambuc 63*44bedb31SLionel Sambuc Filter : ZLib.Filter_Type; 64*44bedb31SLionel Sambuc 65*44bedb31SLionel Sambuc Time_Stamp : Ada.Calendar.Time; 66*44bedb31SLionel Sambuc 67*44bedb31SLionel Sambuc procedure Generate_File; 68*44bedb31SLionel Sambuc -- Generate file of spetsified size with some random data. 69*44bedb31SLionel Sambuc -- The random data is repeatable, for the good compression. 70*44bedb31SLionel Sambuc 71*44bedb31SLionel Sambuc procedure Compare_Streams 72*44bedb31SLionel Sambuc (Left, Right : in out Root_Stream_Type'Class); 73*44bedb31SLionel Sambuc -- The procedure compearing data in 2 streams. 74*44bedb31SLionel Sambuc -- It is for compare data before and after compression/decompression. 75*44bedb31SLionel Sambuc 76*44bedb31SLionel Sambuc procedure Compare_Files (Left, Right : String); 77*44bedb31SLionel Sambuc -- Compare files. Based on the Compare_Streams. 78*44bedb31SLionel Sambuc 79*44bedb31SLionel Sambuc procedure Copy_Streams 80*44bedb31SLionel Sambuc (Source, Target : in out Root_Stream_Type'Class; 81*44bedb31SLionel Sambuc Buffer_Size : in Stream_Element_Offset := 1024); 82*44bedb31SLionel Sambuc -- Copying data from one stream to another. It is for test stream 83*44bedb31SLionel Sambuc -- interface of the library. 84*44bedb31SLionel Sambuc 85*44bedb31SLionel Sambuc procedure Data_In 86*44bedb31SLionel Sambuc (Item : out Stream_Element_Array; 87*44bedb31SLionel Sambuc Last : out Stream_Element_Offset); 88*44bedb31SLionel Sambuc -- this procedure is for generic instantiation of 89*44bedb31SLionel Sambuc -- ZLib.Generic_Translate. 90*44bedb31SLionel Sambuc -- reading data from the File_In. 91*44bedb31SLionel Sambuc 92*44bedb31SLionel Sambuc procedure Data_Out (Item : in Stream_Element_Array); 93*44bedb31SLionel Sambuc -- this procedure is for generic instantiation of 94*44bedb31SLionel Sambuc -- ZLib.Generic_Translate. 95*44bedb31SLionel Sambuc -- writing data to the File_Out. 96*44bedb31SLionel Sambuc 97*44bedb31SLionel Sambuc procedure Stamp; 98*44bedb31SLionel Sambuc -- Store the timestamp to the local variable. 99*44bedb31SLionel Sambuc 100*44bedb31SLionel Sambuc procedure Print_Statistic (Msg : String; Data_Size : ZLib.Count); 101*44bedb31SLionel Sambuc -- Print the time statistic with the message. 102*44bedb31SLionel Sambuc 103*44bedb31SLionel Sambuc procedure Translate is new ZLib.Generic_Translate 104*44bedb31SLionel Sambuc (Data_In => Data_In, 105*44bedb31SLionel Sambuc Data_Out => Data_Out); 106*44bedb31SLionel Sambuc -- This procedure is moving data from File_In to File_Out 107*44bedb31SLionel Sambuc -- with compression or decompression, depend on initialization of 108*44bedb31SLionel Sambuc -- Filter parameter. 109*44bedb31SLionel Sambuc 110*44bedb31SLionel Sambuc ------------------- 111*44bedb31SLionel Sambuc -- Compare_Files -- 112*44bedb31SLionel Sambuc ------------------- 113*44bedb31SLionel Sambuc 114*44bedb31SLionel Sambuc procedure Compare_Files (Left, Right : String) is 115*44bedb31SLionel Sambuc Left_File, Right_File : File_Type; 116*44bedb31SLionel Sambuc begin 117*44bedb31SLionel Sambuc Open (Left_File, In_File, Left); 118*44bedb31SLionel Sambuc Open (Right_File, In_File, Right); 119*44bedb31SLionel Sambuc Compare_Streams (Stream (Left_File).all, Stream (Right_File).all); 120*44bedb31SLionel Sambuc Close (Left_File); 121*44bedb31SLionel Sambuc Close (Right_File); 122*44bedb31SLionel Sambuc end Compare_Files; 123*44bedb31SLionel Sambuc 124*44bedb31SLionel Sambuc --------------------- 125*44bedb31SLionel Sambuc -- Compare_Streams -- 126*44bedb31SLionel Sambuc --------------------- 127*44bedb31SLionel Sambuc 128*44bedb31SLionel Sambuc procedure Compare_Streams 129*44bedb31SLionel Sambuc (Left, Right : in out Ada.Streams.Root_Stream_Type'Class) 130*44bedb31SLionel Sambuc is 131*44bedb31SLionel Sambuc Left_Buffer, Right_Buffer : Stream_Element_Array (0 .. 16#FFF#); 132*44bedb31SLionel Sambuc Left_Last, Right_Last : Stream_Element_Offset; 133*44bedb31SLionel Sambuc begin 134*44bedb31SLionel Sambuc loop 135*44bedb31SLionel Sambuc Read (Left, Left_Buffer, Left_Last); 136*44bedb31SLionel Sambuc Read (Right, Right_Buffer, Right_Last); 137*44bedb31SLionel Sambuc 138*44bedb31SLionel Sambuc if Left_Last /= Right_Last then 139*44bedb31SLionel Sambuc Ada.Text_IO.Put_Line ("Compare error :" 140*44bedb31SLionel Sambuc & Stream_Element_Offset'Image (Left_Last) 141*44bedb31SLionel Sambuc & " /= " 142*44bedb31SLionel Sambuc & Stream_Element_Offset'Image (Right_Last)); 143*44bedb31SLionel Sambuc 144*44bedb31SLionel Sambuc raise Constraint_Error; 145*44bedb31SLionel Sambuc 146*44bedb31SLionel Sambuc elsif Left_Buffer (0 .. Left_Last) 147*44bedb31SLionel Sambuc /= Right_Buffer (0 .. Right_Last) 148*44bedb31SLionel Sambuc then 149*44bedb31SLionel Sambuc Ada.Text_IO.Put_Line ("ERROR: IN and OUT files is not equal."); 150*44bedb31SLionel Sambuc raise Constraint_Error; 151*44bedb31SLionel Sambuc 152*44bedb31SLionel Sambuc end if; 153*44bedb31SLionel Sambuc 154*44bedb31SLionel Sambuc exit when Left_Last < Left_Buffer'Last; 155*44bedb31SLionel Sambuc end loop; 156*44bedb31SLionel Sambuc end Compare_Streams; 157*44bedb31SLionel Sambuc 158*44bedb31SLionel Sambuc ------------------ 159*44bedb31SLionel Sambuc -- Copy_Streams -- 160*44bedb31SLionel Sambuc ------------------ 161*44bedb31SLionel Sambuc 162*44bedb31SLionel Sambuc procedure Copy_Streams 163*44bedb31SLionel Sambuc (Source, Target : in out Ada.Streams.Root_Stream_Type'Class; 164*44bedb31SLionel Sambuc Buffer_Size : in Stream_Element_Offset := 1024) 165*44bedb31SLionel Sambuc is 166*44bedb31SLionel Sambuc Buffer : Stream_Element_Array (1 .. Buffer_Size); 167*44bedb31SLionel Sambuc Last : Stream_Element_Offset; 168*44bedb31SLionel Sambuc begin 169*44bedb31SLionel Sambuc loop 170*44bedb31SLionel Sambuc Read (Source, Buffer, Last); 171*44bedb31SLionel Sambuc Write (Target, Buffer (1 .. Last)); 172*44bedb31SLionel Sambuc 173*44bedb31SLionel Sambuc exit when Last < Buffer'Last; 174*44bedb31SLionel Sambuc end loop; 175*44bedb31SLionel Sambuc end Copy_Streams; 176*44bedb31SLionel Sambuc 177*44bedb31SLionel Sambuc ------------- 178*44bedb31SLionel Sambuc -- Data_In -- 179*44bedb31SLionel Sambuc ------------- 180*44bedb31SLionel Sambuc 181*44bedb31SLionel Sambuc procedure Data_In 182*44bedb31SLionel Sambuc (Item : out Stream_Element_Array; 183*44bedb31SLionel Sambuc Last : out Stream_Element_Offset) is 184*44bedb31SLionel Sambuc begin 185*44bedb31SLionel Sambuc Read (File_In, Item, Last); 186*44bedb31SLionel Sambuc end Data_In; 187*44bedb31SLionel Sambuc 188*44bedb31SLionel Sambuc -------------- 189*44bedb31SLionel Sambuc -- Data_Out -- 190*44bedb31SLionel Sambuc -------------- 191*44bedb31SLionel Sambuc 192*44bedb31SLionel Sambuc procedure Data_Out (Item : in Stream_Element_Array) is 193*44bedb31SLionel Sambuc begin 194*44bedb31SLionel Sambuc Write (File_Out, Item); 195*44bedb31SLionel Sambuc end Data_Out; 196*44bedb31SLionel Sambuc 197*44bedb31SLionel Sambuc ------------------- 198*44bedb31SLionel Sambuc -- Generate_File -- 199*44bedb31SLionel Sambuc ------------------- 200*44bedb31SLionel Sambuc 201*44bedb31SLionel Sambuc procedure Generate_File is 202*44bedb31SLionel Sambuc subtype Visible_Symbols is Stream_Element range 16#20# .. 16#7E#; 203*44bedb31SLionel Sambuc 204*44bedb31SLionel Sambuc package Random_Elements is 205*44bedb31SLionel Sambuc new Ada.Numerics.Discrete_Random (Visible_Symbols); 206*44bedb31SLionel Sambuc 207*44bedb31SLionel Sambuc Gen : Random_Elements.Generator; 208*44bedb31SLionel Sambuc Buffer : Stream_Element_Array := (1 .. 77 => 16#20#) & 10; 209*44bedb31SLionel Sambuc 210*44bedb31SLionel Sambuc Buffer_Count : constant Count := File_Size / Buffer'Length; 211*44bedb31SLionel Sambuc -- Number of same buffers in the packet. 212*44bedb31SLionel Sambuc 213*44bedb31SLionel Sambuc Density : constant Count := 30; -- from 0 to Buffer'Length - 2; 214*44bedb31SLionel Sambuc 215*44bedb31SLionel Sambuc procedure Fill_Buffer (J, D : in Count); 216*44bedb31SLionel Sambuc -- Change the part of the buffer. 217*44bedb31SLionel Sambuc 218*44bedb31SLionel Sambuc ----------------- 219*44bedb31SLionel Sambuc -- Fill_Buffer -- 220*44bedb31SLionel Sambuc ----------------- 221*44bedb31SLionel Sambuc 222*44bedb31SLionel Sambuc procedure Fill_Buffer (J, D : in Count) is 223*44bedb31SLionel Sambuc begin 224*44bedb31SLionel Sambuc for K in 0 .. D loop 225*44bedb31SLionel Sambuc Buffer 226*44bedb31SLionel Sambuc (Stream_Element_Offset ((J + K) mod (Buffer'Length - 1) + 1)) 227*44bedb31SLionel Sambuc := Random_Elements.Random (Gen); 228*44bedb31SLionel Sambuc 229*44bedb31SLionel Sambuc end loop; 230*44bedb31SLionel Sambuc end Fill_Buffer; 231*44bedb31SLionel Sambuc 232*44bedb31SLionel Sambuc begin 233*44bedb31SLionel Sambuc Random_Elements.Reset (Gen, Init_Random); 234*44bedb31SLionel Sambuc 235*44bedb31SLionel Sambuc Create (File_In, Out_File, In_File_Name); 236*44bedb31SLionel Sambuc 237*44bedb31SLionel Sambuc Fill_Buffer (1, Buffer'Length - 2); 238*44bedb31SLionel Sambuc 239*44bedb31SLionel Sambuc for J in 1 .. Buffer_Count loop 240*44bedb31SLionel Sambuc Write (File_In, Buffer); 241*44bedb31SLionel Sambuc 242*44bedb31SLionel Sambuc Fill_Buffer (J, Density); 243*44bedb31SLionel Sambuc end loop; 244*44bedb31SLionel Sambuc 245*44bedb31SLionel Sambuc -- fill remain size. 246*44bedb31SLionel Sambuc 247*44bedb31SLionel Sambuc Write 248*44bedb31SLionel Sambuc (File_In, 249*44bedb31SLionel Sambuc Buffer 250*44bedb31SLionel Sambuc (1 .. Stream_Element_Offset 251*44bedb31SLionel Sambuc (File_Size - Buffer'Length * Buffer_Count))); 252*44bedb31SLionel Sambuc 253*44bedb31SLionel Sambuc Flush (File_In); 254*44bedb31SLionel Sambuc Close (File_In); 255*44bedb31SLionel Sambuc end Generate_File; 256*44bedb31SLionel Sambuc 257*44bedb31SLionel Sambuc --------------------- 258*44bedb31SLionel Sambuc -- Print_Statistic -- 259*44bedb31SLionel Sambuc --------------------- 260*44bedb31SLionel Sambuc 261*44bedb31SLionel Sambuc procedure Print_Statistic (Msg : String; Data_Size : ZLib.Count) is 262*44bedb31SLionel Sambuc use Ada.Calendar; 263*44bedb31SLionel Sambuc use Ada.Text_IO; 264*44bedb31SLionel Sambuc 265*44bedb31SLionel Sambuc package Count_IO is new Integer_IO (ZLib.Count); 266*44bedb31SLionel Sambuc 267*44bedb31SLionel Sambuc Curr_Dur : Duration := Clock - Time_Stamp; 268*44bedb31SLionel Sambuc begin 269*44bedb31SLionel Sambuc Put (Msg); 270*44bedb31SLionel Sambuc 271*44bedb31SLionel Sambuc Set_Col (20); 272*44bedb31SLionel Sambuc Ada.Text_IO.Put ("size ="); 273*44bedb31SLionel Sambuc 274*44bedb31SLionel Sambuc Count_IO.Put 275*44bedb31SLionel Sambuc (Data_Size, 276*44bedb31SLionel Sambuc Width => Stream_IO.Count'Image (File_Size)'Length); 277*44bedb31SLionel Sambuc 278*44bedb31SLionel Sambuc Put_Line (" duration =" & Duration'Image (Curr_Dur)); 279*44bedb31SLionel Sambuc end Print_Statistic; 280*44bedb31SLionel Sambuc 281*44bedb31SLionel Sambuc ----------- 282*44bedb31SLionel Sambuc -- Stamp -- 283*44bedb31SLionel Sambuc ----------- 284*44bedb31SLionel Sambuc 285*44bedb31SLionel Sambuc procedure Stamp is 286*44bedb31SLionel Sambuc begin 287*44bedb31SLionel Sambuc Time_Stamp := Ada.Calendar.Clock; 288*44bedb31SLionel Sambuc end Stamp; 289*44bedb31SLionel Sambuc 290*44bedb31SLionel Sambucbegin 291*44bedb31SLionel Sambuc Ada.Text_IO.Put_Line ("ZLib " & ZLib.Version); 292*44bedb31SLionel Sambuc 293*44bedb31SLionel Sambuc loop 294*44bedb31SLionel Sambuc Generate_File; 295*44bedb31SLionel Sambuc 296*44bedb31SLionel Sambuc for Level in ZLib.Compression_Level'Range loop 297*44bedb31SLionel Sambuc 298*44bedb31SLionel Sambuc Ada.Text_IO.Put_Line ("Level =" 299*44bedb31SLionel Sambuc & ZLib.Compression_Level'Image (Level)); 300*44bedb31SLionel Sambuc 301*44bedb31SLionel Sambuc -- Test generic interface. 302*44bedb31SLionel Sambuc Open (File_In, In_File, In_File_Name); 303*44bedb31SLionel Sambuc Create (File_Out, Out_File, Z_File_Name); 304*44bedb31SLionel Sambuc 305*44bedb31SLionel Sambuc Stamp; 306*44bedb31SLionel Sambuc 307*44bedb31SLionel Sambuc -- Deflate using generic instantiation. 308*44bedb31SLionel Sambuc 309*44bedb31SLionel Sambuc ZLib.Deflate_Init 310*44bedb31SLionel Sambuc (Filter => Filter, 311*44bedb31SLionel Sambuc Level => Level, 312*44bedb31SLionel Sambuc Strategy => Strategy, 313*44bedb31SLionel Sambuc Header => Header); 314*44bedb31SLionel Sambuc 315*44bedb31SLionel Sambuc Translate (Filter); 316*44bedb31SLionel Sambuc Print_Statistic ("Generic compress", ZLib.Total_Out (Filter)); 317*44bedb31SLionel Sambuc ZLib.Close (Filter); 318*44bedb31SLionel Sambuc 319*44bedb31SLionel Sambuc Close (File_In); 320*44bedb31SLionel Sambuc Close (File_Out); 321*44bedb31SLionel Sambuc 322*44bedb31SLionel Sambuc Open (File_In, In_File, Z_File_Name); 323*44bedb31SLionel Sambuc Create (File_Out, Out_File, Out_File_Name); 324*44bedb31SLionel Sambuc 325*44bedb31SLionel Sambuc Stamp; 326*44bedb31SLionel Sambuc 327*44bedb31SLionel Sambuc -- Inflate using generic instantiation. 328*44bedb31SLionel Sambuc 329*44bedb31SLionel Sambuc ZLib.Inflate_Init (Filter, Header => Header); 330*44bedb31SLionel Sambuc 331*44bedb31SLionel Sambuc Translate (Filter); 332*44bedb31SLionel Sambuc Print_Statistic ("Generic decompress", ZLib.Total_Out (Filter)); 333*44bedb31SLionel Sambuc 334*44bedb31SLionel Sambuc ZLib.Close (Filter); 335*44bedb31SLionel Sambuc 336*44bedb31SLionel Sambuc Close (File_In); 337*44bedb31SLionel Sambuc Close (File_Out); 338*44bedb31SLionel Sambuc 339*44bedb31SLionel Sambuc Compare_Files (In_File_Name, Out_File_Name); 340*44bedb31SLionel Sambuc 341*44bedb31SLionel Sambuc -- Test stream interface. 342*44bedb31SLionel Sambuc 343*44bedb31SLionel Sambuc -- Compress to the back stream. 344*44bedb31SLionel Sambuc 345*44bedb31SLionel Sambuc Open (File_In, In_File, In_File_Name); 346*44bedb31SLionel Sambuc Create (File_Back, Out_File, Z_File_Name); 347*44bedb31SLionel Sambuc 348*44bedb31SLionel Sambuc Stamp; 349*44bedb31SLionel Sambuc 350*44bedb31SLionel Sambuc ZLib.Streams.Create 351*44bedb31SLionel Sambuc (Stream => File_Z, 352*44bedb31SLionel Sambuc Mode => ZLib.Streams.Out_Stream, 353*44bedb31SLionel Sambuc Back => ZLib.Streams.Stream_Access 354*44bedb31SLionel Sambuc (Stream (File_Back)), 355*44bedb31SLionel Sambuc Back_Compressed => True, 356*44bedb31SLionel Sambuc Level => Level, 357*44bedb31SLionel Sambuc Strategy => Strategy, 358*44bedb31SLionel Sambuc Header => Header); 359*44bedb31SLionel Sambuc 360*44bedb31SLionel Sambuc Copy_Streams 361*44bedb31SLionel Sambuc (Source => Stream (File_In).all, 362*44bedb31SLionel Sambuc Target => File_Z); 363*44bedb31SLionel Sambuc 364*44bedb31SLionel Sambuc -- Flushing internal buffers to the back stream. 365*44bedb31SLionel Sambuc 366*44bedb31SLionel Sambuc ZLib.Streams.Flush (File_Z, ZLib.Finish); 367*44bedb31SLionel Sambuc 368*44bedb31SLionel Sambuc Print_Statistic ("Write compress", 369*44bedb31SLionel Sambuc ZLib.Streams.Write_Total_Out (File_Z)); 370*44bedb31SLionel Sambuc 371*44bedb31SLionel Sambuc ZLib.Streams.Close (File_Z); 372*44bedb31SLionel Sambuc 373*44bedb31SLionel Sambuc Close (File_In); 374*44bedb31SLionel Sambuc Close (File_Back); 375*44bedb31SLionel Sambuc 376*44bedb31SLionel Sambuc -- Compare reading from original file and from 377*44bedb31SLionel Sambuc -- decompression stream. 378*44bedb31SLionel Sambuc 379*44bedb31SLionel Sambuc Open (File_In, In_File, In_File_Name); 380*44bedb31SLionel Sambuc Open (File_Back, In_File, Z_File_Name); 381*44bedb31SLionel Sambuc 382*44bedb31SLionel Sambuc ZLib.Streams.Create 383*44bedb31SLionel Sambuc (Stream => File_Z, 384*44bedb31SLionel Sambuc Mode => ZLib.Streams.In_Stream, 385*44bedb31SLionel Sambuc Back => ZLib.Streams.Stream_Access 386*44bedb31SLionel Sambuc (Stream (File_Back)), 387*44bedb31SLionel Sambuc Back_Compressed => True, 388*44bedb31SLionel Sambuc Header => Header); 389*44bedb31SLionel Sambuc 390*44bedb31SLionel Sambuc Stamp; 391*44bedb31SLionel Sambuc Compare_Streams (Stream (File_In).all, File_Z); 392*44bedb31SLionel Sambuc 393*44bedb31SLionel Sambuc Print_Statistic ("Read decompress", 394*44bedb31SLionel Sambuc ZLib.Streams.Read_Total_Out (File_Z)); 395*44bedb31SLionel Sambuc 396*44bedb31SLionel Sambuc ZLib.Streams.Close (File_Z); 397*44bedb31SLionel Sambuc Close (File_In); 398*44bedb31SLionel Sambuc Close (File_Back); 399*44bedb31SLionel Sambuc 400*44bedb31SLionel Sambuc -- Compress by reading from compression stream. 401*44bedb31SLionel Sambuc 402*44bedb31SLionel Sambuc Open (File_Back, In_File, In_File_Name); 403*44bedb31SLionel Sambuc Create (File_Out, Out_File, Z_File_Name); 404*44bedb31SLionel Sambuc 405*44bedb31SLionel Sambuc ZLib.Streams.Create 406*44bedb31SLionel Sambuc (Stream => File_Z, 407*44bedb31SLionel Sambuc Mode => ZLib.Streams.In_Stream, 408*44bedb31SLionel Sambuc Back => ZLib.Streams.Stream_Access 409*44bedb31SLionel Sambuc (Stream (File_Back)), 410*44bedb31SLionel Sambuc Back_Compressed => False, 411*44bedb31SLionel Sambuc Level => Level, 412*44bedb31SLionel Sambuc Strategy => Strategy, 413*44bedb31SLionel Sambuc Header => Header); 414*44bedb31SLionel Sambuc 415*44bedb31SLionel Sambuc Stamp; 416*44bedb31SLionel Sambuc Copy_Streams 417*44bedb31SLionel Sambuc (Source => File_Z, 418*44bedb31SLionel Sambuc Target => Stream (File_Out).all); 419*44bedb31SLionel Sambuc 420*44bedb31SLionel Sambuc Print_Statistic ("Read compress", 421*44bedb31SLionel Sambuc ZLib.Streams.Read_Total_Out (File_Z)); 422*44bedb31SLionel Sambuc 423*44bedb31SLionel Sambuc ZLib.Streams.Close (File_Z); 424*44bedb31SLionel Sambuc 425*44bedb31SLionel Sambuc Close (File_Out); 426*44bedb31SLionel Sambuc Close (File_Back); 427*44bedb31SLionel Sambuc 428*44bedb31SLionel Sambuc -- Decompress to decompression stream. 429*44bedb31SLionel Sambuc 430*44bedb31SLionel Sambuc Open (File_In, In_File, Z_File_Name); 431*44bedb31SLionel Sambuc Create (File_Back, Out_File, Out_File_Name); 432*44bedb31SLionel Sambuc 433*44bedb31SLionel Sambuc ZLib.Streams.Create 434*44bedb31SLionel Sambuc (Stream => File_Z, 435*44bedb31SLionel Sambuc Mode => ZLib.Streams.Out_Stream, 436*44bedb31SLionel Sambuc Back => ZLib.Streams.Stream_Access 437*44bedb31SLionel Sambuc (Stream (File_Back)), 438*44bedb31SLionel Sambuc Back_Compressed => False, 439*44bedb31SLionel Sambuc Header => Header); 440*44bedb31SLionel Sambuc 441*44bedb31SLionel Sambuc Stamp; 442*44bedb31SLionel Sambuc 443*44bedb31SLionel Sambuc Copy_Streams 444*44bedb31SLionel Sambuc (Source => Stream (File_In).all, 445*44bedb31SLionel Sambuc Target => File_Z); 446*44bedb31SLionel Sambuc 447*44bedb31SLionel Sambuc Print_Statistic ("Write decompress", 448*44bedb31SLionel Sambuc ZLib.Streams.Write_Total_Out (File_Z)); 449*44bedb31SLionel Sambuc 450*44bedb31SLionel Sambuc ZLib.Streams.Close (File_Z); 451*44bedb31SLionel Sambuc Close (File_In); 452*44bedb31SLionel Sambuc Close (File_Back); 453*44bedb31SLionel Sambuc 454*44bedb31SLionel Sambuc Compare_Files (In_File_Name, Out_File_Name); 455*44bedb31SLionel Sambuc end loop; 456*44bedb31SLionel Sambuc 457*44bedb31SLionel Sambuc Ada.Text_IO.Put_Line (Count'Image (File_Size) & " Ok."); 458*44bedb31SLionel Sambuc 459*44bedb31SLionel Sambuc exit when not Continuous; 460*44bedb31SLionel Sambuc 461*44bedb31SLionel Sambuc File_Size := File_Size + 1; 462*44bedb31SLionel Sambuc end loop; 463*44bedb31SLionel Sambucend Test; 464