File: 15_extract_int.ml

package info (click to toggle)
ocaml-bitstring 2.0.2-2
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 1,276 kB
  • ctags: 492
  • sloc: ml: 3,360; sh: 377; makefile: 324; ansic: 113
file content (112 lines) | stat: -rw-r--r-- 2,713 bytes parent folder | download | duplicates (3)
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
(* Test functions which construct and extract fixed-length ints
 * of various sizes.
 * $Id$
 *)

open Printf

open Bitstring

let () =
  for i = 0 to 129 do
    let zeroes = zeroes_bitstring i in
    let bits = (
      BITSTRING {
	zeroes : i : bitstring;
	true : 1;
	2 : 2 : littleendian;
	2 : 2 : bigendian;
	2 : 2 : nativeendian;
	3 : 3 : littleendian;
	3 : 3 : bigendian;
	3 : 3 : nativeendian;
	0x5a : 8 : littleendian;
	0x5a : 8 : bigendian;
	0x5a : 8 : nativeendian;
	0xa5a5 : 16 : littleendian;
	0xa5a5 : 16 : bigendian;
	0xa5a5 : 16 : nativeendian;
	0xeeddcc : 24 : littleendian;
	0xeeddcc : 24 : bigendian;
	0xeeddcc : 24 : nativeendian;
	0x48888888 : 31 : littleendian;
	0x48888888 : 31 : bigendian;
	0x48888888 : 31 : nativeendian;
	0xaabbccdd_l : 32 : littleendian;
	0xaabbccdd_l : 32 : bigendian;
	0xaabbccdd_l : 32 : nativeendian;
	0xaabbccddeeff_L : 48 : littleendian;
	0xaabbccddeeff_L : 48 : bigendian;
	0xaabbccddeeff_L : 48 : nativeendian;
	0x0011aabbccddeeff_L : 64 : littleendian;
	0x0011aabbccddeeff_L : 64 : bigendian;
	0x0011aabbccddeeff_L : 64 : nativeendian
      }
    ) in
    bitmatch bits with
    | { _ : i : bitstring;
	a : 1;
	b0 : 2 : littleendian;
	b1 : 2 : bigendian;
	b2 : 2 : nativeendian;
	c0 : 3 : littleendian;
	c1 : 3 : bigendian;
	c2 : 3 : nativeendian;
	d0 : 8 : littleendian;
	d1 : 8 : bigendian;
	d2 : 8 : nativeendian;
	e0 : 16 : littleendian;
	e1 : 16 : bigendian;
	e2 : 16 : nativeendian;
	f0 : 24 : littleendian;
	f1 : 24 : bigendian;
	f2 : 24 : nativeendian;
	g0 : 31 : littleendian;
	g1 : 31 : bigendian;
	g2 : 31 : nativeendian;
	h0 : 32 : littleendian;
	h1 : 32 : bigendian;
	h2 : 32 : nativeendian;
	j0 : 48 : littleendian;
	j1 : 48 : bigendian;
	j2 : 48 : nativeendian;
	k0 : 64 : littleendian;
	k1 : 64 : bigendian;
	k2 : 64 : nativeendian
      } ->
	if a <> true
	  || b0 <> 2
	  || b1 <> 2
	  || b2 <> 2
	  || c0 <> 3
	  || c1 <> 3
	  || c2 <> 3
	  || d0 <> 0x5a
	  || d1 <> 0x5a
	  || d2 <> 0x5a
	  || e0 <> 0xa5a5
	  || e1 <> 0xa5a5
	  || e2 <> 0xa5a5
	  || f0 <> 0xeeddcc
	  || f1 <> 0xeeddcc
	  || f2 <> 0xeeddcc
	  || g0 <> 0x48888888
	  || g1 <> 0x48888888
	  || g2 <> 0x48888888
	  || h0 <> 0xaabbccdd_l
	  || h1 <> 0xaabbccdd_l
	  || h2 <> 0xaabbccdd_l
	  || j0 <> 0xaabbccddeeff_L
	  || j1 <> 0xaabbccddeeff_L
	  || j2 <> 0xaabbccddeeff_L
	  || k0 <> 0x0011aabbccddeeff_L
	  || k1 <> 0x0011aabbccddeeff_L
	  || k2 <> 0x0011aabbccddeeff_L
	then (
	    eprintf "15_extract_int: match failed %b %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %ld %ld %ld %Ld %Ld %Ld %Ld %Ld %Ld\n"
	      a b0 b1 b2 c0 c1 c2 d0 d1 d2 e0 e1 e2 f0 f1 f2 g0 g1 g2 h0 h1 h2 j0 j1 j2 k0 k1 k2;
	    exit 1
	  )
    | { _ } ->
	failwith "15_extract_int"
  done