%---------------------------------------------------------------------------% % vim: ts=4 sw=4 et ft=mercury %---------------------------------------------------------------------------% :- module string_test. :- interface. :- import_module io. :- pred main(io::di, io::uo) is det. :- implementation. :- import_module list. :- import_module maybe. :- import_module pair. :- import_module require. :- import_module string. main(!IO) :- test("foo", "bar", !IO). :- pred test(string::in, string::in, io::di, io::uo) is det. test(X, Y, !IO) :- write_message("X", X, !IO), write_message("Y", Y, !IO), string.append(X, Y, Z), write_message("X append Y", Z, !IO), string.capitalize_first(X, CapX), write_message("capitalize_first X", CapX, !IO), string.uncapitalize_first(CapX, UnCapX), write_message("uncapitalize_first CapX", UnCapX, !IO), string.int_to_string(1234, Num), write_message("int_to_string 1234", Num, !IO), string.int_to_base_string(1234, 8, Num8), write_message("octal 1234", Num8, !IO), string.int_to_base_string(1234, 16, Num16), write_message("hexadecimal 1234", Num16, !IO), NumG1 = string.int_to_base_string_group(1234, 10, 3, ","), write_message("Grouped 1234", NumG1, !IO), NumG2 = string.int_to_base_string_group(113, 2, 1, "--"), write_message("Grouped 113", NumG2, !IO), NumG3 = string.int_to_string_thousands(1300000), write_message("Grouped 1300000", NumG3, !IO), NumG4 = string.int_to_base_string_group(45999, 10, 0, ","), write_message("Non Grouped 45999", NumG4, !IO), string.duplicate_char('f', 5, FiveFs), string.duplicate_char('φ', 5, FivePhis), ( if string.to_int("5678", Num5678) then io.format("string_to_int 5678: %d\n", [i(Num5678)], !IO) else error("string.to_int(""5678"", _) failed") ), ( if string.to_int("asdf", _) then error("string.to_int(""asdf"", _) succeeded") else true ), write_message("Five f's", FiveFs, !IO), string.pad_right(FiveFs, '.', 10, FsAndDots), write_message("Five f's and five dots", FsAndDots, !IO), string.pad_left(FsAndDots, '-', 15, DashesFsAndDots), write_message("Five dashes, five f's and five dots", DashesFsAndDots, !IO), write_message("Five φ's", FivePhis, !IO), string.pad_right(FivePhis, '.', 10, PhisAndDots), write_message("Five φ's and five dots", PhisAndDots, !IO), string.pad_left(PhisAndDots, '-', 15, DashesPhisAndDots), write_message("Five dashes, five φ's and five dots", DashesPhisAndDots, !IO), Table = string.format_table([ left(["aaa", "b", "cc"]), left(["áaȧ", "б", "цц"]), right(["1111111", "", "333"]), right(["¹½⅓¼⅕⅙⅛", "", "¾⅘⅚"]), right(["1,300,000.00", "9,999.00", "123,456,789.99"]) ], "|"), io.write_string(Table, !IO), io.nl(!IO), TableMax = string.format_table_max([ left(["aaa", "b", "cc"]) - no, left(["áaȧ", "б", "цц"]) - no, right(["1111111", "", "333"]) - yes(5), right(["¹½⅓¼⅕⅙⅛", "", "¾⅘⅚"]) - yes(5), right(["1,300,000.00", "9,999.00", "123,456,789.99"]) - yes(7) ], "|"), io.write_string(TableMax, !IO), io.nl(!IO), Wrapped = string.word_wrap("*aaaaaaaaaaaaaaaaaaaa* bbbbb bbb b\t" ++ " ccccc c c c cccc c c c c ccccc ccc cccc c ccc ccc ccc " ++ "*dddddddddddddddddddddddddddddddddddddddddddddddddddddd*" ++ " eee", 10), WrappedHyphen = string.word_wrap_separator( "*aaaaaaaaaaaaaaaaaaaa* bbbbb bbb b\t" ++ " ccccc c c c cccc c c c c ccccc ccc cccc c ccc ccc ccc " ++ "*dddddddddddddddddddddddddddddddddddddddddddddddddddddd*" ++ " eee", 10, "-"), WrappedDots = string.word_wrap_separator("*aaaaaa* bbbbb bbb b\t" ++ " ccccc c c c cccc c c c c ccccc ccc cccc c ccc ccc ccc " ++ "*dddddddddddddd*" ++ " eee", 5, "..."), SepTooLong = string.word_wrap_separator("whatever", 2, "..."), io.write_string("\nWrapped string:\n", !IO), io.write_string(Wrapped, !IO), io.write_string("\nWrapped string with hyphens:\n", !IO), io.write_string(WrappedHyphen, !IO), io.write_string("\nWrapped string with dots:\n", !IO), io.write_string(WrappedDots, !IO), io.write_string("\nWrapped string where separator is too long:\n", !IO), io.write_string(SepTooLong, !IO), io.nl(!IO). :- pred write_message(string::in, string::in, io::di, io::uo) is det. write_message(Msg, String, !IO) :- io.format("%s: %s\n", [s(Msg), s(String)], !IO).