OUnitTest(swfOut, swfOut swfBaseOut bitsOut)
OUnitTest(tagOut, tagOut)
OUnitTest(swfBaseOut, swfBaseOut bitsOut)
-OUnitTest(swfBaseIn, swfBaseIn bitsIn)
+OUnitTest(swfBaseIn, swfBaseIn bitsIn swfBaseOut bitsOut)
OUnitTest(bitsOut, bitsOut)
OUnitTest(bitsIn, bitsIn)
let eui32 = read_u30
-let bits f s =
+let bits ~f s =
f @@ BitsIn.of_stream s
let ub n bs =
open Int64 in
parser [< x = of_int32 $ ui32; y = of_int32 $ ui32 >] ->
float_of_bits @@ logor (shift_left y 32) x
+
+let rect s = bits s ~f:begin parser
+ [< n = ub 5; x_min = sb n; x_max = sb n; y_min = sb n; y_max = sb n>] ->
+ (x_min, x_max, y_min, y_max)
+end
val eui32 : int Stream.t -> int32
-val bits : (BitsIn.bit Stream.t -> 'a) -> int Stream.t -> 'a
+val bits : f:(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 float32 : int Stream.t -> float
val float64 : int Stream.t -> float
-
+val rect : int Stream.t -> int * int * int * int
ok 0x1FFF_FFFFl eui32 [0xFF;0xFF;0xFF;0xFF;0x01]
end;
"bits" >:: begin fun () ->
- ok (1,1,1) (bits begin fun bs ->
+ ok (1,1,1) (bits ~f:begin fun bs ->
let x = ub 3 bs in
let y = ub 1 bs in
let z = ub 1 bs in
[0b0011_1000]
end;
"ub" >:: begin fun () ->
- ok 1 (bits @@ ub 3) [0b0010_0000]
+ ok 1 (bits ~f:(ub 3)) [0b0010_0000]
end;
"sb" >:: begin fun () ->
- ok 1 (bits @@ sb 3) [0b0010_0000];
- ok ~-1 (bits @@ sb 3) [0b1110_0000]
+ ok 1 (bits ~f:(sb 3)) [0b0010_0000];
+ ok ~-1 (bits ~f:(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 1 (bits ~f:(ub 1) s);
assert_equal 0xEF @@ Stream.next s
end;
"Fixed" >:: begin fun () ->
ok 0.333333333333333315 float64
[0x55; 0x55; 0x55; 0x55;
0x55; 0x55; 0xd5; 0x3f]
- end
+ end;
+ "rect" >:: begin fun () ->
+ open SwfBaseOut in begin
+ ok (0,0,1,1) rect @@ SwfBaseOut.to_list [`Bits [UB(5,2); SB(2,0); SB(2,0); SB(2,1); SB(2,1)]];
+ ok (127,260,15,514) rect @@ SwfBaseOut.to_list [`Bits [UB(5,11); SB(11,127); SB(11,260); SB(11,15); SB(11,514)]]
+ end
+ end;
] end +> run_test_tt_main