aboutsummaryrefslogtreecommitdiffstats
path: root/lib/stdlib/test/string_SUITE.erl
diff options
context:
space:
mode:
authorErlang/OTP <[email protected]>2009-11-20 14:54:40 +0000
committerErlang/OTP <[email protected]>2009-11-20 14:54:40 +0000
commit84adefa331c4159d432d22840663c38f155cd4c1 (patch)
treebff9a9c66adda4df2106dfd0e5c053ab182a12bd /lib/stdlib/test/string_SUITE.erl
downloadotp-84adefa331c4159d432d22840663c38f155cd4c1.tar.gz
otp-84adefa331c4159d432d22840663c38f155cd4c1.tar.bz2
otp-84adefa331c4159d432d22840663c38f155cd4c1.zip
The R13B03 release.OTP_R13B03
Diffstat (limited to 'lib/stdlib/test/string_SUITE.erl')
-rw-r--r--lib/stdlib/test/string_SUITE.erl511
1 files changed, 511 insertions, 0 deletions
diff --git a/lib/stdlib/test/string_SUITE.erl b/lib/stdlib/test/string_SUITE.erl
new file mode 100644
index 0000000000..3171b87c44
--- /dev/null
+++ b/lib/stdlib/test/string_SUITE.erl
@@ -0,0 +1,511 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%
+%%%----------------------------------------------------------------
+%%% Purpose: string test suite.
+%%%-----------------------------------------------------------------
+-module(string_SUITE).
+-include("test_server.hrl").
+
+
+% Default timetrap timeout (set in init_per_testcase).
+-define(default_timeout, ?t:minutes(1)).
+
+% Test server specific exports
+-export([all/1]).
+-export([init_per_testcase/2, fin_per_testcase/2]).
+
+% Test cases must be exported.
+-export([len/1,equal/1,concat/1,chr_rchr/1,str_rstr/1]).
+-export([span_cspan/1,substr/1,tokens/1,chars/1]).
+-export([copies/1,words/1,strip/1,sub_word/1,left_right/1]).
+-export([sub_string/1,centre/1, join/1]).
+-export([to_integer/1,to_float/1]).
+-export([to_upper_to_lower/1]).
+%%
+%% all/1
+%%
+all(doc) ->
+ [];
+all(suite) ->
+ [len,equal,concat,chr_rchr,str_rstr,
+ span_cspan,substr,tokens,chars,
+ copies,words,strip,sub_word,left_right,
+ sub_string,centre, join,
+ to_integer,to_float,to_upper_to_lower].
+
+init_per_testcase(_Case, Config) ->
+ ?line Dog=test_server:timetrap(?default_timeout),
+ [{watchdog, Dog}|Config].
+fin_per_testcase(_Case, Config) ->
+ Dog=?config(watchdog, Config),
+ test_server:timetrap_cancel(Dog),
+ ok.
+
+%
+% Test cases starts here.
+%
+
+len(suite) ->
+ [];
+len(doc) ->
+ [];
+len(Config) when is_list(Config) ->
+ ?line 0 = string:len(""),
+ ?line L = tuple_size(list_to_tuple(atom_to_list(?MODULE))),
+ ?line L = string:len(atom_to_list(?MODULE)),
+ %% invalid arg type
+ ?line {'EXIT',_} = (catch string:len({})),
+ ok.
+
+equal(suite) ->
+ [];
+equal(doc) ->
+ [];
+equal(Config) when is_list(Config) ->
+ ?line true = string:equal("", ""),
+ ?line false = string:equal("", " "),
+ ?line true = string:equal("laban", "laban"),
+ ?line false = string:equal("skvimp", "skvump"),
+ %% invalid arg type
+ ?line true = string:equal(2, 2), % not good, should crash
+ ok.
+
+concat(suite) ->
+ [];
+concat(doc) ->
+ [];
+concat(Config) when is_list(Config) ->
+ ?line "erlang rules" = string:concat("erlang ", "rules"),
+ ?line "" = string:concat("", ""),
+ ?line "x" = string:concat("x", ""),
+ ?line "y" = string:concat("", "y"),
+ %% invalid arg type
+ ?line {'EXIT',_} = (catch string:concat(hello, please)),
+ ok.
+
+chr_rchr(suite) ->
+ [];
+chr_rchr(doc) ->
+ [];
+chr_rchr(Config) when is_list(Config) ->
+ ?line {_,_,X} = now(),
+ ?line 0 = string:chr("", (X rem (255-32)) + 32),
+ ?line 0 = string:rchr("", (X rem (255-32)) + 32),
+ ?line 1 = string:chr("x", $x),
+ ?line 1 = string:rchr("x", $x),
+ ?line 1 = string:chr("xx", $x),
+ ?line 2 = string:rchr("xx", $x),
+ ?line 3 = string:chr("xyzyx", $z),
+ ?line 3 = string:rchr("xyzyx", $z),
+ %% invalid arg type
+ ?line {'EXIT',_} = (catch string:chr(hello, $h)),
+ %% invalid arg type
+ ?line {'EXIT',_} = (catch string:chr("hello", h)),
+ %% invalid arg type
+ ?line {'EXIT',_} = (catch string:rchr(hello, $h)),
+ %% invalid arg type
+ ?line {'EXIT',_} = (catch string:rchr("hello", h)),
+ ok.
+
+str_rstr(suite) ->
+ [];
+str_rstr(doc) ->
+ [];
+str_rstr(Config) when is_list(Config) ->
+ ?line {_,_,X} = now(),
+ ?line 0 = string:str("", [(X rem (255-32)) + 32]),
+ ?line 0 = string:rstr("", [(X rem (255-32)) + 32]),
+ ?line 1 = string:str("x", "x"),
+ ?line 1 = string:rstr("x", "x"),
+ ?line 0 = string:str("hello", ""),
+ ?line 0 = string:rstr("hello", ""),
+ ?line 1 = string:str("xxxx", "xx"),
+ ?line 3 = string:rstr("xxxx", "xx"),
+ ?line 3 = string:str("xy z yx", " z"),
+ ?line 3 = string:rstr("xy z yx", " z"),
+ %% invalid arg type
+ ?line {'EXIT',_} = (catch string:str(hello, "he")),
+ %% invalid arg type
+ ?line {'EXIT',_} = (catch string:str("hello", he)),
+ %% invalid arg type
+ ?line {'EXIT',_} = (catch string:rstr(hello, "he")),
+ %% invalid arg type
+ ?line {'EXIT',_} = (catch string:rstr("hello", he)),
+ ok.
+
+span_cspan(suite) ->
+ [];
+span_cspan(doc) ->
+ [];
+span_cspan(Config) when is_list(Config) ->
+ ?line 0 = string:span("", "1"),
+ ?line 0 = string:span("1", ""),
+ ?line 0 = string:cspan("", "1"),
+ ?line 1 = string:cspan("1", ""),
+ ?line 1 = string:span("1 ", "1"),
+ ?line 5 = string:span(" 1 ", "12 "),
+ ?line 6 = string:span("1231234", "123"),
+ ?line 0 = string:cspan("1 ", "1"),
+ ?line 1 = string:cspan("3 ", "12 "),
+ ?line 6 = string:cspan("1231234", "4"),
+ %% invalid arg type
+ ?line {'EXIT',_} = (catch string:span(1234, "1")),
+ %% invalid arg type
+ ?line {'EXIT',_} = (catch string:span(1234, "1")),
+ %% invalid arg type
+ ?line {'EXIT',_} = (catch string:cspan("1234", 1)),
+ %% invalid arg type
+ ?line {'EXIT',_} = (catch string:cspan("1234", 4)),
+ ok.
+
+
+substr(suite) ->
+ [];
+substr(doc) ->
+ [];
+substr(Config) when is_list(Config) ->
+ ?line {'EXIT',_} = (catch string:substr("", 0)),
+ ?line [] = string:substr("", 1),
+ ?line {'EXIT',_} = (catch string:substr("", 2)),
+ ?line [] = string:substr("1", 2),
+ ?line {'EXIT',_} = (catch string:substr("", 0, 1)),
+ ?line [] = string:substr("", 1, 1),
+ ?line [] = string:substr("", 1, 2),
+ ?line {'EXIT',_} = (catch string:substr("", 2, 2)),
+ ?line "1234" = string:substr("1234", 1),
+ ?line "1234" = string:substr("1234", 1, 4),
+ ?line "1234" = string:substr("1234", 1, 5),
+ ?line "23" = string:substr("1234", 2, 2),
+ ?line "4" = string:substr("1234", 4),
+ ?line "" = string:substr("1234", 4, 0),
+ ?line "4" = string:substr("1234", 4, 1),
+ %% invalid arg type
+ ?line {'EXIT',_} = (catch string:substr(1234, 1)),
+ %% invalid arg type
+ ?line {'EXIT',_} = (catch string:substr("1234", "1")),
+ ok.
+
+tokens(suite) ->
+ [];
+tokens(doc) ->
+ [];
+tokens(Config) when is_list(Config) ->
+ ?line [] = string:tokens("",""),
+ ?line [] = string:tokens("abc","abc"),
+ ?line ["abc"] = string:tokens("abc", ""),
+ ?line ["1","2 34","4","5"] = string:tokens("1,2 34,4;5", ";,"),
+ %% invalid arg type
+ ?line {'EXIT',_} = (catch string:tokens('x,y', ",")),
+ %% invalid arg type
+ ?line {'EXIT',_} = (catch string:tokens("x,y", ',')),
+ ok.
+
+
+chars(suite) ->
+ [];
+chars(doc) ->
+ [];
+chars(Config) when is_list(Config) ->
+ ?line [] = string:chars($., 0),
+ ?line [] = string:chars($., 0, []),
+ ?line 10 = length(string:chars(32, 10, [])),
+ ?line "aaargh" = string:chars($a, 3, "rgh"),
+ %% invalid arg type
+ ?line {'EXIT',_} = (catch string:chars($x, [])),
+ ok.
+
+copies(suite) ->
+ [];
+copies(doc) ->
+ [];
+copies(Config) when is_list(Config) ->
+ ?line "" = string:copies("", 10),
+ ?line "" = string:copies(".", 0),
+ ?line "." = string:copies(".", 1),
+ ?line 30 = length(string:copies("123", 10)),
+ %% invalid arg type
+ ?line {'EXIT',_} = (catch string:chars("hej", -1)),
+ ok.
+
+words(suite) ->
+ [];
+words(doc) ->
+ [];
+words(Config) when is_list(Config) ->
+ ?line 1 = string:words(""),
+ ?line 1 = string:words("", $,),
+ ?line 1 = string:words("hello"),
+ ?line 1 = string:words("hello", $,),
+ ?line 1 = string:words("...", $.),
+ ?line 2 = string:words("2.35", $.),
+ ?line 100 = string:words(string:copies(". ", 100)),
+ %% invalid arg type
+ ?line {'EXIT',_} = (catch string:chars(hej)),
+ %% invalid arg type
+ ?line {'EXIT',_} = (catch string:chars("hej", " ")),
+ ok.
+
+
+strip(suite) ->
+ [];
+strip(doc) ->
+ [];
+strip(Config) when is_list(Config) ->
+ ?line "" = string:strip(""),
+ ?line "" = string:strip("", both),
+ ?line "" = string:strip("", both, $.),
+ ?line "hej" = string:strip(" hej "),
+ ?line "hej " = string:strip(" hej ", left),
+ ?line " hej" = string:strip(" hej ", right),
+ ?line " hej " = string:strip(" hej ", right, $.),
+ ?line "hej hopp" = string:strip(" hej hopp ", both),
+ %% invalid arg type
+ ?line {'EXIT',_} = (catch string:strip(hej)),
+ %% invalid arg type
+ ?line {'EXIT',_} = (catch string:strip(" hej", up)),
+ %% invalid arg type
+ ?line {'EXIT',_} = (catch string:strip(" hej", left, " ")), % not good
+ ok.
+
+sub_word(suite) ->
+ [];
+sub_word(doc) ->
+ [];
+sub_word(Config) when is_list(Config) ->
+ ?line "" = string:sub_word("", 1),
+ ?line "" = string:sub_word("", 1, $,),
+ ?line {'EXIT',_} = (catch string:sub_word("1 2 3", 0)),
+ ?line "" = string:sub_word("1 2 3", 4),
+ ?line "llo th" = string:sub_word("but hello there", 2, $e),
+ %% invalid arg type
+ ?line {'EXIT',_} = (catch string:sub_word('hello there', 1)),
+ %% invalid arg type
+ ?line {'EXIT',_} = (catch string:sub_word("hello there", 1, "e")),
+ ok.
+
+left_right(suite) ->
+ [];
+left_right(doc) ->
+ [];
+left_right(Config) when is_list(Config) ->
+ ?line "" = string:left("", 0),
+ ?line "" = string:left("hej", 0),
+ ?line "" = string:left("hej", 0, $.),
+ ?line "" = string:right("", 0),
+ ?line "" = string:right("hej", 0),
+ ?line "" = string:right("hej", 0, $.),
+ ?line "123 " = string:left("123 ", 5),
+ ?line " 123" = string:right(" 123", 5),
+ ?line "123!!" = string:left("123!", 5, $!),
+ ?line "==123" = string:right("=123", 5, $=),
+ ?line "1" = string:left("123", 1, $.),
+ ?line "3" = string:right("123", 1, $.),
+ %% invalid arg type
+ ?line {'EXIT',_} = (catch string:left(hello, 5)),
+ %% invalid arg type
+ ?line {'EXIT',_} = (catch string:right(hello, 5)),
+ %% invalid arg type
+ ?line {'EXIT',_} = (catch string:left("hello", 5, ".")),
+ %% invalid arg type
+ ?line {'EXIT',_} = (catch string:right("hello", 5, ".")),
+ ok.
+
+sub_string(suite) ->
+ [];
+sub_string(doc) ->
+ [];
+sub_string(Config) when is_list(Config) ->
+ ?line {'EXIT',_} = (catch string:sub_string("", 0)),
+ ?line [] = string:sub_string("", 1),
+ ?line {'EXIT',_} = (catch string:sub_string("", 2)),
+ ?line [] = string:sub_string("1", 2),
+ ?line {'EXIT',_} = (catch string:sub_string("", 0, 1)),
+ ?line [] = string:sub_string("", 1, 1),
+ ?line [] = string:sub_string("", 1, 2),
+ ?line {'EXIT',_} = (catch string:sub_string("", 2, 2)),
+ ?line "1234" = string:sub_string("1234", 1),
+ ?line "1234" = string:sub_string("1234", 1, 4),
+ ?line "1234" = string:sub_string("1234", 1, 5),
+ ?line "23" = string:sub_string("1234", 2, 3),
+ ?line "4" = string:sub_string("1234", 4),
+ ?line "4" = string:sub_string("1234", 4, 4),
+ ?line "4" = string:sub_string("1234", 4, 5),
+ %% invalid arg type
+ ?line {'EXIT',_} = (catch string:sub_string(1234, 1)),
+ %% invalid arg type
+ ?line {'EXIT',_} = (catch string:sub_string("1234", "1")),
+ ok.
+
+centre(suite) ->
+ [];
+centre(doc) ->
+ [];
+centre(Config) when is_list(Config) ->
+ ?line "" = string:centre("", 0),
+ ?line "" = string:centre("1", 0),
+ ?line "" = string:centre("", 0, $-),
+ ?line "" = string:centre("1", 0, $-),
+ ?line "gd" = string:centre("agda", 2),
+ ?line "agda " = string:centre("agda", 5),
+ ?line " agda " = string:centre("agda", 6),
+ ?line "agda." = string:centre("agda", 5, $.),
+ ?line "--agda--" = string:centre("agda", 8, $-),
+ ?line "agda" = string:centre("agda", 4),
+ %% invalid arg type
+ ?line {'EXIT',_} = (catch string:centre(hello, 10)),
+ ok.
+
+to_integer(suite) ->
+ [];
+to_integer(doc) ->
+ [];
+to_integer(Config) when is_list(Config) ->
+ ?line {1,""} = test_to_integer("1"),
+ ?line {1,""} = test_to_integer("+1"),
+ ?line {-1,""} = test_to_integer("-1"),
+ ?line {1,"="} = test_to_integer("1="),
+ ?line {7,"F"} = test_to_integer("7F"),
+ ?line {709,""} = test_to_integer("709"),
+ ?line {709,"*2"} = test_to_integer("709*2"),
+ ?line {0,"xAB"} = test_to_integer("0xAB"),
+ ?line {16,"#FF"} = test_to_integer("16#FF"),
+ ?line {error,no_integer} = test_to_integer(""),
+ ?line {error,no_integer} = test_to_integer("!1"),
+ ?line {error,no_integer} = test_to_integer("F1"),
+ ?line {error,not_a_list} = test_to_integer('23'),
+ ?line {3,[[]]} = test_to_integer([$3,[]]),
+ ?line {3,[hello]} = test_to_integer([$3,hello]),
+ ok.
+
+test_to_integer(Str) ->
+ io:format("Checking ~p~n", [Str]),
+ case string:to_integer(Str) of
+ {error,_Reason} = Bad ->
+ ?line {'EXIT',_} = (catch list_to_integer(Str)),
+ Bad;
+ {F,_Rest} = Res ->
+ ?line _ = integer_to_list(F),
+ Res
+ end.
+
+to_float(suite) ->
+ [];
+to_float(doc) ->
+ [];
+to_float(Config) when is_list(Config) ->
+ ?line {1.2,""} = test_to_float("1.2"),
+ ?line {1.2,""} = test_to_float("1,2"),
+ ?line {120.0,""} = test_to_float("1.2e2"),
+ ?line {120.0,""} = test_to_float("+1,2e2"),
+ ?line {-120.0,""} = test_to_float("-1.2e2"),
+ ?line {-120.0,""} = test_to_float("-1,2e+2"),
+ ?line {-1.2e-2,""} = test_to_float("-1.2e-2"),
+ ?line {1.2,"="} = test_to_float("1.2="),
+ ?line {7.9,"e"} = test_to_float("7.9e"),
+ ?line {7.9,"ee"} = test_to_float("7.9ee"),
+ ?line {7.9,"e+"} = test_to_float("7.9e+"),
+ ?line {7.9,"e-"} = test_to_float("7.9e-"),
+ ?line {7.9,"e++"} = test_to_float("7.9e++"),
+ ?line {7.9,"e--"} = test_to_float("7.9e--"),
+ ?line {7.9,"e+e"} = test_to_float("7.9e+e"),
+ ?line {7.9,"e-e"} = test_to_float("7.9e-e"),
+ ?line {7.9,"e+."} = test_to_float("7.9e+."),
+ ?line {7.9,"e-."} = test_to_float("7.9e-."),
+ ?line {7.9,"e+,"} = test_to_float("7.9e+,"),
+ ?line {7.9,"e-,"} = test_to_float("7.9e-,"),
+ ?line {error,no_float} = test_to_float(""),
+ ?line {error,no_float} = test_to_float("e1,0"),
+ ?line {error,no_float} = test_to_float("1;0"),
+ ?line {error,no_float} = test_to_float("1"),
+ ?line {error,no_float} = test_to_float("1e"),
+ ?line {error,no_float} = test_to_float("2."),
+ ?line {error,not_a_list} = test_to_float('2.3'),
+ ?line {2.3,[[]]} = test_to_float([$2,$.,$3,[]]),
+ ?line {2.3,[hello]} = test_to_float([$2,$.,$3,hello]),
+ ok.
+
+test_to_float(Str) ->
+ io:format("Checking ~p~n", [Str]),
+ case string:to_float(Str) of
+ {error,_Reason} = Bad ->
+ ?line {'EXIT',_} = (catch list_to_float(Str)),
+ Bad;
+ {F,_Rest} = Res ->
+ ?line _ = float_to_list(F),
+ Res
+ end.
+
+to_upper_to_lower(suite) ->
+ [];
+to_upper_to_lower(doc) ->
+ [];
+to_upper_to_lower(Config) when is_list(Config) ->
+ ?line "1234ABCDEF���=" = string:to_upper("1234abcdef���="),
+ ?line "����������abc()" = string:to_lower("����������abc()"),
+ ?line All = lists:seq(0, 255),
+
+ ?line UC = string:to_upper(All),
+ ?line 256 = length(UC),
+ ?line all_upper_latin1(UC, 0),
+
+ ?line LC = string:to_lower(All),
+ ?line all_lower_latin1(LC, 0),
+
+ ?line LC = string:to_lower(string:to_upper(LC)),
+ ?line LC = string:to_lower(string:to_upper(UC)),
+ ?line UC = string:to_upper(string:to_lower(LC)),
+ ?line UC = string:to_upper(string:to_lower(UC)),
+ ok.
+
+all_upper_latin1([C|T], C) when 0 =< C, C < $a;
+ $z < C, C < 16#E0;
+ C =:= 16#F7; C =:= 16#FF ->
+ all_upper_latin1(T, C+1);
+all_upper_latin1([H|T], C) when $a =< C, C =< $z;
+ 16#E0 =< C, C =< 16#F6;
+ 16#F8 =< C, C =< 16#FE ->
+ H = C - 32,
+ all_upper_latin1(T, C+1);
+all_upper_latin1([], 256) -> ok.
+
+all_lower_latin1([C|T], C) when 0 =< C, C < $A;
+ $Z < C, C < 16#C0;
+ C =:= 16#D7;
+ 16#DF =< C, C =< 255 ->
+ all_lower_latin1(T, C+1);
+all_lower_latin1([H|T], C) when $A =< C, C =< $Z;
+ 16#C0 =< C, C =< 16#F6;
+ 16#C8 =< C, C =< 16#DE ->
+ io:format("~p\n", [{H,C}]),
+ H = C + 32,
+ all_lower_latin1(T, C+1);
+all_lower_latin1([], 256) -> ok.
+
+join(suite) ->
+ [];
+join(doc) ->
+ [];
+join(Config) when is_list(Config) ->
+ ?line "erlang rules" = string:join(["erlang", "rules"], " "),
+ ?line "a,-,b,-,c" = string:join(["a", "b", "c"], ",-,"),
+ ?line "1234" = string:join(["1", "2", "3", "4"], ""),
+ ?line [] = string:join([], ""), % OTP-7231
+ %% invalid arg type
+ ?line {'EXIT',_} = (catch string:join([apa], "")),
+ ok.