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