tree checksum vpatch file split hunks
all signers: asciilifeform diana_coman
antecedents: udp_fix_ip_nullchars
press order: 
| udp_genesis | asciilifeform diana_coman | 
| udp_errata_asciilifeform | asciilifeform diana_coman | 
| udp_fix_ip_nullchars | diana_coman | 
| mt_prng | diana_coman | 
patch: 
(0 . 0)(1 . 1)
  5 lib
-(0 . 0)(1 . 128)
 10  -- Ada implementation of the Mersenne Twister Pseudo-Random number generator
 11  -- S.MG, 2018
 12 
 13 
 14 package body MT is
 15 
 16   procedure Init_Genrand(Seed : in U32) is
 17   begin
 18     State(0) := Seed;
 19     for I in State'First + 1 .. State'Last loop
 20       State(I) := U32(1812433253) *
 21                   ( State(I - 1) xor 
 22                     ( Shift_Right(State(I - 1), 30) ) 
 23                   ) + U32(I) ;
 24     end loop;
 25     Mti_Flag := N;
 26   end Init_Genrand;
 27 
 28   procedure Init_Genrand(Seed : in Init_Array_Type) is
 29     Default_Seed: constant U32 := U32(19650218); -- magic value!
 30     I, J, K : Integer;
 31   begin
 32     Init_Genrand(Default_Seed);
 33     I := 1;
 34     J := 0;
 35     if N > Seed'Length then
 36       K := N;
 37     else
 38       K := Seed'Length;
 39     end if;
 40 
 41     while K > 0 loop
 42       State(I) := (State(I) xor 
 43                   ( (State(I-1) xor 
 44                      Shift_Right(State(I-1), 30)
 45                     ) * U32(1664525)
 46                   )) + Seed(J) + U32(J);
 47       I := I + 1;
 48       J := J + 1;
 49       if I >= N then
 50         State(0) := State(N-1);
 51         I := 1;
 52       end if;
 53       if J >= Seed'Length then
 54         J := 0;
 55       end if;
 56       K := K - 1;               
 57     end loop;
 58 
 59     K := N -1;
 60     while K > 0 loop
 61       State(I) := (State(I) xor 
 62                   ( (State(I-1) xor 
 63                      Shift_Right(State(I-1), 30)
 64                     ) * U32(1566083941)
 65                   )) - U32(I); 
 66       I := I + 1;
 67       if I >= N then
 68         State(0) := State(N-1);
 69         I := 1;
 70       end if;     
 71       K := K - 1;
 72     end loop;
 73     State(0) := 16#8000_0000#; -- MSB is 1 to ensure non-zero initial state
 74   end Init_Genrand;
 75 
 76   function Gen_U32 return U32 is
 77     Y     : U32;
 78     MASK1 : constant U32 := U32(1);
 79     Mag01 : Array ( 0 .. 1 ) of U32;
 80   begin
 81     -- Mag01[x] is x * Matrix_A of the algorithm for x 0 or 1
 82     Mag01(0) := U32(0);
 83     Mag01(1) := MATRIX_MASK;
 84 
 85     -- if no numbers available, generate another set of N words
 86     if Mti_Flag >= N then
 87 
 88       -- check it's not a non-initialised generator
 89       if Mti_Flag = (N + 1) then
 90          -- Generator was NOT initialised!
 91          -- Original C code initialises with default seed 5489
 92          -- This code will simply raise exception and abort
 93          raise No_Init_Exception;
 94       end if;
 95 
 96       for K in 0 .. N - M - 1 loop
 97         Y := ( State(K)   and UPPER_MASK ) or
 98              ( State(K+1) and LOWER_MASK );
 99         State(K) := State(K+M) xor 
