This commit is contained in:
parent
aa2ff7b2f0
commit
2f3113f55d
11742 changed files with 1223940 additions and 0 deletions
160
unikernel/duniverse/base/test/test_char.ml
Normal file
160
unikernel/duniverse/base/test/test_char.ml
Normal file
|
|
@ -0,0 +1,160 @@
|
|||
open! Import
|
||||
open! Char
|
||||
|
||||
let%test _ = not (is_whitespace '\008')
|
||||
|
||||
(* backspace *)
|
||||
let%test _ = is_whitespace '\009'
|
||||
|
||||
(* '\t': horizontal tab *)
|
||||
let%test _ = is_whitespace '\010'
|
||||
|
||||
(* '\n': line feed *)
|
||||
let%test _ = is_whitespace '\011'
|
||||
|
||||
(* '\v': vertical tab *)
|
||||
let%test _ = is_whitespace '\012'
|
||||
|
||||
(* '\f': form feed *)
|
||||
let%test _ = is_whitespace '\013'
|
||||
|
||||
(* '\r': carriage return *)
|
||||
let%test _ = not (is_whitespace '\014')
|
||||
|
||||
(* shift out *)
|
||||
let%test _ = is_whitespace '\032'
|
||||
|
||||
(* space *)
|
||||
|
||||
let%expect_test "hash coherence" =
|
||||
check_hash_coherence [%here] (module Char) [ min_value; 'a'; max_value ];
|
||||
[%expect {| |}]
|
||||
;;
|
||||
|
||||
let%test_module "int to char conversion" =
|
||||
(module struct
|
||||
let%test_unit "of_int bounds" =
|
||||
let bounds_check i =
|
||||
[%test_result: t option] (of_int i) ~expect:None ~message:(Int.to_string i)
|
||||
in
|
||||
for i = 1 to 100 do
|
||||
bounds_check (-i);
|
||||
bounds_check (255 + i)
|
||||
done
|
||||
;;
|
||||
|
||||
let%test_unit "of_int_exn vs of_int" =
|
||||
for i = -100 to 300 do
|
||||
[%test_eq: t option]
|
||||
(of_int i)
|
||||
(Option.try_with (fun () -> of_int_exn i))
|
||||
~message:(Int.to_string i)
|
||||
done
|
||||
;;
|
||||
|
||||
let%test_unit "unsafe_of_int vs of_int_exn" =
|
||||
for i = 0 to 255 do
|
||||
[%test_eq: t] (unsafe_of_int i) (of_int_exn i) ~message:(Int.to_string i)
|
||||
done
|
||||
;;
|
||||
end)
|
||||
;;
|
||||
|
||||
let%expect_test "all" =
|
||||
Ref.set_temporarily sexp_style To_string_hum ~f:(fun () ->
|
||||
print_s [%sexp (all : t list)]);
|
||||
[%expect
|
||||
{|
|
||||
("\000" "\001" "\002" "\003" "\004" "\005" "\006" "\007" "\b" "\t" "\n"
|
||||
"\011" "\012" "\r" "\014" "\015" "\016" "\017" "\018" "\019" "\020" "\021"
|
||||
"\022" "\023" "\024" "\025" "\026" "\027" "\028" "\029" "\030" "\031" " " !
|
||||
"\"" # $ % & ' "(" ")" * + , - . / 0 1 2 3 4 5 6 7 8 9 : ";" < = > ? @ A B C
|
||||
D E F G H I J K L M N O P Q R S T U V W X Y Z [ "\\" ] ^ _ ` a b c d e f g h
|
||||
i j k l m n o p q r s t u v w x y z { | } ~ "\127" "\128" "\129" "\130"
|
||||
"\131" "\132" "\133" "\134" "\135" "\136" "\137" "\138" "\139" "\140" "\141"
|
||||
"\142" "\143" "\144" "\145" "\146" "\147" "\148" "\149" "\150" "\151" "\152"
|
||||
"\153" "\154" "\155" "\156" "\157" "\158" "\159" "\160" "\161" "\162" "\163"
|
||||
"\164" "\165" "\166" "\167" "\168" "\169" "\170" "\171" "\172" "\173" "\174"
|
||||
"\175" "\176" "\177" "\178" "\179" "\180" "\181" "\182" "\183" "\184" "\185"
|
||||
"\186" "\187" "\188" "\189" "\190" "\191" "\192" "\193" "\194" "\195" "\196"
|
||||
"\197" "\198" "\199" "\200" "\201" "\202" "\203" "\204" "\205" "\206" "\207"
|
||||
"\208" "\209" "\210" "\211" "\212" "\213" "\214" "\215" "\216" "\217" "\218"
|
||||
"\219" "\220" "\221" "\222" "\223" "\224" "\225" "\226" "\227" "\228" "\229"
|
||||
"\230" "\231" "\232" "\233" "\234" "\235" "\236" "\237" "\238" "\239" "\240"
|
||||
"\241" "\242" "\243" "\244" "\245" "\246" "\247" "\248" "\249" "\250" "\251"
|
||||
"\252" "\253" "\254" "\255")
|
||||
|}]
|
||||
;;
|
||||
|
||||
let%expect_test "predicates" =
|
||||
Ref.set_temporarily sexp_style To_string_hum ~f:(fun () ->
|
||||
print_s [%sexp (List.filter all ~f:is_digit : t list)];
|
||||
[%expect {| (0 1 2 3 4 5 6 7 8 9) |}];
|
||||
print_s [%sexp (List.filter all ~f:is_lowercase : t list)];
|
||||
[%expect {| (a b c d e f g h i j k l m n o p q r s t u v w x y z) |}];
|
||||
print_s [%sexp (List.filter all ~f:is_uppercase : t list)];
|
||||
[%expect {| (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) |}];
|
||||
print_s [%sexp (List.filter all ~f:is_alpha : t list)];
|
||||
[%expect
|
||||
{|
|
||||
(A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l
|
||||
m n o p q r s t u v w x y z)
|
||||
|}];
|
||||
print_s [%sexp (List.filter all ~f:is_alphanum : t list)];
|
||||
[%expect
|
||||
{|
|
||||
(0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b
|
||||
c d e f g h i j k l m n o p q r s t u v w x y z)
|
||||
|}];
|
||||
print_s [%sexp (List.filter all ~f:is_print : t list)];
|
||||
[%expect
|
||||
{|
|
||||
(" " ! "\"" # $ % & ' "(" ")" * + , - . / 0 1 2 3 4 5 6 7 8 9 : ";" < = > ? @
|
||||
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ "\\" ] ^ _ ` a b c d e
|
||||
f g h i j k l m n o p q r s t u v w x y z { | } ~)
|
||||
|}];
|
||||
print_s [%sexp (List.filter all ~f:is_whitespace : t list)];
|
||||
[%expect {| ("\t" "\n" "\011" "\012" "\r" " ") |}];
|
||||
print_s [%sexp (List.filter all ~f:is_hex_digit : t list)];
|
||||
[%expect {| (0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f) |}];
|
||||
print_s [%sexp (List.filter all ~f:is_hex_digit_lower : t list)];
|
||||
[%expect {| (0 1 2 3 4 5 6 7 8 9 a b c d e f) |}];
|
||||
print_s [%sexp (List.filter all ~f:is_hex_digit_upper : t list)];
|
||||
[%expect {| (0 1 2 3 4 5 6 7 8 9 A B C D E F) |}])
|
||||
;;
|
||||
|
||||
let%expect_test "get_hex_digit" =
|
||||
Ref.set_temporarily sexp_style To_string_hum ~f:(fun () ->
|
||||
let hex_digit_alist =
|
||||
List.filter_map Char.all ~f:(fun char ->
|
||||
Option.map (get_hex_digit char) ~f:(fun digit -> char, digit))
|
||||
in
|
||||
print_s [%sexp (hex_digit_alist : (char * int) list)];
|
||||
[%expect
|
||||
{|
|
||||
((0 0) (1 1) (2 2) (3 3) (4 4) (5 5) (6 6) (7 7) (8 8) (9 9) (A 10) (B 11)
|
||||
(C 12) (D 13) (E 14) (F 15) (a 10) (b 11) (c 12) (d 13) (e 14) (f 15))
|
||||
|}];
|
||||
require_equal
|
||||
[%here]
|
||||
(module struct
|
||||
type t = (char * int) list [@@deriving equal, sexp_of]
|
||||
end)
|
||||
(Char.all
|
||||
|> List.filter ~f:is_hex_digit
|
||||
|> List.map ~f:(fun char -> char, get_hex_digit_exn char))
|
||||
hex_digit_alist;
|
||||
[%expect {| |}];
|
||||
require_does_raise [%here] (fun () -> get_hex_digit_exn Char.min_value);
|
||||
[%expect {| ("Char.get_hex_digit_exn: not a hexadecimal digit" (char "\000")) |}])
|
||||
;;
|
||||
|
||||
let%test_module "Caseless Comparable" =
|
||||
(module struct
|
||||
(* examples from docs *)
|
||||
let%test _ = Caseless.equal 'A' 'a'
|
||||
let%test _ = Caseless.('a' < 'B')
|
||||
let%test _ = Int.( <> ) (Caseless.compare 'a' 'B') (compare 'a' 'B')
|
||||
let%test _ = List.is_sorted ~compare:Caseless.compare [ 'A'; 'b'; 'C' ]
|
||||
end)
|
||||
;;
|
||||
Loading…
Add table
Add a link
Reference in a new issue