mirror of
https://github.com/ocaml-tracing/ocaml-trace.git
synced 2026-03-07 18:37:56 -05:00
some tests for fuchsia writer
This commit is contained in:
parent
6eced76971
commit
f08850cda8
4 changed files with 148 additions and 0 deletions
4
test/fuchsia/write/dune
Normal file
4
test/fuchsia/write/dune
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
|
||||||
|
(tests
|
||||||
|
(names t1 t2)
|
||||||
|
(libraries trace-fuchsia.write))
|
||||||
65
test/fuchsia/write/t1.ml
Normal file
65
test/fuchsia/write/t1.ml
Normal file
|
|
@ -0,0 +1,65 @@
|
||||||
|
open Trace_fuchsia_write
|
||||||
|
|
||||||
|
module Str_ = struct
|
||||||
|
open String
|
||||||
|
|
||||||
|
let to_hex (s : string) : string =
|
||||||
|
let i_to_hex (i : int) =
|
||||||
|
if i < 10 then
|
||||||
|
Char.chr (i + Char.code '0')
|
||||||
|
else
|
||||||
|
Char.chr (i - 10 + Char.code 'a')
|
||||||
|
in
|
||||||
|
|
||||||
|
let res = Bytes.create (2 * length s) in
|
||||||
|
for i = 0 to length s - 1 do
|
||||||
|
let n = Char.code (get s i) in
|
||||||
|
Bytes.set res (2 * i) (i_to_hex ((n land 0xf0) lsr 4));
|
||||||
|
Bytes.set res ((2 * i) + 1) (i_to_hex (n land 0x0f))
|
||||||
|
done;
|
||||||
|
Bytes.unsafe_to_string res
|
||||||
|
|
||||||
|
let of_hex_exn (s : string) : string =
|
||||||
|
let n_of_c = function
|
||||||
|
| '0' .. '9' as c -> Char.code c - Char.code '0'
|
||||||
|
| 'a' .. 'f' as c -> 10 + Char.code c - Char.code 'a'
|
||||||
|
| 'A' .. 'F' as c -> 10 + Char.code c - Char.code 'A'
|
||||||
|
| _ -> invalid_arg "string: invalid hex"
|
||||||
|
in
|
||||||
|
if String.length s mod 2 <> 0 then
|
||||||
|
invalid_arg "string: hex sequence must be of even length";
|
||||||
|
let res = Bytes.make (String.length s / 2) '\x00' in
|
||||||
|
for i = 0 to (String.length s / 2) - 1 do
|
||||||
|
let n1 = n_of_c (String.get s (2 * i)) in
|
||||||
|
let n2 = n_of_c (String.get s ((2 * i) + 1)) in
|
||||||
|
let n = (n1 lsl 4) lor n2 in
|
||||||
|
Bytes.set res i (Char.chr n)
|
||||||
|
done;
|
||||||
|
Bytes.unsafe_to_string res
|
||||||
|
end
|
||||||
|
|
||||||
|
let () =
|
||||||
|
let l = List.init 100 (fun i -> Util.round_to_word i) in
|
||||||
|
assert (List.for_all (fun x -> x mod 8 = 0) l)
|
||||||
|
|
||||||
|
let () =
|
||||||
|
assert (Str_ref.inline 0 = 0b0000_0000_0000_0000);
|
||||||
|
assert (Str_ref.inline 1 = 0b1000_0000_0000_0001);
|
||||||
|
assert (Str_ref.inline 6 = 0b1000_0000_0000_0110);
|
||||||
|
assert (Str_ref.inline 31999 = 0b1111_1100_1111_1111);
|
||||||
|
()
|
||||||
|
|
||||||
|
let () =
|
||||||
|
let buf = Buf.create 128 in
|
||||||
|
Buf.add_i64 buf 42L;
|
||||||
|
assert (Buf.to_string buf = "\x2a\x00\x00\x00\x00\x00\x00\x00")
|
||||||
|
|
||||||
|
let () =
|
||||||
|
let buf = Buf.create 128 in
|
||||||
|
Buf.add_string buf "";
|
||||||
|
assert (Buf.to_string buf = "")
|
||||||
|
|
||||||
|
let () =
|
||||||
|
let buf = Buf.create 128 in
|
||||||
|
Buf.add_string buf "hello";
|
||||||
|
assert (Buf.to_string buf = "hello\x00\x00\x00")
|
||||||
4
test/fuchsia/write/t2.expected
Normal file
4
test/fuchsia/write/t2.expected
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
first trace
|
||||||
|
100004467854160033000500000000000100000000000000560000000000000054001005000005804e61bc000000000068656c6c6f000000210001802a0000007800000000000000
|
||||||
|
second trace
|
||||||
|
1000044678541600210000000000000000ca9a3b00000000330005000000000001000000000000005600000000000000300011000000b0006f63616d6c2d747261636500000000004400040500000580a0860100000000006f75746572000000404b4c0000000000440004050000058020bf020000000000696e6e657200000020aa44000000000054001005000005804e61bc000000000068656c6c6f000000210001802a0000007800000000000000
|
||||||
75
test/fuchsia/write/t2.ml
Normal file
75
test/fuchsia/write/t2.ml
Normal file
|
|
@ -0,0 +1,75 @@
|
||||||
|
open Trace_fuchsia_write
|
||||||
|
|
||||||
|
let pf = Printf.printf
|
||||||
|
|
||||||
|
module Str_ = struct
|
||||||
|
open String
|
||||||
|
|
||||||
|
let to_hex (s : string) : string =
|
||||||
|
let i_to_hex (i : int) =
|
||||||
|
if i < 10 then
|
||||||
|
Char.chr (i + Char.code '0')
|
||||||
|
else
|
||||||
|
Char.chr (i - 10 + Char.code 'a')
|
||||||
|
in
|
||||||
|
|
||||||
|
let res = Bytes.create (2 * length s) in
|
||||||
|
for i = 0 to length s - 1 do
|
||||||
|
let n = Char.code (get s i) in
|
||||||
|
Bytes.set res (2 * i) (i_to_hex ((n land 0xf0) lsr 4));
|
||||||
|
Bytes.set res ((2 * i) + 1) (i_to_hex (n land 0x0f))
|
||||||
|
done;
|
||||||
|
Bytes.unsafe_to_string res
|
||||||
|
|
||||||
|
let of_hex_exn (s : string) : string =
|
||||||
|
let n_of_c = function
|
||||||
|
| '0' .. '9' as c -> Char.code c - Char.code '0'
|
||||||
|
| 'a' .. 'f' as c -> 10 + Char.code c - Char.code 'a'
|
||||||
|
| 'A' .. 'F' as c -> 10 + Char.code c - Char.code 'A'
|
||||||
|
| _ -> invalid_arg "string: invalid hex"
|
||||||
|
in
|
||||||
|
if String.length s mod 2 <> 0 then
|
||||||
|
invalid_arg "string: hex sequence must be of even length";
|
||||||
|
let res = Bytes.make (String.length s / 2) '\x00' in
|
||||||
|
for i = 0 to (String.length s / 2) - 1 do
|
||||||
|
let n1 = n_of_c (String.get s (2 * i)) in
|
||||||
|
let n2 = n_of_c (String.get s ((2 * i) + 1)) in
|
||||||
|
let n = (n1 lsl 4) lor n2 in
|
||||||
|
Bytes.set res i (Char.chr n)
|
||||||
|
done;
|
||||||
|
Bytes.unsafe_to_string res
|
||||||
|
end
|
||||||
|
|
||||||
|
let () = pf "first trace\n"
|
||||||
|
|
||||||
|
let () =
|
||||||
|
let buf = Buf.create 128 in
|
||||||
|
Metadata.Magic_record.encode buf;
|
||||||
|
Thread_record.encode buf ~as_ref:5 ~pid:1 ~tid:86 ();
|
||||||
|
Event.Instant.encode buf ~name:"hello" ~time_ns:1234_5678L
|
||||||
|
~t_ref:(Thread_ref.Ref 5)
|
||||||
|
~args:[ "x", `Int 42 ]
|
||||||
|
();
|
||||||
|
pf "%s\n" (Buf.to_string buf |> Str_.to_hex)
|
||||||
|
|
||||||
|
let () = pf "second trace\n"
|
||||||
|
|
||||||
|
let () =
|
||||||
|
let buf = Buf.create 512 in
|
||||||
|
Metadata.Magic_record.encode buf;
|
||||||
|
Metadata.Initialization_record.(
|
||||||
|
encode buf ~ticks_per_secs:default_ticks_per_sec ());
|
||||||
|
Thread_record.encode buf ~as_ref:5 ~pid:1 ~tid:86 ();
|
||||||
|
Metadata.Provider_info.encode buf ~id:1 ~name:"ocaml-trace" ();
|
||||||
|
Event.Duration_complete.encode buf ~name:"outer" ~t_ref:(Thread_ref.Ref 5)
|
||||||
|
~time_ns:100_000L ~end_time_ns:5_000_000L ~args:[] ();
|
||||||
|
Event.Duration_complete.encode buf ~name:"inner" ~t_ref:(Thread_ref.Ref 5)
|
||||||
|
~time_ns:180_000L ~end_time_ns:4_500_000L ~args:[] ();
|
||||||
|
Event.Instant.encode buf ~name:"hello" ~time_ns:1_234_567L
|
||||||
|
~t_ref:(Thread_ref.Ref 5)
|
||||||
|
~args:[ "x", `Int 42 ]
|
||||||
|
();
|
||||||
|
(let oc = open_out "foo.fxt" in
|
||||||
|
output_string oc (Buf.to_string buf);
|
||||||
|
close_out oc);
|
||||||
|
pf "%s\n" (Buf.to_string buf |> Str_.to_hex)
|
||||||
Loading…
Add table
Reference in a new issue