aboutsummaryrefslogtreecommitdiffstats
path: root/lib/dialyzer/test/small_SUITE_data/src/overloaded1.erl
diff options
context:
space:
mode:
authorHenrik Nord <[email protected]>2011-05-09 15:08:38 +0200
committerHenrik Nord <[email protected]>2011-05-09 15:08:46 +0200
commitb20244d0f730a950749919245eec3abd42b44cc5 (patch)
treead2e420e7b32498dadccf115ac6ecc76dd5bf535 /lib/dialyzer/test/small_SUITE_data/src/overloaded1.erl
parentdbc55f6b24ed507ee2201d0c084d167630d822d0 (diff)
parent39e62c0a199af0c91d1bfb11b186b574824dce1b (diff)
downloadotp-b20244d0f730a950749919245eec3abd42b44cc5.tar.gz
otp-b20244d0f730a950749919245eec3abd42b44cc5.tar.bz2
otp-b20244d0f730a950749919245eec3abd42b44cc5.zip
Merge branch 'sa/dialyzer-tests' into dev
* sa/dialyzer-tests: (22 commits) Update dialyzer.spec Add race/ets_insert_public Add opaque/ewgi,ewgi2 Add opaque/schuett_bug Add small/param_types_crash Add small/file_open_encoding Add small/false_false Add small/ets_update_counter Add small/bin_compr Add small/tuple_set_crash Add small/refine_failing Add small/not_bogus_warning Add small/none_scc_inf_loop Add small/guards Add small/guard_warnings Add small/confusing_record_warning Add small/blame_contract_range Update small/recursive_types2 source Update opaque/zoltan_kis* sources Update options1/compiler results ... OTP-9278
Diffstat (limited to 'lib/dialyzer/test/small_SUITE_data/src/overloaded1.erl')
-rw-r--r--lib/dialyzer/test/small_SUITE_data/src/overloaded1.erl31
1 files changed, 31 insertions, 0 deletions
diff --git a/lib/dialyzer/test/small_SUITE_data/src/overloaded1.erl b/lib/dialyzer/test/small_SUITE_data/src/overloaded1.erl
new file mode 100644
index 0000000000..0af4f7446f
--- /dev/null
+++ b/lib/dialyzer/test/small_SUITE_data/src/overloaded1.erl
@@ -0,0 +1,31 @@
+%%-----------------------------------------------------------------------------
+%% Test that tests overloaded contratcs.
+%% In December 2008 it works as far as intersection types are concerned (test1)
+%% However, it does NOT work as far as type variables are concerned (test2)
+%%-----------------------------------------------------------------------------
+-module(overloaded1).
+-export([test1/0, test2/0, foo/2]).
+
+test1() ->
+ {ok, gazonk} = foo({a,b,1}, atom_to_list(gazonk)),
+ ok.
+
+test2() ->
+ {ok, gazonk} = foo(baz, []),
+ ok.
+
+-type mod() :: atom().
+
+-spec foo(ATM, list()) -> {'ok', ATM} | {'error', _} when is_subtype(ATM, mod())
+ ; (MFA, list()) -> {'ok', MFA} | {'error', _} when is_subtype(MFA, mfa()).
+
+foo(F, _) when is_atom(F) ->
+ case atom_to_list(F) of
+ [42|_] -> {ok, F};
+ _Other -> {error, mod:bar(F)}
+ end;
+foo({M,F,A}, _) ->
+ case A =:= 0 of
+ false -> {ok, {M,F,A}};
+ true -> {error, M}
+ end.