summaryrefslogtreecommitdiffstats
path: root/testsuite/tests/lib-bigarray/bigarrays.ml
diff options
context:
space:
mode:
authorXavier Leroy <xavier.leroy@inria.fr>2012-04-09 10:23:50 +0000
committerXavier Leroy <xavier.leroy@inria.fr>2012-04-09 10:23:50 +0000
commit2330a3b30fe5b910f4776bf9c41f35ce2b980fb1 (patch)
tree2a4daf18833123751ad9a41292895073b7bbf5f9 /testsuite/tests/lib-bigarray/bigarrays.ml
parent0d2e9941ebfbfcaaf28eae3e21dd7a8d35fdbb91 (diff)
PR#3571: in Bigarrays, call msync() before unmapping to commit changes
PR#5463: Bigarray.*.map_file fail if empty array is requested Bigarray: added "release" functions that free memory and file mappings just like GC finalization does eventually, but does it immediately. git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@12327 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
Diffstat (limited to 'testsuite/tests/lib-bigarray/bigarrays.ml')
-rw-r--r--testsuite/tests/lib-bigarray/bigarrays.ml41
1 files changed, 35 insertions, 6 deletions
diff --git a/testsuite/tests/lib-bigarray/bigarrays.ml b/testsuite/tests/lib-bigarray/bigarrays.ml
index 85901400e..28ed9af6f 100644
--- a/testsuite/tests/lib-bigarray/bigarrays.ml
+++ b/testsuite/tests/lib-bigarray/bigarrays.ml
@@ -384,6 +384,12 @@ let _ =
test 12 true (test_blit_fill complex64 [Complex.zero; Complex.one; Complex.i]
Complex.i 1 1);
+ testing_function "release";
+ let a = from_list int [1;2;3;4;5] in
+ test 1 (Array1.dim a) 5;
+ Array1.release a;
+ test 2 (Array1.dim a) 0;
+
(* Bi-dimensional arrays *)
print_newline();
@@ -533,6 +539,14 @@ let _ =
test 7 (Array2.slice_right a 2) (from_list_fortran int [1002;2002;3002;4002;5002]);
test 8 (Array2.slice_right a 3) (from_list_fortran int [1003;2003;3003;4003;5003]);
+ testing_function "release";
+ let a = (make_array2 int c_layout 0 4 6 id) in
+ test 1 (Array2.dim1 a) 4;
+ test 2 (Array2.dim2 a) 6;
+ Array2.release a;
+ test 3 (Array2.dim1 a) 0;
+ test 4 (Array2.dim2 a) 0;
+
(* Tri-dimensional arrays *)
print_newline();
@@ -654,6 +668,16 @@ let _ =
test 6 (Array3.slice_right_1 a 1 2) (from_list_fortran int [112;212;312]);
test 7 (Array3.slice_right_1 a 3 1) (from_list_fortran int [131;231;331]);
+ testing_function "release";
+ let a = (make_array3 int c_layout 0 4 5 6 id) in
+ test 1 (Array3.dim1 a) 4;
+ test 2 (Array3.dim2 a) 5;
+ test 3 (Array3.dim3 a) 6;
+ Array3.release a;
+ test 4 (Array3.dim1 a) 0;
+ test 5 (Array3.dim2 a) 0;
+ test 6 (Array3.dim3 a) 0;
+
(* Reshaping *)
print_newline();
testing_function "------ Reshaping --------";
@@ -717,6 +741,7 @@ let _ =
let a = Array1.map_file fd float64 c_layout true 10000 in
Unix.close fd;
for i = 0 to 9999 do a.{i} <- float i done;
+ Array1.release a;
let fd = Unix.openfile mapped_file [Unix.O_RDONLY] 0 in
let b = Array2.map_file fd float64 fortran_layout false 100 (-1) in
Unix.close fd;
@@ -727,7 +752,8 @@ let _ =
done
done;
test 1 !ok true;
- b.{50,50} <- (-1.0);
+ b.{50,50} <- (-1.0); (* private mapping -> no effect on file *)
+ Array2.release b;
let fd = Unix.openfile mapped_file [Unix.O_RDONLY] 0 in
let c = Array2.map_file fd float64 c_layout false (-1) 100 in
Unix.close fd;
@@ -738,6 +764,7 @@ let _ =
done
done;
test 2 !ok true;
+ Array2.release c;
let fd = Unix.openfile mapped_file [Unix.O_RDONLY] 0 in
let c = Array2.map_file fd ~pos:800L float64 c_layout false (-1) 100 in
Unix.close fd;
@@ -748,6 +775,7 @@ let _ =
done
done;
test 3 !ok true;
+ Array2.release c;
let fd = Unix.openfile mapped_file [Unix.O_RDONLY] 0 in
let c = Array2.map_file fd ~pos:79200L float64 c_layout false (-1) 100 in
Unix.close fd;
@@ -755,12 +783,13 @@ let _ =
for j = 0 to 99 do
if c.{0,j} <> float (100 * 99 + j) then ok := false
done;
- test 4 !ok true
+ test 4 !ok true;
+ Array2.release c;
+ test 5 (Array2.dim1 c) 0;
+ test 5 (Array2.dim2 c) 0
end;
- (* Force garbage collection of the mapped bigarrays above, otherwise
- Win32 doesn't let us erase the file. Notice the begin...end above
- so that the VM doesn't keep stack references to the mapped bigarrays. *)
- Gc.full_major();
+ (* Win32 doesn't let us erase the file if any mapping on the file is
+ still active. Normally, they have all been released explicitly. *)
Sys.remove mapped_file;
()