⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test.adb

📁 gcc的组建
💻 ADB
字号:
------------------------------------------------------------------  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;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -