File: t_nativeint.ml

package info (click to toggle)
ocaml-containers 3.15%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 2,412 kB
  • sloc: ml: 33,221; sh: 122; makefile: 32
file content (86 lines) | stat: -rw-r--r-- 2,882 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
78
79
80
81
82
83
84
85
86
open CCNativeint
module T = (val Containers_testlib.make ~__FILE__ ())
include T;;

t @@ fun () -> pow 2n 10n = 1024n;;
t @@ fun () -> pow 2n 15n = 32768n;;
t @@ fun () -> pow 10n 5n = 100000n;;
t @@ fun () -> pow 42n 0n = 1n;;
t @@ fun () -> pow 0n 1n = 0n;;
t @@ fun () -> floor_div 3n 5n = 0n;;
t @@ fun () -> floor_div 5n 5n = 1n;;
t @@ fun () -> floor_div 20n 5n = 4n;;
t @@ fun () -> floor_div 12n 5n = 2n;;
t @@ fun () -> floor_div 0n 5n = 0n;;
t @@ fun () -> floor_div (-1n) 5n = -1n;;
t @@ fun () -> floor_div (-5n) 5n = -1n;;
t @@ fun () -> floor_div (-12n) 5n = -3n;;
t @@ fun () -> floor_div 0n (-5n) = 0n;;
t @@ fun () -> floor_div 3n (-5n) = -1n;;
t @@ fun () -> floor_div 5n (-5n) = -1n;;
t @@ fun () -> floor_div 9n (-5n) = -2n;;
t @@ fun () -> floor_div 20n (-5n) = -4n;;
t @@ fun () -> floor_div (-2n) (-5n) = 0n;;
t @@ fun () -> floor_div (-8n) (-5n) = 1n;;
t @@ fun () -> floor_div (-35n) (-5n) = 7n;;

t @@ fun () ->
try
  ignore (floor_div 12n 0n);
  false
with Division_by_zero -> true
;;

t @@ fun () ->
try
  ignore (floor_div (-12n) 0n);
  false
with Division_by_zero -> true
;;

q
  (Q.pair (Q.map of_int Q.small_signed_int) (Q.map of_int Q.small_nat))
  (fun (n, m) ->
    let m = m + 1n in
    floor_div n m = of_float @@ floor (to_float n /. to_float m))
;;

q
  (Q.pair (Q.map of_int Q.small_signed_int) (Q.map of_int Q.small_nat))
  (fun (n, m) ->
    let m = m + 1n in
    floor_div n (-m) = of_float @@ floor (to_float n /. to_float (-m)))

let eq' = eq ~printer:Q.Print.(list to_string);;

eq' [ 0n; 1n; 2n; 3n; 4n; 5n ] (range 0n 5n |> Iter.to_list);;
eq' [ 0n ] (range 0n 0n |> Iter.to_list);;
eq' [ 5n; 4n; 3n; 2n ] (range 5n 2n |> Iter.to_list)

(* note: the last test checks that no error occurs due to overflows. *)
let eq' = eq ~printer:Q.Print.(list to_string);;

eq' [ 0n ] (range_by ~step:1n 0n 0n |> Iter.to_list);;
eq' [] (range_by ~step:1n 5n 0n |> Iter.to_list);;
eq' [] (range_by ~step:2n 1n 0n |> Iter.to_list);;
eq' [ 0n; 2n; 4n ] (range_by ~step:2n 0n 4n |> Iter.to_list);;
eq' [ 0n; 2n; 4n ] (range_by ~step:2n 0n 5n |> Iter.to_list);;
eq' [ 0n ] (range_by ~step:(neg 1n) 0n 0n |> Iter.to_list);;
eq' [] (range_by ~step:(neg 1n) 0n 5n |> Iter.to_list);;
eq' [] (range_by ~step:(neg 2n) 0n 1n |> Iter.to_list);;
eq' [ 5n; 3n; 1n ] (range_by ~step:(neg 2n) 5n 1n |> Iter.to_list);;
eq' [ 5n; 3n; 1n ] (range_by ~step:(neg 2n) 5n 0n |> Iter.to_list);;
eq' [ 0n ] (range_by ~step:max_int 0n 2n |> Iter.to_list);;

q
  Q.(pair (map of_int small_int) (map of_int small_int))
  (fun (i, j) ->
    let i = min i j and j = max i j in
    CCList.equal CCNativeint.equal
      (CCNativeint.range_by ~step:1n i j |> Iter.to_list)
      (CCNativeint.range i j |> Iter.to_list))
;;

eq ~printer:CCFun.id "0b111" (to_string_binary 7n);;
eq ~printer:CCFun.id "-0b111" (to_string_binary (-7n));;
eq ~printer:CCFun.id "0b0" (to_string_binary 0n)