OUnitTest(swfOut, swfOut swfBaseOut bitsOut)
OUnitTest(tagOut, tagOut)
OUnitTest(swfBaseOut, swfBaseOut bitsOut)
-OUnitTest(swfBaseIn, swfBaseIn)
+OUnitTest(swfBaseIn, swfBaseIn bitsIn)
OUnitTest(bitsOut, bitsOut)
OUnitTest(bitsIn, bitsIn)
raise (Stream.Error "invalid format")
let eui32 = read_u30
+
+let bits f s =
+ f @@ BitsIn.of_stream s
+
+let ub n bs =
+ BitsIn.bits n bs
+
+let sb n bs =
+ s_extend n (ub n bs)
+
+let fb _ _ = undefined
val si32 : int Stream.t -> int32
val eui32 : int Stream.t -> int32
+
+val bits : (BitsIn.bit Stream.t -> 'a) -> int Stream.t -> 'a
+val ub : int -> BitsIn.bit Stream.t -> int
+val sb : int -> BitsIn.bit Stream.t -> int
+val fb : int -> BitsIn.bit Stream.t -> float
ok 0x003F_FFFFl eui32 [0xFF;0xFF;0xFF;0x01];
ok 0x0FFF_FFFFl eui32 [0xFF;0xFF;0xFF;0x7F];
ok 0x1FFF_FFFFl eui32 [0xFF;0xFF;0xFF;0xFF;0x01]
- end
+ end;
+ "bits" >:: begin fun () ->
+ ok (1,1,1) (bits begin fun bs ->
+ let x = ub 3 bs in
+ let y = ub 1 bs in
+ let z = ub 1 bs in
+ (x,y,z)
+ end)
+ [0b0011_1000]
+ end;
+ "ub" >:: begin fun () ->
+ ok 1 (bits @@ ub 3) [0b0010_0000]
+ end;
+ "sb" >:: begin fun () ->
+ ok 1 (bits @@ sb 3) [0b0010_0000];
+ ok ~-1 (bits @@ sb 3) [0b1110_0000]
+ end;
+ "padding" >:: begin fun () ->
+ let s =
+ Stream.of_list [0b1000_0000; 0xEF] in
+ assert_equal 1 (bits (ub 1) s);
+ assert_equal 0xEF @@ Stream.next s
+ end;
] end +> run_test_tt_main