100                       Shift_Right(Y, 1) xor 
101                         Mag01(Integer(Y and MASK1));
102       end loop;
103       for K in N-M .. N - 2 loop
104         Y := ( State(K)   and UPPER_MASK  ) or
105              ( State(K+1) and LOWER_MASK);
106         State(K) := State(K + M - N) xor
107                       Shift_Right(Y, 1) xor 
108                         Mag01(Integer(Y and MASK1));
109       end loop;
110       Y := (State(N-1) and UPPER_MASK ) or
111              (State(0) and LOWER_MASK );
112       State(N - 1) := State(M-1) xor 
113                         Shift_Right(Y, 1) xor
114                           Mag01(Integer(Y and MASK1));
115       Mti_Flag := 0;
116     end if;
117 
118     -- retrieve next available number
119     Y        := State(Integer(Mti_Flag));
120     Mti_Flag := Mti_Flag + 1;
121 
122     -- tempering
123     Y := Y xor Shift_Right(Y, 11);
124     Y := Y xor (Shift_Left(Y, 7) and 16#9d2c_5680#);
125     Y := Y xor (Shift_Left(Y, 15) and 16#efc6_0000#);
126     Y := Y xor Shift_Right(Y, 18);
127 
128     -- return tempered number
129     return Y;
130   end Gen_U32;
131 
132   function Get_State return State_Type is
133   begin
134     return State;
135   end Get_State;
136 
137 end MT;
-(0 . 0)(1 . 47)
142  -- Ada implementation of the Mersenne Twister Pseudo-Random number generator
143  -- S.MG, 2018
144 
145 with Interfaces; use Interfaces;
146 
147 package MT is
148   -- Interfaces.Unsigned_32 in GNAT is mod 2**32 and has bitwise shifts defined
149   subtype U32 is Interfaces.Unsigned_32;
150 
151   -- period parameters
152   N          : constant := 624;
153   M          : constant := 397;
154   MATRIX_MASK: constant U32 := 16#9908_b0df#;
155   UPPER_MASK : constant U32 := 16#8000_0000#;
156   LOWER_MASK : constant U32 := 16#7fff_ffff#;
157 
158   -- array type for storing the state vector of the generator
159   type State_Type is Array( 0 .. N-1 ) of U32;
160 
161   -- array type for initialization by array - change key len here if needed
162   KEY_LEN    : constant := 4;
163   type Init_Array_Type is Array( 0 .. KEY_LEN - 1 ) of U32;
164 
165   -- exception raised by a call to generator before initializing it
166   No_Init_Exception : exception;
167 
168   -- initialize the generator with a seed (number)
169   procedure Init_Genrand(Seed : in U32);
170 
171   -- initialize the generator with array of 8-octets elements
172   procedure Init_Genrand(Seed : in Init_Array_Type);
173 
174   -- generate the next pseudo-random 32 bits number in the sequence
175   function Gen_U32 return U32;
176 
177   -- for testing
178   function Get_State return State_Type;
179 
180   -- internals of the generator, NOT for direct access
181 private
182   -- actual state of the generator
183   State      : State_Type;
184 
185   -- flag for generator routine
186   Mti_Flag : U32 := N + 1;  -- default value -> state(N) is not initialised
187 
188 end MT;
-(0 . 0)(1 . 52)
193  -- Ada implementation of the Mersenne Twister Pseudo-Random number generator
194  -- S.MG, 2018
195  -- 
196  -- Implementing the algorithm as described by Matsumoto, M. and Nishimura, T.:
197  -- www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html
198  -- M.M and N.T, "Mersenne Twister: A 623-dimensionally equidistributed uniform
199  -- pseudorandom number generator", ACM Transactions on Modeling and Computer 
200  -- Simulations: Special Issue on Uniform Random Number Generation, 1998.
201 
202 project MT is
203   for Object_Dir use "obj";
204   
205   type Mode_Type is ("debug", "release");
206   Mode : Mode_Type := external ("mode", "release");
207   
208   for Languages    use ("Ada");
209   for Source_Dirs  use (".");
210   for Library_Dir  use "lib";
211   for Library_Name use "MT";
212   for Library_Kind use "static";
213   
214   package Compiler is
215 
216      case Mode is
217         when "debug" =>
218            for Switches ("Ada")
219              use ("-g");
220         when "release" =>
221            for Switches ("Ada")
222              use ("-O2", "-fdump-scos", "-gnata", "-fstack-check",
223                   "-gnatyd", "-gnatym",
224                   "-fdata-sections", "-ffunction-sections", "-gnatwr", "-gnatw.d",
225                   "-gnatec=" & MT'Project_Dir & "restrict.adc");
226      end case;
227   end Compiler;
228     
229   package Builder is
230      for Switches ("Ada")
231        use ("-nostdlib");
232   end Builder;
233   
234   package Binder is
235      case Mode is
236         when "debug" =>
237            for Switches ("Ada")
238              use ();
239         when "release" =>
240            for Switches ("Ada")
241              use ("-static");
242      end case;
243   end Binder;
244 end MT;
-(0 . 0)(1 . 1)
249 obj
-(0 . 0)(1 . 82)
254 ------------------------------------------------------------------------------
255 ------------------------------------------------------------------------------
256 -- This file is part of 'UDP', a datagram sockets library.                  --
257 --                                                                          --
258 -- (C) 2018 Stanislav Datskovskiy ( www.loper-os.org )                      --
259 -- http://wot.deedbot.org/17215D118B7239507FAFED98B98228A001ABFFC7.html     --
260 --                                                                          --
261 -- You do not have, nor can you ever acquire the right to use, copy or      --
262 -- distribute this software ; Should you use this software for any purpose, --
263 -- or copy and distribute it to anyone or in any manner, you are breaking   --
264 -- the laws of whatever soi-disant jurisdiction, and you promise to         --
265 -- continue doing so for the indefinite future. In any case, please         --
266 -- always : read and understand any software ; verify any PGP signatures    --
267 -- that you use - for any purpose.                                          --
268 --                                                                          --
269 -- See also http://trilema.com/2015/a-new-software-licensing-paradigm .     --
270 ------------------------------------------------------------------------------
271 ------------------------------------------------------------------------------
272 
273 pragma Restrictions(Immediate_Reclamation);
274 pragma Restrictions(Max_Asynchronous_Select_Nesting => 0);
275 pragma Restrictions(Max_Protected_Entries => 0);
276 pragma Restrictions(Max_Select_Alternatives => 0);
277 --pragma Restrictions(Max_Task_Entries => 0);
278 --pragma Restrictions(Max_Tasks => 0);
279 pragma Restrictions(No_Abort_Statements);
280 pragma Restrictions(No_Access_Parameter_Allocators);
281 pragma Restrictions(No_Allocators);
282 pragma Restrictions(No_Asynchronous_Control);
283 --pragma Restrictions(No_Calendar);
284 pragma Restrictions(No_Coextensions);
285 pragma Restrictions(No_Default_Stream_Attributes);
286 --pragma Restrictions(No_Delay);
287 pragma Restrictions(No_Dispatch);
288 pragma Restrictions(No_Dispatching_Calls);
289 pragma Restrictions(No_Dynamic_Attachment);
290 pragma Restrictions(No_Dynamic_Priorities);
291 pragma Restrictions(No_Entry_Calls_In_Elaboration_Code);
292 pragma Restrictions(No_Entry_Queue);
293 pragma Restrictions(No_Enumeration_Maps);
294 pragma Restrictions(No_Exception_Propagation);
295 pragma Restrictions(No_Exception_Registration);
296 pragma Restrictions(No_Finalization);
297 pragma Restrictions(No_Fixed_Io);
298 pragma Restrictions(No_Floating_Point);
299 pragma Restrictions(No_Implementation_Aspect_Specifications);
300 pragma Restrictions(No_Implementation_Units);
301 pragma Restrictions(No_Implicit_Dynamic_Code);
302 pragma Restrictions(No_Implicit_Heap_Allocations);
303 pragma Restrictions(No_Implicit_Protected_Object_Allocations);
304 pragma Restrictions(No_Implicit_Task_Allocations);
305 pragma Restrictions(No_Initialize_Scalars);
306 pragma Restrictions(No_Local_Protected_Objects);
307 pragma Restrictions(No_Local_Timing_Events);
308 pragma Restrictions(No_Multiple_Elaboration);
309 pragma Restrictions(No_Nested_Finalization);
310 pragma Restrictions(No_Protected_Type_Allocators);
311 pragma Restrictions(No_Protected_Types);
312 --pragma Restrictions(No_Relative_Delay);
313 pragma Restrictions(No_Requeue_Statements);
314 pragma Restrictions(No_Secondary_Stack);
315 pragma Restrictions(No_Select_Statements);
316 pragma Restrictions(No_Specific_Termination_Handlers);
317 pragma Restrictions(No_Standard_Allocators_After_Elaboration);
318 pragma Restrictions(No_Stream_Optimizations);
319 pragma Restrictions(No_Streams);
320 pragma Restrictions(No_Task_Allocators);
321 pragma Restrictions(No_Task_At_Interrupt_Priority);
322 pragma Restrictions(No_Task_Attributes_Package);
323 --pragma Restrictions(No_Task_Hierarchy);
324 --pragma Restrictions(No_Tasking);
325 pragma Restrictions(No_Task_Termination);
326 pragma Restrictions(No_Terminate_Alternatives);
327 pragma Restrictions(No_Unchecked_Access);
328 pragma Restrictions(No_Unchecked_Conversion);
329 pragma Restrictions(No_Unchecked_Deallocation);
330 pragma Restrictions(No_Wide_Characters);
331 pragma Restrictions(Pure_Barriers);
332 pragma Restrictions(Simple_Barriers);
333 pragma Restrictions(Static_Priorities);
334 pragma Restrictions(Static_Storage_Size);
335 pragma Validity_Checks(ALL_CHECKS);
- 408581EFE33EB2D149C57211C1461D8C71313E2B3EC17EFC421F32F4A2B67234300B8866522BA68B255BBDAF505A40EFA0E51E5E05333908F9C81F1C2549F864(1 . 3)(1 . 4)
340 543080 udp_genesis diana_coman Regrind of asciilifeform's UDP lib genesis, to bring it to current format (Keccak hashes, manifest file and standard compliant names for vpatches). A minimal library for UDP communications with fixed-size payloads sent/received over the wire. Uses Ada and C code.
341 543081 udp_errata_asciilifeform diana_coman Regrind of asciilifeform's errata on his UDP lib: adds closing socket calls, corrects and adds to comments.
342 543082 udp_fix_nullchars diana_coman Fix for issue in unix_udp.c that returns null characters at end of IPs shorter than 16 characters in length.
343 543083 mt_prng diana_coman Ada implementation of Mersenne Twister pseudorandom number generator + automated tests for it.
-(0 . 0)(1 . 1)
348 obj
-(0 . 0)(1 . 238)
353   --S.MG, 2018
354 
355 with Ada.Text_IO; use Ada.Text_IO;
356 with Interfaces; use Interfaces;
357 with MT;
358 
359 procedure Tests_MT is
360   Seeds : MT.Init_Array_Type;
361   X     : MT.U32;
362   No    : constant Integer := 1000;
363   Result: Array(0..No-1) of MT.U32 := (
364     1067595299,  955945823,  477289528, 4107218783, 4228976476, 
365     3344332714, 3355579695,  227628506,  810200273, 2591290167, 
366     2560260675, 3242736208,  646746669, 1479517882, 4245472273, 
367     1143372638, 3863670494, 3221021970, 1773610557, 1138697238, 
368     1421897700, 1269916527, 2859934041, 1764463362, 3874892047, 
369     3965319921,   72549643, 2383988930, 2600218693, 3237492380, 
370     2792901476,  725331109,  605841842,  271258942,  715137098, 
371     3297999536, 1322965544, 4229579109, 1395091102, 3735697720, 
372     2101727825, 3730287744, 2950434330, 1661921839, 2895579582, 
373     2370511479, 1004092106, 2247096681, 2111242379, 3237345263, 
374     4082424759,  219785033, 2454039889, 3709582971,  835606218, 
375     2411949883, 2735205030,  756421180, 2175209704, 1873865952, 
376     2762534237, 4161807854, 3351099340,  181129879, 3269891896, 
377      776029799, 2218161979, 3001745796, 1866825872, 2133627728, 
378       34862734, 1191934573, 3102311354, 2916517763, 1012402762, 
379     2184831317, 4257399449, 2899497138, 3818095062, 3030756734, 
380     1282161629,  420003642, 2326421477, 2741455717, 1278020671, 
381     3744179621,  271777016, 2626330018, 2560563991, 3055977700, 
382     4233527566, 1228397661, 3595579322, 1077915006, 2395931898, 
383     1851927286, 3013683506, 1999971931, 3006888962, 1049781534, 
384     1488758959, 3491776230,  104418065, 2448267297, 3075614115, 
385     3872332600,  891912190, 3936547759, 2269180963, 2633455084, 
386     1047636807, 2604612377, 2709305729, 1952216715,  207593580, 
387     2849898034,  670771757, 2210471108,  467711165,  263046873, 
388     3569667915, 1042291111, 3863517079, 1464270005, 2758321352, 
389     3790799816, 2301278724, 3106281430,    7974801, 2792461636, 
390      555991332,  621766759, 1322453093,  853629228,  686962251, 
391     1455120532,  957753161, 1802033300, 1021534190, 3486047311, 
392     1902128914, 3701138056, 4176424663, 1795608698,  560858864, 
393     3737752754, 3141170998, 1553553385, 3367807274,  711546358, 
394     2475125503,  262969859,  251416325, 2980076994, 1806565895, 
395      969527843, 3529327173, 2736343040, 2987196734, 1649016367, 
396     2206175811, 3048174801, 3662503553, 3138851612, 2660143804, 
397     1663017612, 1816683231,  411916003, 3887461314, 2347044079, 
398     1015311755, 1203592432, 2170947766, 2569420716,  813872093, 
399     1105387678, 1431142475,  220570551, 4243632715, 4179591855, 
400     2607469131, 3090613241,  282341803, 1734241730, 1391822177, 
401     1001254810,  827927915, 1886687171, 3935097347, 2631788714, 
402     3905163266,  110554195, 2447955646, 3717202975, 3304793075, 
403     3739614479, 3059127468,  953919171, 2590123714, 1132511021, 
404     3795593679, 2788030429,  982155079, 3472349556,  859942552, 
405     2681007391, 2299624053,  647443547,  233600422,  608168955, 
406     3689327453, 1849778220, 1608438222, 3968158357, 2692977776, 
407     2851872572,  246750393, 3582818628, 3329652309, 4036366910, 
408     1012970930,  950780808, 3959768744, 2538550045,  191422718, 
409     2658142375, 3276369011, 2927737484, 1234200027, 1920815603, 
410     3536074689, 1535612501, 2184142071, 3276955054,  428488088, 
411     2378411984, 4059769550, 3913744741, 2732139246,   64369859, 
412     3755670074,  842839565, 2819894466, 2414718973, 1010060670, 
413     1839715346, 2410311136,  152774329, 3485009480, 4102101512, 
414     2852724304,  879944024, 1785007662, 2748284463, 1354768064, 
415     3267784736, 2269127717, 3001240761, 3179796763,  895723219, 
416      865924942, 4291570937,   89355264, 1471026971, 4114180745, 
417     3201939751, 2867476999, 2460866060, 3603874571, 2238880432, 
418     3308416168, 2072246611, 2755653839, 3773737248, 1709066580, 
419     4282731467, 2746170170, 2832568330,  433439009, 3175778732, 
420       26248366, 2551382801,  183214346, 3893339516, 1928168445, 
421     1337157619, 3429096554, 3275170900, 1782047316, 4264403756, 
422     1876594403, 4289659572, 3223834894, 1728705513, 4068244734, 
423     2867840287, 1147798696,  302879820, 1730407747, 1923824407, 
424     1180597908, 1569786639,  198796327,  560793173, 2107345620, 
425     2705990316, 3448772106, 3678374155,  758635715,  884524671, 
426      486356516, 1774865603, 3881226226, 2635213607, 1181121587, 
427     1508809820, 3178988241, 1594193633, 1235154121,  326117244, 
428     2304031425,  937054774, 2687415945, 3192389340, 2003740439, 
429     1823766188, 2759543402,   10067710, 1533252662, 4132494984, 
430       82378136,  420615890, 3467563163,  541562091, 3535949864, 
431     2277319197, 3330822853, 3215654174, 4113831979, 4204996991, 
432     2162248333, 3255093522, 2219088909, 2978279037,  255818579, 
433     2859348628, 3097280311, 2569721123, 1861951120, 2907080079, 
434     2719467166,  998319094, 2521935127, 2404125338,  259456032, 
435     2086860995, 1839848496, 1893547357, 2527997525, 1489393124, 
436     2860855349,   76448234, 2264934035,  744914583, 2586791259, 
437     1385380501,   66529922, 1819103258, 1899300332, 2098173828, 
438     1793831094,  276463159,  360132945, 4178212058,  595015228, 
439      177071838, 2800080290, 1573557746, 1548998935,  378454223, 
440     1460534296, 1116274283, 3112385063, 3709761796,  827999348, 
441     3580042847, 1913901014,  614021289, 4278528023, 1905177404, 
442       45407939, 3298183234, 1184848810, 3644926330, 3923635459, 
443     1627046213, 3677876759,  969772772, 1160524753, 1522441192, 
444      452369933, 1527502551,  832490847, 1003299676, 1071381111, 
445     2891255476,  973747308, 4086897108, 1847554542, 3895651598, 
446     2227820339, 1621250941, 2881344691, 3583565821, 3510404498, 
447      849362119,  862871471,  797858058, 2867774932, 2821282612, 
448     3272403146, 3997979905,  209178708, 1805135652,    6783381, 
449     2823361423,  792580494, 4263749770,  776439581, 3798193823, 
450     2853444094, 2729507474, 1071873341, 1329010206, 1289336450, 
451     3327680758, 2011491779,   80157208,  922428856, 1158943220, 
452     1667230961, 2461022820, 2608845159,  387516115, 3345351910, 
453     1495629111, 4098154157, 3156649613, 3525698599, 4134908037, 
454      446713264, 2137537399, 3617403512,  813966752, 1157943946, 
455     3734692965, 1680301658, 3180398473, 3509854711, 2228114612, 
456     1008102291,  486805123,  863791847, 3189125290, 1050308116, 
457     3777341526, 4291726501,  844061465, 1347461791, 2826481581, 
458      745465012, 2055805750, 4260209475, 2386693097, 2980646741, 
459      447229436, 2077782664, 1232942813, 4023002732, 1399011509, 
460     3140569849, 2579909222, 3794857471,  900758066, 2887199683, 
461     1720257997, 3367494931, 2668921229,  955539029, 3818726432, 
462     1105704962, 3889207255, 2277369307, 2746484505, 1761846513, 
463     2413916784, 2685127085, 4240257943, 1166726899, 4215215715, 
464     3082092067, 3960461946, 1663304043, 2087473241, 4162589986, 
465     2507310778, 1579665506,  767234210,  970676017,  492207530, 
466     1441679602, 1314785090, 3262202570, 3417091742, 1561989210, 
467     3011406780, 1146609202, 3262321040, 1374872171, 1634688712, 
468     1280458888, 2230023982,  419323804, 3262899800,   39783310, 
469     1641619040, 1700368658, 2207946628, 2571300939, 2424079766, 
470      780290914, 2715195096, 3390957695,  163151474, 2309534542, 
471     1860018424,  555755123,  280320104, 1604831083, 2713022383, 
472     1728987441, 3639955502,  623065489, 3828630947, 4275479050, 
473     3516347383, 2343951195, 2430677756,  635534992, 3868699749, 
474      808442435, 3070644069, 4282166003, 2093181383, 2023555632, 
475     1568662086, 3422372620, 4134522350, 3016979543, 3259320234, 
476     2888030729, 3185253876, 4258779643, 1267304371, 1022517473, 
477      815943045,  929020012, 2995251018, 3371283296, 3608029049, 
478     2018485115,  122123397, 2810669150, 1411365618, 1238391329, 
479     1186786476, 3155969091, 2242941310, 1765554882,  279121160, 
480     4279838515, 1641578514, 3796324015,   13351065,  103516986, 
481     1609694427,  551411743, 2493771609, 1316337047, 3932650856, 
482     4189700203,  463397996, 2937735066, 1855616529, 2626847990, 
483       55091862, 3823351211,  753448970, 4045045500, 1274127772, 
484     1124182256,   92039808, 2126345552,  425973257,  386287896, 
485     2589870191, 1987762798, 4084826973, 2172456685, 3366583455, 
486     3602966653, 2378803535, 2901764433, 3716929006, 3710159000, 
487     2653449155, 3469742630, 3096444476, 3932564653, 2595257433, 
488      318974657, 3146202484,  853571438,  144400272, 3768408841, 
489      782634401, 2161109003,  570039522, 1886241521,   14249488, 
490     2230804228, 1604941699, 3928713335, 3921942509, 2155806892, 
491      134366254,  430507376, 1924011722,  276713377,  196481886, 
492     3614810992, 1610021185, 1785757066,  851346168, 3761148643, 
493     2918835642, 3364422385, 3012284466, 3735958851, 2643153892, 
494     3778608231, 1164289832,  205853021, 2876112231, 3503398282, 
495     3078397001, 3472037921, 1748894853, 2740861475,  316056182, 
496     1660426908,  168885906,  956005527, 3984354789,  566521563, 
497     1001109523, 1216710575, 2952284757, 3834433081, 3842608301, 
498     2467352408, 3974441264, 3256601745, 1409353924, 1329904859, 
499     2307560293, 3125217879, 3622920184, 3832785684, 3882365951, 
500     2308537115, 2659155028, 1450441945, 3532257603, 3186324194, 
501     1225603425, 1124246549,  175808705, 3009142319, 2796710159, 
502     3651990107,  160762750, 1902254979, 1698648476, 1134980669, 
503      497144426, 3302689335, 4057485630, 3603530763, 4087252587, 
504      427812652,  286876201,  823134128, 1627554964, 3745564327, 
505     2589226092, 4202024494,   62878473, 3275585894, 3987124064, 
506     2791777159, 1916869511, 2585861905, 1375038919, 1403421920, 
507       60249114, 3811870450, 3021498009, 2612993202,  528933105, 
508     2757361321, 3341402964, 2621861700,  273128190, 4015252178, 
509     3094781002, 1621621288, 2337611177, 1796718448, 1258965619, 
510     4241913140, 2138560392, 3022190223, 4174180924,  450094611, 
511     3274724580,  617150026, 2704660665, 1469700689, 1341616587, 
512      356715071, 1188789960, 2278869135, 1766569160, 2795896635, 
513       57824704, 2893496380, 1235723989, 1630694347, 3927960522, 
514      428891364, 1814070806, 2287999787, 4125941184, 3968103889, 
515     3548724050, 1025597707, 1404281500, 2002212197,   92429143, 
516     2313943944, 2403086080, 3006180634, 3561981764, 1671860914, 
517     1768520622, 1803542985,  844848113, 3006139921, 1410888995, 
518     1157749833, 2125704913, 1789979528, 1799263423,  741157179, 
519     2405862309,  767040434, 2655241390, 3663420179, 2172009096, 
520     2511931187, 1680542666,  231857466, 1154981000,  157168255, 
521     1454112128, 3505872099, 1929775046, 2309422350, 2143329496, 
522     2960716902,  407610648, 2938108129, 2581749599,  538837155, 
523     2342628867,  430543915,  740188568, 1937713272, 3315215132, 
524     2085587024, 4030765687,  766054429, 3517641839,  689721775, 
525     1294158986, 1753287754, 4202601348, 1974852792,   33459103, 
526     3568087535, 3144677435, 1686130825, 4134943013, 3005738435, 
527     3599293386,  426570142,  754104406, 3660892564, 1964545167, 
528      829466833,  821587464, 1746693036, 1006492428, 1595312919, 
529     1256599985, 1024482560, 1897312280, 2902903201,  691790057, 
530     1037515867, 3176831208, 1968401055, 2173506824, 1089055278, 
531     1748401123, 2941380082,  968412354, 1818753861, 2973200866, 
532     3875951774, 1119354008, 3988604139, 1647155589, 2232450826, 
533     3486058011, 3655784043, 3759258462,  847163678, 1082052057, 
534      989516446, 2871541755, 3196311070, 3929963078,  658187585, 
535     3664944641, 2175149170, 2203709147, 2756014689, 2456473919, 
536     3890267390, 1293787864, 2830347984, 3059280931, 4158802520, 
537     1561677400, 2586570938,  783570352, 1355506163,   31495586, 
538     3789437343, 3340549429, 2092501630,  896419368,  671715824, 
539     3530450081, 3603554138, 1055991716, 3442308219, 1499434728, 
540     3130288473, 3639507000,   17769680, 2259741420,  487032199, 
541     4227143402, 3693771256, 1880482820, 3924810796,  381462353, 
542     4017855991, 2452034943, 2736680833, 2209866385, 2128986379, 
543      437874044,  595759426,  641721026, 1636065708, 3899136933, 
544      629879088, 3591174506,  351984326, 2638783544, 2348444281, 
545     2341604660, 2123933692,  143443325, 1525942256,  364660499, 
546      599149312,  939093251, 1523003209,  106601097,  376589484, 
547     1346282236, 1297387043,  764598052, 3741218111,  933457002, 
548     1886424424, 3219631016,  525405256, 3014235619,  323149677, 
549     2038881721, 4100129043, 2851715101, 2984028078, 1888574695, 
550     2014194741, 3515193880, 4180573530, 3461824363, 2641995497, 
551     3179230245, 2902294983, 2217320456, 4040852155, 1784656905, 
552     3311906931,   87498458, 2752971818, 2635474297, 2831215366, 
553     3682231106, 2920043893, 3772929704, 2816374944,  309949752, 
554     2383758854,  154870719,  385111597, 1191604312, 1840700563, 
555      872191186, 2925548701, 1310412747, 2102066999, 1504727249, 
556     3574298750, 1191230036, 3330575266, 3180292097, 3539347721, 
557      681369118, 3305125752, 3648233597,  950049240, 4173257693, 
558     1760124957,  512151405,  681175196,  580563018, 1169662867, 
559     4015033554, 2687781101,  699691603, 2673494188, 1137221356, 
560      123599888,  472658308, 1053598179, 1012713758, 3481064843, 
561     3759461013, 3981457956, 3830587662, 1877191791, 3650996736, 
562      988064871, 3515461600, 4089077232, 2225147448, 1249609188, 
563     2643151863, 3896204135, 2416995901, 1397735321, 3460025646);
564 
565   Errors: Natural := 0;
566 begin
567   Seeds(0) := MT.U32(16#123#);  
568   Seeds(1) := MT.U32(16#234#);  
569   Seeds(2) := MT.U32(16#345#);  
570   Seeds(3) := MT.U32(16#456#);  
571   MT.Init_Genrand(Seeds);
572 
573   Put_Line("Generating numbers...");
574   for I in 0 .. No-1 loop
575     X := MT.Gen_U32;
576     Put(".");
577     if X /= Result(I) then
578       Put_Line("");
579       Put_Line("ERROR at position " & Integer'Image(I) & 
580                "; expected " & MT.U32'Image(Result(I)) & 
581                " but result is " & MT.U32'Image(X));
582     end if;
583   end loop;
584 
585   if Errors /= 0 then
586     Put_Line("FAIL: " & Natural'Image(Errors) & " errors found.");
587   else
588     Put_Line("PASS: no errors found.");
589   end if;
590 end Tests_MT;
-(0 . 0)(1 . 44)
595  -- Tests for Ada implementation of the Mersenne Twister PRNG
596  -- S.MG, 2018
597  -- 
598  -- Tests results against published PRNG numbers at
599  -- www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html
600 
601  with "../libmt/mt.gpr";
602 
603 project Tests_MT is
604 
605   for Main use ("tests_mt.adb");
606   
607   type Mode_Type is ("debug", "release");
608   Mode : Mode_Type := external ("mode", "release");
609   
610   for Languages    use ("Ada");
611   for Source_Dirs  use (".");
612   for Object_Dir use "obj";
613   for Exec_Dir use ".";
614   
615   package Compiler is
616      case Mode is
617         when "debug" =>
618            for Switches ("Ada")
619              use ("-g");
620         when "release" =>
621            for Switches ("Ada")
622              use ("-O2", "-fdump-scos", "-gnata", "-fstack-check",
623                   "-gnatyd", "-gnatym",
624                   "-fdata-sections", "-ffunction-sections", "-gnatwr", "-gnatw.d");
625      end case;
626   end Compiler;
627     
628   package Binder is
629      case Mode is
630         when "debug" =>
631            for Switches ("Ada")
632              use ();
633         when "release" =>
634            for Switches ("Ada")
635              use ("-static");
636      end case;
637   end Binder;
638 end Tests_MT;