OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [zlib/] [contrib/] [ada/] [mtest.adb] - Blame information for rev 767

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 745 jeremybenn
----------------------------------------------------------------
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;

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.