cfad47cfa3/t3compiler/tads3/test/data/rand.t

4b825dc642cb6eb9a060e54bf8d69288fbee4904cfad47cfa334b206c65f22086bcc5d63e6f70944
1
/*
2
 *   random number generator test
3
 */
4
5
#include "tads.h"
6
#include "t3.h"
7
8
class Throwable: object
9
    // basic exception class
10
    display = "basic exception object";
11
;
12
13
class RuntimeError: Throwable
14
    construct(errno, ...) { errno_ = errno; }
15
    errno_ = 0
16
    display = "RuntimeError: error = <<errno_>>"
17
;
18
19
_say_embed(str) { tadsSay(str); }
20
21
_main(args)
22
{
23
    t3SetSay(_say_embed);
24
    try
25
    {
26
        main();
27
    }
28
    catch (Throwable th)
29
    {
30
        "\n\n*** Unhandled exception: << th.display >>\n";
31
    }
32
}
33
34
main()
35
{
36
    local i;
37
    local buckets = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
38
39
    randomize();
40
41
    "Generating random numbers from 1 to 10...\n";
42
    for (i = 0 ; i < 10000 ; ++i)
43
    {
44
        local val;
45
46
        val = rand(10) + 1;
47
        ++buckets[val];
48
    }
49
50
    i = i * 3;
51
    "Number of values at each integer:\n";
52
    for (i = 1 ; i <= 10 ; ++i)
53
        " <<i>>: <<buckets[i]>>\n";
54
    "\n";
55
56
    local num_names = ['one', 'two', 'three', 'four', 'five',
57
                       'six', 'seven', 'eight', 'nine', 'ten'];
58
    "Picking random list elements\n";
59
    for (i = 0 ; i < 100 ; ++i)
60
        "<<rand(num_names)>>, ";
61
    "\n\n";
62
63
    "Picking random arguments\n";
64
    for (i = 0 ; i < 100 ; ++i)
65
        "<<rand('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
66
                'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
67
                'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z')>>, ";
68
    "\n\n";
69
70
    "Pick some 0/1 values...\n";
71
    buckets = [0, 0];
72
    for (i = 0 ; i < 1000 ; ++i)
73
    {
74
        local val;
75
76
        val = rand(2);
77
        "<<val>>";
78
        buckets[val+1]++;
79
    }
80
    "\n0's: <<buckets[1]>>; 1's: <<buckets[2]>>\n\n";
81
82
#if 0
83
    "Pick some 0/1 values from middle bits...\n";
84
    buckets = [0, 0];
85
    for (i = 0 ; i < 1000 ; ++i)
86
    {
87
        local val;
88
89
        val = (rand(128) >> 6) & 1;
90
        "<<val>>";
91
        buckets[val+1]++;
92
    }
93
    "\n0's: <<buckets[1]>>; 1's: <<buckets[2]>>\n\n";
94
95
    "Pick some using sequence shortening\n";
96
    buckets = [0, 0];
97
    for (i = 0, local lastval = 0, local seqlen = 0 ; i < 1000 ; ++i)
98
    {
99
        local val;
100
101
        val = rand(2);
102
        if (val == lastval)
103
        {
104
            ++seqlen;
105
            if (rand(100) < seqlen * 15)
106
            {
107
                val = 1 - lastval;
108
                seqlen = 0;
109
            }
110
        }
111
        else
112
        {
113
            seqlen = 0;
114
        }
115
        lastval = val;
116
        "<<val>>";
117
        buckets[val+1]++;
118
    }
119
    "\n0's: <<buckets[1]>>; 1's: <<buckets[2]>>\n\n";
120
#endif
121
}
122