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