annotate src/zlib-1.2.7/contrib/ada/mtest.adb @ 83:ae30d91d2ffe

Replace these with versions built using an older toolset (so as to avoid ABI compatibilities when linking on Ubuntu 14.04 for packaging purposes)
author Chris Cannam
date Fri, 07 Feb 2020 11:51:13 +0000
parents e13257ea84a4
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;