| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463 | 
							- ----------------------------------------------------------------
 
- --  ZLib for Ada thick binding.                               --
 
- --                                                            --
 
- --  Copyright (C) 2002-2003 Dmitriy Anisimkov                 --
 
- --                                                            --
 
- --  Open source license information is in the zlib.ads file.  --
 
- ----------------------------------------------------------------
 
- --  $Id: test.adb,v 1.17 2003/08/12 12:13:30 vagul Exp $
 
- --  The program has a few aims.
 
- --  1. Test ZLib.Ada95 thick binding functionality.
 
- --  2. Show the example of use main functionality of the ZLib.Ada95 binding.
 
- --  3. Build this program automatically compile all ZLib.Ada95 packages under
 
- --     GNAT Ada95 compiler.
 
- with ZLib.Streams;
 
- with Ada.Streams.Stream_IO;
 
- with Ada.Numerics.Discrete_Random;
 
- with Ada.Text_IO;
 
- with Ada.Calendar;
 
- procedure Test is
 
-    use Ada.Streams;
 
-    use Stream_IO;
 
-    ------------------------------------
 
-    --  Test configuration parameters --
 
-    ------------------------------------
 
-    File_Size   : Count   := 100_000;
 
-    Continuous  : constant Boolean := False;
 
-    Header      : constant ZLib.Header_Type := ZLib.Default;
 
-                                               --  ZLib.None;
 
-                                               --  ZLib.Auto;
 
-                                               --  ZLib.GZip;
 
-    --  Do not use Header other then Default in ZLib versions 1.1.4
 
-    --  and older.
 
-    Strategy    : constant ZLib.Strategy_Type := ZLib.Default_Strategy;
 
-    Init_Random : constant := 10;
 
-    -- End --
 
-    In_File_Name  : constant String := "testzlib.in";
 
-    --  Name of the input file
 
-    Z_File_Name   : constant String := "testzlib.zlb";
 
-    --  Name of the compressed file.
 
-    Out_File_Name : constant String := "testzlib.out";
 
-    --  Name of the decompressed file.
 
-    File_In   : File_Type;
 
-    File_Out  : File_Type;
 
-    File_Back : File_Type;
 
-    File_Z    : ZLib.Streams.Stream_Type;
 
-    Filter : ZLib.Filter_Type;
 
-    Time_Stamp : Ada.Calendar.Time;
 
-    procedure Generate_File;
 
-    --  Generate file of spetsified size with some random data.
 
-    --  The random data is repeatable, for the good compression.
 
-    procedure Compare_Streams
 
