diff options
Diffstat (limited to 'sorsyl/test/test_sonority.ml')
-rw-r--r-- | sorsyl/test/test_sonority.ml | 60 |
1 files changed, 39 insertions, 21 deletions
diff --git a/sorsyl/test/test_sonority.ml b/sorsyl/test/test_sonority.ml index 70845a6..c24f4b4 100644 --- a/sorsyl/test/test_sonority.ml +++ b/sorsyl/test/test_sonority.ml @@ -1,11 +1,9 @@ -(** Tests for the Sonority module *) +(** Tests for the functional Sonority module *) open Sorsyl -(** Test fixture - initialize the module once *) -let () = - (* Initialize with the data directory *) - (* When run with dune test, the working directory is _build/default/test *) +(** Test fixture - create the sonority calculator once *) +let sonority_calc = let data_dir = if Sys.file_exists "./data" then "./data" else if Sys.file_exists "../data" then "../data" @@ -14,13 +12,13 @@ let () = Printf.eprintf "Current directory: %s\n" (Sys.getcwd ()); failwith "Cannot find data directory") in - Sonority.init data_dir + Sonority.create data_dir (** Test sonority value 9 - Low vowels *) let test_sonority_nine () = let segments = [ "a"; "ɑ"; "æ"; "ɒ"; "e"; "o̥" ] in let expected = [ 9; 9; 9; 9; 9; 9 ] in - let results = List.map Sonority.sonority segments in + let results = List.map (Sonority.sonority sonority_calc) segments in assert (results = expected); Printf.printf "test_sonority_nine: PASSED\n" @@ -28,7 +26,7 @@ let test_sonority_nine () = let test_sonority_eight () = let segments = [ "i"; "y"; "ɨ"; "ʉ"; "ɯ"; "u" ] in let expected = [ 8; 8; 8; 8; 8; 8 ] in - let results = List.map Sonority.sonority segments in + let results = List.map (Sonority.sonority sonority_calc) segments in assert (results = expected); Printf.printf "test_sonority_eight: PASSED\n" @@ -36,7 +34,7 @@ let test_sonority_eight () = let test_sonority_seven () = let segments = [ "j"; "w"; "ʋ"; "ɰ"; "ɹ"; "e̯" ] in let expected = [ 7; 7; 7; 7; 7; 7 ] in - let results = List.map Sonority.sonority segments in + let results = List.map (Sonority.sonority sonority_calc) segments in assert (results = expected); Printf.printf "test_sonority_seven: PASSED\n" @@ -44,7 +42,7 @@ let test_sonority_seven () = let test_sonority_six () = let segments = [ "l"; "ɭ"; "r"; "ɾ" ] in let expected = [ 6; 6; 6; 6 ] in - let results = List.map Sonority.sonority segments in + let results = List.map (Sonority.sonority sonority_calc) segments in assert (results = expected); Printf.printf "test_sonority_six: PASSED\n" @@ -52,7 +50,7 @@ let test_sonority_six () = let test_sonority_five () = let segments = [ "n"; "m"; "ŋ"; "ɴ" ] in let expected = [ 5; 5; 5; 5 ] in - let results = List.map Sonority.sonority segments in + let results = List.map (Sonority.sonority sonority_calc) segments in assert (results = expected); Printf.printf "test_sonority_five: PASSED\n" @@ -60,15 +58,18 @@ let test_sonority_five () = let test_sonority_four () = let segments = [ "v"; "z"; "ʒ"; "ɣ" ] in let expected = [ 4; 4; 4; 4 ] in - let results = List.map Sonority.sonority segments in + let results = List.map (Sonority.sonority sonority_calc) segments in + let results_string = + List.fold_left (fun acc item -> Printf.sprintf "%s-%d" acc item) "" results + in assert (results = expected); - Printf.printf "test_sonority_four: PASSED\n" + Printf.printf "test_sonority_four: %s\nPASSED\n" results_string (** Test sonority value 3 - Voiceless fricatives *) let test_sonority_three () = let segments = [ "f"; "s"; "x"; "ħ"; "ʃ" ] in let expected = [ 3; 3; 3; 3; 3 ] in - let results = List.map Sonority.sonority segments in + let results = List.map (Sonority.sonority sonority_calc) segments in assert (results = expected); Printf.printf "test_sonority_three: PASSED\n" @@ -76,7 +77,7 @@ let test_sonority_three () = let test_sonority_two () = let segments = [ "b"; "ɡ"; "d"; "ɢ" ] in let expected = [ 2; 2; 2; 2 ] in - let results = List.map Sonority.sonority segments in + let results = List.map (Sonority.sonority sonority_calc) segments in assert (results = expected); Printf.printf "test_sonority_two: PASSED\n" @@ -84,14 +85,14 @@ let test_sonority_two () = let test_sonority_one () = let segments = [ "p"; "k"; "c"; "q" ] in let expected = [ 1; 1; 1; 1 ] in - let results = List.map Sonority.sonority segments in + let results = List.map (Sonority.sonority sonority_calc) segments in assert (results = expected); Printf.printf "test_sonority_one: PASSED\n" (** Test unknown segment handling *) let test_unknown_segment () = try - let _ = Sonority.sonority "🦆" in + let _ = Sonority.sonority sonority_calc "🦆" in assert false (* Should not reach here *) with | Failure msg when String.sub msg 0 20 = "Unknown IPA segment:" -> @@ -110,14 +111,30 @@ let test_sonority_from_features () = (Feature.Voiced, Feature.Minus); ] in - let result = Sonority.sonority_from_features segment in + let result = Sonority.sonority_from_features sonority_calc segment in assert (result = 1); Printf.printf "test_sonority_from_features: PASSED\n" +(** Test that we can create multiple calculators (no global state) *) +let test_multiple_calculators () = + let data_dir = + if Sys.file_exists "./data" then "./data" + else if Sys.file_exists "../data" then "../data" + else if Sys.file_exists "../../../data" then "../../../data" + else failwith "Cannot find data directory" + in + let calc1 = Sonority.create data_dir in + let calc2 = Sonority.create data_dir in + + (* Both should work independently *) + assert (Sonority.sonority calc1 "a" = 9); + assert (Sonority.sonority calc2 "a" = 9); + Printf.printf "test_multiple_calculators: PASSED\n" + (** Run all tests *) let () = Printf.printf "Running Sonority module tests...\n"; - Printf.printf "================================\n"; + Printf.printf "===================================\n"; test_sonority_nine (); test_sonority_eight (); test_sonority_seven (); @@ -129,5 +146,6 @@ let () = test_sonority_one (); test_unknown_segment (); test_sonority_from_features (); - Printf.printf "================================\n"; - Printf.printf "All tests passed!\n" + test_multiple_calculators (); + Printf.printf "===================================\n"; + Printf.printf "All Sonority tests passed!\n" |