1 /*  Program to test the random number streams file:    RngStream.c   */
2 
3 #include <stdio.h>
4 #include "RngStream.h"
5 
6 #define NS 1000000
7 
main(void)8 int main (void)
9 {
10    double x;
11    int i, k;
12    RngStream g1, g2, g3;
13    RngStream gar[NS];
14 
15    /* Create 3 parallel streams */
16    g1 = RngStream_CreateStream ("Poisson");
17    g2 = RngStream_CreateStream ("Cantor");
18    g3 = RngStream_CreateStream ("Laplace");
19 
20    /* Generate 35 random integers in [5, 10] with stream g1 */
21    for (i = 0;  i < 35; i++)
22       k = RngStream_RandInt (g1, 5, 10);
23 
24    /* Generate 100 random reals in (0, 1) with stream g3 */
25    for (i = 0;  i < 100;  i++)
26       x = RngStream_RandU01 (g3);
27 
28    /* Restart stream g3 in its initial state and generate the same 100
29       random reals as above */
30    RngStream_ResetStartStream (g3);
31    for (i = 0; i < 100; i++)
32       x = RngStream_RandU01 (g3);
33 
34    /* Send stream g3 to its next substream and generate 5
35       random reals in (0, 1) with double precision */
36    RngStream_ResetNextSubstream (g3);
37    RngStream_IncreasedPrecis (g3, 1);
38    for (i = 0; i < 5; i++)
39       x = RngStream_RandU01 (g3);
40 
41    /* Generate 100000 antithetic random reals in (0, 1) with stream g2 */
42    RngStream_SetAntithetic (g2, 1);
43    for (i = 0; i < 100000; i++)
44       x = RngStream_RandU01 (g2);
45 
46    /* Delete the 3 streams */
47    RngStream_DeleteStream (&g3);
48    RngStream_DeleteStream (&g2);
49    RngStream_DeleteStream (&g1);
50 
51    /* Create NS = 1000000 parallel streams */
52    for (i = 0; i < NS; i++)
53       gar[i] = RngStream_CreateStream ("");
54 
55    /* Generate 1000 random real in (0, 1) with stream 55555 in gar */
56    for  (i = 0; i < 1000; i++)
57       x = RngStream_RandU01 (gar[55554]);
58 
59    for  (i = 0; i < NS; i++)
60       RngStream_DeleteStream (&gar[i]);
61 
62    return 0;
63 }
64