0c0ec8d839210b96ce56b237c1c17bed5d25f97f
[ocaml-bitstring.git] / tests / test_80_hexdump.ml
1 (* Test hexdump.
2  * $Id$
3  *)
4
5 open Printf
6
7 open Bitstring
8
9 let (//) = Filename.concat
10
11 let testdata = "tests" // "80_testdata" ;;
12 Sys.chdir testdata ;;
13
14 let diff = Bitstring_config.diff
15
16 let () =
17   let files = Sys.readdir "." in
18   let files = Array.to_list files in
19   let files = List.filter (
20     fun filename ->
21       String.length filename > 3 &&
22         filename.[0] = 'r' && filename.[1] = 'n' && filename.[2] = 'd'
23   ) files in
24   let files = List.map (
25     fun filename ->
26       let n = String.sub filename 3 (String.length filename - 3) in
27       let n = int_of_string n in
28       let bits = bitstring_of_file filename in
29       (* 'bitstring_of_file' loads whole bytes.  Truncate it to
30        * the real bit-length.
31        *)
32       let bits = takebits n bits in
33
34       filename, n, bits
35   ) files in
36
37   (* Hexdump the bits, then compare using external 'diff' program. *)
38   List.iter (
39     fun (filename, n, bits) ->
40       let output_filename = sprintf "hex%d.actual" n in
41       let chan = open_out output_filename in
42       hexdump_bitstring chan bits;
43       close_out chan
44   ) files;
45
46   List.iter (
47     fun (filename, n, bits) ->
48       let actual_filename = sprintf "hex%d.actual" n in
49       let expected_filename = sprintf "hex%d.expected" n in
50       let cmd =
51         sprintf "%s -u %s %s"
52           (Filename.quote diff)
53           (Filename.quote expected_filename)
54           (Filename.quote actual_filename) in
55       if Sys.command cmd <> 0 then (
56         exit 1
57       )
58   ) files