diff options
author | Henrik Nord <[email protected]> | 2011-05-09 15:08:38 +0200 |
---|---|---|
committer | Henrik Nord <[email protected]> | 2011-05-09 15:08:46 +0200 |
commit | b20244d0f730a950749919245eec3abd42b44cc5 (patch) | |
tree | ad2e420e7b32498dadccf115ac6ecc76dd5bf535 /lib/dialyzer/test/small_SUITE_data/src/overloaded1.erl | |
parent | dbc55f6b24ed507ee2201d0c084d167630d822d0 (diff) | |
parent | 39e62c0a199af0c91d1bfb11b186b574824dce1b (diff) | |
download | otp-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.erl | 31 |
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. |