xref: /minix3/common/dist/zlib/contrib/ada/test.adb (revision 44bedb31d842b4b0444105519bcf929a69fe2dc1)
1*44bedb31SLionel Sambuc----------------------------------------------------------------
2*44bedb31SLionel Sambuc--  ZLib for Ada thick binding.                               --
3*44bedb31SLionel Sambuc--                                                            --
4*44bedb31SLionel Sambuc--  Copyright (C) 2002-2003 Dmitriy Anisimkov                 --
5*44bedb31SLionel Sambuc--                                                            --
6*44bedb31SLionel Sambuc--  Open source license information is in the zlib.ads file.  --
7*44bedb31SLionel Sambuc----------------------------------------------------------------
8*44bedb31SLionel Sambuc
9*44bedb31SLionel Sambuc--  Id: test.adb,v 1.17 2003/08/12 12:13:30 vagul Exp
10*44bedb31SLionel Sambuc
11*44bedb31SLionel Sambuc--  The program has a few aims.
12*44bedb31SLionel Sambuc--  1. Test ZLib.Ada95 thick binding functionality.
13*44bedb31SLionel Sambuc--  2. Show the example of use main functionality of the ZLib.Ada95 binding.
14*44bedb31SLionel Sambuc--  3. Build this program automatically compile all ZLib.Ada95 packages under
15*44bedb31SLionel Sambuc--     GNAT Ada95 compiler.
16*44bedb31SLionel Sambuc
17*44bedb31SLionel Sambucwith ZLib.Streams;
18*44bedb31SLionel Sambucwith Ada.Streams.Stream_IO;
19*44bedb31SLionel Sambucwith Ada.Numerics.Discrete_Random;
20*44bedb31SLionel Sambuc
21*44bedb31SLionel Sambucwith Ada.Text_IO;
22*44bedb31SLionel Sambuc
23*44bedb31SLionel Sambucwith Ada.Calendar;
24*44bedb31SLionel Sambuc
25*44bedb31SLionel Sambucprocedure Test is
26*44bedb31SLionel Sambuc
27*44bedb31SLionel Sambuc   use Ada.Streams;
28*44bedb31SLionel Sambuc   use Stream_IO;
29*44bedb31SLionel Sambuc
30*44bedb31SLionel Sambuc   ------------------------------------
31*44bedb31SLionel Sambuc   --  Test configuration parameters --
32*44bedb31SLionel Sambuc   ------------------------------------
33*44bedb31SLionel Sambuc
34*44bedb31SLionel Sambuc   File_Size   : Count   := 100_000;
35*44bedb31SLionel Sambuc   Continuous  : constant Boolean := False;
36*44bedb31SLionel Sambuc
37*44bedb31SLionel Sambuc   Header      : constant ZLib.Header_Type := ZLib.Default;
38*44bedb31SLionel Sambuc                                              --  ZLib.None;
39*44bedb31SLionel Sambuc                                              --  ZLib.Auto;
40*44bedb31SLionel Sambuc                                              --  ZLib.GZip;
41*44bedb31SLionel Sambuc   --  Do not use Header other then Default in ZLib versions 1.1.4
42*44bedb31SLionel Sambuc   --  and older.
43*44bedb31SLionel Sambuc
44*44bedb31SLionel Sambuc   Strategy    : constant ZLib.Strategy_Type := ZLib.Default_Strategy;
45*44bedb31SLionel Sambuc   Init_Random : constant := 10;
46*44bedb31SLionel Sambuc
47*44bedb31SLionel Sambuc   -- End --
48*44bedb31SLionel Sambuc
49*44bedb31SLionel Sambuc   In_File_Name  : constant String := "testzlib.in";
50*44bedb31SLionel Sambuc   --  Name of the input file
51*44bedb31SLionel Sambuc
52*44bedb31SLionel Sambuc   Z_File_Name   : constant String := "testzlib.zlb";
53*44bedb31SLionel Sambuc   --  Name of the compressed file.
54*44bedb31SLionel Sambuc
55*44bedb31SLionel Sambuc   Out_File_Name : constant String := "testzlib.out";
56*44bedb31SLionel Sambuc   --  Name of the decompressed file.
57*44bedb31SLionel Sambuc
58*44bedb31SLionel Sambuc   File_In   : File_Type;
59*44bedb31SLionel Sambuc   File_Out  : File_Type;
60*44bedb31SLionel Sambuc   File_Back : File_Type;
61*44bedb31SLionel Sambuc   File_Z    : ZLib.Streams.Stream_Type;
62*44bedb31SLionel Sambuc
63*44bedb31SLionel Sambuc   Filter : ZLib.Filter_Type;
64*44bedb31SLionel Sambuc
65*44bedb31SLionel Sambuc   Time_Stamp : Ada.Calendar.Time;
66*44bedb31SLionel Sambuc
67*44bedb31SLionel Sambuc   procedure Generate_File;
68*44bedb31SLionel Sambuc   --  Generate file of spetsified size with some random data.
69*44bedb31SLionel Sambuc   --  The random data is repeatable, for the good compression.
70*44bedb31SLionel Sambuc
71*44bedb31SLionel Sambuc   procedure Compare_Streams
72*44bedb31SLionel Sambuc     (Left, Right : in out Root_Stream_Type'Class);
73*44bedb31SLionel Sambuc   --  The procedure compearing data in 2 streams.
74*44bedb31SLionel Sambuc   --  It is for compare data before and after compression/decompression.
75*44bedb31SLionel Sambuc
76*44bedb31SLionel Sambuc   procedure Compare_Files (Left, Right : String);
77*44bedb31SLionel Sambuc   --  Compare files. Based on the Compare_Streams.
78*44bedb31SLionel Sambuc
79*44bedb31SLionel Sambuc   procedure Copy_Streams
80*44bedb31SLionel Sambuc     (Source, Target : in out Root_Stream_Type'Class;
81*44bedb31SLionel Sambuc      Buffer_Size    : in     Stream_Element_Offset := 1024);
82*44bedb31SLionel Sambuc   --  Copying data from one stream to another. It is for test stream
83*44bedb31SLionel Sambuc   --  interface of the library.
84*44bedb31SLionel Sambuc
85*44bedb31SLionel Sambuc   procedure Data_In
86*44bedb31SLionel Sambuc     (Item : out Stream_Element_Array;
87*44bedb31SLionel Sambuc      Last : out Stream_Element_Offset);
88*44bedb31SLionel Sambuc   --  this procedure is for generic instantiation of
89*44bedb31SLionel Sambuc   --  ZLib.Generic_Translate.
90*44bedb31SLionel Sambuc   --  reading data from the File_In.
91*44bedb31SLionel Sambuc
92*44bedb31SLionel Sambuc   procedure Data_Out (Item : in Stream_Element_Array);
93*44bedb31SLionel Sambuc   --  this procedure is for generic instantiation of
94*44bedb31SLionel Sambuc   --  ZLib.Generic_Translate.
95*44bedb31SLionel Sambuc   --  writing data to the File_Out.
96*44bedb31SLionel Sambuc
97*44bedb31SLionel Sambuc   procedure Stamp;
98*44bedb31SLionel Sambuc   --  Store the timestamp to the local variable.
99*44bedb31SLionel Sambuc
100*44bedb31SLionel Sambuc   procedure Print_Statistic (Msg : String; Data_Size : ZLib.Count);
101*44bedb31SLionel Sambuc   --  Print the time statistic with the message.
102*44bedb31SLionel Sambuc
103*44bedb31SLionel Sambuc   procedure Translate is new ZLib.Generic_Translate
104*44bedb31SLionel Sambuc                                (Data_In  => Data_In,
105*44bedb31SLionel Sambuc                                 Data_Out => Data_Out);
106*44bedb31SLionel Sambuc   --  This procedure is moving data from File_In to File_Out
107*44bedb31SLionel Sambuc   --  with compression or decompression, depend on initialization of
108*44bedb31SLionel Sambuc   --  Filter parameter.
109*44bedb31SLionel Sambuc
110*44bedb31SLionel Sambuc   -------------------
111*44bedb31SLionel Sambuc   -- Compare_Files --
112*44bedb31SLionel Sambuc   -------------------
113*44bedb31SLionel Sambuc
114*44bedb31SLionel Sambuc   procedure Compare_Files (Left, Right : String) is
115*44bedb31SLionel Sambuc      Left_File, Right_File : File_Type;
116*44bedb31SLionel Sambuc   begin
117*44bedb31SLionel Sambuc      Open (Left_File, In_File, Left);
118*44bedb31SLionel Sambuc      Open (Right_File, In_File, Right);
119*44bedb31SLionel Sambuc      Compare_Streams (Stream (Left_File).all, Stream (Right_File).all);
120*44bedb31SLionel Sambuc      Close (Left_File);
121*44bedb31SLionel Sambuc      Close (Right_File);
122*44bedb31SLionel Sambuc   end Compare_Files;
123*44bedb31SLionel Sambuc
124*44bedb31SLionel Sambuc   ---------------------
125*44bedb31SLionel Sambuc   -- Compare_Streams --
126*44bedb31SLionel Sambuc   ---------------------
127*44bedb31SLionel Sambuc
128*44bedb31SLionel Sambuc   procedure Compare_Streams
129*44bedb31SLionel Sambuc     (Left, Right : in out Ada.Streams.Root_Stream_Type'Class)
130*44bedb31SLionel Sambuc   is
131*44bedb31SLionel Sambuc      Left_Buffer, Right_Buffer : Stream_Element_Array (0 .. 16#FFF#);
132*44bedb31SLionel Sambuc      Left_Last, Right_Last : Stream_Element_Offset;
133*44bedb31SLionel Sambuc   begin
134*44bedb31SLionel Sambuc      loop
135*44bedb31SLionel Sambuc         Read (Left, Left_Buffer, Left_Last);
136*44bedb31SLionel Sambuc         Read (Right, Right_Buffer, Right_Last);
137*44bedb31SLionel Sambuc
138*44bedb31SLionel Sambuc         if Left_Last /= Right_Last then
139*44bedb31SLionel Sambuc            Ada.Text_IO.Put_Line ("Compare error :"
140*44bedb31SLionel Sambuc              & Stream_Element_Offset'Image (Left_Last)
141*44bedb31SLionel Sambuc              & " /= "
142*44bedb31SLionel Sambuc              & Stream_Element_Offset'Image (Right_Last));
143*44bedb31SLionel Sambuc
144*44bedb31SLionel Sambuc            raise Constraint_Error;
145*44bedb31SLionel Sambuc
146*44bedb31SLionel Sambuc         elsif Left_Buffer (0 .. Left_Last)
147*44bedb31SLionel Sambuc               /= Right_Buffer (0 .. Right_Last)
148*44bedb31SLionel Sambuc         then
149*44bedb31SLionel Sambuc            Ada.Text_IO.Put_Line ("ERROR: IN and OUT files is not equal.");
150*44bedb31SLionel Sambuc            raise Constraint_Error;
151*44bedb31SLionel Sambuc
152*44bedb31SLionel Sambuc         end if;
153*44bedb31SLionel Sambuc
154*44bedb31SLionel Sambuc         exit when Left_Last < Left_Buffer'Last;
155*44bedb31SLionel Sambuc      end loop;
156*44bedb31SLionel Sambuc   end Compare_Streams;
157*44bedb31SLionel Sambuc
158*44bedb31SLionel Sambuc   ------------------
159*44bedb31SLionel Sambuc   -- Copy_Streams --
160*44bedb31SLionel Sambuc   ------------------
161*44bedb31SLionel Sambuc
162*44bedb31SLionel Sambuc   procedure Copy_Streams
163*44bedb31SLionel Sambuc     (Source, Target : in out Ada.Streams.Root_Stream_Type'Class;
164*44bedb31SLionel Sambuc      Buffer_Size    : in     Stream_Element_Offset := 1024)
165*44bedb31SLionel Sambuc   is
166*44bedb31SLionel Sambuc      Buffer : Stream_Element_Array (1 .. Buffer_Size);
167*44bedb31SLionel Sambuc      Last   : Stream_Element_Offset;
168*44bedb31SLionel Sambuc   begin
169*44bedb31SLionel Sambuc      loop
170*44bedb31SLionel Sambuc         Read  (Source, Buffer, Last);
171*44bedb31SLionel Sambuc         Write (Target, Buffer (1 .. Last));
172*44bedb31SLionel Sambuc
173*44bedb31SLionel Sambuc         exit when Last < Buffer'Last;
174*44bedb31SLionel Sambuc      end loop;
175*44bedb31SLionel Sambuc   end Copy_Streams;
176*44bedb31SLionel Sambuc
177*44bedb31SLionel Sambuc   -------------
178*44bedb31SLionel Sambuc   -- Data_In --
179*44bedb31SLionel Sambuc   -------------
180*44bedb31SLionel Sambuc
181*44bedb31SLionel Sambuc   procedure Data_In
182*44bedb31SLionel Sambuc     (Item : out Stream_Element_Array;
183*44bedb31SLionel Sambuc      Last : out Stream_Element_Offset) is
184*44bedb31SLionel Sambuc   begin
185*44bedb31SLionel Sambuc      Read (File_In, Item, Last);
186*44bedb31SLionel Sambuc   end Data_In;
187*44bedb31SLionel Sambuc
188*44bedb31SLionel Sambuc   --------------
189*44bedb31SLionel Sambuc   -- Data_Out --
190*44bedb31SLionel Sambuc   --------------
191*44bedb31SLionel Sambuc
192*44bedb31SLionel Sambuc   procedure Data_Out (Item : in Stream_Element_Array) is
193*44bedb31SLionel Sambuc   begin
194*44bedb31SLionel Sambuc      Write (File_Out, Item);
195*44bedb31SLionel Sambuc   end Data_Out;
196*44bedb31SLionel Sambuc
197*44bedb31SLionel Sambuc   -------------------
198*44bedb31SLionel Sambuc   -- Generate_File --
199*44bedb31SLionel Sambuc   -------------------
200*44bedb31SLionel Sambuc
201*44bedb31SLionel Sambuc   procedure Generate_File is
202*44bedb31SLionel Sambuc      subtype Visible_Symbols is Stream_Element range 16#20# .. 16#7E#;
203*44bedb31SLionel Sambuc
204*44bedb31SLionel Sambuc      package Random_Elements is
205*44bedb31SLionel Sambuc         new Ada.Numerics.Discrete_Random (Visible_Symbols);
206*44bedb31SLionel Sambuc
207*44bedb31SLionel Sambuc      Gen    : Random_Elements.Generator;
208*44bedb31SLionel Sambuc      Buffer : Stream_Element_Array := (1 .. 77 => 16#20#) & 10;
209*44bedb31SLionel Sambuc
210*44bedb31SLionel Sambuc      Buffer_Count : constant Count := File_Size / Buffer'Length;
211*44bedb31SLionel Sambuc      --  Number of same buffers in the packet.
212*44bedb31SLionel Sambuc
213*44bedb31SLionel Sambuc      Density : constant Count := 30; --  from 0 to Buffer'Length - 2;
214*44bedb31SLionel Sambuc
215*44bedb31SLionel Sambuc      procedure Fill_Buffer (J, D : in Count);
216*44bedb31SLionel Sambuc      --  Change the part of the buffer.
217*44bedb31SLionel Sambuc
218*44bedb31SLionel Sambuc      -----------------
219*44bedb31SLionel Sambuc      -- Fill_Buffer --
220*44bedb31SLionel Sambuc      -----------------
221*44bedb31SLionel Sambuc
222*44bedb31SLionel Sambuc      procedure Fill_Buffer (J, D : in Count) is
223*44bedb31SLionel Sambuc      begin
224*44bedb31SLionel Sambuc         for K in 0 .. D loop
225*44bedb31SLionel Sambuc            Buffer
226*44bedb31SLionel Sambuc              (Stream_Element_Offset ((J + K) mod (Buffer'Length - 1) + 1))
227*44bedb31SLionel Sambuc             := Random_Elements.Random (Gen);
228*44bedb31SLionel Sambuc
229*44bedb31SLionel Sambuc         end loop;
230*44bedb31SLionel Sambuc      end Fill_Buffer;
231*44bedb31SLionel Sambuc
232*44bedb31SLionel Sambuc   begin
233*44bedb31SLionel Sambuc      Random_Elements.Reset (Gen, Init_Random);
234*44bedb31SLionel Sambuc
235*44bedb31SLionel Sambuc      Create (File_In, Out_File, In_File_Name);
236*44bedb31SLionel Sambuc
237*44bedb31SLionel Sambuc      Fill_Buffer (1, Buffer'Length - 2);
238*44bedb31SLionel Sambuc
239*44bedb31SLionel Sambuc      for J in 1 .. Buffer_Count loop
240*44bedb31SLionel Sambuc         Write (File_In, Buffer);
241*44bedb31SLionel Sambuc
242*44bedb31SLionel Sambuc         Fill_Buffer (J, Density);
243*44bedb31SLionel Sambuc      end loop;
244*44bedb31SLionel Sambuc
245*44bedb31SLionel Sambuc      --  fill remain size.
246*44bedb31SLionel Sambuc
247*44bedb31SLionel Sambuc      Write
248*44bedb31SLionel Sambuc        (File_In,
249*44bedb31SLionel Sambuc         Buffer
250*44bedb31SLionel Sambuc           (1 .. Stream_Element_Offset
251*44bedb31SLionel Sambuc                   (File_Size - Buffer'Length * Buffer_Count)));
252*44bedb31SLionel Sambuc
253*44bedb31SLionel Sambuc      Flush (File_In);
254*44bedb31SLionel Sambuc      Close (File_In);
255*44bedb31SLionel Sambuc   end Generate_File;
256*44bedb31SLionel Sambuc
257*44bedb31SLionel Sambuc   ---------------------
258*44bedb31SLionel Sambuc   -- Print_Statistic --
259*44bedb31SLionel Sambuc   ---------------------
260*44bedb31SLionel Sambuc
261*44bedb31SLionel Sambuc   procedure Print_Statistic (Msg : String; Data_Size : ZLib.Count) is
262*44bedb31SLionel Sambuc      use Ada.Calendar;
263*44bedb31SLionel Sambuc      use Ada.Text_IO;
264*44bedb31SLionel Sambuc
265*44bedb31SLionel Sambuc      package Count_IO is new Integer_IO (ZLib.Count);
266*44bedb31SLionel Sambuc
267*44bedb31SLionel Sambuc      Curr_Dur : Duration := Clock - Time_Stamp;
268*44bedb31SLionel Sambuc   begin
269*44bedb31SLionel Sambuc      Put (Msg);
270*44bedb31SLionel Sambuc
271*44bedb31SLionel Sambuc      Set_Col (20);
272*44bedb31SLionel Sambuc      Ada.Text_IO.Put ("size =");
273*44bedb31SLionel Sambuc
274*44bedb31SLionel Sambuc      Count_IO.Put
275*44bedb31SLionel Sambuc        (Data_Size,
276*44bedb31SLionel Sambuc         Width => Stream_IO.Count'Image (File_Size)'Length);
277*44bedb31SLionel Sambuc
278*44bedb31SLionel Sambuc      Put_Line (" duration =" & Duration'Image (Curr_Dur));
279*44bedb31SLionel Sambuc   end Print_Statistic;
280*44bedb31SLionel Sambuc
281*44bedb31SLionel Sambuc   -----------
282*44bedb31SLionel Sambuc   -- Stamp --
283*44bedb31SLionel Sambuc   -----------
284*44bedb31SLionel Sambuc
285*44bedb31SLionel Sambuc   procedure Stamp is
286*44bedb31SLionel Sambuc   begin
287*44bedb31SLionel Sambuc      Time_Stamp := Ada.Calendar.Clock;
288*44bedb31SLionel Sambuc   end Stamp;
289*44bedb31SLionel Sambuc
290*44bedb31SLionel Sambucbegin
291*44bedb31SLionel Sambuc   Ada.Text_IO.Put_Line ("ZLib " & ZLib.Version);
292*44bedb31SLionel Sambuc
293*44bedb31SLionel Sambuc   loop
294*44bedb31SLionel Sambuc      Generate_File;
295*44bedb31SLionel Sambuc
296*44bedb31SLionel Sambuc      for Level in ZLib.Compression_Level'Range loop
297*44bedb31SLionel Sambuc
298*44bedb31SLionel Sambuc         Ada.Text_IO.Put_Line ("Level ="
299*44bedb31SLionel Sambuc            & ZLib.Compression_Level'Image (Level));
300*44bedb31SLionel Sambuc
301*44bedb31SLionel Sambuc         --  Test generic interface.
302*44bedb31SLionel Sambuc         Open   (File_In, In_File, In_File_Name);
303*44bedb31SLionel Sambuc         Create (File_Out, Out_File, Z_File_Name);
304*44bedb31SLionel Sambuc
305*44bedb31SLionel Sambuc         Stamp;
306*44bedb31SLionel Sambuc
307*44bedb31SLionel Sambuc         --  Deflate using generic instantiation.
308*44bedb31SLionel Sambuc
309*44bedb31SLionel Sambuc         ZLib.Deflate_Init
310*44bedb31SLionel Sambuc               (Filter   => Filter,
311*44bedb31SLionel Sambuc                Level    => Level,
312*44bedb31SLionel Sambuc                Strategy => Strategy,
313*44bedb31SLionel Sambuc                Header   => Header);
314*44bedb31SLionel Sambuc
315*44bedb31SLionel Sambuc         Translate (Filter);
316*44bedb31SLionel Sambuc         Print_Statistic ("Generic compress", ZLib.Total_Out (Filter));
317*44bedb31SLionel Sambuc         ZLib.Close (Filter);
318*44bedb31SLionel Sambuc
319*44bedb31SLionel Sambuc         Close (File_In);
320*44bedb31SLionel Sambuc         Close (File_Out);
321*44bedb31SLionel Sambuc
322*44bedb31SLionel Sambuc         Open   (File_In, In_File, Z_File_Name);
323*44bedb31SLionel Sambuc         Create (File_Out, Out_File, Out_File_Name);
324*44bedb31SLionel Sambuc
325*44bedb31SLionel Sambuc         Stamp;
326*44bedb31SLionel Sambuc
327*44bedb31SLionel Sambuc         --  Inflate using generic instantiation.
328*44bedb31SLionel Sambuc
329*44bedb31SLionel Sambuc         ZLib.Inflate_Init (Filter, Header => Header);
330*44bedb31SLionel Sambuc
331*44bedb31SLionel Sambuc         Translate (Filter);
332*44bedb31SLionel Sambuc         Print_Statistic ("Generic decompress", ZLib.Total_Out (Filter));
333*44bedb31SLionel Sambuc
334*44bedb31SLionel Sambuc         ZLib.Close (Filter);
335*44bedb31SLionel Sambuc
336*44bedb31SLionel Sambuc         Close (File_In);
337*44bedb31SLionel Sambuc         Close (File_Out);
338*44bedb31SLionel Sambuc
339*44bedb31SLionel Sambuc         Compare_Files (In_File_Name, Out_File_Name);
340*44bedb31SLionel Sambuc
341*44bedb31SLionel Sambuc         --  Test stream interface.
342*44bedb31SLionel Sambuc
343*44bedb31SLionel Sambuc         --  Compress to the back stream.
344*44bedb31SLionel Sambuc
345*44bedb31SLionel Sambuc         Open   (File_In, In_File, In_File_Name);
346*44bedb31SLionel Sambuc         Create (File_Back, Out_File, Z_File_Name);
347*44bedb31SLionel Sambuc
348*44bedb31SLionel Sambuc         Stamp;
349*44bedb31SLionel Sambuc
350*44bedb31SLionel Sambuc         ZLib.Streams.Create
351*44bedb31SLionel Sambuc           (Stream          => File_Z,
352*44bedb31SLionel Sambuc            Mode            => ZLib.Streams.Out_Stream,
353*44bedb31SLionel Sambuc            Back            => ZLib.Streams.Stream_Access
354*44bedb31SLionel Sambuc                                 (Stream (File_Back)),
355*44bedb31SLionel Sambuc            Back_Compressed => True,
356*44bedb31SLionel Sambuc            Level           => Level,
357*44bedb31SLionel Sambuc            Strategy        => Strategy,
358*44bedb31SLionel Sambuc            Header          => Header);
359*44bedb31SLionel Sambuc
360*44bedb31SLionel Sambuc         Copy_Streams
361*44bedb31SLionel Sambuc           (Source => Stream (File_In).all,
362*44bedb31SLionel Sambuc            Target => File_Z);
363*44bedb31SLionel Sambuc
364*44bedb31SLionel Sambuc         --  Flushing internal buffers to the back stream.
365*44bedb31SLionel Sambuc
366*44bedb31SLionel Sambuc         ZLib.Streams.Flush (File_Z, ZLib.Finish);
367*44bedb31SLionel Sambuc
368*44bedb31SLionel Sambuc         Print_Statistic ("Write compress",
369*44bedb31SLionel Sambuc                          ZLib.Streams.Write_Total_Out (File_Z));
370*44bedb31SLionel Sambuc
371*44bedb31SLionel Sambuc         ZLib.Streams.Close (File_Z);
372*44bedb31SLionel Sambuc
373*44bedb31SLionel Sambuc         Close (File_In);
374*44bedb31SLionel Sambuc         Close (File_Back);
375*44bedb31SLionel Sambuc
376*44bedb31SLionel Sambuc         --  Compare reading from original file and from
377*44bedb31SLionel Sambuc         --  decompression stream.
378*44bedb31SLionel Sambuc
379*44bedb31SLionel Sambuc         Open (File_In,   In_File, In_File_Name);
380*44bedb31SLionel Sambuc         Open (File_Back, In_File, Z_File_Name);
381*44bedb31SLionel Sambuc
382*44bedb31SLionel Sambuc         ZLib.Streams.Create
383*44bedb31SLionel Sambuc           (Stream          => File_Z,
384*44bedb31SLionel Sambuc            Mode            => ZLib.Streams.In_Stream,
385*44bedb31SLionel Sambuc            Back            => ZLib.Streams.Stream_Access
386*44bedb31SLionel Sambuc                                 (Stream (File_Back)),
387*44bedb31SLionel Sambuc            Back_Compressed => True,
388*44bedb31SLionel Sambuc            Header          => Header);
389*44bedb31SLionel Sambuc
390*44bedb31SLionel Sambuc         Stamp;
391*44bedb31SLionel Sambuc         Compare_Streams (Stream (File_In).all, File_Z);
392*44bedb31SLionel Sambuc
393*44bedb31SLionel Sambuc         Print_Statistic ("Read decompress",
394*44bedb31SLionel Sambuc                          ZLib.Streams.Read_Total_Out (File_Z));
395*44bedb31SLionel Sambuc
396*44bedb31SLionel Sambuc         ZLib.Streams.Close (File_Z);
397*44bedb31SLionel Sambuc         Close (File_In);
398*44bedb31SLionel Sambuc         Close (File_Back);
399*44bedb31SLionel Sambuc
400*44bedb31SLionel Sambuc         --  Compress by reading from compression stream.
401*44bedb31SLionel Sambuc
402*44bedb31SLionel Sambuc         Open (File_Back, In_File, In_File_Name);
403*44bedb31SLionel Sambuc         Create (File_Out, Out_File, Z_File_Name);
404*44bedb31SLionel Sambuc
405*44bedb31SLionel Sambuc         ZLib.Streams.Create
406*44bedb31SLionel Sambuc           (Stream          => File_Z,
407*44bedb31SLionel Sambuc            Mode            => ZLib.Streams.In_Stream,
408*44bedb31SLionel Sambuc            Back            => ZLib.Streams.Stream_Access
409*44bedb31SLionel Sambuc                                 (Stream (File_Back)),
410*44bedb31SLionel Sambuc            Back_Compressed => False,
411*44bedb31SLionel Sambuc            Level           => Level,
412*44bedb31SLionel Sambuc            Strategy        => Strategy,
413*44bedb31SLionel Sambuc            Header          => Header);
414*44bedb31SLionel Sambuc
415*44bedb31SLionel Sambuc         Stamp;
416*44bedb31SLionel Sambuc         Copy_Streams
417*44bedb31SLionel Sambuc           (Source => File_Z,
418*44bedb31SLionel Sambuc            Target => Stream (File_Out).all);
419*44bedb31SLionel Sambuc
420*44bedb31SLionel Sambuc         Print_Statistic ("Read compress",
421*44bedb31SLionel Sambuc                          ZLib.Streams.Read_Total_Out (File_Z));
422*44bedb31SLionel Sambuc
423*44bedb31SLionel Sambuc         ZLib.Streams.Close (File_Z);
424*44bedb31SLionel Sambuc
425*44bedb31SLionel Sambuc         Close (File_Out);
426*44bedb31SLionel Sambuc         Close (File_Back);
427*44bedb31SLionel Sambuc
428*44bedb31SLionel Sambuc         --  Decompress to decompression stream.
429*44bedb31SLionel Sambuc
430*44bedb31SLionel Sambuc         Open   (File_In,   In_File, Z_File_Name);
431*44bedb31SLionel Sambuc         Create (File_Back, Out_File, Out_File_Name);
432*44bedb31SLionel Sambuc
433*44bedb31SLionel Sambuc         ZLib.Streams.Create
434*44bedb31SLionel Sambuc           (Stream          => File_Z,
435*44bedb31SLionel Sambuc            Mode            => ZLib.Streams.Out_Stream,
436*44bedb31SLionel Sambuc            Back            => ZLib.Streams.Stream_Access
437*44bedb31SLionel Sambuc                                 (Stream (File_Back)),
438*44bedb31SLionel Sambuc            Back_Compressed => False,
439*44bedb31SLionel Sambuc            Header          => Header);
440*44bedb31SLionel Sambuc
441*44bedb31SLionel Sambuc         Stamp;
442*44bedb31SLionel Sambuc
443*44bedb31SLionel Sambuc         Copy_Streams
444*44bedb31SLionel Sambuc           (Source => Stream (File_In).all,
445*44bedb31SLionel Sambuc            Target => File_Z);
446*44bedb31SLionel Sambuc
447*44bedb31SLionel Sambuc         Print_Statistic ("Write decompress",
448*44bedb31SLionel Sambuc                          ZLib.Streams.Write_Total_Out (File_Z));
449*44bedb31SLionel Sambuc
450*44bedb31SLionel Sambuc         ZLib.Streams.Close (File_Z);
451*44bedb31SLionel Sambuc         Close (File_In);
452*44bedb31SLionel Sambuc         Close (File_Back);
453*44bedb31SLionel Sambuc
454*44bedb31SLionel Sambuc         Compare_Files (In_File_Name, Out_File_Name);
455*44bedb31SLionel Sambuc      end loop;
456*44bedb31SLionel Sambuc
457*44bedb31SLionel Sambuc      Ada.Text_IO.Put_Line (Count'Image (File_Size) & " Ok.");
458*44bedb31SLionel Sambuc
459*44bedb31SLionel Sambuc      exit when not Continuous;
460*44bedb31SLionel Sambuc
461*44bedb31SLionel Sambuc      File_Size := File_Size + 1;
462*44bedb31SLionel Sambuc   end loop;
463*44bedb31SLionel Sambucend Test;
464