File: evaluation_order.ml

package info (click to toggle)
ocaml 5.3.0-3
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 43,124 kB
  • sloc: ml: 355,439; ansic: 51,636; sh: 25,098; asm: 5,413; makefile: 3,673; python: 919; javascript: 273; awk: 253; perl: 59; fortran: 21; cs: 9
file content (77 lines) | stat: -rw-r--r-- 2,411 bytes parent folder | download | duplicates (2)
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
76
77
(* TEST *)
external unsafe_get : 'a array -> int -> 'a = "%array_unsafe_get"
external caml_bytes_get_16 : bytes -> int -> int = "%caml_bytes_get16"
external caml_bytes_set_16 : bytes -> int -> int -> unit = "%caml_bytes_set16"

open Bigarray
type bigstring = (char, int8_unsigned_elt, c_layout) Array1.t

external caml_bigstring_get_16 :
  bigstring -> int -> int = "%caml_bigstring_get16"

external caml_bigstring_set_16 :
  bigstring -> int -> int -> unit = "%caml_bigstring_set16"

let bigstring_of_string s =
  let a = Array1.create char c_layout (String.length s) in
  for i = 0 to String.length s - 1 do
    a.{i} <- s.[i]
  done;
  a

let () =
  (* stringref_safe *)
  String.get (print_endline "hello"; "foo") (print_endline "world"; 0)
  |> Printf.printf "%c\n";

  (* string_load *)
  caml_bytes_get_16 (print_endline "hello"; Bytes.make 10 '\x00')
    (print_endline "world"; 0)
  |> Printf.printf "%x\n";

  (* bigstring_load *)
  caml_bigstring_get_16 (print_endline "hello";
                         bigstring_of_string (String.make 10 '\x00'))
    (print_endline "world"; 0)
  |> Printf.printf "%x\n";

  (* bytes_set *)
  caml_bytes_set_16 (print_endline "a"; Bytes.make 10 '\x00')
    (print_endline "b"; 0)
    (print_endline "c"; 0xFF);

  (* bigstring_set *)
  caml_bigstring_set_16 (print_endline "a";
                         bigstring_of_string (String.make 10 '\x00'))
    (print_endline "b"; 0)
    (print_endline "c"; 0xFF);

  (* mk_compare_ints_untagged *)
  print_int (compare (print_endline "A"; Sys.opaque_identity (2))
               (print_endline "B"; Sys.opaque_identity (3)));
  print_newline ();

  (* mk_compare_floats *)
  print_int (compare (print_endline "A"; Sys.opaque_identity (2.0))
               (print_endline "B"; Sys.opaque_identity (3.5)));
  print_newline ();

  (* bytesset_safe *)
  Bytes.set (print_endline "a"; Bytes.make 10 '\x00')
    (print_endline "b"; 0)
    (print_endline "c"; 'c');

  (* safe_div_bi *)
  Printf.printf "%nd\n"
    (Nativeint.div (print_endline "A"; Sys.opaque_identity (6n))
               (print_endline "B"; Sys.opaque_identity (3n)));

  (* arrayref_unsafe *)
  let[@inline never] test_arrayref_unsafe
    : type t . t array -> int -> (t -> string) -> unit =
    fun a i c ->
      print_endline (c (Array.unsafe_get (print_endline "A"; a) (print_endline "B"; i)))
  in
  test_arrayref_unsafe [| "1";"2";"3" |] 0 Fun.id;

  ()