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