This commit is contained in:
parent
aa2ff7b2f0
commit
2f3113f55d
11742 changed files with 1223940 additions and 0 deletions
6
unikernel/duniverse/pp/test/dune
Normal file
6
unikernel/duniverse/pp/test/dune
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
(library
|
||||
(name pp_tests)
|
||||
(libraries pp)
|
||||
(inline_tests)
|
||||
(preprocess
|
||||
(pps ppx_expect)))
|
||||
333
unikernel/duniverse/pp/test/tests.ml
Normal file
333
unikernel/duniverse/pp/test/tests.ml
Normal file
|
|
@ -0,0 +1,333 @@
|
|||
open StdLabels
|
||||
open Pp.O
|
||||
|
||||
let print pp = Format.printf "%a@." Pp.to_fmt pp
|
||||
let many n pp = Array.make n pp |> Array.to_list |> Pp.concat ~sep:Pp.space
|
||||
let xs n = many n (Pp.char 'x')
|
||||
let ys n = many n (Pp.char 'y')
|
||||
|
||||
let%expect_test _ =
|
||||
let hello_xs n = Pp.text "Hello" ++ Pp.space ++ xs n in
|
||||
print (Pp.box ~indent:2 (hello_xs 200));
|
||||
[%expect
|
||||
{|
|
||||
Hello x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
|
||||
x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
|
||||
x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
|
||||
x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
|
||||
x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
|
||||
x x x x x x x x x x x x
|
||||
|}];
|
||||
print (Pp.hbox (hello_xs 50));
|
||||
[%expect
|
||||
{|
|
||||
Hello x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
|
||||
|}];
|
||||
print (Pp.vbox ~indent:2 (hello_xs 5));
|
||||
[%expect {|
|
||||
Hello
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
|}];
|
||||
print (Pp.hvbox ~indent:2 (hello_xs 5));
|
||||
[%expect {|
|
||||
Hello x x x x x
|
||||
|}];
|
||||
print (Pp.hvbox ~indent:2 (hello_xs 50));
|
||||
[%expect
|
||||
{|
|
||||
Hello
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
|}];
|
||||
print (Pp.hovbox ~indent:2 (hello_xs 200));
|
||||
[%expect
|
||||
{|
|
||||
Hello x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
|
||||
x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
|
||||
x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
|
||||
x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
|
||||
x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
|
||||
x x x x x x x x x x x x
|
||||
|}]
|
||||
|
||||
let%expect_test "verbatimf" =
|
||||
print (Pp.verbatimf "ident%d" 42);
|
||||
[%expect {| ident42 |}]
|
||||
|
||||
(* Difference between box and hovbox *)
|
||||
let%expect_test _ =
|
||||
let pp f = f (xs 50 ++ Pp.break ~nspaces:2 ~shift:(-1) ++ xs 10) in
|
||||
print (pp (Pp.box ~indent:2));
|
||||
[%expect
|
||||
{|
|
||||
x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
|
||||
x x x x x x x x x x x
|
||||
x x x x x x x x x x
|
||||
|}];
|
||||
print (pp (Pp.hovbox ~indent:2));
|
||||
[%expect
|
||||
{|
|
||||
x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
|
||||
x x x x x x x x x x x x x x x x x x x x x
|
||||
|}]
|
||||
|
||||
let enum_x_and_y = Pp.enumerate [ xs; ys ] ~f:(fun f -> f 50)
|
||||
|
||||
let%expect_test _ =
|
||||
print enum_x_and_y;
|
||||
[%expect
|
||||
{|
|
||||
- x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
|
||||
x x x x x x x x x x x x
|
||||
- y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y
|
||||
y y y y y y y y y y y y
|
||||
|}]
|
||||
|
||||
let%expect_test _ =
|
||||
print
|
||||
(Pp.enumerate
|
||||
[ Pp.enumerate [ "abc"; "def" ] ~f:Pp.text; enum_x_and_y ]
|
||||
~f:(fun x -> x));
|
||||
[%expect
|
||||
{|
|
||||
- - abc
|
||||
- def
|
||||
- - x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
|
||||
x x x x x x x x x x x x x
|
||||
- y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y
|
||||
y y y y y y y y y y y y y
|
||||
|}]
|
||||
|
||||
let%expect_test _ =
|
||||
print (Pp.verbatim "....." ++ Pp.box ~indent:2 (xs 50));
|
||||
[%expect
|
||||
{|
|
||||
.....x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
|
||||
x x x x x x x x x x x x x x |}]
|
||||
|
||||
let error_example_1 =
|
||||
Pp.vbox
|
||||
(Pp.box (Pp.text "Error: something went wrong!")
|
||||
++ Pp.cut
|
||||
++ Pp.box (Pp.text "Here are a few things you can do:")
|
||||
++ Pp.cut
|
||||
++ Pp.enumerate
|
||||
~f:(fun x -> x)
|
||||
[ Pp.text
|
||||
"read the documentation, double check the way you are using this \
|
||||
software to make sure you are not doing something wrong, and \
|
||||
hopefully fix the problem on your side and move on"
|
||||
; Pp.text
|
||||
"strace furiously the program to try and understand why exactly \
|
||||
it is trying to do what it is doing"
|
||||
; Pp.text "report an issue upstream"
|
||||
; Pp.text "if all else fails"
|
||||
++ Pp.cut
|
||||
++ Pp.enumerate ~f:Pp.text
|
||||
[ "scream loudly at your computer"
|
||||
; "take a break from your keyboard"
|
||||
; "clear your head and try again"
|
||||
]
|
||||
])
|
||||
|
||||
let%expect_test _ =
|
||||
print error_example_1;
|
||||
[%expect
|
||||
{|
|
||||
Error: something went wrong!
|
||||
Here are a few things you can do:
|
||||
- read the documentation, double check the way you are using this software to
|
||||
make sure you are not doing something wrong, and hopefully fix the problem
|
||||
on your side and move on
|
||||
- strace furiously the program to try and understand why exactly it is trying
|
||||
to do what it is doing
|
||||
- report an issue upstream
|
||||
- if all else fails
|
||||
- scream loudly at your computer
|
||||
- take a break from your keyboard
|
||||
- clear your head and try again |}]
|
||||
|
||||
(* Wrap the formatted lines *)
|
||||
let%expect_test _ =
|
||||
print
|
||||
(Pp.hovbox ~indent:2
|
||||
(Array.make 50 (Pp.char 'x')
|
||||
|> Array.to_list
|
||||
|> Pp.concat
|
||||
~sep:(Pp.custom_break ~fits:("", 2, "") ~breaks:(" \\", -1, ""))));
|
||||
[%expect
|
||||
{|
|
||||
x x x x x x x x x x x x x x x x x x x x x x x x x \
|
||||
x x x x x x x x x x x x x x x x x x x x x x x x x
|
||||
|}]
|
||||
|
||||
let%expect_test "comparison" =
|
||||
let x = error_example_1
|
||||
and y = Pp.hovbox ~indent:2 (xs 200) in
|
||||
let print x = Printf.printf "comparison result: %d\n" x in
|
||||
print (Pp.compare (fun _ _ -> 0) x y);
|
||||
print (Pp.compare (fun _ _ -> 0) x x);
|
||||
print (Pp.compare (fun _ _ -> 0) y x);
|
||||
[%expect
|
||||
{|
|
||||
comparison result: -1
|
||||
comparison result: 0
|
||||
comparison result: 1 |}]
|
||||
|
||||
(* The differnces between [Pp.paragraph], [Pp.text], [Pp.verbatim] and box +
|
||||
[Pp.text] when inside a [Pp.vbox]. *)
|
||||
let%expect_test "paragraph" =
|
||||
let lorem =
|
||||
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum \
|
||||
euismod, nisl eget aliquam ultricies."
|
||||
in
|
||||
let seperator text _ =
|
||||
Pp.vbox
|
||||
@@ Pp.seq Pp.space
|
||||
(Pp.hbox
|
||||
@@ Pp.textf "-< %s >-%s" text
|
||||
(String.init (20 - String.length text) ~f:(fun _ -> '-')))
|
||||
in
|
||||
print @@ Pp.vbox
|
||||
@@ Pp.concat_map ~sep:Pp.space
|
||||
~f:(fun f -> f lorem)
|
||||
[ seperator "verbatim"
|
||||
; Pp.verbatim
|
||||
; seperator "text"
|
||||
; Pp.text
|
||||
; seperator "paragraph"
|
||||
; Pp.paragraph
|
||||
; seperator "hovbox + text"
|
||||
; (fun x -> Pp.hovbox (Pp.text x))
|
||||
; seperator "hvbox + text"
|
||||
; (fun x -> Pp.hvbox (Pp.text x))
|
||||
; seperator "hbox + text"
|
||||
; (fun x -> Pp.hbox (Pp.text x))
|
||||
; seperator "vbox + text"
|
||||
; (fun x -> Pp.vbox (Pp.text x))
|
||||
; seperator "box + text"
|
||||
; (fun x -> Pp.box (Pp.text x))
|
||||
];
|
||||
[%expect
|
||||
{|
|
||||
-< verbatim >-------------
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum euismod, nisl eget aliquam ultricies.
|
||||
|
||||
-< text >-----------------
|
||||
Lorem
|
||||
ipsum
|
||||
dolor
|
||||
sit
|
||||
amet,
|
||||
consectetur
|
||||
adipiscing
|
||||
elit.
|
||||
Vestibulum
|
||||
euismod,
|
||||
nisl
|
||||
eget
|
||||
aliquam
|
||||
ultricies.
|
||||
|
||||
-< paragraph >------------
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum euismod,
|
||||
nisl eget aliquam ultricies.
|
||||
|
||||
-< hovbox + text >--------
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum euismod,
|
||||
nisl eget aliquam ultricies.
|
||||
|
||||
-< hvbox + text >---------
|
||||
Lorem
|
||||
ipsum
|
||||
dolor
|
||||
sit
|
||||
amet,
|
||||
consectetur
|
||||
adipiscing
|
||||
elit.
|
||||
Vestibulum
|
||||
euismod,
|
||||
nisl
|
||||
eget
|
||||
aliquam
|
||||
ultricies.
|
||||
|
||||
-< hbox + text >----------
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum euismod, nisl eget aliquam ultricies.
|
||||
|
||||
-< vbox + text >----------
|
||||
Lorem
|
||||
ipsum
|
||||
dolor
|
||||
sit
|
||||
amet,
|
||||
consectetur
|
||||
adipiscing
|
||||
elit.
|
||||
Vestibulum
|
||||
euismod,
|
||||
nisl
|
||||
eget
|
||||
aliquam
|
||||
ultricies.
|
||||
|
||||
-< box + text >-----------
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum euismod,
|
||||
nisl eget aliquam ultricies. |}]
|
||||
|
||||
let%expect_test "paragraphf" =
|
||||
print (Pp.paragraphf "Hello World%s" "!");
|
||||
[%expect {| Hello World! |}]
|
||||
Loading…
Add table
Add a link
Reference in a new issue