17 (* Create a random string of bits. *)
18 let expected = List.map (fun _ -> Random.bool ()) (range 0 (len-1)) in
20 let bits = Bitmatch.Buffer.create () in
21 List.iter (Bitmatch.Buffer.add_bit bits) expected;
22 let bits = Bitmatch.Buffer.contents bits in
24 (* Now read the bitstring in groups of 1, 2, 3 .. etc. bits.
25 * In each case check the result against what we generated ('expected').
30 | { b0 : 1; rest : -1 : bitstring } -> b0 :: loop rest
34 if actual <> expected then
35 failwith (sprintf "match bits: failed on 1 bit test, len = %d" len);
40 | { b0 : 1; b1 : 1; rest : -1 : bitstring } -> b0 :: b1 :: loop rest
41 | { b0 : 1; rest : -1 : bitstring } -> b0 :: loop rest
45 if actual <> expected then
46 failwith (sprintf "match bits: failed on 1 bit test, len = %d" len);
51 | { b0 : 1; b1 : 1; b2 : 1;
52 rest : -1 : bitstring } -> b0 :: b1 :: b2 :: loop rest
53 | { b0 : 1; rest : -1 : bitstring } -> b0 :: loop rest
57 if actual <> expected then
58 failwith (sprintf "match bits: failed on 1 bit test, len = %d" len);
63 | { b0 : 1; b1 : 1; b2 : 1; b3 : 1;
64 rest : -1 : bitstring } -> b0 :: b1 :: b2 :: b3 :: loop rest
65 | { b0 : 1; rest : -1 : bitstring } -> b0 :: loop rest
69 if actual <> expected then
70 failwith (sprintf "match bits: failed on 1 bit test, len = %d" len);
75 | { b0 : 1; b1 : 1; b2 : 1; b3 : 1;
76 b4 : 1; b5 : 1; b6 : 1; b7 : 1;
78 rest : -1 : bitstring } ->
79 b0 :: b1 :: b2 :: b3 :: b4 :: b5 :: b6 :: b7 :: b8 :: loop rest
80 | { b0 : 1; rest : -1 : bitstring } -> b0 :: loop rest
84 if actual <> expected then
85 failwith (sprintf "match bits: failed on 1 bit test, len = %d" len);