annotate src/zlib-1.2.8/contrib/ada/mtest.adb @ 169:223a55898ab9 tip default

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