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
|
# Tests for Mu's stream primitives.
fn test-stream {
# - write an int to a stream, then read it back
# step 1: initialize
var s: (stream int 4)
var s2/ecx: (addr stream int 4) <- address s
var tmp/eax: boolean <- stream-empty? s2
check-true tmp, "F - test-stream/empty?/0"
tmp <- stream-full? s2
check-false tmp, "F - test-stream/full?/0"
# step 2: write to stream
var x: int
copy-to x, 0x34
var x2/edx: (addr int) <- address x
write-to-stream s2, x2
tmp <- stream-empty? s2
check-false tmp, "F - test-stream/empty?/1"
tmp <- stream-full? s2
check-false tmp, "F - test-stream/full?/1"
# step 3: modify the value written (should make no difference)
copy-to x, 0
# step 4: read back
var y: int
var y2/ebx: (addr int) <- address y
read-from-stream s2, y2
tmp <- stream-empty? s2
check-true tmp, "F - test-stream/empty?/2"
tmp <- stream-full? s2
check-false tmp, "F - test-stream/full?/2"
# we read back what was written
check-ints-equal y, 0x34, "F - test-stream"
}
fn test-stream-full {
# write an int to a stream of capacity 1
var s: (stream int 1)
var s2/ecx: (addr stream int 1) <- address s
var tmp/eax: boolean <- stream-full? s2
check-false tmp, "F - test-stream-full?/pre"
var x: int
var x2/edx: (addr int) <- address x
write-to-stream s2, x2
tmp <- stream-full? s2
check-true tmp, "F - test-stream-full?"
}
|