]>
Commit | Line | Data |
---|---|---|
5a590500 | 1 | ---------------------------------------------------------------- |
2 | -- ZLib for Ada thick binding. -- | |
3 | -- -- | |
4 | -- Copyright (C) 2002-2003 Dmitriy Anisimkov -- | |
5 | -- -- | |
6 | -- Open source license information is in the zlib.ads file. -- | |
7 | ---------------------------------------------------------------- | |
8 | ||
fbac2044 | 9 | -- $Id: read.adb,v 1.8 2004/05/31 10:53:40 vagul Exp $ |
5a590500 | 10 | |
11 | -- Test/demo program for the generic read interface. | |
12 | ||
13 | with Ada.Numerics.Discrete_Random; | |
14 | with Ada.Streams; | |
15 | with Ada.Text_IO; | |
16 | ||
17 | with ZLib; | |
18 | ||
19 | procedure Read is | |
20 | ||
21 | use Ada.Streams; | |
22 | ||
23 | ------------------------------------ | |
24 | -- Test configuration parameters -- | |
25 | ------------------------------------ | |
26 | ||
27 | File_Size : Stream_Element_Offset := 100_000; | |
28 | ||
29 | Continuous : constant Boolean := False; | |
30 | -- If this constant is True, the test would be repeated again and again, | |
31 | -- with increment File_Size for every iteration. | |
32 | ||
33 | Header : constant ZLib.Header_Type := ZLib.Default; | |
34 | -- Do not use Header other than Default in ZLib versions 1.1.4 and older. | |
35 | ||
36 | Init_Random : constant := 8; | |
37 | -- We are using the same random sequence, in case of we catch bug, | |
38 | -- so we would be able to reproduce it. | |
39 | ||
40 | -- End -- | |
41 | ||
42 | Pack_Size : Stream_Element_Offset; | |
43 | Offset : Stream_Element_Offset; | |
44 | ||
45 | Filter : ZLib.Filter_Type; | |
46 | ||
47 | subtype Visible_Symbols | |
48 | is Stream_Element range 16#20# .. 16#7E#; | |
49 | ||
50 | package Random_Elements is new | |
51 | Ada.Numerics.Discrete_Random (Visible_Symbols); | |
52 | ||
53 | Gen : Random_Elements.Generator; | |
54 | Period : constant Stream_Element_Offset := 200; | |
55 | -- Period constant variable for random generator not to be very random. | |
56 | -- Bigger period, harder random. | |
57 | ||
58 | Read_Buffer : Stream_Element_Array (1 .. 2048); | |
59 | Read_First : Stream_Element_Offset; | |
60 | Read_Last : Stream_Element_Offset; | |
61 | ||
62 | procedure Reset; | |
63 | ||
64 | procedure Read | |
65 | (Item : out Stream_Element_Array; | |
66 | Last : out Stream_Element_Offset); | |
67 | -- this procedure is for generic instantiation of | |
68 | -- ZLib.Read | |
69 | -- reading data from the File_In. | |
70 | ||
fbac2044 | 71 | procedure Read is new ZLib.Read |
72 | (Read, | |
73 | Read_Buffer, | |
74 | Rest_First => Read_First, | |
75 | Rest_Last => Read_Last); | |
5a590500 | 76 | |
77 | ---------- | |
78 | -- Read -- | |
79 | ---------- | |
80 | ||
81 | procedure Read | |
82 | (Item : out Stream_Element_Array; | |
83 | Last : out Stream_Element_Offset) is | |
84 | begin | |
85 | Last := Stream_Element_Offset'Min | |
86 | (Item'Last, | |
87 | Item'First + File_Size - Offset); | |
88 | ||
89 | for J in Item'First .. Last loop | |
90 | if J < Item'First + Period then | |
91 | Item (J) := Random_Elements.Random (Gen); | |
92 | else | |
93 | Item (J) := Item (J - Period); | |
94 | end if; | |
95 | ||
96 | Offset := Offset + 1; | |
97 | end loop; | |
98 | end Read; | |
99 | ||
100 | ----------- | |
101 | -- Reset -- | |
102 | ----------- | |
103 | ||
104 | procedure Reset is | |
105 | begin | |
106 | Random_Elements.Reset (Gen, Init_Random); | |
107 | Pack_Size := 0; | |
108 | Offset := 1; | |
109 | Read_First := Read_Buffer'Last + 1; | |
fbac2044 | 110 | Read_Last := Read_Buffer'Last; |
5a590500 | 111 | end Reset; |
112 | ||
113 | begin | |
114 | Ada.Text_IO.Put_Line ("ZLib " & ZLib.Version); | |
115 | ||
116 | loop | |
117 | for Level in ZLib.Compression_Level'Range loop | |
118 | ||
119 | Ada.Text_IO.Put ("Level =" | |
120 | & ZLib.Compression_Level'Image (Level)); | |
121 | ||
122 | -- Deflate using generic instantiation. | |
123 | ||
124 | ZLib.Deflate_Init | |
125 | (Filter, | |
126 | Level, | |
127 | Header => Header); | |
128 | ||
129 | Reset; | |
130 | ||
131 | Ada.Text_IO.Put | |
132 | (Stream_Element_Offset'Image (File_Size) & " ->"); | |
133 | ||
134 | loop | |
135 | declare | |
136 | Buffer : Stream_Element_Array (1 .. 1024); | |
137 | Last : Stream_Element_Offset; | |
138 | begin | |
139 | Read (Filter, Buffer, Last); | |
140 | ||
141 | Pack_Size := Pack_Size + Last - Buffer'First + 1; | |
142 | ||
143 | exit when Last < Buffer'Last; | |
144 | end; | |
145 | end loop; | |
146 | ||
147 | Ada.Text_IO.Put_Line (Stream_Element_Offset'Image (Pack_Size)); | |
148 | ||
149 | ZLib.Close (Filter); | |
150 | end loop; | |
151 | ||
152 | exit when not Continuous; | |
153 | ||
154 | File_Size := File_Size + 1; | |
155 | end loop; | |
156 | end Read; |