blob: 53743d8248e36f0ebbb1737082252f26ef83c416 (
plain)
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
56
57
|
use std
use bio
generic try = {opt : std.option(@a::(integral,numeric))-> @a::(integral,numeric)
match opt
| `std.Some val: -> val
| `std.None: std.fatal(1, "read failed")
;;
}
const main = {
var b : byte
var w : uint16
var l : uint32
var q : uint64
var f
/* use the expected write data as read data */
match bio.open("data/bio-endianwr-expected", bio.Rd)
| `std.Some bio: f = bio
| `std.None: std.fatal(1, "Unable to open data file")
;;
/* byte */
/*
/* FIXME: compiler bug. multiplication on byte
values is currently broken. */
b = 0xaa
std.assert(try(bio.getle8(f)) == b, "le byte broken\n")
std.assert(try(bio.getbe8(f)) == b, "be byte broken\n")
*/
/* word */
w = 0xaabb
std.assert(try(bio.getle16(f)) == w, "le word broken\n")
std.assert(try(bio.getbe16(f)) == w, "be word broken\n")
/* long */
l = 0xaabbccdd
std.assert(try(bio.getle32(f)) == l, "le long broken\n")
std.assert(try(bio.getbe32(f)) == l, "be long broken\n")
/* quad */
q = 0x11223344aabbccdd castto(uint64)
std.assert(try(bio.getle64(f)) == q, "le quad broken\n")
std.assert(try(bio.getbe64(f)) == q, "be quad broken\n")
/* end of file */
match bio.getle64(f)
| `std.None:
| `std.Some v: std.die("read past end of file\n")
;;
bio.close(f);
std.put("success: all reads matched\n")
}
|