diff --git a/pangram/example.sml b/pangram/example.sml new file mode 100644 index 0000000..1760738 --- /dev/null +++ b/pangram/example.sml @@ -0,0 +1,7 @@ +fun isPangram (sentence: string): bool = + let + val alphabet = String.explode "qwertyuiopasdfghjklzxcvbnm" + val chars = map Char.toLower (String.explode sentence) + in + List.all (fn letter => List.exists (fn char => char = letter) chars) alphabet + end diff --git a/pangram/pangram.sml b/pangram/pangram.sml new file mode 100644 index 0000000..f63b501 --- /dev/null +++ b/pangram/pangram.sml @@ -0,0 +1,2 @@ +fun isPangram (sentence: string): bool = + raise Fail "isPangram is not implemented" diff --git a/pangram/test_pangram.sml b/pangram/test_pangram.sml new file mode 100644 index 0000000..76e4fa8 --- /dev/null +++ b/pangram/test_pangram.sml @@ -0,0 +1,21 @@ +use "example.sml"; + +val test_cases = [ + ("", false), + ("The Quick Brown Fox Jumps Over The Lazy Dog", true), + ("the quick brown fox jumps over the lazy dog", true), + ("a quick movement of the enemy will jeopardize five gunboats", false), + ("the quick brown fish jumps over the lazy dog", false), + ("the_quick_brown_fox_jumps_over_the_lazy_dog", true), + ("the 1 quick brown fox jumps over the 2 lazy dogs", true), + ("7h3 qu1ck brown fox jumps ov3r 7h3 lazy dog", false), + ("\"Five quacking Zephyrs jolt my wax bed.\"", true) + (*"Victor jagt zwölf Boxkämpfer quer über den großen Sylter Deich.", true*) + (*"Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства.", false*) +]; + +fun run_tests [] = [] + | run_tests ((sentence, expected) :: ts) = + (isPangram sentence = expected) :: run_tests ts + +val allTestsPass = List.foldl (fn (x, y) => x andalso y) true (run_tests test_cases)