Blame test/test_ExtArray.ml

rpm-build 0f2925
(*
rpm-build 0f2925
 * ExtLib Testing Suite
rpm-build 0f2925
 * Copyright (C) 2005 Richard W.M. Jones
rpm-build 0f2925
 *
rpm-build 0f2925
 * This library is free software; you can redistribute it and/or
rpm-build 0f2925
 * modify it under the terms of the GNU Lesser General Public
rpm-build 0f2925
 * License as published by the Free Software Foundation; either
rpm-build 0f2925
 * version 2.1 of the License, or (at your option) any later version,
rpm-build 0f2925
 * with the special exception on linking described in file LICENSE.
rpm-build 0f2925
 *
rpm-build 0f2925
 * This library is distributed in the hope that it will be useful,
rpm-build 0f2925
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
rpm-build 0f2925
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
rpm-build 0f2925
 * Lesser General Public License for more details.
rpm-build 0f2925
 *
rpm-build 0f2925
 * You should have received a copy of the GNU Lesser General Public
rpm-build 0f2925
 * License along with this library; if not, write to the Free Software
rpm-build 0f2925
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
rpm-build 0f2925
 *)
rpm-build 0f2925
rpm-build 0f2925
(* Standard library array. *)
rpm-build 0f2925
module StdArray = Array
rpm-build 0f2925
rpm-build 0f2925
open ExtArray
rpm-build 0f2925
rpm-build 0f2925
let test_rev () =
rpm-build 0f2925
  assert ([| 1; 2; 3; 4; 5 |] = Array.rev [| 5; 4; 3; 2; 1 |]);
rpm-build 0f2925
  assert ([| 1; 2; 3; 4; 5; 6 |] = Array.rev [| 6; 5; 4; 3; 2; 1 |]);
rpm-build 0f2925
  assert ([| "a"; "b"; "c" |] = Array.rev [| "c"; "b"; "a" |]);
rpm-build 0f2925
  assert ([| "a"; "b" |] = Array.rev [| "b"; "a" |]);
rpm-build 0f2925
  assert ([| "a" |] = Array.rev [| "a" |]);
rpm-build 0f2925
  assert ([| |] = Array.rev [| |])
rpm-build 0f2925
rpm-build 0f2925
let test_rev_in_place () =
rpm-build 0f2925
  let a = [| 5; 4; 3; 2; 1 |] in
rpm-build 0f2925
  Array.rev_in_place a;
rpm-build 0f2925
  assert ([| 1; 2; 3; 4; 5 |] = a);
rpm-build 0f2925
  let a = [| 6; 5; 4; 3; 2; 1 |] in
rpm-build 0f2925
  Array.rev_in_place a;
rpm-build 0f2925
  assert ([| 1; 2; 3; 4; 5; 6 |] = a);
rpm-build 0f2925
  let a = [| "c"; "b"; "a" |] in
rpm-build 0f2925
  Array.rev_in_place a;
rpm-build 0f2925
  assert ([| "a"; "b"; "c" |] = a);
rpm-build 0f2925
  let a = [| "b"; "a" |] in
rpm-build 0f2925
  Array.rev_in_place a;
rpm-build 0f2925
  assert ([| "a"; "b" |] = a);
rpm-build 0f2925
  let a = [| "a" |] in
rpm-build 0f2925
  Array.rev_in_place a;
rpm-build 0f2925
  assert ([| "a" |] = a);
rpm-build 0f2925
  let a = [| |] in
rpm-build 0f2925
  Array.rev_in_place a;
rpm-build 0f2925
  assert ([| |] = a)
rpm-build 0f2925
rpm-build 0f2925
let test_for_all () =
rpm-build 0f2925
  let a = [| 0; 2; 4; 6; 8; 10; 12 |] in
rpm-build 0f2925
  let is_even i = 0 = (i land 1) in
rpm-build 0f2925
  assert (Array.for_all is_even a);
rpm-build 0f2925
  assert (Array.for_all is_even [| |])
rpm-build 0f2925
rpm-build 0f2925
let test_exists () =
rpm-build 0f2925
  let a = [| 0; 2; 4; 6; 8; 10; 11; 12 |] in
rpm-build 0f2925
  let b = [| 0; 2; 4; 6; 8; 10; 12 |] in
rpm-build 0f2925
  let is_even i = 0 = (i land 1) in
rpm-build 0f2925
  let is_odd i = 1 = (i land 1) in
rpm-build 0f2925
  assert (Array.exists is_odd a);
rpm-build 0f2925
  assert (not (Array.exists is_odd b));
rpm-build 0f2925
  assert (not (Array.exists is_even [| |]))
rpm-build 0f2925
rpm-build 0f2925
let test_mem () =
rpm-build 0f2925
  let a = [| 0; 2; 4; 6; 8; 10; 11; 12 |] in
rpm-build 0f2925
  assert (Array.mem 11 a);
rpm-build 0f2925
  assert (Array.mem 12 a);
rpm-build 0f2925
  assert (not (Array.mem 13 a));
rpm-build 0f2925
  assert (not (Array.mem 13 [| |]))
rpm-build 0f2925
rpm-build 0f2925
let test_memq () =
rpm-build 0f2925
  let a = [| 0; 2; 4; 6; 8; 10; 11; 12 |] in
rpm-build 0f2925
  assert (Array.memq 11 a);
rpm-build 0f2925
  assert (Array.memq 12 a);
rpm-build 0f2925
  assert (not (Array.memq 13 a));
