| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 | 
							- ----------------------------------------------------------------
 
- --  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;
 
 
  |