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

📄 mtest.adb

📁 gcc的组建
💻 ADB
字号:
------------------------------------------------------------------  ZLib for Ada thick binding.                               ----                                                            ----  Copyright (C) 2002-2003 Dmitriy Anisimkov                 ----                                                            ----  Open source license information is in the zlib.ads file.  --------------------------------------------------------------------  Continuous test for ZLib multithreading. If the test would fail--  we should provide thread safe allocation routines for the Z_Stream.----  $Id: mtest.adb,v 1.4 2004/07/23 07:49:54 vagul Exp $with ZLib;with Ada.Streams;with Ada.Numerics.Discrete_Random;with Ada.Text_IO;with Ada.Exceptions;with Ada.Task_Identification;procedure MTest is   use Ada.Streams;   use ZLib;   Stop : Boolean := False;   pragma Atomic (Stop);   subtype Visible_Symbols is Stream_Element range 16#20# .. 16#7E#;   package Random_Elements is      new Ada.Numerics.Discrete_Random (Visible_Symbols);   task type Test_Task;   task body Test_Task is      Buffer : Stream_Element_Array (1 .. 100_000);      Gen : Random_Elements.Generator;      Buffer_First  : Stream_Element_Offset;      Compare_First : Stream_Element_Offset;      Deflate : Filter_Type;      Inflate : Filter_Type;      procedure Further (Item : in Stream_Element_Array);      procedure Read_Buffer        (Item : out Ada.Streams.Stream_Element_Array;         Last : out Ada.Streams.Stream_Element_Offset);      -------------      -- Further --      -------------      procedure Further (Item : in Stream_Element_Array) is         procedure Compare (Item : in Stream_Element_Array);         -------------         -- Compare --         -------------         procedure Compare (Item : in Stream_Element_Array) is            Next_First : Stream_Element_Offset := Compare_First + Item'Length;         begin            if Buffer (Compare_First .. Next_First - 1) /= Item then               raise Program_Error;            end if;            Compare_First := Next_First;         end Compare;         procedure Compare_Write is new ZLib.Write (Write => Compare);      begin         Compare_Write (Inflate, Item, No_Flush);      end Further;      -----------------      -- Read_Buffer --      -----------------      procedure Read_Buffer        (Item : out Ada.Streams.Stream_Element_Array;         Last : out Ada.Streams.Stream_Element_Offset)      is         Buff_Diff   : Stream_Element_Offset := Buffer'Last - Buffer_First;         Next_First : Stream_Element_Offset;      begin         if Item'Length <= Buff_Diff then            Last := Item'Last;            Next_First := Buffer_First + Item'Length;            Item := Buffer (Buffer_First .. Next_First - 1);            Buffer_First := Next_First;         else            Last := Item'First + Buff_Diff;            Item (Item'First .. Last) := Buffer (Buffer_First .. Buffer'Last);            Buffer_First := Buffer'Last + 1;         end if;      end Read_Buffer;      procedure Translate is new Generic_Translate                                   (Data_In  => Read_Buffer,                                    Data_Out => Further);   begin      Random_Elements.Reset (Gen);      Buffer := (others => 20);      Main : loop         for J in Buffer'Range loop            Buffer (J) := Random_Elements.Random (Gen);            Deflate_Init (Deflate);            Inflate_Init (Inflate);            Buffer_First  := Buffer'First;            Compare_First := Buffer'First;            Translate (Deflate);            if Compare_First /= Buffer'Last + 1 then               raise Program_Error;            end if;            Ada.Text_IO.Put_Line              (Ada.Task_Identification.Image                 (Ada.Task_Identification.Current_Task)               & Stream_Element_Offset'Image (J)               & ZLib.Count'Image (Total_Out (Deflate)));            Close (Deflate);            Close (Inflate);            exit Main when Stop;         end loop;      end loop Main;   exception      when E : others =>         Ada.Text_IO.Put_Line (Ada.Exceptions.Exception_Information (E));         Stop := True;   end Test_Task;   Test : array (1 .. 4) of Test_Task;   pragma Unreferenced (Test);   Dummy : Character;begin   Ada.Text_IO.Get_Immediate (Dummy);   Stop := True;end MTest;

⌨️ 快捷键说明

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