|
|
|
(*
|
|
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
|
|
*
|
|
|
|
* This source code is licensed under the MIT license found in the
|
|
|
|
* LICENSE file in the root directory of this source tree.
|
|
|
|
*)
|
|
|
|
|
|
|
|
open Utils
|
|
|
|
open Process
|
|
|
|
|
|
|
|
let () =
|
|
|
|
assert_true "string_ends_with" (string_ends_with "foo" "o") ;
|
|
|
|
assert_true "string_ends_with" (string_ends_with "foo" "") ;
|
|
|
|
assert_false "string_ends_with" (string_ends_with "foo" "f")
|
|
|
|
|
|
|
|
|
|
|
|
let () =
|
|
|
|
assert_true "string_starts_with" (string_starts_with "foo" "f") ;
|
|
|
|
assert_true "string_starts_with" (string_starts_with "foo" "") ;
|
|
|
|
assert_false "string_starts_with" (string_starts_with "foo" "o")
|
|
|
|
|
|
|
|
|
|
|
|
let () =
|
|
|
|
assert_equal "string_split" (string_split ' ' "foo bla") ["foo"; "bla"] ;
|
|
|
|
assert_equal "string_split" (string_split ' ' "foo") ["foo"] ;
|
|
|
|
assert_equal "string_split" (string_split ' ' "") [""] ;
|
|
|
|
assert_equal "string_split" (string_split ' ' " ") [""; ""] ;
|
|
|
|
assert_equal "string_split" (string_split ' ' " foo bla ") [""; "foo"; "bla"; ""]
|
|
|
|
|
|
|
|
|
|
|
|
let () =
|
|
|
|
assert_true "list_ends_with" (list_ends_with [1; 2; 3] [3]) ;
|
|
|
|
assert_false "list_ends_with" (list_ends_with [1; 2; 3] [2])
|
|
|
|
|
|
|
|
|
|
|
|
let () =
|
|
|
|
assert_true "list_starts_with" (list_starts_with [1; 2; 3] [1]) ;
|
|
|
|
assert_false "list_starts_with" (list_starts_with [1; 2; 3] [2])
|
|
|
|
|
|
|
|
|
|
|
|
let () =
|
|
|
|
let pid, ic =
|
|
|
|
Process.fork (fun oc ->
|
|
|
|
output_string oc "foo\nbar\n" ;
|
|
|
|
true )
|
|
|
|
in
|
|
|
|
let lines = stream_to_list (line_stream_of_channel ic) in
|
|
|
|
assert_true "line_stream_of_channel::wait" (Process.wait pid) ;
|
|
|
|
assert_equal "line_stream_of_channel::result" lines ["foo"; "bar"]
|
|
|
|
|
|
|
|
|
|
|
|
let () =
|
|
|
|
let lines = stream_to_list (stream_append (Stream.of_list ["foo"]) (Stream.of_list ["bar"])) in
|
|
|
|
assert_equal "line_stream_of_channel::result" lines ["foo"; "bar"]
|
|
|
|
|
|
|
|
|
|
|
|
let () =
|
|
|
|
let count = ref 0 in
|
|
|
|
let f _ = incr count in
|
|
|
|
let g = make_cached f in
|
|
|
|
List.iter g [1; 2; 1; 3; 1] ;
|
|
|
|
assert_equal "make_cached" !count 3
|
|
|
|
|
|
|
|
|
|
|
|
let () =
|
|
|
|
let s = DisjointSet.create () in
|
|
|
|
assert_equal "DisjointSet" (DisjointSet.find s 1) 1 ;
|
|
|
|
assert_equal "DisjointSet" (DisjointSet.find s 2) 2 ;
|
|
|
|
DisjointSet.union s 1 2 ;
|
|
|
|
DisjointSet.union s 1 3 ;
|
|
|
|
DisjointSet.union s 2 4 ;
|
|
|
|
DisjointSet.union s 5 6 ;
|
|
|
|
assert_equal "DisjointSet" (DisjointSet.find s 1) (DisjointSet.find s 2) ;
|
|
|
|
assert_equal "DisjointSet" (DisjointSet.find s 1) (DisjointSet.find s 3) ;
|
|
|
|
assert_equal "DisjointSet" (DisjointSet.find s 1) (DisjointSet.find s 4) ;
|
|
|
|
assert_equal "DisjointSet" (DisjointSet.find s 1) (DisjointSet.find s 4) ;
|
|
|
|
assert_equal "DisjointSet" (DisjointSet.find s 5) (DisjointSet.find s 6) ;
|
|
|
|
assert_true "DisjointSet" (DisjointSet.find s 1 <> DisjointSet.find s 6) ;
|
|
|
|
DisjointSet.union s 3 6 ;
|
|
|
|
assert_true "DisjointSet" (DisjointSet.find s 1 = DisjointSet.find s 6) ;
|
|
|
|
assert_equal "DisjointSet" (DisjointSet.find s 5) (DisjointSet.find s 6) ;
|
|
|
|
let l = ref [] in
|
|
|
|
DisjointSet.iter s (fun x y -> l := (y, x) :: !l) ;
|
|
|
|
assert_equal "DisjointSetFinal" (List.sort compare !l |> List.map snd) [1; 2; 3; 4; 5; 6]
|
|
|
|
|
|
|
|
|
|
|
|
let () =
|
|
|
|
let take13 = List.map (fun (x, y, z) -> (x, z)) in
|
|
|
|
assert_equal "fix_arg_spec"
|
|
|
|
(fix_arg_spec [] "bla" |> take13)
|
|
|
|
[("-h", " Display this list of options."); ("-help", " "); ("--help", " ")] ;
|
|
|
|
assert_equal "fix_arg_spec"
|
|
|
|
(fix_arg_spec [("--foo", Arg.String ignore, "FOO fooling")] "bla" |> take13)
|
|
|
|
[ ("--foo", "FOO fooling")
|
|
|
|
; ("-h", " Display this list of options.")
|
|
|
|
; ("-help", " ")
|
|
|
|
; ("--help", " ") ]
|