--- /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 ~info:(Sndfile.WRITE, fmt, 2, 44100) filename in
+ let writecount = Sndfile.write 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.read 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 bad_read_test filename =
+ try
+ let file = Sndfile.openfile filename in
+ ignore file ;
+ print_endline "Ooops, this should have failed." ;
+ exit 1
+ with
+ Sndfile.Error (e, s) ->
+ if s = "System error." then () else
+ ( Printf.printf "Bad error '%s'\n" s ;
+ exit 1
+ )
+
+
+let _ =
+ print_endline "------------------------" ;
+ let filename = "a.wav" in
+ write_test filename ;
+ read_test filename ;
+ finalize_test filename ;
+ bad_read_test "this_file_does_not_exist.wav" ;
+ print_endline "Done : All passed."
+