1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
def random generator:address:stream:number -> result:number, fail?:boolean, generator:address:stream:number [
local-scope
load-ingredients
{
break-if generator
# generator is 0? use real random-number generator
result <- real-random
reply result, 0/false
}
result, fail?, generator <- read generator
]
# helper for tests
def assume-random-numbers -> result:address:stream:number [
local-scope
load-ingredients
# compute result-len, space to allocate in result
result-len:number <- copy 0
{
_, arg-received?:boolean <- next-ingredient
break-unless arg-received?
result-len <- add result-len, 1
loop
}
rewind-ingredients
result-data:address:array:number <- new number:type, result-len
idx:number <- copy 0
{
curr:number, arg-received?:boolean <- next-ingredient
break-unless arg-received?
*result-data <- put-index *result-data, idx, curr
idx <- add idx, 1
loop
}
result <- new-stream result-data
]
scenario random-numbers-in-scenario [
local-scope
source:address:stream:number <- assume-random-numbers 34, 35, 37
1:number/raw, 2:boolean/raw <- random source
3:number/raw, 4:boolean/raw <- random source
5:number/raw, 6:boolean/raw <- random source
7:number/raw, 8:boolean/raw <- random source
memory-should-contain [
1 <- 34
2 <- 0 # everything went well
3 <- 35
4 <- 0 # everything went well
5 <- 37
6 <- 0 # everything went well
7 <- 0 # empty result
8 <- 1 # end of stream
]
]
|