xref: /third_party/zlib/contrib/ada/test.adb (revision 275793ea)
1275793eaSopenharmony_ci----------------------------------------------------------------
2275793eaSopenharmony_ci--  ZLib for Ada thick binding.                               --
3275793eaSopenharmony_ci--                                                            --
4275793eaSopenharmony_ci--  Copyright (C) 2002-2003 Dmitriy Anisimkov                 --
5275793eaSopenharmony_ci--                                                            --
6275793eaSopenharmony_ci--  Open source license information is in the zlib.ads file.  --
7275793eaSopenharmony_ci----------------------------------------------------------------
8275793eaSopenharmony_ci
9275793eaSopenharmony_ci--  $Id: test.adb,v 1.17 2003/08/12 12:13:30 vagul Exp $
10275793eaSopenharmony_ci
11275793eaSopenharmony_ci--  The program has a few aims.
12275793eaSopenharmony_ci--  1. Test ZLib.Ada95 thick binding functionality.
13275793eaSopenharmony_ci--  2. Show the example of use main functionality of the ZLib.Ada95 binding.
14275793eaSopenharmony_ci--  3. Build this program automatically compile all ZLib.Ada95 packages under
15275793eaSopenharmony_ci--     GNAT Ada95 compiler.
16275793eaSopenharmony_ci
17275793eaSopenharmony_ciwith ZLib.Streams;
18275793eaSopenharmony_ciwith Ada.Streams.Stream_IO;
19275793eaSopenharmony_ciwith Ada.Numerics.Discrete_Random;
20275793eaSopenharmony_ci
21275793eaSopenharmony_ciwith Ada.Text_IO;
22275793eaSopenharmony_ci
23275793eaSopenharmony_ciwith Ada.Calendar;
24275793eaSopenharmony_ci
25275793eaSopenharmony_ciprocedure Test is
26275793eaSopenharmony_ci
27275793eaSopenharmony_ci   use Ada.Streams;
28275793eaSopenharmony_ci   use Stream_IO;
29275793eaSopenharmony_ci
30275793eaSopenharmony_ci   ------------------------------------
31275793eaSopenharmony_ci   --  Test configuration parameters --
32275793eaSopenharmony_ci   ------------------------------------
33275793eaSopenharmony_ci
34275793eaSopenharmony_ci   File_Size   : Count   := 100_000;
35275793eaSopenharmony_ci   Continuous  : constant Boolean := False;
36275793eaSopenharmony_ci
37275793eaSopenharmony_ci   Header      : constant ZLib.Header_Type := ZLib.Default;
38275793eaSopenharmony_ci                                              --  ZLib.None;
39275793eaSopenharmony_ci                                              --  ZLib.Auto;
40275793eaSopenharmony_ci                                              --  ZLib.GZip;
41275793eaSopenharmony_ci   --  Do not use Header other then Default in ZLib versions 1.1.4
42275793eaSopenharmony_ci   --  and older.
43275793eaSopenharmony_ci
44275793eaSopenharmony_ci   Strategy    : constant ZLib.Strategy_Type := ZLib.Default_Strategy;
45275793eaSopenharmony_ci   Init_Random : constant := 10;
46275793eaSopenharmony_ci
47275793eaSopenharmony_ci   -- End --
48275793eaSopenharmony_ci
49275793eaSopenharmony_ci   In_File_Name  : constant String := "testzlib.in";
50275793eaSopenharmony_ci   --  Name of the input file
51275793eaSopenharmony_ci
52275793eaSopenharmony_ci   Z_File_Name   : constant String := "testzlib.zlb";
53275793eaSopenharmony_ci   --  Name of the compressed file.
54275793eaSopenharmony_ci
55275793eaSopenharmony_ci   Out_File_Name : constant String := "testzlib.out";
56275793eaSopenharmony_ci   --  Name of the decompressed file.
57275793eaSopenharmony_ci
58275793eaSopenharmony_ci   File_In   : File_Type;
59275793eaSopenharmony_ci   File_Out  : File_Type;
60275793eaSopenharmony_ci   File_Back : File_Type;
61275793eaSopenharmony_ci   File_Z    : ZLib.Streams.Stream_Type;
62275793eaSopenharmony_ci
63275793eaSopenharmony_ci   Filter : ZLib.Filter_Type;
64275793eaSopenharmony_ci
65275793eaSopenharmony_ci   Time_Stamp : Ada.Calendar.Time;
66275793eaSopenharmony_ci
67275793eaSopenharmony_ci   procedure Generate_File;
68275793eaSopenharmony_ci   --  Generate file of specified size with some random data.
69275793eaSopenharmony_ci   --  The random data is repeatable, for the good compression.
70275793eaSopenharmony_ci
71275793eaSopenharmony_ci   procedure Compare_Streams
72275793eaSopenharmony_ci     (Left, Right : in out Root_Stream_Type'Class);
73275793eaSopenharmony_ci   --  The procedure comparing data in 2 streams.
74275793eaSopenharmony_ci   --  It is for compare data before and after compression/decompression.
75275793eaSopenharmony_ci
76275793eaSopenharmony_ci   procedure Compare_Files (Left, Right : String);
77275793eaSopenharmony_ci   --  Compare files. Based on the Compare_Streams.
78275793eaSopenharmony_ci
79275793eaSopenharmony_ci   procedure Copy_Streams
80275793eaSopenharmony_ci     (Source, Target : in out Root_Stream_Type'Class;
81275793eaSopenharmony_ci      Buffer_Size    : in     Stream_Element_Offset := 1024);
82275793eaSopenharmony_ci   --  Copying data from one stream to another. It is for test stream
83275793eaSopenharmony_ci   --  interface of the library.
84275793eaSopenharmony_ci
85275793eaSopenharmony_ci   procedure Data_In
86275793eaSopenharmony_ci     (Item : out Stream_Element_Array;
87275793eaSopenharmony_ci      Last : out Stream_Element_Offset);
88275793eaSopenharmony_ci   --  this procedure is for generic instantiation of
89275793eaSopenharmony_ci   --  ZLib.Generic_Translate.
90275793eaSopenharmony_ci   --  reading data from the File_In.
91275793eaSopenharmony_ci
92275793eaSopenharmony_ci   procedure Data_Out (Item : in Stream_Element_Array);
93275793eaSopenharmony_ci   --  this procedure is for generic instantiation of
94275793eaSopenharmony_ci   --  ZLib.Generic_Translate.
95275793eaSopenharmony_ci   --  writing data to the File_Out.
96275793eaSopenharmony_ci
97275793eaSopenharmony_ci   procedure Stamp;
98275793eaSopenharmony_ci   --  Store the timestamp to the local variable.
99275793eaSopenharmony_ci
100275793eaSopenharmony_ci   procedure Print_Statistic (Msg : String; Data_Size : ZLib.Count);
101275793eaSopenharmony_ci   --  Print the time statistic with the message.
102275793eaSopenharmony_ci
103275793eaSopenharmony_ci   procedure Translate is new ZLib.Generic_Translate
104275793eaSopenharmony_ci                                (Data_In  => Data_In,
105275793eaSopenharmony_ci                                 Data_Out => Data_Out);
106275793eaSopenharmony_ci   --  This procedure is moving data from File_In to File_Out
107275793eaSopenharmony_ci   --  with compression or decompression, depend on initialization of
108275793eaSopenharmony_ci   --  Filter parameter.
109275793eaSopenharmony_ci
110275793eaSopenharmony_ci   -------------------
111275793eaSopenharmony_ci   -- Compare_Files --
112275793eaSopenharmony_ci   -------------------
113275793eaSopenharmony_ci
114275793eaSopenharmony_ci   procedure Compare_Files (Left, Right : String) is
115275793eaSopenharmony_ci      Left_File, Right_File : File_Type;
116275793eaSopenharmony_ci   begin
117275793eaSopenharmony_ci      Open (Left_File, In_File, Left);
118275793eaSopenharmony_ci      Open (Right_File, In_File, Right);
119275793eaSopenharmony_ci      Compare_Streams (Stream (Left_File).all, Stream (Right_File).all);
120275793eaSopenharmony_ci      Close (Left_File);
121275793eaSopenharmony_ci      Close (Right_File);
122275793eaSopenharmony_ci   end Compare_Files;
123275793eaSopenharmony_ci
124275793eaSopenharmony_ci   ---------------------
125275793eaSopenharmony_ci   -- Compare_Streams --
126275793eaSopenharmony_ci   ---------------------
127275793eaSopenharmony_ci
128275793eaSopenharmony_ci   procedure Compare_Streams
129275793eaSopenharmony_ci     (Left, Right : in out Ada.Streams.Root_Stream_Type'Class)
130275793eaSopenharmony_ci   is
131275793eaSopenharmony_ci      Left_Buffer, Right_Buffer : Stream_Element_Array (0 .. 16#FFF#);
132275793eaSopenharmony_ci      Left_Last, Right_Last : Stream_Element_Offset;
133275793eaSopenharmony_ci   begin
134275793eaSopenharmony_ci      loop
135275793eaSopenharmony_ci         Read (Left, Left_Buffer, Left_Last);
136275793eaSopenharmony_ci         Read (Right, Right_Buffer, Right_Last);
137275793eaSopenharmony_ci
138275793eaSopenharmony_ci         if Left_Last /= Right_Last then
139275793eaSopenharmony_ci            Ada.Text_IO.Put_Line ("Compare error :"
140275793eaSopenharmony_ci              & Stream_Element_Offset'Image (Left_Last)
141275793eaSopenharmony_ci              & " /= "
142275793eaSopenharmony_ci              & Stream_Element_Offset'Image (Right_Last));
143275793eaSopenharmony_ci
144275793eaSopenharmony_ci            raise Constraint_Error;
145275793eaSopenharmony_ci
146275793eaSopenharmony_ci         elsif Left_Buffer (0 .. Left_Last)
147275793eaSopenharmony_ci               /= Right_Buffer (0 .. Right_Last)
148275793eaSopenharmony_ci         then
149275793eaSopenharmony_ci            Ada.Text_IO.Put_Line ("ERROR: IN and OUT files is not equal.");
150275793eaSopenharmony_ci            raise Constraint_Error;
151275793eaSopenharmony_ci
152275793eaSopenharmony_ci         end if;
153275793eaSopenharmony_ci
154275793eaSopenharmony_ci         exit when Left_Last < Left_Buffer'Last;
155275793eaSopenharmony_ci      end loop;
156275793eaSopenharmony_ci   end Compare_Streams;
157275793eaSopenharmony_ci
158275793eaSopenharmony_ci   ------------------
159275793eaSopenharmony_ci   -- Copy_Streams --
160275793eaSopenharmony_ci   ------------------
161275793eaSopenharmony_ci
162275793eaSopenharmony_ci   procedure Copy_Streams
163275793eaSopenharmony_ci     (Source, Target : in out Ada.Streams.Root_Stream_Type'Class;
164275793eaSopenharmony_ci      Buffer_Size    : in     Stream_Element_Offset := 1024)
165275793eaSopenharmony_ci   is
166275793eaSopenharmony_ci      Buffer : Stream_Element_Array (1 .. Buffer_Size);
167275793eaSopenharmony_ci      Last   : Stream_Element_Offset;
168275793eaSopenharmony_ci   begin
169275793eaSopenharmony_ci      loop
170275793eaSopenharmony_ci         Read  (Source, Buffer, Last);
171275793eaSopenharmony_ci         Write (Target, Buffer (1 .. Last));
172275793eaSopenharmony_ci
173275793eaSopenharmony_ci         exit when Last < Buffer'Last;
174275793eaSopenharmony_ci      end loop;
175275793eaSopenharmony_ci   end Copy_Streams;
176275793eaSopenharmony_ci
177275793eaSopenharmony_ci   -------------
178275793eaSopenharmony_ci   -- Data_In --
179275793eaSopenharmony_ci   -------------
180275793eaSopenharmony_ci
181275793eaSopenharmony_ci   procedure Data_In
182275793eaSopenharmony_ci     (Item : out Stream_Element_Array;
183275793eaSopenharmony_ci      Last : out Stream_Element_Offset) is
184275793eaSopenharmony_ci   begin
185275793eaSopenharmony_ci      Read (File_In, Item, Last);
186275793eaSopenharmony_ci   end Data_In;
187275793eaSopenharmony_ci
188275793eaSopenharmony_ci   --------------
189275793eaSopenharmony_ci   -- Data_Out --
190275793eaSopenharmony_ci   --------------
191275793eaSopenharmony_ci
192275793eaSopenharmony_ci   procedure Data_Out (Item : in Stream_Element_Array) is
193275793eaSopenharmony_ci   begin
194275793eaSopenharmony_ci      Write (File_Out, Item);
195275793eaSopenharmony_ci   end Data_Out;
196275793eaSopenharmony_ci
197275793eaSopenharmony_ci   -------------------
198275793eaSopenharmony_ci   -- Generate_File --
199275793eaSopenharmony_ci   -------------------
200275793eaSopenharmony_ci
201275793eaSopenharmony_ci   procedure Generate_File is
202275793eaSopenharmony_ci      subtype Visible_Symbols is Stream_Element range 16#20# .. 16#7E#;
203275793eaSopenharmony_ci
204275793eaSopenharmony_ci      package Random_Elements is
205275793eaSopenharmony_ci         new Ada.Numerics.Discrete_Random (Visible_Symbols);
206275793eaSopenharmony_ci
207275793eaSopenharmony_ci      Gen    : Random_Elements.Generator;
208275793eaSopenharmony_ci      Buffer : Stream_Element_Array := (1 .. 77 => 16#20#) & 10;
209275793eaSopenharmony_ci
210275793eaSopenharmony_ci      Buffer_Count : constant Count := File_Size / Buffer'Length;
211275793eaSopenharmony_ci      --  Number of same buffers in the packet.
212275793eaSopenharmony_ci
213275793eaSopenharmony_ci      Density : constant Count := 30; --  from 0 to Buffer'Length - 2;
214275793eaSopenharmony_ci
215275793eaSopenharmony_ci      procedure Fill_Buffer (J, D : in Count);
216275793eaSopenharmony_ci      --  Change the part of the buffer.
217275793eaSopenharmony_ci
218275793eaSopenharmony_ci      -----------------
219275793eaSopenharmony_ci      -- Fill_Buffer --
220275793eaSopenharmony_ci      -----------------
221275793eaSopenharmony_ci
222275793eaSopenharmony_ci      procedure Fill_Buffer (J, D : in Count) is
223275793eaSopenharmony_ci      begin
224275793eaSopenharmony_ci         for K in 0 .. D loop
225275793eaSopenharmony_ci            Buffer
226275793eaSopenharmony_ci              (Stream_Element_Offset ((J + K) mod (Buffer'Length - 1) + 1))
227275793eaSopenharmony_ci             := Random_Elements.Random (Gen);
228275793eaSopenharmony_ci
229275793eaSopenharmony_ci         end loop;
230275793eaSopenharmony_ci      end Fill_Buffer;
231275793eaSopenharmony_ci
232275793eaSopenharmony_ci   begin
233275793eaSopenharmony_ci      Random_Elements.Reset (Gen, Init_Random);
234275793eaSopenharmony_ci
235275793eaSopenharmony_ci      Create (File_In, Out_File, In_File_Name);
236275793eaSopenharmony_ci
237275793eaSopenharmony_ci      Fill_Buffer (1, Buffer'Length - 2);
238275793eaSopenharmony_ci
239275793eaSopenharmony_ci      for J in 1 .. Buffer_Count loop
240275793eaSopenharmony_ci         Write (File_In, Buffer);
241275793eaSopenharmony_ci
242275793eaSopenharmony_ci         Fill_Buffer (J, Density);
243275793eaSopenharmony_ci      end loop;
244275793eaSopenharmony_ci
245275793eaSopenharmony_ci      --  fill remain size.
246275793eaSopenharmony_ci
247275793eaSopenharmony_ci      Write
248275793eaSopenharmony_ci        (File_In,
249275793eaSopenharmony_ci         Buffer
250275793eaSopenharmony_ci           (1 .. Stream_Element_Offset
251275793eaSopenharmony_ci                   (File_Size - Buffer'Length * Buffer_Count)));
252275793eaSopenharmony_ci
253275793eaSopenharmony_ci      Flush (File_In);
254275793eaSopenharmony_ci      Close (File_In);
255275793eaSopenharmony_ci   end Generate_File;
256275793eaSopenharmony_ci
257275793eaSopenharmony_ci   ---------------------
258275793eaSopenharmony_ci   -- Print_Statistic --
259275793eaSopenharmony_ci   ---------------------
260275793eaSopenharmony_ci
261275793eaSopenharmony_ci   procedure Print_Statistic (Msg : String; Data_Size : ZLib.Count) is
262275793eaSopenharmony_ci      use Ada.Calendar;
263275793eaSopenharmony_ci      use Ada.Text_IO;
264275793eaSopenharmony_ci
265275793eaSopenharmony_ci      package Count_IO is new Integer_IO (ZLib.Count);
266275793eaSopenharmony_ci
267275793eaSopenharmony_ci      Curr_Dur : Duration := Clock - Time_Stamp;
268275793eaSopenharmony_ci   begin
269275793eaSopenharmony_ci      Put (Msg);
270275793eaSopenharmony_ci
271275793eaSopenharmony_ci      Set_Col (20);
272275793eaSopenharmony_ci      Ada.Text_IO.Put ("size =");
273275793eaSopenharmony_ci
274275793eaSopenharmony_ci      Count_IO.Put
275275793eaSopenharmony_ci        (Data_Size,
276275793eaSopenharmony_ci         Width => Stream_IO.Count'Image (File_Size)'Length);
277275793eaSopenharmony_ci
278275793eaSopenharmony_ci      Put_Line (" duration =" & Duration'Image (Curr_Dur));
279275793eaSopenharmony_ci   end Print_Statistic;
280275793eaSopenharmony_ci
281275793eaSopenharmony_ci   -----------
282275793eaSopenharmony_ci   -- Stamp --
283275793eaSopenharmony_ci   -----------
284275793eaSopenharmony_ci
285275793eaSopenharmony_ci   procedure Stamp is
286275793eaSopenharmony_ci   begin
287275793eaSopenharmony_ci      Time_Stamp := Ada.Calendar.Clock;
288275793eaSopenharmony_ci   end Stamp;
289275793eaSopenharmony_ci
290275793eaSopenharmony_cibegin
291275793eaSopenharmony_ci   Ada.Text_IO.Put_Line ("ZLib " & ZLib.Version);
292275793eaSopenharmony_ci
293275793eaSopenharmony_ci   loop
294275793eaSopenharmony_ci      Generate_File;
295275793eaSopenharmony_ci
296275793eaSopenharmony_ci      for Level in ZLib.Compression_Level'Range loop
297275793eaSopenharmony_ci
298275793eaSopenharmony_ci         Ada.Text_IO.Put_Line ("Level ="
299275793eaSopenharmony_ci            & ZLib.Compression_Level'Image (Level));
300275793eaSopenharmony_ci
301275793eaSopenharmony_ci         --  Test generic interface.
302275793eaSopenharmony_ci         Open   (File_In, In_File, In_File_Name);
303275793eaSopenharmony_ci         Create (File_Out, Out_File, Z_File_Name);
304275793eaSopenharmony_ci
305275793eaSopenharmony_ci         Stamp;
306275793eaSopenharmony_ci
307275793eaSopenharmony_ci         --  Deflate using generic instantiation.
308275793eaSopenharmony_ci
309275793eaSopenharmony_ci         ZLib.Deflate_Init
310275793eaSopenharmony_ci               (Filter   => Filter,
311275793eaSopenharmony_ci                Level    => Level,
312275793eaSopenharmony_ci                Strategy => Strategy,
313275793eaSopenharmony_ci                Header   => Header);
314275793eaSopenharmony_ci
315275793eaSopenharmony_ci         Translate (Filter);
316275793eaSopenharmony_ci         Print_Statistic ("Generic compress", ZLib.Total_Out (Filter));
317275793eaSopenharmony_ci         ZLib.Close (Filter);
318275793eaSopenharmony_ci
319275793eaSopenharmony_ci         Close (File_In);
320275793eaSopenharmony_ci         Close (File_Out);
321275793eaSopenharmony_ci
322275793eaSopenharmony_ci         Open   (File_In, In_File, Z_File_Name);
323275793eaSopenharmony_ci         Create (File_Out, Out_File, Out_File_Name);
324275793eaSopenharmony_ci
325275793eaSopenharmony_ci         Stamp;
326275793eaSopenharmony_ci
327275793eaSopenharmony_ci         --  Inflate using generic instantiation.
328275793eaSopenharmony_ci
329275793eaSopenharmony_ci         ZLib.Inflate_Init (Filter, Header => Header);
330275793eaSopenharmony_ci
331275793eaSopenharmony_ci         Translate (Filter);
332275793eaSopenharmony_ci         Print_Statistic ("Generic decompress", ZLib.Total_Out (Filter));
333275793eaSopenharmony_ci
334275793eaSopenharmony_ci         ZLib.Close (Filter);
335275793eaSopenharmony_ci
336275793eaSopenharmony_ci         Close (File_In);
337275793eaSopenharmony_ci         Close (File_Out);
338275793eaSopenharmony_ci
339275793eaSopenharmony_ci         Compare_Files (In_File_Name, Out_File_Name);
340275793eaSopenharmony_ci
341275793eaSopenharmony_ci         --  Test stream interface.
342275793eaSopenharmony_ci
343275793eaSopenharmony_ci         --  Compress to the back stream.
344275793eaSopenharmony_ci
345275793eaSopenharmony_ci         Open   (File_In, In_File, In_File_Name);
346275793eaSopenharmony_ci         Create (File_Back, Out_File, Z_File_Name);
347275793eaSopenharmony_ci
348275793eaSopenharmony_ci         Stamp;
349275793eaSopenharmony_ci
350275793eaSopenharmony_ci         ZLib.Streams.Create
351275793eaSopenharmony_ci           (Stream          => File_Z,
352275793eaSopenharmony_ci            Mode            => ZLib.Streams.Out_Stream,
353275793eaSopenharmony_ci            Back            => ZLib.Streams.Stream_Access
354275793eaSopenharmony_ci                                 (Stream (File_Back)),
355275793eaSopenharmony_ci            Back_Compressed => True,
356275793eaSopenharmony_ci            Level           => Level,
357275793eaSopenharmony_ci            Strategy        => Strategy,
358275793eaSopenharmony_ci            Header          => Header);
359275793eaSopenharmony_ci
360275793eaSopenharmony_ci         Copy_Streams
361275793eaSopenharmony_ci           (Source => Stream (File_In).all,
362275793eaSopenharmony_ci            Target => File_Z);
363275793eaSopenharmony_ci
364275793eaSopenharmony_ci         --  Flushing internal buffers to the back stream.
365275793eaSopenharmony_ci
366275793eaSopenharmony_ci         ZLib.Streams.Flush (File_Z, ZLib.Finish);
367275793eaSopenharmony_ci
368275793eaSopenharmony_ci         Print_Statistic ("Write compress",
369275793eaSopenharmony_ci                          ZLib.Streams.Write_Total_Out (File_Z));
370275793eaSopenharmony_ci
371275793eaSopenharmony_ci         ZLib.Streams.Close (File_Z);
372275793eaSopenharmony_ci
373275793eaSopenharmony_ci         Close (File_In);
374275793eaSopenharmony_ci         Close (File_Back);
375275793eaSopenharmony_ci
376275793eaSopenharmony_ci         --  Compare reading from original file and from
377275793eaSopenharmony_ci         --  decompression stream.
378275793eaSopenharmony_ci
379275793eaSopenharmony_ci         Open (File_In,   In_File, In_File_Name);
380275793eaSopenharmony_ci         Open (File_Back, In_File, Z_File_Name);
381275793eaSopenharmony_ci
382275793eaSopenharmony_ci         ZLib.Streams.Create
383275793eaSopenharmony_ci           (Stream          => File_Z,
384275793eaSopenharmony_ci            Mode            => ZLib.Streams.In_Stream,
385275793eaSopenharmony_ci            Back            => ZLib.Streams.Stream_Access
386275793eaSopenharmony_ci                                 (Stream (File_Back)),
387275793eaSopenharmony_ci            Back_Compressed => True,
388275793eaSopenharmony_ci            Header          => Header);
389275793eaSopenharmony_ci
390275793eaSopenharmony_ci         Stamp;
391275793eaSopenharmony_ci         Compare_Streams (Stream (File_In).all, File_Z);
392275793eaSopenharmony_ci
393275793eaSopenharmony_ci         Print_Statistic ("Read decompress",
394275793eaSopenharmony_ci                          ZLib.Streams.Read_Total_Out (File_Z));
395275793eaSopenharmony_ci
396275793eaSopenharmony_ci         ZLib.Streams.Close (File_Z);
397275793eaSopenharmony_ci         Close (File_In);
398275793eaSopenharmony_ci         Close (File_Back);
399275793eaSopenharmony_ci
400275793eaSopenharmony_ci         --  Compress by reading from compression stream.
401275793eaSopenharmony_ci
402275793eaSopenharmony_ci         Open (File_Back, In_File, In_File_Name);
403275793eaSopenharmony_ci         Create (File_Out, Out_File, Z_File_Name);
404275793eaSopenharmony_ci
405275793eaSopenharmony_ci         ZLib.Streams.Create
406275793eaSopenharmony_ci           (Stream          => File_Z,
407275793eaSopenharmony_ci            Mode            => ZLib.Streams.In_Stream,
408275793eaSopenharmony_ci            Back            => ZLib.Streams.Stream_Access
409275793eaSopenharmony_ci                                 (Stream (File_Back)),
410275793eaSopenharmony_ci            Back_Compressed => False,
411275793eaSopenharmony_ci            Level           => Level,
412275793eaSopenharmony_ci            Strategy        => Strategy,
413275793eaSopenharmony_ci            Header          => Header);
414275793eaSopenharmony_ci
415275793eaSopenharmony_ci         Stamp;
416275793eaSopenharmony_ci         Copy_Streams
417275793eaSopenharmony_ci           (Source => File_Z,
418275793eaSopenharmony_ci            Target => Stream (File_Out).all);
419275793eaSopenharmony_ci
420275793eaSopenharmony_ci         Print_Statistic ("Read compress",
421275793eaSopenharmony_ci                          ZLib.Streams.Read_Total_Out (File_Z));
422275793eaSopenharmony_ci
423275793eaSopenharmony_ci         ZLib.Streams.Close (File_Z);
424275793eaSopenharmony_ci
425275793eaSopenharmony_ci         Close (File_Out);
426275793eaSopenharmony_ci         Close (File_Back);
427275793eaSopenharmony_ci
428275793eaSopenharmony_ci         --  Decompress to decompression stream.
429275793eaSopenharmony_ci
430275793eaSopenharmony_ci         Open   (File_In,   In_File, Z_File_Name);
431275793eaSopenharmony_ci         Create (File_Back, Out_File, Out_File_Name);
432275793eaSopenharmony_ci
433275793eaSopenharmony_ci         ZLib.Streams.Create
434275793eaSopenharmony_ci           (Stream          => File_Z,
435275793eaSopenharmony_ci            Mode            => ZLib.Streams.Out_Stream,
436275793eaSopenharmony_ci            Back            => ZLib.Streams.Stream_Access
437275793eaSopenharmony_ci                                 (Stream (File_Back)),
438275793eaSopenharmony_ci            Back_Compressed => False,
439275793eaSopenharmony_ci            Header          => Header);
440275793eaSopenharmony_ci
441275793eaSopenharmony_ci         Stamp;
442275793eaSopenharmony_ci
443275793eaSopenharmony_ci         Copy_Streams
444275793eaSopenharmony_ci           (Source => Stream (File_In).all,
445275793eaSopenharmony_ci            Target => File_Z);
446275793eaSopenharmony_ci
447275793eaSopenharmony_ci         Print_Statistic ("Write decompress",
448275793eaSopenharmony_ci                          ZLib.Streams.Write_Total_Out (File_Z));
449275793eaSopenharmony_ci
450275793eaSopenharmony_ci         ZLib.Streams.Close (File_Z);
451275793eaSopenharmony_ci         Close (File_In);
452275793eaSopenharmony_ci         Close (File_Back);
453275793eaSopenharmony_ci
454275793eaSopenharmony_ci         Compare_Files (In_File_Name, Out_File_Name);
455275793eaSopenharmony_ci      end loop;
456275793eaSopenharmony_ci
457275793eaSopenharmony_ci      Ada.Text_IO.Put_Line (Count'Image (File_Size) & " Ok.");
458275793eaSopenharmony_ci
459275793eaSopenharmony_ci      exit when not Continuous;
460275793eaSopenharmony_ci
461275793eaSopenharmony_ci      File_Size := File_Size + 1;
462275793eaSopenharmony_ci   end loop;
463275793eaSopenharmony_ciend Test;
464