1
----------------------------------------------------------------
2
-- ZLib for Ada thick binding. --
4
-- Copyright (C) 2002-2003 Dmitriy Anisimkov --
6
-- Open source license information is in the zlib.ads file. --
7
----------------------------------------------------------------
8
-- Continuous test for ZLib multithreading. If the test would fail
9
-- we should provide thread safe allocation routines for the Z_Stream.
11
-- $Id: mtest.adb,v 1.4 2004/07/23 07:49:54 vagul Exp $
15
with Ada.Numerics.Discrete_Random;
18
with Ada.Task_Identification;
24
Stop : Boolean := False;
28
subtype Visible_Symbols is Stream_Element range 16#20# .. 16#7E#;
30
package Random_Elements is
31
new Ada.Numerics.Discrete_Random (Visible_Symbols);
35
task body Test_Task is
36
Buffer : Stream_Element_Array (1 .. 100_000);
37
Gen : Random_Elements.Generator;
39
Buffer_First : Stream_Element_Offset;
40
Compare_First : Stream_Element_Offset;
42
Deflate : Filter_Type;
43
Inflate : Filter_Type;
45
procedure Further (Item : in Stream_Element_Array);
48
(Item : out Ada.Streams.Stream_Element_Array;
49
Last : out Ada.Streams.Stream_Element_Offset);
55
procedure Further (Item : in Stream_Element_Array) is
57
procedure Compare (Item : in Stream_Element_Array);
63
procedure Compare (Item : in Stream_Element_Array) is
64
Next_First : Stream_Element_Offset := Compare_First + Item'Length;
66
if Buffer (Compare_First .. Next_First - 1) /= Item then
70
Compare_First := Next_First;
73
procedure Compare_Write is new ZLib.Write (Write => Compare);
75
Compare_Write (Inflate, Item, No_Flush);
83
(Item : out Ada.Streams.Stream_Element_Array;
84
Last : out Ada.Streams.Stream_Element_Offset)
86
Buff_Diff : Stream_Element_Offset := Buffer'Last - Buffer_First;
87
Next_First : Stream_Element_Offset;
89
if Item'Length <= Buff_Diff then
92
Next_First := Buffer_First + Item'Length;
94
Item := Buffer (Buffer_First .. Next_First - 1);
96
Buffer_First := Next_First;
98
Last := Item'First + Buff_Diff;
99
Item (Item'First .. Last) := Buffer (Buffer_First .. Buffer'Last);
100
Buffer_First := Buffer'Last + 1;
104
procedure Translate is new Generic_Translate
105
(Data_In => Read_Buffer,
106
Data_Out => Further);
109
Random_Elements.Reset (Gen);
111
Buffer := (others => 20);
114
for J in Buffer'Range loop
115
Buffer (J) := Random_Elements.Random (Gen);
117
Deflate_Init (Deflate);
118
Inflate_Init (Inflate);
120
Buffer_First := Buffer'First;
121
Compare_First := Buffer'First;
125
if Compare_First /= Buffer'Last + 1 then
130
(Ada.Task_Identification.Image
131
(Ada.Task_Identification.Current_Task)
132
& Stream_Element_Offset'Image (J)
133
& ZLib.Count'Image (Total_Out (Deflate)));
143
Ada.Text_IO.Put_Line (Ada.Exceptions.Exception_Information (E));
147
Test : array (1 .. 4) of Test_Task;
149
pragma Unreferenced (Test);
154
Ada.Text_IO.Get_Immediate (Dummy);