annotate src/zlib-1.2.8/contrib/ada/mtest.adb @ 84:08ae793730bd

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