diff options
Diffstat (limited to 'lib/stdlib/test/random_SUITE.erl')
-rw-r--r-- | lib/stdlib/test/random_SUITE.erl | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/lib/stdlib/test/random_SUITE.erl b/lib/stdlib/test/random_SUITE.erl new file mode 100644 index 0000000000..8f1c304705 --- /dev/null +++ b/lib/stdlib/test/random_SUITE.erl @@ -0,0 +1,110 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 2000-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% + +-module(random_SUITE). +-export([all/1]). + +-export([interval_1/1, seed0/1, seed/1]). + +-export([init_per_testcase/2, fin_per_testcase/2]). + +-include("test_server.hrl"). + +% Default timetrap timeout (set in init_per_testcase). +-define(default_timeout, ?t:minutes(1)). + +init_per_testcase(_Case, Config) -> + ?line Dog = ?t:timetrap(?default_timeout), + [{watchdog, Dog} | Config]. +fin_per_testcase(_Case, Config) -> + Dog = ?config(watchdog, Config), + test_server:timetrap_cancel(Dog), + ok. + +all(doc) -> + ["Test cases for random."]; +all(suite) -> + [interval_1, seed0, seed]. + +seed0(doc) -> + ["Test that seed is set implicitly, and always the same."]; +seed0(suite) -> + []; +seed0(Config) when is_list(Config) -> + ?line Self = self(), + ?line _ = spawn(fun() -> Self ! random:uniform() end), + ?line F1 = receive + Fa -> Fa + end, + ?line _ = spawn(fun() -> random:seed(), + Self ! random:uniform() end), + ?line F2 = receive + Fb -> Fb + end, + ?line F1 = F2, + ok. + +seed(doc) -> + ["Test that seed/1 and seed/3 is equivalent."]; +seed(suite) -> + []; +seed(Config) when is_list(Config) -> + ?line Self = self(), + ?line Seed = {S1, S2, S3} = now(), + ?line _ = spawn(fun() -> + random:seed(S1,S2,S3), + Rands = lists:foldl(fun + (_, Out) -> [random:uniform(10000)|Out] + end, [], lists:seq(1,100)), + Self ! {seed_test, Rands} + end), + ?line Rands1 = receive {seed_test, R1s} -> R1s end, + ?line _ = spawn(fun() -> + random:seed(Seed), + Rands = lists:foldl(fun + (_, Out) -> [random:uniform(10000)|Out] + end, [], lists:seq(1,100)), + Self ! {seed_test, Rands} + end), + ?line Rands2 = receive {seed_test, R2s} -> R2s end, + ?line Rands1 = Rands2, + ok. + + +interval_1(doc) -> + ["Check that uniform/1 returns values within the proper interval."]; +interval_1(suite) -> + []; +interval_1(Config) when is_list(Config) -> + ?line Top = 7, + ?line N = 10, + ?line check_interval(N, Top), + ok. + +check_interval(0, _) -> ok; +check_interval(N, Top) -> + X = random:uniform(Top), + if + X < 1 -> + test_server:fail(too_small); + X > Top -> + test_server:fail(too_large); + true -> + ok + end, + check_interval(N-1, Top). |