VCDIFF (RFC 3284) binary delta encoding in pure OCaml
2.6 kB
77 lines
1open Vcdiff.Value
2
3let test_inst_len () =
4 Alcotest.(check int) "add" 5 (inst_len (Add "hello"));
5 Alcotest.(check int) "empty add" 0 (inst_len (Add ""));
6 Alcotest.(check int) "run" 1000 (inst_len (Run { len = 1000; byte = 'x' }));
7 Alcotest.(check int) "copy" 7 (inst_len (Copy { addr = 3; len = 7 }))
8
9let test_target_len () =
10 Alcotest.(check int)
11 "empty window" 0
12 (Window.target_len { Window.source = None; checksum = None; insts = [] });
13 Alcotest.(check int)
14 "mixed" 10
15 (Window.target_len
16 {
17 Window.source = None;
18 checksum = None;
19 insts =
20 [ Add "ab"; Run { len = 3; byte = ' ' }; Copy { addr = 0; len = 5 } ];
21 })
22
23let test_equal_instruction () =
24 Alcotest.(check bool) "add equal" true (equal_instruction (Add "x") (Add "x"));
25 Alcotest.(check bool)
26 "add differs" false
27 (equal_instruction (Add "x") (Add "y"));
28 Alcotest.(check bool)
29 "run vs copy" false
30 (equal_instruction
31 (Run { len = 4; byte = 'a' })
32 (Copy { addr = 4; len = 4 }));
33 Alcotest.(check bool)
34 "copy addr differs" false
35 (equal_instruction
36 (Copy { addr = 0; len = 4 })
37 (Copy { addr = 1; len = 4 }))
38
39let test_equal () =
40 let w insts = { Window.source = None; checksum = None; insts } in
41 let v insts = { app_header = None; windows = [ w insts ] } in
42 Alcotest.(check bool) "equal" true (equal (v [ Add "a" ]) (v [ Add "a" ]));
43 Alcotest.(check bool)
44 "insts differ" false
45 (equal (v [ Add "a" ]) (v [ Add "b" ]));
46 Alcotest.(check bool)
47 "app header differs" false
48 (equal
49 { app_header = Some "x"; windows = [] }
50 { app_header = None; windows = [] });
51 Alcotest.(check bool)
52 "checksum differs" false
53 (equal
54 { app_header = None; windows = [ { (w []) with checksum = Some 1l } ] }
55 { app_header = None; windows = [ w [] ] })
56
57(* pp must render the actual content, not a placeholder. *)
58let test_pp_instruction () =
59 Alcotest.(check string)
60 "add" "ADD 5"
61 (Fmt.str "%a" pp_instruction (Add "hello"));
62 Alcotest.(check string)
63 "run" "RUN 3 'x'"
64 (Fmt.str "%a" pp_instruction (Run { len = 3; byte = 'x' }));
65 Alcotest.(check string)
66 "copy" "COPY 7@3"
67 (Fmt.str "%a" pp_instruction (Copy { addr = 3; len = 7 }))
68
69let suite =
70 ( "value",
71 [
72 Alcotest.test_case "inst_len" `Quick test_inst_len;
73 Alcotest.test_case "target_len" `Quick test_target_len;
74 Alcotest.test_case "equal_instruction" `Quick test_equal_instruction;
75 Alcotest.test_case "equal" `Quick test_equal;
76 Alcotest.test_case "pp_instruction" `Quick test_pp_instruction;
77 ] )