You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by rn...@apache.org on 2014/08/01 11:06:15 UTC
[2/8] Initial implementation
http://git-wip-us.apache.org/repos/asf/couchdb-khash/blob/9b44d236/test/gen_term.erl
----------------------------------------------------------------------
diff --git a/test/gen_term.erl b/test/gen_term.erl
new file mode 100644
index 0000000..11a4f96
--- /dev/null
+++ b/test/gen_term.erl
@@ -0,0 +1,131 @@
+%% This file is part of khash released under the MIT license.
+%% See the LICENSE file for more information.
+%% Copyright 2013 Cloudant, Inc <su...@cloudant.com>
+
+-module(gen_term).
+
+-export([
+ any/0,
+ any/1,
+
+ gen_atom/1,
+ gen_integer/1,
+ gen_float/1,
+ gen_reference/1,
+ gen_port/1,
+ gen_pid/1,
+ gen_tuple/1,
+ gen_list/1,
+ gen_short_string/1,
+ gen_string/1,
+ gen_binary/1,
+ gen_bitstring/1,
+ gen_bignum/1,
+ gen_function/1
+]).
+
+
+any() ->
+ any(16).
+
+
+any(MaxSize) when MaxSize =< 0 ->
+ Fun = choice(value_types()),
+ ?MODULE:Fun(MaxSize);
+any(MaxSize) ->
+ Fun = choice(all_types()),
+ ?MODULE:Fun(MaxSize).
+
+
+gen_atom(MaxSize) ->
+ list_to_atom(gen_short_string(MaxSize)).
+
+
+gen_integer(_) ->
+ Value = case random:uniform() < 0.5 of
+ true -> random:uniform(127);
+ false -> random:uniform(16#FFFFFFFF)
+ end,
+ case random:uniform() < 0.5 of
+ true -> -1 * Value;
+ false -> Value
+ end.
+
+
+gen_float(_) ->
+ random:uniform() * float(16#FFFFFFFF).
+
+
+gen_reference(_) ->
+ erlang:make_ref().
+
+
+gen_port(_) ->
+ Ports = erlang:ports(),
+ lists:nth(random:uniform(length(Ports)), Ports).
+
+
+gen_pid(_) ->
+ Pids = erlang:processes(),
+ lists:nth(random:uniform(length(Pids)), Pids).
+
+
+gen_tuple(MaxSize) ->
+ list_to_tuple(gen_list(MaxSize)).
+
+
+gen_list(MaxSize) ->
+ Width = random:uniform(MaxSize),
+ [any(MaxSize-Width) || _ <- lists:seq(1, Width)].
+
+
+gen_short_string(_) ->
+ Size = random:uniform(255),
+ [random:uniform(127) || _ <- lists:seq(1, Size)].
+
+
+gen_string(_) ->
+ Size = random:uniform(4096),
+ [random:uniform(127) || _ <- lists:seq(1, Size)].
+
+
+gen_binary(MaxSize) ->
+ list_to_binary(gen_string(MaxSize)).
+
+
+gen_bitstring(MaxSize) ->
+ B = gen_binary(MaxSize),
+ <<2:4/integer, B/binary>>.
+
+
+gen_bignum(_) ->
+ 16#FFFFFFFFFFFFFFFF + random:uniform(16#FFFFFFFF).
+
+
+gen_function(_) ->
+ choice(all_types()).
+
+
+choice(Options) ->
+ lists:nth(random:uniform(length(Options)), Options).
+
+
+value_types() ->
+ [
+ gen_atom,
+ gen_integer,
+ gen_float,
+ gen_reference,
+ gen_port,
+ gen_pid,
+ gen_short_string,
+ gen_string,
+ gen_binary,
+ gen_bitstring,
+ gen_bignum,
+ gen_function
+ ].
+
+
+all_types() ->
+ value_types() ++ [gen_tuple, gen_list].
http://git-wip-us.apache.org/repos/asf/couchdb-khash/blob/9b44d236/test/util.erl
----------------------------------------------------------------------
diff --git a/test/util.erl b/test/util.erl
new file mode 100644
index 0000000..4f0bbf6
--- /dev/null
+++ b/test/util.erl
@@ -0,0 +1,25 @@
+%% This file is part of khash released under the MIT license.
+%% See the LICENSE file for more information.
+%% Copyright 2013 Cloudant, Inc <su...@cloudant.com>
+
+-module(util).
+-compile(export_all).
+
+
+init_code_path() ->
+ code:add_pathz("ebin").
+
+
+run(Plan, Fun) ->
+ init_code_path(),
+ etap:plan(Plan),
+ case (catch Fun()) of
+ ok ->
+ etap:end_tests();
+ Other ->
+ etap:diag(io_lib:format("Test died abnormally:~n~p", [Other])),
+ timer:sleep(500),
+ etap:bail(Other)
+ end,
+ ok.
+