-      (Left, Right : in out Root_Stream_Type'Class);
 
-    --  The procedure compearing data in 2 streams.
 
-    --  It is for compare data before and after compression/decompression.
 
-    procedure Compare_Files (Left, Right : String);
 
-    --  Compare files. Based on the Compare_Streams.
 
-    procedure Copy_Streams
 
-      (Source, Target : in out Root_Stream_Type'Class;
 
-       Buffer_Size    : in     Stream_Element_Offset := 1024);
 
-    --  Copying data from one stream to another. It is for test stream
 
-    --  interface of the library.
 
-    procedure Data_In
 
-      (Item : out Stream_Element_Array;
 
-       Last : out Stream_Element_Offset);
 
-    --  this procedure is for generic instantiation of
 
-    --  ZLib.Generic_Translate.
 
-    --  reading data from the File_In.
 
-    procedure Data_Out (Item : in Stream_Element_Array);
 
-    --  this procedure is for generic instantiation of
 
-    --  ZLib.Generic_Translate.
 
-    --  writing data to the File_Out.
 
-    procedure Stamp;
 
-    --  Store the timestamp to the local variable.
 
-    procedure Print_Statistic (Msg : String; Data_Size : ZLib.Count);
 
-    --  Print the time statistic with the message.
 
-    procedure Translate is new ZLib.Generic_Translate
 
-                                 (Data_In  => Data_In,
 
-                                  Data_Out => Data_Out);
 
-    --  This procedure is moving data from File_In to File_Out
 
-    --  with compression or decompression, depend on initialization of
 
-    --  Filter parameter.
 
-    -------------------
 
-    -- Compare_Files --
 
-    -------------------
 
-    procedure Compare_Files (Left, Right : String) is
 
-       Left_File, Right_File : File_Type;
 
-    begin
 
-       Open (Left_File, In_File, Left);
 
-       Open (Right_File, In_File, Right);
 
-       Compare_Streams (Stream (Left_File).all, Stream (Right_File).all);
 
-       Close (Left_File);
 
-       Close (Right_File);
 
-    end Compare_Files;
 
-    ---------------------
 
-    -- Compare_Streams --
 
-    ---------------------
 
-    procedure Compare_Streams
 
-      (Left, Right : in out Ada.Streams.Root_Stream_Type'Class)
 
-    is
 
-       Left_Buffer, Right_Buffer : Stream_Element_Array (0 .. 16#FFF#);
 
-       Left_Last, Right_Last : Stream_Element_Offset;
 
-    begin
 
-       loop
 
-          Read (Left, Left_Buffer, Left_Last);
 
-          Read (Right, Right_Buffer, Right_Last);
 
-          if Left_Last /= Right_Last then
 
-             Ada.Text_IO.Put_Line ("Compare error :"
 
-               & Stream_Element_Offset'Image (Left_Last)
 
-               & " /= "
 
-               & Stream_Element_Offset'Image (Right_Last));
 
-             raise Constraint_Error;
 
-          elsif Left_Buffer (0 .. Left_Last)
 
-                /= Right_Buffer (0 .. Right_Last)
 
-          then
 
-             Ada.Text_IO.Put_Line ("ERROR: IN and OUT files is not equal.");
 
-             raise Constraint_Error;
 
-          end if;
 
-          exit when Left_Last < Left_Buffer'Last;
 
-       end loop;
 
-    end Compare_Streams;
 
-    ------------------
 
-    -- Copy_Streams --
 
-    ------------------
 
-    procedure Copy_Streams
 
-      (Source, Target : in out Ada.Streams.Root_Stream_Type'Class;
 
-       Buffer_Size    : in     Stream_Element_Offset := 1024)
 
-    is
 
-       Buffer : Stream_Element_Array (1 .. Buffer_Size);
 
-       Last   : Stream_Element_Offset;
 
-    begin
 
-       loop
 
-          Read  (Source, Buffer, Last);
 
-          Write (Target, Buffer (1 .. Last));
 
-          exit when Last < Buffer'Last;
 
-       end loop;
 
-    end Copy_Streams;
 
-    -------------
 
-    -- Data_In --
 
-    -------------
 
-    procedure Data_In
 
-      (Item : out Stream_Element_Array;
 
-       Last : out Stream_Element_Offset) is
 
-    begin
 
-       Read (File_In, Item, Last);
 
-    end Data_In;
 
-    --------------
 
-    -- Data_Out --
 
-    --------------
 
-    procedure Data_Out (Item : in Stream_Element_Array) is
 
-    begin
 
-       Write (File_Out, Item);
 
-    end Data_Out;
 
-    -------------------
 
-    -- Generate_File --
 
-    -------------------
 
-    procedure Generate_File is
 
-       subtype Visible_Symbols is Stream_Element range 16#20# .. 16#7E#;
 
-       package Random_Elements is
 
-          new Ada.Numerics.Discrete_Random (Visible_Symbols);
 
-       Gen    : Random_Elements.Generator;
 
-       Buffer : Stream_Element_Array := (1 .. 77 => 16#20#) & 10;
 
-       Buffer_Count : constant Count := File_Size / Buffer'Length;
 
-       --  Number of same buffers in the packet.
 
-       Density : constant Count := 30; --  from 0 to Buffer'Length - 2;
 
-       procedure Fill_Buffer (J, D : in Count);
 
-       --  Change the part of the buffer.
 
-       -----------------
 
-       -- Fill_Buffer --
 
-       -----------------
 
-       procedure Fill_Buffer (J, D : in Count) is
 
-       begin
 
-          for K in 0 .. D loop
 
-             Buffer
 
-               (Stream_Element_Offset ((J + K) mod (Buffer'Length - 1) + 1))
 
-              := Random_Elements.Random (Gen);
 
-          end loop;
 
-       end Fill_Buffer;
 
-    begin
 
-       Random_Elements.Reset (Gen, Init_Random);
 
-       Create (File_In, Out_File, In_File_Name);
 
-       Fill_Buffer (1, Buffer'Length - 2);
 
-       for J in 1 .. Buffer_Count loop
 
-          Write (File_In, Buffer);
 
-          Fill_Buffer (J, Density);
 
-       end loop;
 
-       --  fill remain size.
 
-       Write
 
-         (File_In,
 
-          Buffer
 
-            (1 .. Stream_Element_Offset
 
-                    (File_Size - Buffer'Length * Buffer_Count)));
 
-       Flush (File_In);
 
-       Close (File_In);
 
-    end Generate_File;
 
-    ---------------------
 
-    -- Print_Statistic --
 
-    ---------------------
 
-    procedure Print_Statistic (Msg : String; Data_Size : ZLib.Count) is
 
-       use Ada.Calendar;
 
-       use Ada.Text_IO;
 
-       package Count_IO is new Integer_IO (ZLib.Count);
 
-       Curr_Dur : Duration := Clock - Time_Stamp;
 
-    begin
 
-       Put (Msg);
 
-       Set_Col (20);
 
-       Ada.Text_IO.Put ("size =");
 
-       Count_IO.Put
 
-         (Data_Size,
 
-          Width => Stream_IO.Count'Image (File_Size)'Length);
 
-       Put_Line (" duration =" & Duration'Image (Curr_Dur));
 
-    end Print_Statistic;
 
-    -----------
 
-    -- Stamp --
 
-    -----------
 
-    procedure Stamp is
 
-    begin
 
-       Time_Stamp := Ada.Calendar.Clock;
 
-    end Stamp;
 
- begin
 
-    Ada.Text_IO.Put_Line ("ZLib " & ZLib.Version);
 
-    loop
 
-       Generate_File;
 
-       for Level in ZLib.Compression_Level'Range loop
 
-          Ada.Text_IO.Put_Line ("Level ="
 
-             & ZLib.Compression_Level'Image (Level));
 
-          --  Test generic interface.
 
-          Open   (File_In, In_File, In_File_Name);
 
-          Create (File_Out, Out_File, Z_File_Name);
 
-          Stamp;
 
-          --  Deflate using generic instantiation.
 
-          ZLib.Deflate_Init
 
-                (Filter   => Filter,
 
-                 Level    => Level,
 
-                 Strategy => Strategy,
 
-                 Header   => Header);
 
-          Translate (Filter);
 
-          Print_Statistic ("Generic compress", ZLib.Total_Out (Filter));
 
-          ZLib.Close (Filter);
 
-          Close (File_In);
 
-          Close (File_Out);
 
-          Open   (File_In, In_File, Z_File_Name);
 
-          Create (File_Out, Out_File, Out_File_Name);
 
-          Stamp;
 
-          --  Inflate using generic instantiation.
 
-          ZLib.Inflate_Init (Filter, Header => Header);
 
-          Translate (Filter);
 
-          Print_Statistic ("Generic decompress", ZLib.Total_Out (Filter));
 
-          ZLib.Close (Filter);
 
-          Close (File_In);
 
-          Close (File_Out);
 
-          Compare_Files (In_File_Name, Out_File_Name);
 
-          --  Test stream interface.
 
-          --  Compress to the back stream.
 
-          Open   (File_In, In_File, In_File_Name);
 
-          Create (File_Back, Out_File, Z_File_Name);
 
-          Stamp;
 
-          ZLib.Streams.Create
 
-            (Stream          => File_Z,
 
-             Mode            => ZLib.Streams.Out_Stream,
 
-             Back            => ZLib.Streams.Stream_Access
 
-                                  (Stream (File_Back)),
 
-             Back_Compressed => True,
 
-             Level           => Level,
 
-             Strategy        => Strategy,
 
-             Header          => Header);
 
-          Copy_Streams
 
-            (Source => Stream (File_In).all,
 
-             Target => File_Z);
 
-          --  Flushing internal buffers to the back stream.
 
-          ZLib.Streams.Flush (File_Z, ZLib.Finish);
 
-          Print_Statistic ("Write compress",
 
-                           ZLib.Streams.Write_Total_Out (File_Z));
 
-          ZLib.Streams.Close (File_Z);
 
-          Close (File_In);
 
-          Close (File_Back);
 
-          --  Compare reading from original file and from
 
-          --  decompression stream.
 
-          Open (File_In,   In_File, In_File_Name);
 
-          Open (File_Back, In_File, Z_File_Name);
 
-          ZLib.Streams.Create
 
-            (Stream          => File_Z,
 
-             Mode            => ZLib.Streams.In_Stream,
 
-             Back            => ZLib.Streams.Stream_Access
 
-                                  (Stream (File_Back)),
 
-             Back_Compressed => True,
 
-             Header          => Header);
 
-          Stamp;
 
-          Compare_Streams (Stream (File_In).all, File_Z);
 
-          Print_Statistic ("Read decompress",
 
-                           ZLib.Streams.Read_Total_Out (File_Z));
 
-          ZLib.Streams.Close (File_Z);
 
-          Close (File_In);
 
-          Close (File_Back);
 
-          --  Compress by reading from compression stream.
 
-          Open (File_Back, In_File, In_File_Name);
 
-          Create (File_Out, Out_File, Z_File_Name);
 
-          ZLib.Streams.Create
 
-            (Stream          => File_Z,
 
-             Mode            => ZLib.Streams.In_Stream,
 
-             Back            => ZLib.Streams.Stream_Access
 
-                                  (Stream (File_Back)),
 
-             Back_Compressed => False,
 
-             Level           => Level,
 
-             Strategy        => Strategy,
 
-             Header          => Header);
 
-          Stamp;
 
-          Copy_Streams
 
-            (Source => File_Z,
 
-             Target => Stream (File_Out).all);
 
-          Print_Statistic ("Read compress",
 
-                           ZLib.Streams.Read_Total_Out (File_Z));
 
-          ZLib.Streams.Close (File_Z);
 
-          Close (File_Out);
 
-          Close (File_Back);
 
-          --  Decompress to decompression stream.
 
-          Open   (File_In,   In_File, Z_File_Name);
 
-          Create (File_Back, Out_File, Out_File_Name);
 
-          ZLib.Streams.Create
 
-            (Stream          => File_Z,
 
-             Mode            => ZLib.Streams.Out_Stream,
 
-             Back            => ZLib.Streams.Stream_Access
 
-                                  (Stream (File_Back)),
 
-             Back_Compressed => False,
 
-             Header          => Header);
 
-          Stamp;
 
-          Copy_Streams
 
-            (Source => Stream (File_In).all,
 
-             Target => File_Z);
 
-          Print_Statistic ("Write decompress",
 
-                           ZLib.Streams.Write_Total_Out (File_Z));
 
-          ZLib.Streams.Close (File_Z);
 
-          Close (File_In);
 
-          Close (File_Back);
 
-          Compare_Files (In_File_Name, Out_File_Name);
 
-       end loop;
 
-       Ada.Text_IO.Put_Line (Count'Image (File_Size) & " Ok.");
 
-       exit when not Continuous;
 
-       File_Size := File_Size + 1;
 
-    end loop;
 
- end Test;
 
 
  |