blob: 3a2731329b9f6cc4ca84cb3a759041aa540fcc60 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
(* TEST *)
open Printf
let rec build_string f n accu =
if n <= 0
then String.concat "" accu
else build_string f (n-1) (f (n-1) :: accu)
;;
let char n = String.make 1 (Char.chr n);;
let reference n =
if n = 8 then "\\b"
else if n = 9 then "\\t"
else if n = 10 then "\\n"
else if n = 13 then "\\r"
else if n = Char.code '\"' then "\\\""
else if n = Char.code '\\' then "\\\\"
else if n < 32 || n > 126 then Printf.sprintf "\\%03d" n
else char n
;;
let raw_string = build_string char 256 [];;
let ref_string = build_string reference 256 [];;
if String.escaped raw_string <> ref_string then failwith "test:String.escaped";;
let check_split sep s =
let l = String.split_on_char sep s in
assert(List.length l > 0);
assert(String.concat (String.make 1 sep) l = s);
List.iter (String.iter (fun c -> assert (c <> sep))) l
;;
let () =
let s = " abc def " in
for i = 0 to String.length s do
check_split ' ' (String.sub s 0 i)
done
;;
let () =
printf "-- Hashtbl.hash raw_string: %x\n%!" (Hashtbl.hash raw_string);
printf "-- String.hash raw_string: %x\n%!" (String.hash raw_string);
printf "-- Hashtbl.seeded_hash 16 raw_string: %x\n%!" (Hashtbl.seeded_hash 16 raw_string);
printf "-- String.seeded_hash 16 raw_string: %x\n%!" (String.seeded_hash 16 raw_string);
;;
(* GPR#805/815/833 *)
let () =
if Sys.word_size = 32 then begin
let big = String.make Sys.max_string_length 'x' in
let push x l = l := x :: !l in
let (+=) a b = a := !a + b in
let sz, l = ref 0, ref [] in
while !sz >= 0 do push big l; sz += Sys.max_string_length done;
while !sz <= 0 do push big l; sz += Sys.max_string_length done;
try ignore (String.concat "" !l); assert false
with Invalid_argument _ -> ();
assert(String.starts_with ~prefix:"foob" "foobarbaz");
assert(String.starts_with ~prefix:"" "foobarbaz");
assert(String.starts_with ~prefix:"" "");
assert(not (String.starts_with ~prefix:"foobar" "bar"));
assert(not (String.starts_with ~prefix:"foo" ""));
assert(not (String.starts_with ~prefix:"fool" "foobar"));
assert(String.ends_with ~suffix:"baz" "foobarbaz");
assert(String.ends_with ~suffix:"" "foobarbaz");
assert(String.ends_with ~suffix:"" "");
assert(not (String.ends_with ~suffix:"foobar" "bar"));
assert(not (String.ends_with ~suffix:"foo" ""));
assert(not (String.ends_with ~suffix:"obaz" "foobar"));
end
|