This commit is contained in:
parent
aa2ff7b2f0
commit
2f3113f55d
11742 changed files with 1223940 additions and 0 deletions
154
unikernel/duniverse/base/test/test_info.ml
Normal file
154
unikernel/duniverse/base/test/test_info.ml
Normal file
|
|
@ -0,0 +1,154 @@
|
|||
open! Import
|
||||
open! Info
|
||||
|
||||
let%expect_test _ =
|
||||
print_endline (to_string_hum (of_exn (Failure "foo")));
|
||||
[%expect {| (Failure foo) |}]
|
||||
;;
|
||||
|
||||
let%expect_test _ =
|
||||
print_endline (to_string_hum (tag (of_string "b") ~tag:"a"));
|
||||
[%expect {| (a b) |}]
|
||||
;;
|
||||
|
||||
let%expect_test _ =
|
||||
print_endline (to_string_hum (of_list (List.map ~f:of_string [ "a"; "b"; "c" ])));
|
||||
[%expect {| (a b c) |}]
|
||||
;;
|
||||
|
||||
let%expect_test _ =
|
||||
print_endline (to_string_hum (tag_s ~tag:[%message "tag"] (create_s [%message "info"])));
|
||||
[%expect {| (tag info) |}]
|
||||
;;
|
||||
|
||||
let of_strings strings = of_list (List.map ~f:of_string strings)
|
||||
|
||||
let nested =
|
||||
of_list
|
||||
(List.map ~f:of_strings [ [ "a"; "b"; "c" ]; [ "d"; "e"; "f" ]; [ "g"; "h"; "i" ] ])
|
||||
;;
|
||||
|
||||
let%expect_test _ =
|
||||
print_endline (to_string_hum nested);
|
||||
[%expect {| (a b c d e f g h i) |}]
|
||||
;;
|
||||
|
||||
let%expect_test _ =
|
||||
require_equal
|
||||
[%here]
|
||||
(module Sexp)
|
||||
(sexp_of_t nested)
|
||||
(sexp_of_t (of_strings [ "a"; "b"; "c"; "d"; "e"; "f"; "g"; "h"; "i" ]));
|
||||
[%expect {| |}]
|
||||
;;
|
||||
|
||||
let%expect_test _ =
|
||||
match to_exn (of_exn (Failure "foo")) with
|
||||
| Failure "foo" -> ()
|
||||
| exn -> raise_s [%sexp { got = (exn : exn); expected = Failure "foo" }]
|
||||
;;
|
||||
|
||||
let round t =
|
||||
let sexp = sexp_of_t t in
|
||||
require [%here] (Sexp.( = ) sexp (sexp_of_t (t_of_sexp sexp)))
|
||||
;;
|
||||
|
||||
let%expect_test "non-empty tag" =
|
||||
tag_arg (of_string "hello") "tag" 13 [%sexp_of: int] |> sexp_of_t |> print_s;
|
||||
[%expect {| (tag 13 hello) |}]
|
||||
;;
|
||||
|
||||
let%expect_test "empty tag" =
|
||||
tag_arg (of_string "hello") "" 13 [%sexp_of: int] |> sexp_of_t |> print_s;
|
||||
[%expect {| (13 hello) |}]
|
||||
;;
|
||||
|
||||
let%expect_test _ = round (of_string "hello")
|
||||
let%expect_test _ = round (of_thunk (fun () -> "hello"))
|
||||
let%expect_test _ = round (create "tag" 13 [%sexp_of: int])
|
||||
let%expect_test _ = round (tag (of_string "hello") ~tag:"tag")
|
||||
let%expect_test _ = round (tag_arg (of_string "hello") "tag" 13 [%sexp_of: int])
|
||||
let%expect_test _ = round (tag_arg (of_string "hello") "" 13 [%sexp_of: int])
|
||||
let%expect_test _ = round (of_list [ of_string "hello"; of_string "goodbye" ])
|
||||
|
||||
let%expect_test _ =
|
||||
round (t_of_sexp (Sexplib.Sexp.of_string "((random sexp 1)(b 2)((c (1 2 3))))"))
|
||||
;;
|
||||
|
||||
let%expect_test _ =
|
||||
require_equal [%here] (module String) (to_string_hum (of_string "a\nb")) "a\nb";
|
||||
[%expect {| |}]
|
||||
;;
|
||||
|
||||
let%expect_test "stack overflow" =
|
||||
(* [Info.of_list [info]] and [Info.of_lazy_t (lazy info)] produce an [Info.t] with the
|
||||
same sexp as the original. Ideally, deep nesting of these should not yield a stack
|
||||
overflow just to produce a small value. *)
|
||||
let depth =
|
||||
match Word_size.word_size with
|
||||
| W64 -> 1_000_000
|
||||
| W32 -> 100_000
|
||||
in
|
||||
let test f =
|
||||
let info = ref (Info.of_string "info") in
|
||||
for _ = 1 to depth do
|
||||
info := f !info
|
||||
done;
|
||||
print_s (Info.sexp_of_t !info)
|
||||
in
|
||||
test (fun info -> Info.of_list [ info ]);
|
||||
[%expect {| info |}];
|
||||
test (fun info -> Info.of_lazy_t (lazy info));
|
||||
[%expect {| info |}];
|
||||
test (fun info -> Info.of_lazy_t (lazy (Info.of_list [ info ])));
|
||||
[%expect {| info |}]
|
||||
;;
|
||||
|
||||
let%expect_test "cyclic info computation" =
|
||||
let info =
|
||||
let rec lazy_info = lazy (Info.of_lazy_t lazy_info) in
|
||||
Info.of_lazy_t lazy_info
|
||||
in
|
||||
print_s (Info.sexp_of_t info);
|
||||
[%expect {| (Could_not_construct "cycle while computing message") |}]
|
||||
;;
|
||||
|
||||
let%expect_test "show how backtraces are printed" =
|
||||
(* This is a real backtrace from some random OCaml program.
|
||||
|
||||
The words [Raised] and [Called] have been lowercased to fool the expect test
|
||||
collector and prevent it from complaining about the presence of a backtrace. This is
|
||||
fine for this test because we are using a static string as the source for the
|
||||
backtrace, rather than actually raising (which might change output between compiler
|
||||
versions). *)
|
||||
let backtrace =
|
||||
"raised at Base__Error.raise in file \"error.ml\" (inlined), line 9, characters 14-30\n\
|
||||
called from Base__Error.raise_s in file \"error.ml\", line 10, characters 19-40\n\
|
||||
called from Floops_interfaces__Registrant.register_exn in file \"registrant.ml\", \
|
||||
line 18, characters 4-241\n\
|
||||
called from Floops_interfaces_test__Registrant_test.Test_brick.create_exn.(fun) in \
|
||||
file \"registrant_test.ml\", line 25, characters 6-67\n\
|
||||
called from Base__Or_error.try_with in file \"or_error.ml\", line 84, characters 9-15\n"
|
||||
in
|
||||
let exn = of_exn ~backtrace:(`This backtrace) (Failure "foo") in
|
||||
print_s [%sexp (exn : t)];
|
||||
[%expect
|
||||
{|
|
||||
((Failure foo)
|
||||
("raised at Base__Error.raise in file \"error.ml\" (inlined), line 9, characters 14-30"
|
||||
"called from Base__Error.raise_s in file \"error.ml\", line 10, characters 19-40"
|
||||
"called from Floops_interfaces__Registrant.register_exn in file \"registrant.ml\", line 18, characters 4-241"
|
||||
"called from Floops_interfaces_test__Registrant_test.Test_brick.create_exn.(fun) in file \"registrant_test.ml\", line 25, characters 6-67"
|
||||
"called from Base__Or_error.try_with in file \"or_error.ml\", line 84, characters 9-15"))
|
||||
|}];
|
||||
print_endline (Info.to_string_hum exn);
|
||||
[%expect
|
||||
{|
|
||||
((Failure foo)
|
||||
("raised at Base__Error.raise in file \"error.ml\" (inlined), line 9, characters 14-30"
|
||||
"called from Base__Error.raise_s in file \"error.ml\", line 10, characters 19-40"
|
||||
"called from Floops_interfaces__Registrant.register_exn in file \"registrant.ml\", line 18, characters 4-241"
|
||||
"called from Floops_interfaces_test__Registrant_test.Test_brick.create_exn.(fun) in file \"registrant_test.ml\", line 25, characters 6-67"
|
||||
"called from Base__Or_error.try_with in file \"or_error.ml\", line 84, characters 9-15"))
|
||||
|}]
|
||||
;;
|
||||
Loading…
Add table
Add a link
Reference in a new issue