aboutsummaryrefslogblamecommitdiffstats
path: root/lib/dialyzer/test/small_SUITE_data/src/funs_from_outside.erl
blob: f4cbf3116064ee9ae1c5bd69407dc66491aeae7e (plain) (tree)


















































































                                                                                 
-module(funs_from_outside).

-export([run1/2, run2/2, run3/2]).
-export([test1/1, test2/1]).

%%------------------------------------------------------------------------------

run1(X, Y) ->
    testa(fun do_something/1, X, Y).

testa(Fun, X, Y) ->
    F = case even(X) of
	    true -> Fun;
	    false -> fun do_nothing/1
	end,
    case F(Y) of
	{ok, _} -> ok;
	error -> error
    end.

do_nothing(_) -> {ok, nothing}.

do_something(_) -> {ok, something}.

even(X) ->
    X rem 2 =:= 0.

%%------------------------------------------------------------------------------

%% Duplicating code since we are monovariant...

run2(X, Y) ->
    testb(fun do_something/1, X, Y).

testb(Fun, X, Y) ->
    F = case even(X) of
	    true -> Fun;
	    false -> fun do_nothing/1
	end,
    case F(Y) of
	error -> error
    end.

%%------------------------------------------------------------------------------

%% Duplicating code since we are monovariant...

run3(X, Y) ->
    testc(fun do_something_2/1, X, Y).

testc(Fun, X, Y) ->
    F = case even(X) of
	    true -> Fun;
	    false -> fun do_nothing/1
	end,
    case F(Y) of
	{ok, _} -> ok;
        %% This pattern can match. 
	error -> error
    end.

do_something_2(foo) -> {ok, something};
do_something_2(_) -> error.

%%------------------------------------------------------------------------------

test1(Fun) ->
    F = case get(test1) of
            test1_t -> Fun;
            test1_f -> fun fok/0
        end,
    error = F().

fok() -> ok.

%%------------------------------------------------------------------------------

test2(Fun) ->
    F = case get(test1) of
            test1_t -> fun fok/0;
            test1_f -> fun fok/0
        end,
    error = F().