1
----------------------------------------------------------------
2
----------------------------------------------------------------
6
with Ada.Numerics.Discrete_Random;
16
------------------------------------
17
-- Test configuration parameters --
18
------------------------------------
20
File_Size : Stream_Element_Offset := 100_000;
22
Continuous : constant Boolean := False;
23
-- If this constant is True, the test would be repeated again and again,
24
-- with increment File_Size for every iteration.
26
Header : constant ZLib.Header_Type := ZLib.Default;
27
-- Do not use Header other than Default in ZLib versions 1.1.4 and older.
29
Init_Random : constant := 8;
30
-- We are using the same random sequence, in case of we catch bug,
31
-- so we would be able to reproduce it.
35
Pack_Size : Stream_Element_Offset;
36
Offset : Stream_Element_Offset;
38
Filter : ZLib.Filter_Type;
40
subtype Visible_Symbols
41
is Stream_Element range 16#20# .. 16#7E#;
43
package Random_Elements is new
44
Ada.Numerics.Discrete_Random (Visible_Symbols);
46
Gen : Random_Elements.Generator;
47
Period : constant Stream_Element_Offset := 200;
48
-- Period constant variable for random generator not to be very random.
49
-- Bigger period, harder random.
51
Read_Buffer : Stream_Element_Array (1 .. 2048);
52
Read_First : Stream_Element_Offset;
53
Read_Last : Stream_Element_Offset;
58
(Item : out Stream_Element_Array;
59
Last : out Stream_Element_Offset);
60
-- this procedure is for generic instantiation of
62
-- reading data from the File_In.
64
procedure Read is new ZLib.Read
67
Rest_First => Read_First,
68
Rest_Last => Read_Last);
75
(Item : out Stream_Element_Array;
76
Last : out Stream_Element_Offset) is
78
Last := Stream_Element_Offset'Min
80
Item'First + File_Size - Offset);
82
for J in Item'First .. Last loop
83
if J < Item'First + Period then
84
Item (J) := Random_Elements.Random (Gen);
86
Item (J) := Item (J - Period);
99
Random_Elements.Reset (Gen, Init_Random);
102
Read_First := Read_Buffer'Last + 1;
103
Read_Last := Read_Buffer'Last;
107
Ada.Text_IO.Put_Line ("ZLib " & ZLib.Version);
110
for Level in ZLib.Compression_Level'Range loop
112
Ada.Text_IO.Put ("Level ="
113
& ZLib.Compression_Level'Image (Level));
115
-- Deflate using generic instantiation.
125
(Stream_Element_Offset'Image (File_Size) & " ->");
129
Buffer : Stream_Element_Array (1 .. 1024);
130
Last : Stream_Element_Offset;
132
Read (Filter, Buffer, Last);
134
Pack_Size := Pack_Size + Last - Buffer'First + 1;
136
exit when Last < Buffer'Last;
140
Ada.Text_IO.Put_Line (Stream_Element_Offset'Image (Pack_Size));
145
exit when not Continuous;
147
File_Size := File_Size + 1;