aboutsummaryrefslogtreecommitdiffstats
path: root/lib/dialyzer/test/opaque_tests_SUITE_data/src/mixed_opaque/mixed_opaque_use.erl
blob: e82dcd5f38bace47655052539bc7b30fe0dae518 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
%%---------------------------------------------------------------------------
%% Test that tries some combinations of using more than one opaque data type
%% in the same function(s).
%%----------------------------------------------------------------------------
-module(mixed_opaque_use).

-export([ok1/1, ok2/0, wrong1/0]).

-define(REC, mixed_opaque_rec_adt).
-define(QUEUE, mixed_opaque_queue_adt).

%% Currently returning unions of opaque types is considered OK
ok1(Type) ->
    case Type of
	queue -> ?QUEUE:new();
	rec -> ?REC:new()
    end.

%% Constructing a queue of records is OK
ok2() ->
    Q0 = ?QUEUE:new(),
    R0 = ?REC:new(),
    Q1 = ?QUEUE:add(R0, Q0),
    {R1,_Q2} = ?QUEUE:dequeue(Q1),
    ?REC:get_a(R1).

%% But of course calling a function expecting some opaque type
%% with some other opaque typs is not OK
wrong1() ->
    Q = ?QUEUE:new(),
    ?REC:get_a(Q).