--- /dev/null
+(* Rudimentary testing of the Ocaml libsndfile wrapper. *)
+
+let write_test filename =
+ let fmt = Sndfile.format Sndfile.MAJOR_WAV Sndfile.MINOR_PCM_16 in
+ let file = Sndfile.openfile filename ~info:(Sndfile.WRITE, fmt, 2, 44100) () in
+ if Sndfile.error file != 0 then
+ Printf.printf "Error writing '%s' : %s\n" filename (Sndfile.strerror file)
+ else
+ let writecount = Sndfile_bigarray.write_short file [| 0.0 ; 0.0 ; 0.0 ; 0.0 ; 0.0 ; 0.0 ; 0.0 ; 0.5 |] in
+ Printf.printf "Wrote %d items.\n" writecount ;
+ Sndfile.close file
+
+let read_test filename =
+ let file = Sndfile.openfile filename () in
+ Printf.printf "File contains %Ld frames.\n" (Sndfile.frames file) ;
+ let data = Array.create 100 0.0 in
+ let readcount = Sndfile_bigarray.read_short file data in
+ Printf.printf "Read %d items.\n" readcount ;
+ Sndfile.close file
+
+let finalize_test filename =
+ let sub_open_file =
+ let file = Sndfile.openfile filename () in
+ ignore file
+ in
+ (* Compact the heap. *)
+ Gc.compact () ;
+ let pre_stat = Gc.stat () in
+ sub_open_file ;
+ (* Compact the heap again. *)
+ Gc.compact () ;
+ (* Compare before and after. *)
+ let post_stat = Gc.stat () in
+ if pre_stat.Gc.heap_words != post_stat.Gc.heap_words then
+ ( Printf.printf "\nFinalize not working : before %d -> after %d\n\n" pre_stat.Gc.heap_words post_stat.Gc.heap_words ;
+ exit 1
+ )
+ else ()
+
+
+let _ =
+ print_endline "------------------------" ;
+ let filename = "a.wav" in
+ write_test filename ;
+ read_test filename ;
+ finalize_test filename