diff options
author | Hans Bolinder <[email protected]> | 2015-09-07 08:17:00 +0200 |
---|---|---|
committer | Hans Bolinder <[email protected]> | 2015-09-07 08:17:00 +0200 |
commit | 2785d9952f45fff1956243c25042b75b299af3de (patch) | |
tree | 9c0b3140027f90f524cca0adf461ac19f0ddd9a5 /lib/dialyzer/test/small_SUITE_data/src/abs.erl | |
parent | 3af9e6ef9bd6a9e9faf0e5bf683f4f1c5c0c0ca9 (diff) | |
parent | 3092fc21c57a34a7ee5e2699ba39bb37edd8c4d8 (diff) | |
download | otp-2785d9952f45fff1956243c25042b75b299af3de.tar.gz otp-2785d9952f45fff1956243c25042b75b299af3de.tar.bz2 otp-2785d9952f45fff1956243c25042b75b299af3de.zip |
Merge branch 'hb/dialyzer/fix_abs_bug/OTP-12948' into maint
* hb/dialyzer/fix_abs_bug/OTP-12948:
dialyzer: Fix erlang:abs/1
Diffstat (limited to 'lib/dialyzer/test/small_SUITE_data/src/abs.erl')
-rw-r--r-- | lib/dialyzer/test/small_SUITE_data/src/abs.erl | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/lib/dialyzer/test/small_SUITE_data/src/abs.erl b/lib/dialyzer/test/small_SUITE_data/src/abs.erl new file mode 100644 index 0000000000..251e24cdfc --- /dev/null +++ b/lib/dialyzer/test/small_SUITE_data/src/abs.erl @@ -0,0 +1,71 @@ +-module(abs). + +%% OTP-12948. erlang:abs/1 bug fix. + +-export([t/0]). + +t() -> + Fs = [fun i1/0, fun i2/0, fun i3/0, fun i4/0, fun f1/0], + _ = [catch F() || F <- Fs], + ok. + +i1() -> + A = int(), + I1 = i1(A), + true = I1 < 2, + true = I1 < 1. % can never match + +-spec i1(neg_integer()) -> non_neg_integer(). + +i1(A) when is_integer(A), A < 0 -> + abs(A). + +i2() -> + A = int(), + I2 = i2(A), + true = I2 < 1, + true = I2 < 0. % can never match + +-spec i2(non_neg_integer()) -> non_neg_integer(). + +i2(A) when is_integer(A), A >= 0 -> + abs(A). + +i3() -> + A = int(), + I3 = i3(A), + true = I3 < -1, + true = I3 < 0. % can never match + +-spec i3(integer()) -> non_neg_integer(). + +i3(A) when is_integer(A) -> + abs(A). + +i4() -> + A = int(), + I4 = i4(A), + true = I4 =:= 0 orelse I4 =:= 1, + true = I4 < 0 orelse I4 > 1. % can never match + +-spec i4(integer()) -> number(). + +i4(A) when A =:= -1; A =:= 0; A =:= 1 -> + abs(A). + +f1() -> + F1 = f1(float()), + math:sqrt(F1). + +f1(A) -> + abs(A). + +-spec int() -> integer(). + +int() -> + foo:bar(). + +-spec float() -> float(). + +float() -> + math:sqrt(1.0). |