rpm-build 0f2925
  assert (not (Array.memq 13 [| |]))
rpm-build 0f2925
rpm-build 0f2925
let test_find () =
rpm-build 0f2925
  let a = [| 0; 2; 4; 6; 8; 10; 11; 12 |] in
rpm-build 0f2925
  assert (11 = Array.find ((=) 11) a);
rpm-build 0f2925
  assert (12 = Array.find ((=) 12) a);
rpm-build 0f2925
  assert (try ignore (Array.find ((=) 13) a); false with Not_found -> true);
rpm-build 0f2925
  assert (try ignore (Array.find ((=) 13) [| |]); false with Not_found -> true)
rpm-build 0f2925
rpm-build 0f2925
let test_findi () =
rpm-build 0f2925
  let a = [| 0; 2; 4; 6; 8; 10; 11; 12 |] in
rpm-build 0f2925
  assert (6 = Array.findi ((=) 11) a);
rpm-build 0f2925
  assert (7 = Array.findi ((=) 12) a);
rpm-build 0f2925
  assert (try ignore (Array.findi ((=) 13) a); false with Not_found -> true);
rpm-build 0f2925
  assert (try ignore (Array.findi ((=) 13) [| |]); false
rpm-build 0f2925
    with Not_found -> true)
rpm-build 0f2925
rpm-build 0f2925
let test_filter () =
rpm-build 0f2925
  let a = [| 0; 1; 2; 3; 4; 5; 6; 7; 8; 9 |] in
rpm-build 0f2925
  let is_even i = 0 = (i land 1) in
rpm-build 0f2925
  let is_odd i = 1 = (i land 1) in
rpm-build 0f2925
  assert ([| 0; 2; 4; 6; 8 |] = Array.filter is_even a);
rpm-build 0f2925
  assert ([| 1; 3; 5; 7; 9 |] = Array.filter is_odd a);
rpm-build 0f2925
  let a = Array.init 10_000 (fun i -> i) in
rpm-build 0f2925
  let b = Array.init 5_000 (fun i -> i * 2) in
rpm-build 0f2925
  let c = Array.init 5_000 (fun i -> i * 2 + 1) in
rpm-build 0f2925
  assert (b = Array.filter is_even a);
rpm-build 0f2925
  assert (c = Array.filter is_odd a);
rpm-build 0f2925
  assert ([| |] = Array.filter is_even [| |])
rpm-build 0f2925
rpm-build 0f2925
let test_partition () =
rpm-build 0f2925
  let a = [| 0; 1; 2; 3; 4; 5; 6; 7; 8; 9 |] in
rpm-build 0f2925
  let is_even i = 0 = (i land 1) in
rpm-build 0f2925
  let is_odd i = 1 = (i land 1) in
rpm-build 0f2925
  let x, y = Array.partition is_even a in
rpm-build 0f2925
  assert ([| 0; 2; 4; 6; 8 |] = x);
rpm-build 0f2925
  assert ([| 1; 3; 5; 7; 9 |] = y);
rpm-build 0f2925
  let x, y = Array.partition is_odd a in
rpm-build 0f2925
  assert ([| 1; 3; 5; 7; 9 |] = x);
rpm-build 0f2925
  assert ([| 0; 2; 4; 6; 8 |] = y);
rpm-build 0f2925
  assert (([| |], [| |]) = Array.partition is_even [| |])
rpm-build 0f2925
rpm-build 0f2925
let test_enum () =
rpm-build 0f2925
  let a = Array.init 1000 (fun i -> i) in
rpm-build 0f2925
  let e = Array.enum a in
rpm-build 0f2925
  let l = ExtList.List.of_enum e in
rpm-build 0f2925
  assert (l = Array.to_list a);
rpm-build 0f2925
  let l = ExtList.List.init 2000 (fun i -> i) in
rpm-build 0f2925
  let e = ExtList.List.enum l in
rpm-build 0f2925
  let a = Array.of_enum e in
rpm-build 0f2925
  assert (a = Array.of_list l)
rpm-build 0f2925
rpm-build 0f2925
let test_map2 () =
rpm-build 0f2925
  let a = Array.init 100 (fun i -> i) in
rpm-build 0f2925
  let b = Array.init 100 (fun i -> 99 - i) in
rpm-build 0f2925
  assert (Array.make 100 99 = Array.map2 (+) a b);
rpm-build 0f2925
  assert (try let _ = Array.map2 (+) [||] [|1|] in false with Invalid_argument _ -> true);
rpm-build 0f2925
  assert (Array.map2 (-) a b = Array.of_list (List.map2 (-) (Array.to_list a) (Array.to_list b)))
rpm-build 0f2925
rpm-build 0f2925
let () =
rpm-build 0f2925
  Util.register "ExtArray" [
rpm-build 0f2925
    "rev", test_rev;
rpm-build 0f2925
    "rev_in_place", test_rev_in_place;
rpm-build 0f2925
    "for_all", test_for_all;
rpm-build 0f2925
    "exists", test_exists;
rpm-build 0f2925
    "mem", test_mem;
rpm-build 0f2925
    "memq", test_memq;
rpm-build 0f2925
    "find", test_find;
rpm-build 0f2925
    "findi", test_findi;
rpm-build 0f2925
    "filter", test_filter;
rpm-build 0f2925
    "partition", test_partition;
rpm-build 0f2925
    "enum", test_enum;
rpm-build 0f2925
    "map2", test_map2;
rpm-build 0f2925
  ]