Mercurial > hg > sv-dependency-builds
comparison src/zlib-1.2.7/contrib/ada/mtest.adb @ 4:e13257ea84a4
Add bzip2, zlib, liblo, portaudio sources
author | Chris Cannam |
---|---|
date | Wed, 20 Mar 2013 13:59:52 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
3:6c505a35919a | 4:e13257ea84a4 |
---|---|
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 -- Continuous test for ZLib multithreading. If the test would fail | |
9 -- we should provide thread safe allocation routines for the Z_Stream. | |
10 -- | |
11 -- $Id: mtest.adb,v 1.4 2004/07/23 07:49:54 vagul Exp $ | |
12 | |
13 with ZLib; | |
14 with Ada.Streams; | |
15 with Ada.Numerics.Discrete_Random; | |
16 with Ada.Text_IO; | |
17 with Ada.Exceptions; | |
18 with Ada.Task_Identification; | |
19 | |
20 procedure MTest is | |
21 use Ada.Streams; | |
22 use ZLib; | |
23 | |
24 Stop : Boolean := False; | |
25 | |
26 pragma Atomic (Stop); | |
27 | |
28 subtype Visible_Symbols is Stream_Element range 16#20# .. 16#7E#; | |
29 | |
30 package Random_Elements is | |
31 new Ada.Numerics.Discrete_Random (Visible_Symbols); | |
32 | |
33 task type Test_Task; | |
34 | |
35 task body Test_Task is | |
36 Buffer : Stream_Element_Array (1 .. 100_000); | |
37 Gen : Random_Elements.Generator; | |
38 | |
39 Buffer_First : Stream_Element_Offset; | |
40 Compare_First : Stream_Element_Offset; | |
41 | |
42 Deflate : Filter_Type; | |
43 Inflate : Filter_Type; | |
44 | |
45 procedure Further (Item : in Stream_Element_Array); | |
46 | |
47 procedure Read_Buffer | |
48 (Item : out Ada.Streams.Stream_Element_Array; | |
49 Last : out Ada.Streams.Stream_Element_Offset); | |
50 | |
51 ------------- | |
52 -- Further -- | |
53 ------------- | |
54 | |
55 procedure Further (Item : in Stream_Element_Array) is | |
56 | |
57 procedure Compare (Item : in Stream_Element_Array); | |
58 | |
59 ------------- | |
60 -- Compare -- | |
61 ------------- | |
62 | |
63 procedure Compare (Item : in Stream_Element_Array) is | |
64 Next_First : Stream_Element_Offset := Compare_First + Item'Length; | |
65 begin | |
66 if Buffer (Compare_First .. Next_First - 1) /= Item then | |
67 raise Program_Error; | |
68 end if; | |
69 | |
70 Compare_First := Next_First; | |
71 end Compare; | |
72 | |
73 procedure Compare_Write is new ZLib.Write (Write => Compare); | |
74 begin | |
75 Compare_Write (Inflate, Item, No_Flush); | |
76 end Further; | |
77 | |
78 ----------------- | |
79 -- Read_Buffer -- | |
80 ----------------- | |
81 | |
82 procedure Read_Buffer | |
83 (Item : out Ada.Streams.Stream_Element_Array; | |
84 Last : out Ada.Streams.Stream_Element_Offset) | |
85 is | |
86 Buff_Diff : Stream_Element_Offset := Buffer'Last - Buffer_First; | |
87 Next_First : Stream_Element_Offset; | |
88 begin | |
89 if Item'Length <= Buff_Diff then | |
90 Last := Item'Last; | |
91 | |
92 Next_First := Buffer_First + Item'Length; | |
93 | |
94 Item := Buffer (Buffer_First .. Next_First - 1); | |
95 | |
96 Buffer_First := Next_First; | |
97 else | |
98 Last := Item'First + Buff_Diff; | |
99 Item (Item'First .. Last) := Buffer (Buffer_First .. Buffer'Last); | |
100 Buffer_First := Buffer'Last + 1; | |
101 end if; | |
102 end Read_Buffer; | |
103 | |
104 procedure Translate is new Generic_Translate | |
105 (Data_In => Read_Buffer, | |
106 Data_Out => Further); | |
107 | |
108 begin | |
109 Random_Elements.Reset (Gen); | |
110 | |
111 Buffer := (others => 20); | |
112 | |
113 Main : loop | |
114 for J in Buffer'Range loop | |
115 Buffer (J) := Random_Elements.Random (Gen); | |
116 | |
117 Deflate_Init (Deflate); | |
118 Inflate_Init (Inflate); | |
119 | |
120 Buffer_First := Buffer'First; | |
121 Compare_First := Buffer'First; | |
122 | |
123 Translate (Deflate); | |
124 | |
125 if Compare_First /= Buffer'Last + 1 then | |
126 raise Program_Error; | |
127 end if; | |
128 | |
129 Ada.Text_IO.Put_Line | |
130 (Ada.Task_Identification.Image | |
131 (Ada.Task_Identification.Current_Task) | |
132 & Stream_Element_Offset'Image (J) | |
133 & ZLib.Count'Image (Total_Out (Deflate))); | |
134 | |
135 Close (Deflate); | |
136 Close (Inflate); | |
137 | |
138 exit Main when Stop; | |
139 end loop; | |
140 end loop Main; | |
141 exception | |
142 when E : others => | |
143 Ada.Text_IO.Put_Line (Ada.Exceptions.Exception_Information (E)); | |
144 Stop := True; | |
145 end Test_Task; | |
146 | |
147 Test : array (1 .. 4) of Test_Task; | |
148 | |
149 pragma Unreferenced (Test); | |
150 | |
151 Dummy : Character; | |
152 | |
153 begin | |
154 Ada.Text_IO.Get_Immediate (Dummy); | |
155 Stop := True; | |
156 end MTest; |